diff --git a/test/web/import.js b/test/web/import.js
index 6cc8d0e8a023556af6774b1923f0c8c070498cf8..8a30bc8c2f292f4fb5e246a73f429b26fb2e243a 100644
--- a/test/web/import.js
+++ b/test/web/import.js
@@ -3,7 +3,6 @@ import "./prepare.js";
 import "../cases/components/layout/tabs.mjs";
 import "../cases/components/layout/slit-panel.mjs";
 import "../cases/components/layout/panel.mjs";
-import "../cases/components/content/editor/plugin/text.mjs";
 import "../cases/components/form/reload.mjs";
 import "../cases/components/form/state-button.mjs";
 import "../cases/components/form/select.mjs";
diff --git a/test/web/test.html b/test/web/test.html
index 0e3e4750a94605700161ac13efbda69c8e5fa579..bdfcfc7814ab003ec4bb5a47c4a8c1632daf09c2 100644
--- a/test/web/test.html
+++ b/test/web/test.html
@@ -10,7 +10,7 @@
 <body>
 <div id="headline" style="display: flex;align-items: center;justify-content: center;flex-direction: column;">
   <h1 style='margin-bottom: 0.1em;'>Monster 3.88.0</h1>
-  <div id="lastupdate" style='font-size:0.7em'>last update Mo 18. Nov 12:29:27 CET 2024</div>
+  <div id="lastupdate" style='font-size:0.7em'>last update Mo 25. Nov 13:11:49 CET 2024</div>
 </div>
 <div id="mocha-errors"
      style="color: red;font-weight: bold;display: flex;align-items: center;justify-content: center;flex-direction: column;margin:20px;"></div>
diff --git a/test/web/tests.js b/test/web/tests.js
index 7dc37d3504adce84704af4c7028598fb4e7b131a..636dc44913453eda5a3e891f49bfd19a7099b421 100644
--- a/test/web/tests.js
+++ b/test/web/tests.js
@@ -83,7 +83,13 @@ try {
     if (!isObject(value)) return false;
     if (!isFunction(instance)) return false;
     if (!instance.hasOwnProperty("prototype")) return false;
-    return value instanceof instance ? true : false;
+    if (value instanceof instance) return true;
+    let proto = Object.getPrototypeOf(value);
+    while (proto != null) {
+      if (proto === instance.prototype) return true;
+      proto = Object.getPrototypeOf(proto);
+    }
+    return false;
   }
   function isArray(value) {
     return Array.isArray(value);
@@ -1241,9 +1247,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/pvtsutils@1.3.5/node_modules/pvtsutils/build/index.js
+  // node_modules/.pnpm/pvtsutils@1.3.6/node_modules/pvtsutils/build/index.js
   var require_build = __commonJS({
-    "node_modules/.pnpm/pvtsutils@1.3.5/node_modules/pvtsutils/build/index.js"(exports) {
+    "node_modules/.pnpm/pvtsutils@1.3.6/node_modules/pvtsutils/build/index.js"(exports) {
       "use strict";
       var ARRAY_BUFFER_NAME = "[object ArrayBuffer]";
       var BufferSourceConverter8 = class _BufferSourceConverter {
@@ -1327,7 +1333,7 @@ try {
         }
       };
       var STRING_TYPE = "string";
-      var HEX_REGEX = /^[0-9a-f]+$/i;
+      var HEX_REGEX = /^[0-9a-f\s]+$/i;
       var BASE64_REGEX = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
       var BASE64URL_REGEX = /^[a-zA-Z0-9-_]+$/;
       var Utf8Converter = class {
@@ -15482,9 +15488,9 @@ ${key.data.toString("base64")}
           delimiter = " ";
         }
         const set2 = new Set(value.split(delimiter));
-        const toggle3 = new Set(modifier.split(delimiter));
+        const toggle2 = new Set(modifier.split(delimiter));
         if (this.command === "set-toggle") {
-          for (const t of toggle3) {
+          for (const t of toggle2) {
             if (set2.has(t)) {
               set2.delete(t);
             } else {
@@ -15492,11 +15498,11 @@ ${key.data.toString("base64")}
             }
           }
         } else if (this.command === "set-set") {
-          for (const t of toggle3) {
+          for (const t of toggle2) {
             set2.add(t);
           }
         } else if (this.command === "set-remove") {
-          for (const t of toggle3) {
+          for (const t of toggle2) {
             set2.delete(t);
           }
         }
@@ -20728,6 +20734,211 @@ ${key.data.toString("base64")}
     }
   });
 
+  // source/components/form/reload.mjs
+  var reload_exports = {};
+  __export(reload_exports, {
+    Reload: () => Reload
+  });
+  function initOptionsFromArguments3() {
+    const options2 = {};
+    const url = this.getAttribute(ATTRIBUTE_FORM_URL);
+    if (isString(url)) {
+      options2["url"] = new URL(url, document.location).toString();
+    }
+    if (this.hasAttribute(ATTRIBUTE_FORM_RELOAD)) {
+      options2["reload"] = this.getAttribute(ATTRIBUTE_FORM_RELOAD).toLowerCase();
+    }
+    return options2;
+  }
+  function initIntersectionObserver() {
+    if (this[intersectionObserverWasInitialized] === true) {
+      return;
+    }
+    this[intersectionObserverWasInitialized] = true;
+    const options2 = {
+      threshold: [0.5]
+    };
+    const callback = (entries, observer2) => {
+      for (const [, entry] of entries.entries()) {
+        if (entry.isIntersecting === true) {
+          if (this.getOption("reload") === "onshow") {
+            observer2.disconnect();
+          }
+          try {
+            loadContent2.call(this).catch((e) => {
+              addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.toString());
+            });
+          } catch (e) {
+            addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.toString());
+          }
+        }
+      }
+    };
+    const observer = new IntersectionObserver(callback, options2);
+    observer.observe(this);
+  }
+  function loadContent2() {
+    const url = this.getOption("url", void 0);
+    if (!isString(url) || url === "") {
+      throw new Error("missing url");
+    }
+    const options2 = this.getOption("fetch", {});
+    let parentNode = this;
+    if (this.shadowRoot) {
+      parentNode = this.shadowRoot;
+    }
+    let container = parentNode.querySelector(`[${ATTRIBUTE_ROLE}=container]`);
+    let currentDisplayMode = container?.style?.display;
+    if (currentDisplayMode === void 0) {
+      currentDisplayMode = "inherit";
+    }
+    if (!(container instanceof HTMLElement)) {
+      container = document.createElement("div");
+      container.style.display = "none";
+      container.setAttribute(ATTRIBUTE_ROLE, "container");
+      parentNode.appendChild(container);
+    }
+    return loadAndAssignContent(container, url, options2, this.getOption("filter")).then(() => {
+      if (currentDisplayMode !== void 0) {
+        container.style.display = currentDisplayMode;
+      }
+    }).catch((e) => {
+      throw e;
+    });
+  }
+  function getTemplate6() {
+    return this.innerHTML;
+  }
+  var intersectionObserverWasInitialized, Reload;
+  var init_reload = __esm({
+    "source/components/form/reload.mjs"() {
+      init_constants();
+      init_attributes();
+      init_constants2();
+      init_customelement();
+      init_is();
+      init_constants3();
+      init_fetch();
+      intersectionObserverWasInitialized = Symbol("wasInitialized");
+      Reload = class extends CustomElement {
+        /**
+         * This method is called by the `instanceof` operator.
+         * @return {symbol}
+         * @since 2.1.0
+         */
+        static get [instanceSymbol]() {
+          return Symbol.for("@schukai/monster/components/form/reload");
+        }
+        /**
+         * To set the options via the HTML tag, the attribute `data-monster-options` must be used.
+         * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
+         *
+         * The individual configuration values can be found in the table.
+         *
+         * @property {Object} templates Template definitions
+         * @property {string} templates.main Main template
+         * @property {string} url=undefined
+         * @property {string} reload=undefined currently the values defined are `onshow` and `always`. The default `onshow` removes the IntersectionObserver. This means that the content is only loaded once. reloading of the content does not occur.
+         * @property {string} filter=undefined dom selectors to search for elements, if undefined then everything is taken
+         * @property {Monster.Components.Form.Processor[]} processors
+         * @property {Object} fetch Fetch [see Using Fetch mozilla.org](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch)
+         * @property {String} fetch.redirect=error
+         * @property {String} fetch.method=GET
+         * @property {String} fetch.mode=same-origin
+         * @property {String} fetch.credentials=same-origin
+         * @property {Object} fetch.headers={"accept":"text/html"}}
+         */
+        get defaults() {
+          return Object.assign(
+            {},
+            super.defaults,
+            {
+              templates: {
+                main: getTemplate6.call(this)
+              },
+              shadowMode: null,
+              url: null,
+              reload: "onshow",
+              filter: null,
+              fetch: {
+                redirect: "error",
+                method: "GET",
+                mode: "same-origin",
+                credentials: "same-origin",
+                headers: {
+                  accept: "text/html"
+                }
+              }
+            },
+            initOptionsFromArguments3.call(this)
+          );
+        }
+        /**
+         * This method determines which attributes are to be monitored by `attributeChangedCallback()`.
+         *
+         * @return {string[]}
+         */
+        static get observedAttributes() {
+          const list = super.observedAttributes;
+          list.push(ATTRIBUTE_FORM_URL);
+          return list;
+        }
+        /**
+         * @return {void}
+         */
+        [initMethodSymbol]() {
+          super[initMethodSymbol]();
+          this[attributeObserverSymbol][ATTRIBUTE_FORM_URL] = (url) => {
+            if (this.hasAttribute(ATTRIBUTE_FORM_URL)) {
+              this.setOption("url", new URL(url, document.location).toString());
+            } else {
+              this.setOption("url", void 0);
+            }
+          };
+        }
+        /**
+         * This method is called internal and should not be called directly.
+         * @throws {Error} missing default slot
+         * @throws {Error} no shadow-root is defined
+         * @throws {Error} missing url
+         * @throws {Error} we won't be able to read the data
+         * @throws {Error} request failed
+         * @throws {Error} not found
+         * @throws {Error} undefined status or type
+         * @fires monster-fetched
+         * @return {Monster.Components.Form.Form}
+         */
+        [assembleMethodSymbol]() {
+          super[assembleMethodSymbol]();
+          initIntersectionObserver.call(this);
+        }
+        /**
+         * This method is called internal and should not be called directly.
+         *
+         * @return {string}
+         */
+        static getTag() {
+          return "monster-reload";
+        }
+        /**
+         * load content from url
+         *
+         * It is important to know that with this function the loading is executed
+         * directly. it is loaded as well when the element is not visible.
+         *
+         * @param {string|undefined} url
+         */
+        fetch(url) {
+          if (isString(url) || url instanceof URL) {
+            this.setAttribute(ATTRIBUTE_FORM_URL, `${url}`);
+          }
+          return loadContent2.call(this);
+        }
+      };
+      registerCustomElement(Reload);
+    }
+  });
+
   // source/dom/customcontrol.mjs
   var customcontrol_exports = {};
   __export(customcontrol_exports, {
@@ -21104,7 +21315,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       `[${ATTRIBUTE_ROLE}=button]`
     );
   }
-  function getTemplate6() {
+  function getTemplate7() {
     return `
         <div data-monster-role="control" part="control">
             <button data-monster-attributes="disabled path:disabled | if:true, class path:classes.button
@@ -21272,7 +21483,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         get defaults() {
           return Object.assign({}, super.defaults, {
             templates: {
-              main: getTemplate6()
+              main: getTemplate7()
             },
             labels: {
               button: "<slot></slot>"
@@ -21312,217 +21523,555 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
   });
 
-  // node_modules/.pnpm/@floating-ui+utils@0.2.8/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
-  function clamp(start2, value, end2) {
-    return max2(start2, min2(value, end2));
-  }
-  function evaluate(value, param) {
-    return typeof value === "function" ? value(param) : value;
-  }
-  function getSide(placement) {
-    return placement.split("-")[0];
-  }
-  function getAlignment(placement) {
-    return placement.split("-")[1];
-  }
-  function getOppositeAxis(axis) {
-    return axis === "x" ? "y" : "x";
-  }
-  function getAxisLength(axis) {
-    return axis === "y" ? "height" : "width";
-  }
-  function getSideAxis(placement) {
-    return ["top", "bottom"].includes(getSide(placement)) ? "y" : "x";
-  }
-  function getAlignmentAxis(placement) {
-    return getOppositeAxis(getSideAxis(placement));
-  }
-  function getAlignmentSides(placement, rects, rtl) {
-    if (rtl === void 0) {
-      rtl = false;
-    }
-    const alignment = getAlignment(placement);
-    const alignmentAxis = getAlignmentAxis(placement);
-    const length = getAxisLength(alignmentAxis);
-    let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top";
-    if (rects.reference[length] > rects.floating[length]) {
-      mainAlignmentSide = getOppositePlacement2(mainAlignmentSide);
+  // source/components/form/stylesheet/state-button.mjs
+  var StateButtonStyleSheet;
+  var init_state_button = __esm({
+    "source/components/form/stylesheet/state-button.mjs"() {
+      init_attributes();
+      init_constants2();
+      StateButtonStyleSheet = new CSSStyleSheet();
+      try {
+        StateButtonStyleSheet.insertRule(
+          `
+@layer statebutton { 
+[data-monster-role=control]{box-sizing:border-box;outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:host{box-sizing:border-box;display:block}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030;--monster-gradient-tangerine-1:#e5b875;--monster-gradient-tangerine-2:#d9a362;--monster-gradient-tangerine-3:#c08a4e;--monster-gradient-tangerine-4:#a7713b;--monster-gradient-tangerine-5:#8f5a28;--monster-gradient-tangerine-6:#360505;--monster-color-seashell-1:#f7f5ef;--monster-color-seashell-2:#e5e2d9;--monster-color-seashell-3:#cbc6b3;--monster-color-seashell-4:#a19d8a;--monster-color-seashell-5:#7a7566;--monster-color-seashell-6:#514d3f}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin:4rem 0 1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin:4rem 0 1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin:4rem 0 1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin:4rem 0 1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin:4rem 0 1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin:4rem 0 1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-feature-settings:"tnum";font-weight:700;letter-spacing:.1em;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}.monospace{font-family:var(--monster-font-family-monospace)}div[data-monster-role=control]{height:100%}button{width:100%}[data-monster-role=button]{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;transition:width 10s ease-in-out}div[data-monster-role=label]{align-items:center;display:flex;gap:.4rem;justify-content:center;width:100%}[data-monster-role=state]{align-content:center;align-items:center;align-self:stretch;display:flex;transition:width 12s ease-in-out}[data-monster-role=state]>img,[data-monster-role=state]>svg{margin-left:.3em}[data-monster-role=state]>svg.successful{animation:bouncy .5s linear forwards;color:var(--monster-color-successful)}[data-monster-role=state]>svg.activity{animation:bouncy .5s linear forwards;color:var(--monster-color-activity)}[data-monster-role=state]>svg.failed{animation:bouncy .5s linear forwards;color:var(--monster-color-failed)}[data-monster-role=state]>svg.activity{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1)}[data-monster-role=state].stateless{display:none}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}@keyframes bouncy{0%{opacity:0;transform:scale(.1)}80%{opacity:1;transform:scale(1.15)}90%{transform:scale(.9)}to{transform:scale(1)}} 
+}`,
+          0
+        );
+      } catch (e) {
+        addAttributeToken(
+          document.getRootNode().querySelector("html"),
+          ATTRIBUTE_ERRORMESSAGE,
+          e + ""
+        );
+      }
     }
-    return [mainAlignmentSide, getOppositePlacement2(mainAlignmentSide)];
-  }
-  function getExpandedPlacements(placement) {
-    const oppositePlacement = getOppositePlacement2(placement);
-    return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];
-  }
-  function getOppositeAlignmentPlacement(placement) {
-    return placement.replace(/start|end/g, (alignment) => oppositeAlignmentMap[alignment]);
-  }
-  function getSideList(side, isStart, rtl) {
-    const lr = ["left", "right"];
-    const rl = ["right", "left"];
-    const tb = ["top", "bottom"];
-    const bt = ["bottom", "top"];
-    switch (side) {
-      case "top":
-      case "bottom":
-        if (rtl) return isStart ? rl : lr;
-        return isStart ? lr : rl;
-      case "left":
-      case "right":
-        return isStart ? tb : bt;
+  });
+
+  // source/components/form/types/state.mjs
+  function getStateInstanceFor(state) {
+    switch (state) {
+      case "stateless":
+        return new State("stateless", "");
+      case "successful":
+        return new State(
+          "successful",
+          '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="successful" viewBox="0 0 16 16"><path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/><path d="M10.97 4.97a.235.235 0 0 0-.02.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05z"/></svg>'
+        );
+      case "activity":
+        return new State(
+          "activity",
+          '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="activity" viewBox="0 0 16 16"><circle cx="8" cy="8" r="8"/></svg>'
+        );
+      case "failed":
+        return new State(
+          "failed",
+          '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="failed" viewBox="0 0 16 16"><path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/><path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 4.995z"/></svg>'
+        );
       default:
-        return [];
-    }
-  }
-  function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
-    const alignment = getAlignment(placement);
-    let list = getSideList(getSide(placement), direction === "start", rtl);
-    if (alignment) {
-      list = list.map((side) => side + "-" + alignment);
-      if (flipAlignment) {
-        list = list.concat(list.map(getOppositeAlignmentPlacement));
-      }
+        return new State(state, "");
     }
-    return list;
-  }
-  function getOppositePlacement2(placement) {
-    return placement.replace(/left|right|bottom|top/g, (side) => oppositeSideMap[side]);
-  }
-  function expandPaddingObject(padding) {
-    return {
-      top: 0,
-      right: 0,
-      bottom: 0,
-      left: 0,
-      ...padding
-    };
-  }
-  function getPaddingObject(padding) {
-    return typeof padding !== "number" ? expandPaddingObject(padding) : {
-      top: padding,
-      right: padding,
-      bottom: padding,
-      left: padding
-    };
-  }
-  function rectToClientRect2(rect) {
-    const {
-      x,
-      y,
-      width,
-      height
-    } = rect;
-    return {
-      width,
-      height,
-      top: y,
-      left: x,
-      right: x + width,
-      bottom: y + height,
-      x,
-      y
-    };
   }
-  var sides, alignments, placements2, min2, max2, round2, floor, createCoords, oppositeSideMap, oppositeAlignmentMap;
-  var init_floating_ui_utils = __esm({
-    "node_modules/.pnpm/@floating-ui+utils@0.2.8/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs"() {
-      sides = ["top", "right", "bottom", "left"];
-      alignments = ["start", "end"];
-      placements2 = /* @__PURE__ */ sides.reduce((acc, side) => acc.concat(side, side + "-" + alignments[0], side + "-" + alignments[1]), []);
-      min2 = Math.min;
-      max2 = Math.max;
-      round2 = Math.round;
-      floor = Math.floor;
-      createCoords = (v) => ({
-        x: v,
-        y: v
-      });
-      oppositeSideMap = {
-        left: "right",
-        right: "left",
-        bottom: "top",
-        top: "bottom"
-      };
-      oppositeAlignmentMap = {
-        start: "end",
-        end: "start"
+  var internalSymbol2, State;
+  var init_state = __esm({
+    "source/components/form/types/state.mjs"() {
+      init_base();
+      init_validate();
+      internalSymbol2 = Symbol("internalSymbol");
+      State = class _State extends Base {
+        /**
+         *
+         * @param {string} state
+         * @param {string} presentation
+         * @throws {TypeError} value is not a string
+         */
+        constructor(state, presentation) {
+          super();
+          this[internalSymbol2] = {};
+          this[internalSymbol2].state = validateString(state);
+          this[internalSymbol2].presentation = validateString(presentation);
+        }
+        /**
+         * @property {String} state
+         */
+        get state() {
+          return this[internalSymbol2].state;
+        }
+        /**
+         * @property {String} presentation
+         */
+        get presentation() {
+          return this[internalSymbol2].presentation;
+        }
+        /**
+         * @return {Monster.Components.Form.Types.State}
+         */
+        getClone() {
+          return new _State(
+            this[internalSymbol2].state,
+            this[internalSymbol2].presentation
+          );
+        }
       };
     }
   });
 
-  // node_modules/.pnpm/@floating-ui+core@1.6.8/node_modules/@floating-ui/core/dist/floating-ui.core.mjs
-  function computeCoordsFromPlacement(_ref, placement, rtl) {
-    let {
-      reference: reference2,
-      floating
-    } = _ref;
-    const sideAxis = getSideAxis(placement);
-    const alignmentAxis = getAlignmentAxis(placement);
-    const alignLength = getAxisLength(alignmentAxis);
-    const side = getSide(placement);
-    const isVertical = sideAxis === "y";
-    const commonX = reference2.x + reference2.width / 2 - floating.width / 2;
-    const commonY = reference2.y + reference2.height / 2 - floating.height / 2;
-    const commonAlign = reference2[alignLength] / 2 - floating[alignLength] / 2;
-    let coords;
-    switch (side) {
-      case "top":
-        coords = {
-          x: commonX,
-          y: reference2.y - floating.height
-        };
-        break;
-      case "bottom":
-        coords = {
-          x: commonX,
-          y: reference2.y + reference2.height
-        };
-        break;
-      case "right":
-        coords = {
-          x: reference2.x + reference2.width,
-          y: commonY
-        };
-        break;
-      case "left":
-        coords = {
-          x: reference2.x - floating.width,
-          y: commonY
-        };
-        break;
-      default:
-        coords = {
-          x: reference2.x,
-          y: reference2.y
-        };
-    }
-    switch (getAlignment(placement)) {
-      case "start":
-        coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
-        break;
-      case "end":
-        coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);
-        break;
-    }
-    return coords;
+  // source/components/form/state-button.mjs
+  var state_button_exports = {};
+  __export(state_button_exports, {
+    StateButton: () => StateButton
+  });
+  function getTemplate8() {
+    return `<div data-monster-role="control" part="control">
+    <button data-monster-attributes="disabled path:disabled | if:true, class path:classes.button"
+            data-monster-role="button"
+            part="button">
+        <div data-monster-role="label" data-monster-replace="path:labels.button"></div>
+        <div data-monster-role="state"
+			 data-monster-attributes="class path:current.state"
+			 data-monster-replace="path:current.presentation"></div>
+    </button>
+</div>`;
   }
-  async function detectOverflow2(state, options2) {
-    var _await$platform$isEle;
-    if (options2 === void 0) {
-      options2 = {};
-    }
-    const {
-      x,
-      y,
-      platform: platform2,
-      rects,
-      elements,
-      strategy
-    } = state;
-    const {
-      boundary = "clippingAncestors",
-      rootBoundary = "viewport",
-      elementContext = "floating",
+  var StateButton;
+  var init_state_button2 = __esm({
+    "source/components/form/state-button.mjs"() {
+      init_constants();
+      init_customelement();
+      init_is();
+      init_validate();
+      init_button2();
+      init_state_button();
+      init_state();
+      StateButton = class extends Button {
+        /**
+         * This method is called by the `instanceof` operator.
+         * @return {symbol}
+         * @since 2.1.0
+         */
+        static get [instanceSymbol]() {
+          return Symbol.for(
+            "@schukai/monster/components/form/state-button@@instance"
+          );
+        }
+        /**
+         * To set the options via the HTML tag, the attribute `data-monster-options` must be used.
+         * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
+         *
+         * The individual configuration values can be found in the table.
+         *
+         * @property {Object} templates Template definitions
+         * @property {string} templates.main Main template
+         * @property {Object} states Available status
+         * @property {Monster.Components.Form.Types.State} states.successful= successful
+         * @property {Monster.Components.Form.Types.State} states.activity= activity
+         * @property {Monster.Components.Form.Types.State} states.failed= failed
+         * @property {Monster.Components.Form.Types.State} current current status
+         * @property {Monster.Components.Form~exampleActionCallback} actions.click
+         * @extends {Button}
+         * @see {@link https://github.com/twbs/icons/blob/main/LICENSE.md|Bootstrap icons license}
+         */
+        get defaults() {
+          return Object.assign({}, super.defaults, {
+            templates: {
+              main: getTemplate8()
+            },
+            states: {
+              successful: getStateInstanceFor("successful"),
+              activity: getStateInstanceFor("activity"),
+              failed: getStateInstanceFor("failed")
+            },
+            current: getStateInstanceFor("stateless")
+          });
+        }
+        /**
+         * This method sets the current state of the button.
+         * If a timeout is set, the state is automatically removed after the
+         * specified time.
+         *
+         * @since 3.18.0 a previously set timeout is cleared
+         *
+         * @param {string} state
+         * @param {number} timeout
+         * @return {Monster.Components.Form.StateButton}
+         * @throws {TypeError} value is not a string
+         * @throws {TypeError} value is not an instance
+         */
+        setState(state, timeout) {
+          const timeoutSymbol = Symbol.for("timeout");
+          if (this[timeoutSymbol] !== void 0) {
+            clearTimeout(this[timeoutSymbol]);
+            delete this[timeoutSymbol];
+          }
+          const obj = this.getOption(`states.${validateString(state)}`);
+          if (obj === void 0) {
+            throw new Error("not found");
+          }
+          this.setOption("current", validateInstance(obj, State));
+          if (isInteger(timeout) && timeout > 0) {
+            this[timeoutSymbol] = setTimeout(() => {
+              this.removeState();
+              delete this[timeoutSymbol];
+            }, timeout);
+          }
+          return this;
+        }
+        /**
+         *
+         * @return {Monster.Components.Form.StateButton}
+         */
+        removeState() {
+          this.setOption("current", getStateInstanceFor("stateless"));
+          return this;
+        }
+        /**
+         * @return {Monster.Components.Form.Types.State|undefined}
+         */
+        getState() {
+          return this.getOption("current");
+        }
+        /**
+         *
+         * @return {string}
+         */
+        static getTag() {
+          return "monster-state-button";
+        }
+        /**
+         *
+         * @return {Array<CSSStyleSheet>}
+         */
+        static getCSSStyleSheet() {
+          const styles2 = Button.getCSSStyleSheet();
+          styles2.push(StateButtonStyleSheet);
+          return styles2;
+        }
+      };
+      registerCustomElement(StateButton);
+    }
+  });
+
+  // source/data/buildmap.mjs
+  function buildMap(subject, selector, valueTemplate, keyTemplate, filter) {
+    return assembleParts(subject, selector, filter, function(v, k, m) {
+      k = build(v, keyTemplate, k);
+      v = build(v, valueTemplate);
+      this.set(k, v);
+    });
+  }
+  function assembleParts(subject, selector, filter, callback) {
+    const result = /* @__PURE__ */ new Map();
+    let map;
+    if (isFunction(selector)) {
+      map = selector(subject);
+      if (!(map instanceof Map)) {
+        throw new TypeError("the selector callback must return a map");
+      }
+    } else if (isString(selector)) {
+      map = /* @__PURE__ */ new Map();
+      buildFlatMap.call(map, subject, selector);
+    } else {
+      throw new TypeError("selector is neither a string nor a function");
+    }
+    if (!(map instanceof Map)) {
+      return result;
+    }
+    map.forEach((v, k, m) => {
+      if (isFunction(filter)) {
+        if (filter.call(m, v, k) !== true) return;
+      }
+      callback.call(result, v, k, m);
+    });
+    return result;
+  }
+  function buildFlatMap(subject, selector, key, parentMap) {
+    const currentMap = /* @__PURE__ */ new Map();
+    const resultLength = this.size;
+    if (key === void 0) key = [];
+    const parts = selector.split(DELIMITER);
+    let current = "";
+    const currentPath = [];
+    do {
+      current = parts.shift();
+      currentPath.push(current);
+      if (current === WILDCARD) {
+        const finder = new Pathfinder(subject);
+        let map;
+        try {
+          map = finder.getVia(currentPath.join(DELIMITER));
+        } catch (e) {
+          const a2 = e;
+          map = /* @__PURE__ */ new Map();
+        }
+        for (const [k, o] of map) {
+          const copyKey = clone(key);
+          currentPath.map((a2) => {
+            copyKey.push(a2 === WILDCARD ? k : a2);
+          });
+          const kk = copyKey.join(DELIMITER);
+          const sub = buildFlatMap.call(
+            this,
+            o,
+            parts.join(DELIMITER),
+            copyKey,
+            o
+          );
+          if (isObject(sub) && parentMap !== void 0) {
+            sub[PARENT] = parentMap;
+          }
+          currentMap.set(kk, sub);
+        }
+      }
+    } while (parts.length > 0);
+    if (resultLength === this.size) {
+      for (const [k, o] of currentMap) {
+        this.set(k, o);
+      }
+    }
+    return subject;
+  }
+  function build(subject, definition, defaultValue) {
+    if (definition === void 0) return defaultValue ? defaultValue : subject;
+    validateString(definition);
+    const regexp = /(?<placeholder>\${(?<path>[a-z\^A-Z.\-_0-9]*)})/gm;
+    const array = [...definition.matchAll(regexp)];
+    const finder = new Pathfinder(subject);
+    if (array.length === 0) {
+      return finder.getVia(definition);
+    }
+    array.forEach((a2) => {
+      const groups = a2?.["groups"];
+      const placeholder = groups?.["placeholder"];
+      if (placeholder === void 0) return;
+      const path = groups?.["path"];
+      let v = finder.getVia(path);
+      if (v === void 0) v = defaultValue;
+      definition = definition.replaceAll(placeholder, v);
+    });
+    return definition;
+  }
+  var PARENT;
+  var init_buildmap = __esm({
+    "source/data/buildmap.mjs"() {
+      init_is();
+      init_validate();
+      init_clone();
+      init_pathfinder();
+      PARENT = "^";
+    }
+  });
+
+  // node_modules/.pnpm/@floating-ui+utils@0.2.8/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
+  function clamp(start2, value, end2) {
+    return max2(start2, min2(value, end2));
+  }
+  function evaluate(value, param) {
+    return typeof value === "function" ? value(param) : value;
+  }
+  function getSide(placement) {
+    return placement.split("-")[0];
+  }
+  function getAlignment(placement) {
+    return placement.split("-")[1];
+  }
+  function getOppositeAxis(axis) {
+    return axis === "x" ? "y" : "x";
+  }
+  function getAxisLength(axis) {
+    return axis === "y" ? "height" : "width";
+  }
+  function getSideAxis(placement) {
+    return ["top", "bottom"].includes(getSide(placement)) ? "y" : "x";
+  }
+  function getAlignmentAxis(placement) {
+    return getOppositeAxis(getSideAxis(placement));
+  }
+  function getAlignmentSides(placement, rects, rtl) {
+    if (rtl === void 0) {
+      rtl = false;
+    }
+    const alignment = getAlignment(placement);
+    const alignmentAxis = getAlignmentAxis(placement);
+    const length = getAxisLength(alignmentAxis);
+    let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top";
+    if (rects.reference[length] > rects.floating[length]) {
+      mainAlignmentSide = getOppositePlacement2(mainAlignmentSide);
+    }
+    return [mainAlignmentSide, getOppositePlacement2(mainAlignmentSide)];
+  }
+  function getExpandedPlacements(placement) {
+    const oppositePlacement = getOppositePlacement2(placement);
+    return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];
+  }
+  function getOppositeAlignmentPlacement(placement) {
+    return placement.replace(/start|end/g, (alignment) => oppositeAlignmentMap[alignment]);
+  }
+  function getSideList(side, isStart, rtl) {
+    const lr = ["left", "right"];
+    const rl = ["right", "left"];
+    const tb = ["top", "bottom"];
+    const bt = ["bottom", "top"];
+    switch (side) {
+      case "top":
+      case "bottom":
+        if (rtl) return isStart ? rl : lr;
+        return isStart ? lr : rl;
+      case "left":
+      case "right":
+        return isStart ? tb : bt;
+      default:
+        return [];
+    }
+  }
+  function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
+    const alignment = getAlignment(placement);
+    let list = getSideList(getSide(placement), direction === "start", rtl);
+    if (alignment) {
+      list = list.map((side) => side + "-" + alignment);
+      if (flipAlignment) {
+        list = list.concat(list.map(getOppositeAlignmentPlacement));
+      }
+    }
+    return list;
+  }
+  function getOppositePlacement2(placement) {
+    return placement.replace(/left|right|bottom|top/g, (side) => oppositeSideMap[side]);
+  }
+  function expandPaddingObject(padding) {
+    return {
+      top: 0,
+      right: 0,
+      bottom: 0,
+      left: 0,
+      ...padding
+    };
+  }
+  function getPaddingObject(padding) {
+    return typeof padding !== "number" ? expandPaddingObject(padding) : {
+      top: padding,
+      right: padding,
+      bottom: padding,
+      left: padding
+    };
+  }
+  function rectToClientRect2(rect) {
+    const {
+      x,
+      y,
+      width,
+      height
+    } = rect;
+    return {
+      width,
+      height,
+      top: y,
+      left: x,
+      right: x + width,
+      bottom: y + height,
+      x,
+      y
+    };
+  }
+  var sides, alignments, placements2, min2, max2, round2, floor, createCoords, oppositeSideMap, oppositeAlignmentMap;
+  var init_floating_ui_utils = __esm({
+    "node_modules/.pnpm/@floating-ui+utils@0.2.8/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs"() {
+      sides = ["top", "right", "bottom", "left"];
+      alignments = ["start", "end"];
+      placements2 = /* @__PURE__ */ sides.reduce((acc, side) => acc.concat(side, side + "-" + alignments[0], side + "-" + alignments[1]), []);
+      min2 = Math.min;
+      max2 = Math.max;
+      round2 = Math.round;
+      floor = Math.floor;
+      createCoords = (v) => ({
+        x: v,
+        y: v
+      });
+      oppositeSideMap = {
+        left: "right",
+        right: "left",
+        bottom: "top",
+        top: "bottom"
+      };
+      oppositeAlignmentMap = {
+        start: "end",
+        end: "start"
+      };
+    }
+  });
+
+  // node_modules/.pnpm/@floating-ui+core@1.6.8/node_modules/@floating-ui/core/dist/floating-ui.core.mjs
+  function computeCoordsFromPlacement(_ref, placement, rtl) {
+    let {
+      reference: reference2,
+      floating
+    } = _ref;
+    const sideAxis = getSideAxis(placement);
+    const alignmentAxis = getAlignmentAxis(placement);
+    const alignLength = getAxisLength(alignmentAxis);
+    const side = getSide(placement);
+    const isVertical = sideAxis === "y";
+    const commonX = reference2.x + reference2.width / 2 - floating.width / 2;
+    const commonY = reference2.y + reference2.height / 2 - floating.height / 2;
+    const commonAlign = reference2[alignLength] / 2 - floating[alignLength] / 2;
+    let coords;
+    switch (side) {
+      case "top":
+        coords = {
+          x: commonX,
+          y: reference2.y - floating.height
+        };
+        break;
+      case "bottom":
+        coords = {
+          x: commonX,
+          y: reference2.y + reference2.height
+        };
+        break;
+      case "right":
+        coords = {
+          x: reference2.x + reference2.width,
+          y: commonY
+        };
+        break;
+      case "left":
+        coords = {
+          x: reference2.x - floating.width,
+          y: commonY
+        };
+        break;
+      default:
+        coords = {
+          x: reference2.x,
+          y: reference2.y
+        };
+    }
+    switch (getAlignment(placement)) {
+      case "start":
+        coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
+        break;
+      case "end":
+        coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);
+        break;
+    }
+    return coords;
+  }
+  async function detectOverflow2(state, options2) {
+    var _await$platform$isEle;
+    if (options2 === void 0) {
+      options2 = {};
+    }
+    const {
+      x,
+      y,
+      platform: platform2,
+      rects,
+      elements,
+      strategy
+    } = state;
+    const {
+      boundary = "clippingAncestors",
+      rootBoundary = "viewport",
+      elementContext = "floating",
       altBoundary = false,
       padding = 0
     } = evaluate(options2, state);
@@ -23068,223 +23617,18 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
   });
 
-  // source/components/form/reload.mjs
-  var reload_exports = {};
-  __export(reload_exports, {
-    Reload: () => Reload
-  });
-  function initOptionsFromArguments3() {
-    const options2 = {};
-    const url = this.getAttribute(ATTRIBUTE_FORM_URL);
-    if (isString(url)) {
-      options2["url"] = new URL(url, document.location).toString();
-    }
-    if (this.hasAttribute(ATTRIBUTE_FORM_RELOAD)) {
-      options2["reload"] = this.getAttribute(ATTRIBUTE_FORM_RELOAD).toLowerCase();
-    }
-    return options2;
-  }
-  function initIntersectionObserver() {
-    if (this[intersectionObserverWasInitialized] === true) {
-      return;
-    }
-    this[intersectionObserverWasInitialized] = true;
-    const options2 = {
-      threshold: [0.5]
-    };
-    const callback = (entries, observer2) => {
-      for (const [, entry] of entries.entries()) {
-        if (entry.isIntersecting === true) {
-          if (this.getOption("reload") === "onshow") {
-            observer2.disconnect();
-          }
-          try {
-            loadContent2.call(this).catch((e) => {
-              addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.toString());
-            });
-          } catch (e) {
-            addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.toString());
-          }
-        }
-      }
-    };
-    const observer = new IntersectionObserver(callback, options2);
-    observer.observe(this);
-  }
-  function loadContent2() {
-    const url = this.getOption("url", void 0);
-    if (!isString(url) || url === "") {
-      throw new Error("missing url");
-    }
-    const options2 = this.getOption("fetch", {});
-    let parentNode = this;
-    if (this.shadowRoot) {
-      parentNode = this.shadowRoot;
-    }
-    let container = parentNode.querySelector(`[${ATTRIBUTE_ROLE}=container]`);
-    let currentDisplayMode = container?.style?.display;
-    if (currentDisplayMode === void 0) {
-      currentDisplayMode = "inherit";
-    }
-    if (!(container instanceof HTMLElement)) {
-      container = document.createElement("div");
-      container.style.display = "none";
-      container.setAttribute(ATTRIBUTE_ROLE, "container");
-      parentNode.appendChild(container);
-    }
-    return loadAndAssignContent(container, url, options2, this.getOption("filter")).then(() => {
-      if (currentDisplayMode !== void 0) {
-        container.style.display = currentDisplayMode;
-      }
-    }).catch((e) => {
-      throw e;
-    });
-  }
-  function getTemplate9() {
-    return this.innerHTML;
-  }
-  var intersectionObserverWasInitialized, Reload;
-  var init_reload = __esm({
-    "source/components/form/reload.mjs"() {
-      init_constants();
-      init_attributes();
-      init_constants2();
-      init_customelement();
-      init_is();
-      init_constants3();
-      init_fetch();
-      intersectionObserverWasInitialized = Symbol("wasInitialized");
-      Reload = class extends CustomElement {
-        /**
-         * This method is called by the `instanceof` operator.
-         * @return {symbol}
-         * @since 2.1.0
-         */
-        static get [instanceSymbol]() {
-          return Symbol.for("@schukai/monster/components/form/reload");
-        }
-        /**
-         * To set the options via the HTML tag, the attribute `data-monster-options` must be used.
-         * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
-         *
-         * The individual configuration values can be found in the table.
-         *
-         * @property {Object} templates Template definitions
-         * @property {string} templates.main Main template
-         * @property {string} url=undefined
-         * @property {string} reload=undefined currently the values defined are `onshow` and `always`. The default `onshow` removes the IntersectionObserver. This means that the content is only loaded once. reloading of the content does not occur.
-         * @property {string} filter=undefined dom selectors to search for elements, if undefined then everything is taken
-         * @property {Monster.Components.Form.Processor[]} processors
-         * @property {Object} fetch Fetch [see Using Fetch mozilla.org](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch)
-         * @property {String} fetch.redirect=error
-         * @property {String} fetch.method=GET
-         * @property {String} fetch.mode=same-origin
-         * @property {String} fetch.credentials=same-origin
-         * @property {Object} fetch.headers={"accept":"text/html"}}
-         */
-        get defaults() {
-          return Object.assign(
-            {},
-            super.defaults,
-            {
-              templates: {
-                main: getTemplate9.call(this)
-              },
-              shadowMode: null,
-              url: null,
-              reload: "onshow",
-              filter: null,
-              fetch: {
-                redirect: "error",
-                method: "GET",
-                mode: "same-origin",
-                credentials: "same-origin",
-                headers: {
-                  accept: "text/html"
-                }
-              }
-            },
-            initOptionsFromArguments3.call(this)
-          );
-        }
-        /**
-         * This method determines which attributes are to be monitored by `attributeChangedCallback()`.
-         *
-         * @return {string[]}
-         */
-        static get observedAttributes() {
-          const list = super.observedAttributes;
-          list.push(ATTRIBUTE_FORM_URL);
-          return list;
-        }
-        /**
-         * @return {void}
-         */
-        [initMethodSymbol]() {
-          super[initMethodSymbol]();
-          this[attributeObserverSymbol][ATTRIBUTE_FORM_URL] = (url) => {
-            if (this.hasAttribute(ATTRIBUTE_FORM_URL)) {
-              this.setOption("url", new URL(url, document.location).toString());
-            } else {
-              this.setOption("url", void 0);
-            }
-          };
-        }
-        /**
-         * This method is called internal and should not be called directly.
-         * @throws {Error} missing default slot
-         * @throws {Error} no shadow-root is defined
-         * @throws {Error} missing url
-         * @throws {Error} we won't be able to read the data
-         * @throws {Error} request failed
-         * @throws {Error} not found
-         * @throws {Error} undefined status or type
-         * @fires monster-fetched
-         * @return {Monster.Components.Form.Form}
-         */
-        [assembleMethodSymbol]() {
-          super[assembleMethodSymbol]();
-          initIntersectionObserver.call(this);
-        }
-        /**
-         * This method is called internal and should not be called directly.
-         *
-         * @return {string}
-         */
-        static getTag() {
-          return "monster-reload";
-        }
-        /**
-         * load content from url
-         *
-         * It is important to know that with this function the loading is executed
-         * directly. it is loaded as well when the element is not visible.
-         *
-         * @param {string|undefined} url
-         */
-        fetch(url) {
-          if (isString(url) || url instanceof URL) {
-            this.setAttribute(ATTRIBUTE_FORM_URL, `${url}`);
-          }
-          return loadContent2.call(this);
-        }
-      };
-      registerCustomElement(Reload);
-    }
-  });
-
-  // source/components/form/stylesheet/state-button.mjs
-  var StateButtonStyleSheet;
-  var init_state_button = __esm({
-    "source/components/form/stylesheet/state-button.mjs"() {
+  // source/components/form/stylesheet/select.mjs
+  var SelectStyleSheet;
+  var init_select = __esm({
+    "source/components/form/stylesheet/select.mjs"() {
       init_attributes();
       init_constants2();
-      StateButtonStyleSheet = new CSSStyleSheet();
+      SelectStyleSheet = new CSSStyleSheet();
       try {
-        StateButtonStyleSheet.insertRule(
+        SelectStyleSheet.insertRule(
           `
-@layer statebutton { 
-[data-monster-role=control]{box-sizing:border-box;outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:host{box-sizing:border-box;display:block}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030;--monster-gradient-tangerine-1:#e5b875;--monster-gradient-tangerine-2:#d9a362;--monster-gradient-tangerine-3:#c08a4e;--monster-gradient-tangerine-4:#a7713b;--monster-gradient-tangerine-5:#8f5a28;--monster-gradient-tangerine-6:#360505;--monster-color-seashell-1:#f7f5ef;--monster-color-seashell-2:#e5e2d9;--monster-color-seashell-3:#cbc6b3;--monster-color-seashell-4:#a19d8a;--monster-color-seashell-5:#7a7566;--monster-color-seashell-6:#514d3f}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin:4rem 0 1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin:4rem 0 1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin:4rem 0 1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin:4rem 0 1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin:4rem 0 1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin:4rem 0 1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-feature-settings:"tnum";font-weight:700;letter-spacing:.1em;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}.monospace{font-family:var(--monster-font-family-monospace)}div[data-monster-role=control]{height:100%}button{width:100%}[data-monster-role=button]{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;transition:width 10s ease-in-out}div[data-monster-role=label]{align-items:center;display:flex;gap:.4rem;justify-content:center;width:100%}[data-monster-role=state]{align-content:center;align-items:center;align-self:stretch;display:flex;transition:width 12s ease-in-out}[data-monster-role=state]>img,[data-monster-role=state]>svg{margin-left:.3em}[data-monster-role=state]>svg.successful{animation:bouncy .5s linear forwards;color:var(--monster-color-successful)}[data-monster-role=state]>svg.activity{animation:bouncy .5s linear forwards;color:var(--monster-color-activity)}[data-monster-role=state]>svg.failed{animation:bouncy .5s linear forwards;color:var(--monster-color-failed)}[data-monster-role=state]>svg.activity{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1)}[data-monster-role=state].stateless{display:none}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}@keyframes bouncy{0%{opacity:0;transform:scale(.1)}80%{opacity:1;transform:scale(1.15)}90%{transform:scale(.9)}to{transform:scale(1)}} 
+@layer select { 
+.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:host{box-sizing:border-box;display:block}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}[data-monster-role=container]{-webkit-appearance:none;-moz-appearance:none;appearance:none;flex:4 0 90%;min-height:1.4em;overflow:auto;scrollbar-color:var(--monster-color-primary-1) var(--monster-bg-color-primary-1);scrollbar-width:thin;width:100%}.d-none{display:none!important}div[data-monster-role=control]{display:flex;height:100%;position:relative}[data-monster-role=container].open{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E")}[data-monster-role=container].clear,[data-monster-role=container].open{background-color:var(--monster-bg-color-primary-2);-webkit-mask-position:center center;mask-position:center center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:.8em;mask-size:.8em}[data-monster-role=container].clear{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}[data-monster-role=control]{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-theme-control-border-color);-o-border-image:initial;border-image:initial;border-radius:var(--monster-theme-control-border-radius);border-style:var(--monster-theme-control-border-style);border-width:var(--monster-theme-control-border-width);box-sizing:border-box;color:var(--monster-color-primary-1);display:flex;font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem;width:-webkit-fill-available;width:-moz-available;width:fill-available}@media (prefers-color-scheme:light){[data-monster-role=control]{background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-1)}[data-monster-role=control]:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}}[data-monster-role=control]:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}div[data-monster-role=selection]{align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;gap:5px;justify-content:flex-start;margin:5px}[data-monster-role=option-control]{margin-right:8px}[data-monster-role=badge]{display:inline-flex}[data-monster-role=badge-label]{align-content:center;align-items:center;display:flex;flex-direction:row;gap:7px;justify-content:space-between}[data-monster-role=filter],[data-monster-role=popper-filter]{display:flex;flex-grow:200;order:99999999;visibility:hidden}[data-monster-role=filter].active{background-color:var(--monster-bg-color-primary-2);border:0;border-color:var(--monster-bg-color-primary-3);border-bottom:1px solid var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2);min-width:40%;outline:none;visibility:visible}.active[data-monster-role=filter][name=popper-filter]{height:1.5em;margin:2.5em;padding:2px;width:calc(100% - var(--monster-border-width)*2)}.option-filter-control{align-items:center;background-color:var(--monster-bg-color-primary-2);display:flex;height:2.5em;margin:-1.1em -1.1em .3em}[data-monster-role=remove-badge]{background-color:var(--monster-bg-color-primary-2);height:16px;margin-left:5px;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");order:2}[data-monster-role=remove-badge],[data-monster-role=status-or-remove-badges]{-webkit-mask-position:center center;mask-position:center center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:.8em;mask-size:.8em;min-height:16px;width:16px}[data-monster-role=status-or-remove-badges]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}.open[data-monster-role=status-or-remove-badges]{background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E")}.empty[data-monster-role=status-or-remove-badges]{background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E")}.clear[data-monster-role=status-or-remove-badges]{background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}.error[data-monster-role=status-or-remove-badges]{background-color:var(--monster-bg-color-error-1);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E")}.loading[data-monster-role=status-or-remove-badges]{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1);background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='activity' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='activity' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E")}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}[data-monster-role=options]{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;scrollbar-color:var(--monster-color-primary-1) var(--monster-bg-color-primary-1);scrollbar-width:thin}[data-monster-role=option]{align-items:center;box-sizing:border-box;display:flex;padding:6px 5px}[data-monster-role=option] label{align-items:center;display:flex;flex-direction:row;justify-content:flex-start;width:100%}[data-monster-role=option] label>div{align-items:center;display:flex;flex-direction:row;justify-content:space-between;outline:none;width:100%}[data-monster-role=no-options]{background-color:var(--monster-bg-color-warning-4);border-radius:.2em;color:var(--monster-color-warning-4);margin:1.1em 1.1em 0;padding:.3em .8em}.selected{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}[data-monster-role=option][data-monster-filtered=true],[data-monster-role=option][data-monster-visibility=hidden]{display:none}[data-monster-role=option][data-monster-focused=true]{outline:1px dashed var(--monster-color-selection-2);outline-offset:-2px}[data-monster-role=option]>input:focus,[data-monster-role=option]>label:focus{outline:none} 
 }`,
           0
         );
@@ -23298,547 +23642,209 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
   });
 
-  // source/components/form/types/state.mjs
-  function getStateInstanceFor(state) {
-    switch (state) {
-      case "stateless":
-        return new State("stateless", "");
-      case "successful":
-        return new State(
-          "successful",
-          '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="successful" viewBox="0 0 16 16"><path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/><path d="M10.97 4.97a.235.235 0 0 0-.02.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05z"/></svg>'
-        );
-      case "activity":
-        return new State(
-          "activity",
-          '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="activity" viewBox="0 0 16 16"><circle cx="8" cy="8" r="8"/></svg>'
-        );
-      case "failed":
-        return new State(
-          "failed",
-          '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="failed" viewBox="0 0 16 16"><path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/><path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 4.995z"/></svg>'
-        );
-      default:
-        return new State(state, "");
+  // source/components/form/select.mjs
+  var select_exports = {};
+  __export(select_exports, {
+    Select: () => Select,
+    getSelectionTemplate: () => getSelectionTemplate,
+    getSummaryTemplate: () => getSummaryTemplate,
+    popperElementSymbol: () => popperElementSymbol2
+  });
+  function lookupSelection() {
+    const self2 = this;
+    setTimeout(() => {
+      const selection = self2.getOption("selection");
+      if (selection.length === 0) {
+        return;
+      }
+      if (self2[isLoadingSymbol] === true) {
+        return;
+      }
+      if (self2[lazyLoadDoneSymbol] === true) {
+        return;
+      }
+      let url = self2.getOption("url");
+      let lookupUrl = self2.getOption("lookup.url");
+      if (lookupUrl !== null) {
+        url = lookupUrl;
+      }
+      if (this.getOption("lookup.grouping") === true) {
+        filterFromRemoteByValue.call(
+          self2,
+          url,
+          selection.map((s) => s?.["value"])
+        ).catch((e) => {
+          addAttributeToken(self2, ATTRIBUTE_ERRORMESSAGE, `${e}`);
+        });
+        return;
+      }
+      for (const s of selection) {
+        if (s?.["value"]) {
+          filterFromRemoteByValue.call(self2, url, s?.["value"]).catch((e) => {
+            addAttributeToken(self2, ATTRIBUTE_ERRORMESSAGE, `${e}`);
+          });
+        }
+      }
+    }, 100);
+  }
+  function fetchIt(url, controlOptions) {
+    if (url instanceof URL) {
+      url = url.toString();
+    }
+    if (url !== void 0 && url !== null) {
+      url = validateString(url);
+    } else {
+      url = this.getOption("url");
+      if (url === null) {
+        return Promise.reject(new Error("No url defined"));
+      }
     }
+    return new Promise((resolve, reject) => {
+      setStatusOrRemoveBadges.call(this, "loading");
+      new Processing(10, () => {
+        fetchData.call(this, url).then((map) => {
+          if (isObject(map) || isArray(map) || map instanceof Set || map instanceof Map) {
+            try {
+              this.importOptions(map);
+            } catch (e) {
+              setStatusOrRemoveBadges.call(this, "error");
+              reject(e);
+              return;
+            }
+            this[lastFetchedDataSymbol] = map;
+            let result;
+            const selection = this.getOption("selection");
+            let newValue = [];
+            if (selection) {
+              newValue = selection;
+            } else if (this.hasAttribute("value")) {
+              newValue = this.getAttribute("value");
+            }
+            result = setSelection.call(this, newValue);
+            requestAnimationFrame(() => {
+              checkOptionState.call(this);
+              setStatusOrRemoveBadges.call(this, "closed");
+              updatePopper.call(this);
+              resolve(result);
+            });
+            return;
+          }
+          setStatusOrRemoveBadges.call(this, "error");
+          reject(new Error("invalid response"));
+        }).catch((e) => {
+          setStatusOrRemoveBadges.call(this, "error");
+          reject(e);
+        });
+      }).run().catch((e) => {
+        setStatusOrRemoveBadges.call(this, "error");
+        addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
+        reject(e);
+      });
+    });
   }
-  var internalSymbol2, State;
-  var init_state = __esm({
-    "source/components/form/types/state.mjs"() {
-      init_base();
-      init_validate();
-      internalSymbol2 = Symbol("internalSymbol");
-      State = class _State extends Base {
-        /**
-         *
-         * @param {string} state
-         * @param {string} presentation
-         * @throws {TypeError} value is not a string
-         */
-        constructor(state, presentation) {
-          super();
-          this[internalSymbol2] = {};
-          this[internalSymbol2].state = validateString(state);
-          this[internalSymbol2].presentation = validateString(presentation);
-        }
-        /**
-         * @property {String} state
-         */
-        get state() {
-          return this[internalSymbol2].state;
-        }
-        /**
-         * @property {String} presentation
-         */
-        get presentation() {
-          return this[internalSymbol2].presentation;
-        }
-        /**
-         * @return {Monster.Components.Form.Types.State}
-         */
-        getClone() {
-          return new _State(
-            this[internalSymbol2].state,
-            this[internalSymbol2].presentation
+  function initOptionsFromArguments4() {
+    const options2 = {};
+    const template = this.getAttribute("data-monster-selected-template");
+    if (isString(template)) {
+      if (!options2["templateMapping"]) options2["templateMapping"] = {};
+      switch (template) {
+        case "summary":
+        case "default":
+          options2["templateMapping"]["selected"] = getSummaryTemplate();
+          break;
+        case "selected":
+          options2["templateMapping"]["selected"] = getSelectionTemplate();
+          break;
+        default:
+          addAttributeToken(
+            this,
+            ATTRIBUTE_ERRORMESSAGE,
+            "invalid template, use summary or selected"
           );
+      }
+    }
+    return options2;
+  }
+  function attachResizeObserver3() {
+    this[resizeObserverSymbol3] = new ResizeObserver((entries) => {
+      if (this[timerCallbackSymbol3] instanceof DeadMansSwitch) {
+        try {
+          this[timerCallbackSymbol3].touch();
+          return;
+        } catch (e) {
+          delete this[timerCallbackSymbol3];
         }
-      };
+      }
+      this[timerCallbackSymbol3] = new DeadMansSwitch(200, () => {
+        updatePopper.call(this);
+        delete this[timerCallbackSymbol3];
+      });
+    });
+    this[resizeObserverSymbol3].observe(this.parentElement);
+  }
+  function disconnectResizeObserver2() {
+    if (this[resizeObserverSymbol3] instanceof ResizeObserver) {
+      this[resizeObserverSymbol3].disconnect();
     }
-  });
-
-  // source/components/form/state-button.mjs
-  var state_button_exports = {};
-  __export(state_button_exports, {
-    StateButton: () => StateButton
-  });
-  function getTemplate10() {
-    return `<div data-monster-role="control" part="control">
-    <button data-monster-attributes="disabled path:disabled | if:true, class path:classes.button"
-            data-monster-role="button"
-            part="button">
-        <div data-monster-role="label" data-monster-replace="path:labels.button"></div>
-        <div data-monster-role="state"
-			 data-monster-attributes="class path:current.state"
-			 data-monster-replace="path:current.presentation"></div>
-    </button>
+  }
+  function getSelectionTemplate() {
+    return `<div data-monster-role="selection" part="selection"
+                 data-monster-insert="selection path:selection" role="search"
+            ><input type="text" role="searchbox"
+                    part="inline-filter" name="inline-filter"
+                    data-monster-role="filter"
+                    autocomplete="off"
+                    tabindex="0"
+            ><div data-monster-replace="path:messages.control"></div>
+            </div>`;
+  }
+  function getSummaryTemplate() {
+    return `<div data-monster-role="selection" role="search" part="summary">
+    <input type="text" role="searchbox"
+           part="inline-filter" name="inline-filter"
+           data-monster-role="filter"
+           autocomplete="off"
+           tabindex="0"
+    >
+    <div data-monster-replace="path:messages.selected"></div>    
 </div>`;
   }
-  var StateButton;
-  var init_state_button2 = __esm({
-    "source/components/form/state-button.mjs"() {
-      init_constants();
-      init_customelement();
-      init_is();
-      init_validate();
-      init_button2();
-      init_state_button();
-      init_state();
-      StateButton = class extends Button {
-        /**
-         * This method is called by the `instanceof` operator.
-         * @return {symbol}
-         * @since 2.1.0
-         */
-        static get [instanceSymbol]() {
-          return Symbol.for(
-            "@schukai/monster/components/form/state-button@@instance"
-          );
-        }
-        /**
-         * To set the options via the HTML tag, the attribute `data-monster-options` must be used.
-         * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
-         *
-         * The individual configuration values can be found in the table.
-         *
-         * @property {Object} templates Template definitions
-         * @property {string} templates.main Main template
-         * @property {Object} states Available status
-         * @property {Monster.Components.Form.Types.State} states.successful= successful
-         * @property {Monster.Components.Form.Types.State} states.activity= activity
-         * @property {Monster.Components.Form.Types.State} states.failed= failed
-         * @property {Monster.Components.Form.Types.State} current current status
-         * @property {Monster.Components.Form~exampleActionCallback} actions.click
-         * @extends {Button}
-         * @see {@link https://github.com/twbs/icons/blob/main/LICENSE.md|Bootstrap icons license}
-         */
-        get defaults() {
-          return Object.assign({}, super.defaults, {
-            templates: {
-              main: getTemplate10()
-            },
-            states: {
-              successful: getStateInstanceFor("successful"),
-              activity: getStateInstanceFor("activity"),
-              failed: getStateInstanceFor("failed")
-            },
-            current: getStateInstanceFor("stateless")
-          });
-        }
-        /**
-         * This method sets the current state of the button.
-         * If a timeout is set, the state is automatically removed after the
-         * specified time.
-         *
-         * @since 3.18.0 a previously set timeout is cleared
-         *
-         * @param {string} state
-         * @param {number} timeout
-         * @return {Monster.Components.Form.StateButton}
-         * @throws {TypeError} value is not a string
-         * @throws {TypeError} value is not an instance
-         */
-        setState(state, timeout) {
-          const timeoutSymbol = Symbol.for("timeout");
-          if (this[timeoutSymbol] !== void 0) {
-            clearTimeout(this[timeoutSymbol]);
-            delete this[timeoutSymbol];
-          }
-          const obj = this.getOption(`states.${validateString(state)}`);
-          if (obj === void 0) {
-            throw new Error("not found");
-          }
-          this.setOption("current", validateInstance(obj, State));
-          if (isInteger(timeout) && timeout > 0) {
-            this[timeoutSymbol] = setTimeout(() => {
-              this.removeState();
-              delete this[timeoutSymbol];
-            }, timeout);
-          }
-          return this;
-        }
-        /**
-         *
-         * @return {Monster.Components.Form.StateButton}
-         */
-        removeState() {
-          this.setOption("current", getStateInstanceFor("stateless"));
-          return this;
-        }
-        /**
-         * @return {Monster.Components.Form.Types.State|undefined}
-         */
-        getState() {
-          return this.getOption("current");
-        }
-        /**
-         *
-         * @return {string}
-         */
-        static getTag() {
-          return "monster-state-button";
-        }
-        /**
-         *
-         * @return {Array<CSSStyleSheet>}
-         */
-        static getCSSStyleSheet() {
-          const styles2 = Button.getCSSStyleSheet();
-          styles2.push(StateButtonStyleSheet);
-          return styles2;
-        }
-      };
-      registerCustomElement(StateButton);
-    }
-  });
-
-  // source/data/buildmap.mjs
-  function buildMap(subject, selector, valueTemplate, keyTemplate, filter) {
-    return assembleParts(subject, selector, filter, function(v, k, m) {
-      k = build(v, keyTemplate, k);
-      v = build(v, valueTemplate);
-      this.set(k, v);
-    });
-  }
-  function assembleParts(subject, selector, filter, callback) {
-    const result = /* @__PURE__ */ new Map();
-    let map;
-    if (isFunction(selector)) {
-      map = selector(subject);
-      if (!(map instanceof Map)) {
-        throw new TypeError("the selector callback must return a map");
-      }
-    } else if (isString(selector)) {
-      map = /* @__PURE__ */ new Map();
-      buildFlatMap.call(map, subject, selector);
-    } else {
-      throw new TypeError("selector is neither a string nor a function");
-    }
-    if (!(map instanceof Map)) {
-      return result;
-    }
-    map.forEach((v, k, m) => {
-      if (isFunction(filter)) {
-        if (filter.call(m, v, k) !== true) return;
-      }
-      callback.call(result, v, k, m);
-    });
-    return result;
-  }
-  function buildFlatMap(subject, selector, key, parentMap) {
-    const currentMap = /* @__PURE__ */ new Map();
-    const resultLength = this.size;
-    if (key === void 0) key = [];
-    const parts = selector.split(DELIMITER);
-    let current = "";
-    const currentPath = [];
-    do {
-      current = parts.shift();
-      currentPath.push(current);
-      if (current === WILDCARD) {
-        const finder = new Pathfinder(subject);
-        let map;
-        try {
-          map = finder.getVia(currentPath.join(DELIMITER));
-        } catch (e) {
-          const a2 = e;
-          map = /* @__PURE__ */ new Map();
-        }
-        for (const [k, o] of map) {
-          const copyKey = clone(key);
-          currentPath.map((a2) => {
-            copyKey.push(a2 === WILDCARD ? k : a2);
-          });
-          const kk = copyKey.join(DELIMITER);
-          const sub = buildFlatMap.call(
-            this,
-            o,
-            parts.join(DELIMITER),
-            copyKey,
-            o
-          );
-          if (isObject(sub) && parentMap !== void 0) {
-            sub[PARENT] = parentMap;
-          }
-          currentMap.set(kk, sub);
-        }
-      }
-    } while (parts.length > 0);
-    if (resultLength === this.size) {
-      for (const [k, o] of currentMap) {
-        this.set(k, o);
-      }
-    }
-    return subject;
-  }
-  function build(subject, definition, defaultValue) {
-    if (definition === void 0) return defaultValue ? defaultValue : subject;
-    validateString(definition);
-    const regexp = /(?<placeholder>\${(?<path>[a-z\^A-Z.\-_0-9]*)})/gm;
-    const array = [...definition.matchAll(regexp)];
-    const finder = new Pathfinder(subject);
-    if (array.length === 0) {
-      return finder.getVia(definition);
-    }
-    array.forEach((a2) => {
-      const groups = a2?.["groups"];
-      const placeholder = groups?.["placeholder"];
-      if (placeholder === void 0) return;
-      const path = groups?.["path"];
-      let v = finder.getVia(path);
-      if (v === void 0) v = defaultValue;
-      definition = definition.replaceAll(placeholder, v);
-    });
-    return definition;
-  }
-  var PARENT;
-  var init_buildmap = __esm({
-    "source/data/buildmap.mjs"() {
-      init_is();
-      init_validate();
-      init_clone();
-      init_pathfinder();
-      PARENT = "^";
-    }
-  });
-
-  // source/components/form/stylesheet/select.mjs
-  var SelectStyleSheet;
-  var init_select = __esm({
-    "source/components/form/stylesheet/select.mjs"() {
-      init_attributes();
-      init_constants2();
-      SelectStyleSheet = new CSSStyleSheet();
-      try {
-        SelectStyleSheet.insertRule(
-          `
-@layer select { 
-.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:host{box-sizing:border-box;display:block}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}[data-monster-role=container]{-webkit-appearance:none;-moz-appearance:none;appearance:none;flex:4 0 90%;min-height:1.4em;overflow:auto;scrollbar-color:var(--monster-color-primary-1) var(--monster-bg-color-primary-1);scrollbar-width:thin;width:100%}.d-none{display:none!important}div[data-monster-role=control]{display:flex;height:100%;position:relative}[data-monster-role=container].open{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E")}[data-monster-role=container].clear,[data-monster-role=container].open{background-color:var(--monster-bg-color-primary-2);-webkit-mask-position:center center;mask-position:center center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:.8em;mask-size:.8em}[data-monster-role=container].clear{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}[data-monster-role=control]{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-theme-control-border-color);-o-border-image:initial;border-image:initial;border-radius:var(--monster-theme-control-border-radius);border-style:var(--monster-theme-control-border-style);border-width:var(--monster-theme-control-border-width);box-sizing:border-box;color:var(--monster-color-primary-1);display:flex;font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem;width:-webkit-fill-available;width:-moz-available;width:fill-available}@media (prefers-color-scheme:light){[data-monster-role=control]{background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-1)}[data-monster-role=control]:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}}[data-monster-role=control]:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}div[data-monster-role=selection]{align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;gap:5px;justify-content:flex-start;margin:5px}[data-monster-role=option-control]{margin-right:8px}[data-monster-role=badge]{display:inline-flex}[data-monster-role=badge-label]{align-content:center;align-items:center;display:flex;flex-direction:row;gap:7px;justify-content:space-between}[data-monster-role=filter],[data-monster-role=popper-filter]{display:flex;flex-grow:200;order:99999999;visibility:hidden}[data-monster-role=filter].active{background-color:var(--monster-bg-color-primary-2);border:0;border-color:var(--monster-bg-color-primary-3);border-bottom:1px solid var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2);min-width:40%;outline:none;visibility:visible}.active[data-monster-role=filter][name=popper-filter]{height:1.5em;margin:2.5em;padding:2px;width:calc(100% - var(--monster-border-width)*2)}.option-filter-control{align-items:center;background-color:var(--monster-bg-color-primary-2);display:flex;height:2.5em;margin:-1.1em -1.1em .3em}[data-monster-role=remove-badge]{background-color:var(--monster-bg-color-primary-2);height:16px;margin-left:5px;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");order:2}[data-monster-role=remove-badge],[data-monster-role=status-or-remove-badges]{-webkit-mask-position:center center;mask-position:center center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:.8em;mask-size:.8em;min-height:16px;width:16px}[data-monster-role=status-or-remove-badges]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}.open[data-monster-role=status-or-remove-badges]{background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E")}.empty[data-monster-role=status-or-remove-badges]{background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E")}.clear[data-monster-role=status-or-remove-badges]{background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}.error[data-monster-role=status-or-remove-badges]{background-color:var(--monster-bg-color-error-1);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E")}.loading[data-monster-role=status-or-remove-badges]{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1);background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='activity' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='activity' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E")}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}[data-monster-role=options]{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;scrollbar-color:var(--monster-color-primary-1) var(--monster-bg-color-primary-1);scrollbar-width:thin}[data-monster-role=option]{align-items:center;box-sizing:border-box;display:flex;padding:6px 5px}[data-monster-role=option] label{align-items:center;display:flex;flex-direction:row;justify-content:flex-start;width:100%}[data-monster-role=option] label>div{align-items:center;display:flex;flex-direction:row;justify-content:space-between;outline:none;width:100%}[data-monster-role=no-options]{background-color:var(--monster-bg-color-warning-4);border-radius:.2em;color:var(--monster-color-warning-4);margin:1.1em 1.1em 0;padding:.3em .8em}.selected{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}[data-monster-role=option][data-monster-filtered=true],[data-monster-role=option][data-monster-visibility=hidden]{display:none}[data-monster-role=option][data-monster-focused=true]{outline:1px dashed var(--monster-color-selection-2);outline-offset:-2px}[data-monster-role=option]>input:focus,[data-monster-role=option]>label:focus{outline:none} 
-}`,
-          0
-        );
-      } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
-      }
-    }
-  });
-
-  // source/components/form/select.mjs
-  var select_exports = {};
-  __export(select_exports, {
-    Select: () => Select,
-    getSelectionTemplate: () => getSelectionTemplate,
-    getSummaryTemplate: () => getSummaryTemplate,
-    popperElementSymbol: () => popperElementSymbol3
-  });
-  function lookupSelection() {
-    const self2 = this;
-    setTimeout(() => {
-      const selection = self2.getOption("selection");
-      if (selection.length === 0) {
-        return;
-      }
-      if (self2[isLoadingSymbol] === true) {
-        return;
-      }
-      if (self2[lazyLoadDoneSymbol] === true) {
-        return;
-      }
-      let url = self2.getOption("url");
-      let lookupUrl = self2.getOption("lookup.url");
-      if (lookupUrl !== null) {
-        url = lookupUrl;
-      }
-      if (this.getOption("lookup.grouping") === true) {
-        filterFromRemoteByValue.call(
-          self2,
-          url,
-          selection.map((s) => s?.["value"])
-        ).catch((e) => {
-          addAttributeToken(self2, ATTRIBUTE_ERRORMESSAGE, `${e}`);
-        });
-        return;
-      }
-      for (const s of selection) {
-        if (s?.["value"]) {
-          filterFromRemoteByValue.call(self2, url, s?.["value"]).catch((e) => {
-            addAttributeToken(self2, ATTRIBUTE_ERRORMESSAGE, `${e}`);
-          });
-        }
-      }
-    }, 100);
-  }
-  function fetchIt(url, controlOptions) {
-    if (url instanceof URL) {
-      url = url.toString();
-    }
-    if (url !== void 0 && url !== null) {
-      url = validateString(url);
-    } else {
-      url = this.getOption("url");
-      if (url === null) {
-        return Promise.reject(new Error("No url defined"));
-      }
-    }
-    return new Promise((resolve, reject) => {
-      setStatusOrRemoveBadges.call(this, "loading");
-      new Processing(10, () => {
-        fetchData.call(this, url).then((map) => {
-          if (isObject(map) || isArray(map) || map instanceof Set || map instanceof Map) {
-            try {
-              this.importOptions(map);
-            } catch (e) {
-              setStatusOrRemoveBadges.call(this, "error");
-              reject(e);
-              return;
-            }
-            this[lastFetchedDataSymbol] = map;
-            let result;
-            const selection = this.getOption("selection");
-            let newValue = [];
-            if (selection) {
-              newValue = selection;
-            } else if (this.hasAttribute("value")) {
-              newValue = this.getAttribute("value");
-            }
-            result = setSelection.call(this, newValue);
-            requestAnimationFrame(() => {
-              checkOptionState.call(this);
-              setStatusOrRemoveBadges.call(this, "closed");
-              updatePopper2.call(this);
-              resolve(result);
-            });
-            return;
-          }
-          setStatusOrRemoveBadges.call(this, "error");
-          reject(new Error("invalid response"));
-        }).catch((e) => {
-          setStatusOrRemoveBadges.call(this, "error");
-          reject(e);
-        });
-      }).run().catch((e) => {
-        setStatusOrRemoveBadges.call(this, "error");
-        addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
-        reject(e);
-      });
-    });
-  }
-  function initOptionsFromArguments4() {
-    const options2 = {};
-    const template = this.getAttribute("data-monster-selected-template");
-    if (isString(template)) {
-      if (!options2["templateMapping"]) options2["templateMapping"] = {};
-      switch (template) {
-        case "summary":
-        case "default":
-          options2["templateMapping"]["selected"] = getSummaryTemplate();
-          break;
-        case "selected":
-          options2["templateMapping"]["selected"] = getSelectionTemplate();
-          break;
-        default:
-          addAttributeToken(
-            this,
-            ATTRIBUTE_ERRORMESSAGE,
-            "invalid template, use summary or selected"
-          );
-      }
-    }
-    return options2;
-  }
-  function attachResizeObserver3() {
-    this[resizeObserverSymbol4] = new ResizeObserver((entries) => {
-      if (this[timerCallbackSymbol4] instanceof DeadMansSwitch) {
-        try {
-          this[timerCallbackSymbol4].touch();
-          return;
-        } catch (e) {
-          delete this[timerCallbackSymbol4];
-        }
-      }
-      this[timerCallbackSymbol4] = new DeadMansSwitch(200, () => {
-        updatePopper2.call(this);
-        delete this[timerCallbackSymbol4];
-      });
-    });
-    this[resizeObserverSymbol4].observe(this.parentElement);
-  }
-  function disconnectResizeObserver3() {
-    if (this[resizeObserverSymbol4] instanceof ResizeObserver) {
-      this[resizeObserverSymbol4].disconnect();
-    }
-  }
-  function getSelectionTemplate() {
-    return `<div data-monster-role="selection" part="selection"
-                 data-monster-insert="selection path:selection" role="search"
-            ><input type="text" role="searchbox"
-                    part="inline-filter" name="inline-filter"
-                    data-monster-role="filter"
-                    autocomplete="off"
-                    tabindex="0"
-            ><div data-monster-replace="path:messages.control"></div>
-            </div>`;
-  }
-  function getSummaryTemplate() {
-    return `<div data-monster-role="selection" role="search" part="summary">
-    <input type="text" role="searchbox"
-           part="inline-filter" name="inline-filter"
-           data-monster-role="filter"
-           autocomplete="off"
-           tabindex="0"
-    >
-    <div data-monster-replace="path:messages.selected"></div>    
-</div>`;
-  }
-  function parseSlotsToOptions() {
-    let options2 = this.getOption("options");
-    if (!isIterable(options2)) {
-      options2 = [];
-    }
-    let counter = 1;
-    getSlottedElements.call(this, "div").forEach((node) => {
-      let value = (counter++).toString();
-      let visibility = "visible";
-      if (node.hasAttribute("data-monster-value")) {
-        value = node.getAttribute("data-monster-value");
-      }
-      if (node.style.display === "none") {
-        visibility = "hidden";
-      }
-      const label = node.outerHTML;
-      options2.push({
-        value,
-        label,
-        visibility
-      });
-    });
-    runAsOptionLengthChanged.call(this, options2.length);
-    this.setOption("options", options2);
-  }
-  function runAsOptionLengthChanged(targetLength) {
-    const self2 = this;
-    if (!self2[optionsElementSymbol]) {
-      return;
-    }
-    const callback = function(mutationsList, observer2) {
-      const run = false;
-      for (const mutation of mutationsList) {
-        if (mutation.type === "childList") {
-          const run2 = true;
-          break;
+  function parseSlotsToOptions() {
+    let options2 = this.getOption("options");
+    if (!isIterable(options2)) {
+      options2 = [];
+    }
+    let counter = 1;
+    getSlottedElements.call(this, "div").forEach((node) => {
+      let value = (counter++).toString();
+      let visibility = "visible";
+      if (node.hasAttribute("data-monster-value")) {
+        value = node.getAttribute("data-monster-value");
+      }
+      if (node.style.display === "none") {
+        visibility = "hidden";
+      }
+      const label = node.outerHTML;
+      options2.push({
+        value,
+        label,
+        visibility
+      });
+    });
+    runAsOptionLengthChanged.call(this, options2.length);
+    this.setOption("options", options2);
+  }
+  function runAsOptionLengthChanged(targetLength) {
+    const self2 = this;
+    if (!self2[optionsElementSymbol]) {
+      return;
+    }
+    const callback = function(mutationsList, observer2) {
+      const run = false;
+      for (const mutation of mutationsList) {
+        if (mutation.type === "childList") {
+          const run2 = true;
+          break;
         }
       }
       if (run === true) {
@@ -23900,20 +23906,20 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
   function handleToggleKeyboardEvents(event) {
     switch (event?.["code"]) {
       case "Escape":
-        toggle2.call(this);
+        toggle.call(this);
         event.preventDefault();
         break;
       case "Space":
-        toggle2.call(this);
+        toggle.call(this);
         event.preventDefault();
         break;
       case "ArrowDown":
-        show4.call(this);
+        show3.call(this);
         activateCurrentOption.call(this, FOCUS_DIRECTION_DOWN);
         event.preventDefault();
         break;
       case "ArrowUp":
-        hide5.call(this);
+        hide4.call(this);
         event.preventDefault();
         break;
     }
@@ -24036,8 +24042,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     } else {
       container.style.overflowY = "auto";
     }
-    const domRect = this[controlElementSymbol5].getBoundingClientRect();
-    this[popperElementSymbol3].style.width = `${domRect.width}px`;
+    const domRect = this[controlElementSymbol4].getBoundingClientRect();
+    this[popperElementSymbol2].style.width = `${domRect.width}px`;
     container.style.overflowX = "auto";
   }
   function activateCurrentOption(direction) {
@@ -24134,7 +24140,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         event.preventDefault();
         break;
       case "Escape":
-        toggle2.call(this);
+        toggle.call(this);
         event.preventDefault();
         break;
       case shiftKey === true:
@@ -24178,7 +24184,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     if (!(this[inlineFilterElementSymbol] instanceof HTMLElement) && !(this[popperFilterElementSymbol] instanceof HTMLElement)) {
       return;
     }
-    show4.call(this);
+    show3.call(this);
     const url = this.getOption("url");
     if (!url) {
       addAttributeToken(
@@ -24231,7 +24237,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         disableHiding: true
       }).then(() => {
         checkOptionState.call(this);
-        show4.call(this);
+        show3.call(this);
       }).catch((e) => {
         throw e;
       });
@@ -24243,7 +24249,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     const shiftKey = event?.["shiftKey"];
     switch (event?.["code"]) {
       case "Escape":
-        toggle2.call(this);
+        toggle.call(this);
         event.preventDefault();
         break;
       case "Enter":
@@ -24374,7 +24380,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, `${e}`);
     });
     if (this.getOption("features.closeOnSelect") === true) {
-      toggle2.call(this);
+      toggle.call(this);
     }
     return this;
   }
@@ -24589,8 +24595,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     });
     url = formatURL.call(this, url);
     self2[isLoadingSymbol] = true;
-    const global21 = getGlobal();
-    return global21.fetch(url, fetchOptions).then((response) => {
+    const global20 = getGlobal();
+    return global20.fetch(url, fetchOptions).then((response) => {
       self2[isLoadingSymbol] = false;
       delayWatch = true;
       const contentType = response.headers.get("content-type");
@@ -24610,16 +24616,16 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       throw e;
     });
   }
-  function hide5() {
-    this[popperElementSymbol3].style.display = "none";
+  function hide4() {
+    this[popperElementSymbol2].style.display = "none";
     setStatusOrRemoveBadges.call(this, "closed");
-    removeAttributeToken(this[controlElementSymbol5], "class", "open");
+    removeAttributeToken(this[controlElementSymbol4], "class", "open");
   }
-  function show4() {
+  function show3() {
     if (this.getOption("disabled", void 0) === true) {
       return;
     }
-    if (this[popperElementSymbol3].style.display === STYLE_DISPLAY_MODE_BLOCK) {
+    if (this[popperElementSymbol2].style.display === STYLE_DISPLAY_MODE_BLOCK) {
       return;
     }
     focusFilter2.call(this);
@@ -24631,7 +24637,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         this.fetch().then(() => {
           checkOptionState.call(this);
           requestAnimationFrame(() => {
-            show4.call(this);
+            show3.call(this);
           });
         }).catch((e) => {
           addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
@@ -24648,27 +24654,27 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     if (options2.length === 0 && hasPopperFilterFlag === false) {
       return;
     }
-    this[popperElementSymbol3].style.visibility = "hidden";
-    this[popperElementSymbol3].style.display = STYLE_DISPLAY_MODE_BLOCK;
+    this[popperElementSymbol2].style.visibility = "hidden";
+    this[popperElementSymbol2].style.display = STYLE_DISPLAY_MODE_BLOCK;
     setStatusOrRemoveBadges.call(this, "open");
-    addAttributeToken(this[controlElementSymbol5], "class", "open");
+    addAttributeToken(this[controlElementSymbol4], "class", "open");
     new Processing(() => {
       calcAndSetOptionsDimension.call(this);
       focusFilter2.call(this);
-      this[popperElementSymbol3].style.removeProperty("visibility");
-      updatePopper2.call(this);
+      this[popperElementSymbol2].style.removeProperty("visibility");
+      updatePopper.call(this);
     }).run().catch((e) => {
       addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
     });
   }
-  function toggle2() {
-    if (this[popperElementSymbol3].style.display === STYLE_DISPLAY_MODE_BLOCK) {
-      hide5.call(this);
+  function toggle() {
+    if (this[popperElementSymbol2].style.display === STYLE_DISPLAY_MODE_BLOCK) {
+      hide4.call(this);
     } else {
-      show4.call(this);
+      show3.call(this);
     }
   }
-  function initEventHandler7() {
+  function initEventHandler5() {
     const self2 = this;
     self2[clearOptionEventHandler] = (event) => {
       const element = findTargetElementFromEvent(
@@ -24694,14 +24700,14 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         }
       }
     };
-    self2[closeEventHandler3] = (event) => {
+    self2[closeEventHandler2] = (event) => {
       const path = event.composedPath();
       for (const [, element] of Object.entries(path)) {
         if (element === self2) {
           return;
         }
       }
-      hide5.call(self2);
+      hide4.call(self2);
     };
     self2[inputEventHandler] = (event) => {
       const path = event.composedPath();
@@ -24729,7 +24735,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         if (element.hasAttribute(ATTRIBUTE_ROLE)) {
           role = element.getAttribute(ATTRIBUTE_ROLE);
         } else if (element === this) {
-          show4.call(this);
+          show3.call(this);
         } else {
           const e = element.closest(`[${ATTRIBUTE_ROLE}]`);
           if (e instanceof HTMLElement && e.hasAttribute(ATTRIBUTE_ROLE)) {
@@ -24756,7 +24762,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     };
     const types = self2.getOption("toggleEventType", ["click"]);
     for (const [, type3] of Object.entries(types)) {
-      self2[controlElementSymbol5].querySelector(`[${ATTRIBUTE_ROLE}="container"]`).addEventListener(type3, function(event) {
+      self2[controlElementSymbol4].querySelector(`[${ATTRIBUTE_ROLE}="container"]`).addEventListener(type3, function(event) {
         const element = findTargetElementFromEvent(
           event,
           ATTRIBUTE_ROLE,
@@ -24765,9 +24771,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         if (element instanceof HTMLElement) {
           return;
         }
-        toggle2.call(self2);
+        toggle.call(self2);
       });
-      self2[controlElementSymbol5].querySelector(`[${ATTRIBUTE_ROLE}="status-or-remove-badges"]`).addEventListener(type3, function(event) {
+      self2[controlElementSymbol4].querySelector(`[${ATTRIBUTE_ROLE}="status-or-remove-badges"]`).addEventListener(type3, function(event) {
         if (self2.getOption("disabled", void 0) === true) {
           return;
         }
@@ -24790,7 +24796,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
               if (element2 instanceof HTMLElement) {
                 return;
               }
-              toggle2.call(self2);
+              toggle.call(self2);
             }
           }
         }
@@ -24831,7 +24837,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         }
         return;
       }
-      if (this[controlElementSymbol5].classList.contains("open")) {
+      if (this[controlElementSymbol4].classList.contains("open")) {
         if (current !== "open") {
           this.setOption("classes.statusOrRemoveBadge", "open");
         }
@@ -24852,11 +24858,11 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       }
     });
   }
-  function initControlReferences9() {
+  function initControlReferences7() {
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
-    this[controlElementSymbol5] = this.shadowRoot.querySelector(
+    this[controlElementSymbol4] = this.shadowRoot.querySelector(
       `[${ATTRIBUTE_ROLE}=control]`
     );
     this[selectionElementSymbol] = this.shadowRoot.querySelector(
@@ -24865,7 +24871,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     this[containerElementSymbol2] = this.shadowRoot.querySelector(
       `[${ATTRIBUTE_ROLE}=container]`
     );
-    this[popperElementSymbol3] = this.shadowRoot.querySelector(
+    this[popperElementSymbol2] = this.shadowRoot.querySelector(
       `[${ATTRIBUTE_ROLE}=popper]`
     );
     this[inlineFilterElementSymbol] = this.shadowRoot.querySelector(
@@ -24885,8 +24891,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       `[${ATTRIBUTE_ROLE}=status-or-remove-badges]`
     );
   }
-  function updatePopper2() {
-    if (this[popperElementSymbol3].style.display !== STYLE_DISPLAY_MODE_BLOCK) {
+  function updatePopper() {
+    if (this[popperElementSymbol2].style.display !== STYLE_DISPLAY_MODE_BLOCK) {
       return;
     }
     if (this.getOption("disabled", false) === true) {
@@ -24896,8 +24902,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       calcAndSetOptionsDimension.call(this);
       positionPopper.call(
         this,
-        this[controlElementSymbol5],
-        this[popperElementSymbol3],
+        this[controlElementSymbol4],
+        this[popperElementSymbol2],
         this.getOption("popper", {})
       );
     }).run().catch((e) => {
@@ -24905,7 +24911,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     });
     return this;
   }
-  function getTemplate11() {
+  function getTemplate9() {
     return `
         <template id="options">
             <div data-monster-role="option" tabindex="-1"
@@ -24970,7 +24976,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         </div>
     `;
   }
-  var noOptionsAvailableMessage, clickToLoadOptionsMessage, timerCallbackSymbol4, keyFilterEventSymbol, lazyLoadDoneSymbol, isLoadingSymbol, closeEventHandler3, clearOptionEventHandler, resizeObserverSymbol4, keyEventHandler, lastFetchedDataSymbol, inputEventHandler, changeEventHandler, controlElementSymbol5, selectionElementSymbol, containerElementSymbol2, popperElementSymbol3, inlineFilterElementSymbol, popperFilterElementSymbol, popperFilterContainerElementSymbol, optionsElementSymbol, noOptionsAvailableElementSymbol, statusOrRemoveBadgesElementSymbol, areOptionsAvailableAndInitSymbol, disabledRequestMarker, FOCUS_DIRECTION_UP, FOCUS_DIRECTION_DOWN, FILTER_MODE_REMOTE, FILTER_MODE_OPTIONS, FILTER_MODE_DISABLED, FILTER_POSITION_POPPER, FILTER_POSITION_INLINE, Select;
+  var noOptionsAvailableMessage, clickToLoadOptionsMessage, timerCallbackSymbol3, keyFilterEventSymbol, lazyLoadDoneSymbol, isLoadingSymbol, closeEventHandler2, clearOptionEventHandler, resizeObserverSymbol3, keyEventHandler, lastFetchedDataSymbol, inputEventHandler, changeEventHandler, controlElementSymbol4, selectionElementSymbol, containerElementSymbol2, popperElementSymbol2, inlineFilterElementSymbol, popperFilterElementSymbol, popperFilterContainerElementSymbol, optionsElementSymbol, noOptionsAvailableElementSymbol, statusOrRemoveBadgesElementSymbol, areOptionsAvailableAndInitSymbol, disabledRequestMarker, FOCUS_DIRECTION_UP, FOCUS_DIRECTION_DOWN, FILTER_MODE_REMOTE, FILTER_MODE_OPTIONS, FILTER_MODE_DISABLED, FILTER_POSITION_POPPER, FILTER_POSITION_INLINE, Select;
   var init_select2 = __esm({
     "source/components/form/select.mjs"() {
       init_constants();
@@ -24997,21 +25003,21 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_translations();
       noOptionsAvailableMessage = "No options available.";
       clickToLoadOptionsMessage = "Click to load options.";
-      timerCallbackSymbol4 = Symbol("timerCallback");
+      timerCallbackSymbol3 = Symbol("timerCallback");
       keyFilterEventSymbol = Symbol("keyFilterEvent");
       lazyLoadDoneSymbol = Symbol("lazyLoadDone");
       isLoadingSymbol = Symbol("isLoading");
-      closeEventHandler3 = Symbol("closeEventHandler");
+      closeEventHandler2 = Symbol("closeEventHandler");
       clearOptionEventHandler = Symbol("clearOptionEventHandler");
-      resizeObserverSymbol4 = Symbol("resizeObserver");
+      resizeObserverSymbol3 = Symbol("resizeObserver");
       keyEventHandler = Symbol("keyEventHandler");
       lastFetchedDataSymbol = Symbol("lastFetchedData");
       inputEventHandler = Symbol("inputEventHandler");
       changeEventHandler = Symbol("changeEventHandler");
-      controlElementSymbol5 = Symbol("controlElement");
+      controlElementSymbol4 = Symbol("controlElement");
       selectionElementSymbol = Symbol("selectionElement");
       containerElementSymbol2 = Symbol("containerElement");
-      popperElementSymbol3 = Symbol("popperElement");
+      popperElementSymbol2 = Symbol("popperElement");
       inlineFilterElementSymbol = Symbol("inlineFilterElement");
       popperFilterElementSymbol = Symbol("popperFilterElement");
       popperFilterContainerElementSymbol = Symbol(
@@ -25217,7 +25223,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
                 selection: buildSelectionLabel
               },
               templates: {
-                main: getTemplate11()
+                main: getTemplate9()
               },
               templateMapping: {
                 /** with the attribute `data-monster-selected-template` the template for the selected options can be defined. */
@@ -25237,8 +25243,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         [assembleMethodSymbol]() {
           const self2 = this;
           super[assembleMethodSymbol]();
-          initControlReferences9.call(self2);
-          initEventHandler7.call(self2);
+          initControlReferences7.call(self2);
+          initEventHandler5.call(self2);
           let lazyLoadFlag = self2.getOption("features.lazyLoad", false);
           let remoteFilterFlag = getFilterMode.call(this) === FILTER_MODE_REMOTE;
           if (getFilterMode.call(this) === FILTER_MODE_REMOTE) {
@@ -25308,7 +25314,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           if (this.getOption("disabled") === true) {
             return;
           }
-          toggle2.call(this);
+          toggle.call(this);
         }
         /**
          * The Button.focus() method sets focus on the internal button element.
@@ -25355,11 +25361,11 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           super.connectedCallback();
           const document2 = getDocument();
           for (const [, type3] of Object.entries(["click", "touch"])) {
-            document2.addEventListener(type3, this[closeEventHandler3]);
+            document2.addEventListener(type3, this[closeEventHandler2]);
           }
           parseSlotsToOptions.call(this);
           attachResizeObserver3.call(this);
-          updatePopper2.call(this);
+          updatePopper.call(this);
           new Processing(() => {
             gatherState.call(this);
             focusFilter2.call(this);
@@ -25374,9 +25380,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           super.disconnectedCallback();
           const document2 = getDocument();
           for (const [, type3] of Object.entries(["click", "touch"])) {
-            document2.removeEventListener(type3, this[closeEventHandler3]);
+            document2.removeEventListener(type3, this[closeEventHandler2]);
           }
-          disconnectResizeObserver3.call(this);
+          disconnectResizeObserver2.call(this);
         }
         /**
          * Import Select Options from dataset
@@ -25480,15 +25486,15 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
   });
 
   // source/components/layout/popper.mjs
-  function initEventHandler8() {
-    this[closeEventHandler4] = (event) => {
+  function initEventHandler6() {
+    this[closeEventHandler3] = (event) => {
       const path = event.composedPath();
       for (const [, element] of Object.entries(path)) {
         if (element === this) {
           return;
         }
       }
-      hide6.call(this);
+      hide5.call(this);
     };
     let modes = null;
     const modeOption = this.getOption("mode");
@@ -25556,62 +25562,62 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
   }
   function attachResizeObserver4() {
-    this[resizeObserverSymbol5] = new ResizeObserver((entries) => {
-      if (this[timerCallbackSymbol5] instanceof DeadMansSwitch) {
+    this[resizeObserverSymbol4] = new ResizeObserver((entries) => {
+      if (this[timerCallbackSymbol4] instanceof DeadMansSwitch) {
         try {
-          this[timerCallbackSymbol5].touch();
+          this[timerCallbackSymbol4].touch();
           return;
         } catch (e) {
-          delete this[timerCallbackSymbol5];
+          delete this[timerCallbackSymbol4];
         }
       }
-      this[timerCallbackSymbol5] = new DeadMansSwitch(200, () => {
-        updatePopper3.call(this);
+      this[timerCallbackSymbol4] = new DeadMansSwitch(200, () => {
+        updatePopper2.call(this);
       });
     });
-    this[resizeObserverSymbol5].observe(this.parentElement);
+    this[resizeObserverSymbol4].observe(this.parentElement);
   }
-  function disconnectResizeObserver4() {
-    if (this[resizeObserverSymbol5] instanceof ResizeObserver) {
-      this[resizeObserverSymbol5].disconnect();
+  function disconnectResizeObserver3() {
+    if (this[resizeObserverSymbol4] instanceof ResizeObserver) {
+      this[resizeObserverSymbol4].disconnect();
     }
   }
-  function hide6() {
+  function hide5() {
     const self2 = this;
     fireCustomEvent(self2, "monster-popper-hide", {
       self: self2
     });
-    self2[popperElementSymbol4].style.display = "none";
-    removeAttributeToken(self2[controlElementSymbol6], "class", "open");
+    self2[popperElementSymbol3].style.display = "none";
+    removeAttributeToken(self2[controlElementSymbol5], "class", "open");
     setTimeout(() => {
       fireCustomEvent(self2, "monster-popper-hidden", {
         self: self2
       });
     }, 0);
   }
-  function show5() {
+  function show4() {
     const self2 = this;
     if (self2.getOption("disabled", false) === true) {
       return;
     }
-    if (self2[popperElementSymbol4].style.display === STYLE_DISPLAY_MODE_BLOCK) {
+    if (self2[popperElementSymbol3].style.display === STYLE_DISPLAY_MODE_BLOCK) {
       return;
     }
     fireCustomEvent(self2, "monster-popper-open", {
       self: self2
     });
-    self2[popperElementSymbol4].style.visibility = "hidden";
-    self2[popperElementSymbol4].style.display = STYLE_DISPLAY_MODE_BLOCK;
-    addAttributeToken(self2[controlElementSymbol6], "class", "open");
-    updatePopper3.call(self2);
+    self2[popperElementSymbol3].style.visibility = "hidden";
+    self2[popperElementSymbol3].style.display = STYLE_DISPLAY_MODE_BLOCK;
+    addAttributeToken(self2[controlElementSymbol5], "class", "open");
+    updatePopper2.call(self2);
     setTimeout(() => {
       fireCustomEvent(self2, "monster-popper-opened", {
         self: self2
       });
     }, 0);
   }
-  function updatePopper3() {
-    if (this[popperElementSymbol4].style.display !== STYLE_DISPLAY_MODE_BLOCK) {
+  function updatePopper2() {
+    if (this[popperElementSymbol3].style.display !== STYLE_DISPLAY_MODE_BLOCK) {
       return;
     }
     if (this.getOption("disabled", false) === true) {
@@ -25619,19 +25625,19 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
     positionPopper.call(
       this,
-      this[controlElementSymbol6],
-      this[popperElementSymbol4],
+      this[controlElementSymbol5],
+      this[popperElementSymbol3],
       this.getOption("popper", {})
     );
   }
-  function initControlReferences10() {
-    this[controlElementSymbol6] = this.shadowRoot.querySelector(
+  function initControlReferences8() {
+    this[controlElementSymbol5] = this.shadowRoot.querySelector(
       `[${ATTRIBUTE_ROLE}=control]`
     );
     this[buttonElementSymbol2] = this.shadowRoot.querySelector(
       `[${ATTRIBUTE_ROLE}=button]`
     );
-    this[popperElementSymbol4] = this.shadowRoot.querySelector(
+    this[popperElementSymbol3] = this.shadowRoot.querySelector(
       `[${ATTRIBUTE_ROLE}=popper]`
     );
     this[arrowElementSymbol] = this.shadowRoot.querySelector(
@@ -25639,7 +25645,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     );
     return this;
   }
-  function getTemplate12() {
+  function getTemplate10() {
     return `
         <div data-monster-role="control" part="control">
             <slot name="button" data-monster-role="button"></slot>
@@ -25652,7 +25658,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         </div>
     `;
   }
-  var timerCallbackSymbol5, resizeObserverSymbol5, closeEventHandler4, controlElementSymbol6, buttonElementSymbol2, popperElementSymbol4, arrowElementSymbol, Popper;
+  var timerCallbackSymbol4, resizeObserverSymbol4, closeEventHandler3, controlElementSymbol5, buttonElementSymbol2, popperElementSymbol3, arrowElementSymbol, Popper;
   var init_popper4 = __esm({
     "source/components/layout/popper.mjs"() {
       init_constants();
@@ -25666,12 +25672,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_floating_ui();
       init_popper3();
       init_is();
-      timerCallbackSymbol5 = Symbol("timerCallback");
-      resizeObserverSymbol5 = Symbol("resizeObserver");
-      closeEventHandler4 = Symbol("closeEventHandler");
-      controlElementSymbol6 = Symbol("controlElement");
+      timerCallbackSymbol4 = Symbol("timerCallback");
+      resizeObserverSymbol4 = Symbol("resizeObserver");
+      closeEventHandler3 = Symbol("closeEventHandler");
+      controlElementSymbol5 = Symbol("controlElement");
       buttonElementSymbol2 = Symbol("buttonElement");
-      popperElementSymbol4 = Symbol("popperElement");
+      popperElementSymbol3 = Symbol("popperElement");
       arrowElementSymbol = Symbol("arrowElement");
       Popper = class extends CustomElement {
         /**
@@ -25700,7 +25706,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         get defaults() {
           return Object.assign({}, super.defaults, {
             templates: {
-              main: getTemplate12()
+              main: getTemplate10()
             },
             mode: "auto focus",
             content: "<slot></slot>",
@@ -25720,8 +25726,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          */
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
-          initControlReferences10.call(this);
-          initEventHandler8.call(this);
+          initControlReferences8.call(this);
+          initEventHandler6.call(this);
         }
         /**
          * This method returns the tag name of the element.
@@ -25748,9 +25754,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           super.connectedCallback();
           const document2 = getDocument();
           for (const [, type3] of Object.entries(["click", "touch"])) {
-            document2.addEventListener(type3, this[closeEventHandler4]);
+            document2.addEventListener(type3, this[closeEventHandler3]);
           }
-          updatePopper3.call(this);
+          updatePopper2.call(this);
           attachResizeObserver4.call(this);
         }
         /**
@@ -25761,9 +25767,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         disconnectedCallback() {
           super.disconnectedCallback();
           for (const [, type3] of Object.entries(["click", "touch"])) {
-            document.removeEventListener(type3, this[closeEventHandler4]);
+            document.removeEventListener(type3, this[closeEventHandler3]);
           }
-          disconnectResizeObserver4.call(this);
+          disconnectResizeObserver3.call(this);
         }
         /**
          * With this method you can show the popper.
@@ -25771,7 +25777,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @return {Popper}
          */
         showDialog() {
-          show5.call(this);
+          show4.call(this);
           return this;
         }
         /**
@@ -25780,7 +25786,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @return {Popper}
          */
         hideDialog() {
-          hide6.call(this);
+          hide5.call(this);
           return this;
         }
         /**
@@ -25789,7 +25795,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @return {Popper}
          */
         toggleDialog() {
-          if (this[popperElementSymbol4].style.display === STYLE_DISPLAY_MODE_BLOCK) {
+          if (this[popperElementSymbol3].style.display === STYLE_DISPLAY_MODE_BLOCK) {
             this.hideDialog();
           } else {
             this.showDialog();
@@ -25837,8 +25843,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
   });
 
   // source/components/form/popper-button.mjs
-  function initEventHandler9() {
-    this[closeEventHandler5] = (event) => {
+  function initEventHandler7() {
+    this[closeEventHandler4] = (event) => {
       const path = event.composedPath();
       for (const [, element] of Object.entries(path)) {
         if (element === this) {
@@ -25850,28 +25856,28 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return this;
   }
   function attachResizeObserver5() {
-    this[resizeObserverSymbol6] = new ResizeObserver(() => {
-      if (this[timerCallbackSymbol6] instanceof DeadMansSwitch) {
+    this[resizeObserverSymbol5] = new ResizeObserver(() => {
+      if (this[timerCallbackSymbol5] instanceof DeadMansSwitch) {
         try {
-          this[timerCallbackSymbol6].touch();
+          this[timerCallbackSymbol5].touch();
           return;
         } catch (e) {
-          delete this[timerCallbackSymbol6];
+          delete this[timerCallbackSymbol5];
         }
       }
-      this[timerCallbackSymbol6] = new DeadMansSwitch(200, () => {
-        updatePopper4.call(this);
+      this[timerCallbackSymbol5] = new DeadMansSwitch(200, () => {
+        updatePopper3.call(this);
       });
     });
-    this[resizeObserverSymbol6].observe(this.parentElement);
+    this[resizeObserverSymbol5].observe(this.parentElement);
   }
-  function disconnectResizeObserver5() {
-    if (this[resizeObserverSymbol6] instanceof ResizeObserver) {
-      this[resizeObserverSymbol6].disconnect();
+  function disconnectResizeObserver4() {
+    if (this[resizeObserverSymbol5] instanceof ResizeObserver) {
+      this[resizeObserverSymbol5].disconnect();
     }
   }
-  function updatePopper4() {
-    if (this[popperElementSymbol5].style.display !== STYLE_DISPLAY_MODE_BLOCK) {
+  function updatePopper3() {
+    if (this[popperElementSymbol4].style.display !== STYLE_DISPLAY_MODE_BLOCK) {
       return;
     }
     if (this.getOption("disabled", false) === true) {
@@ -25879,26 +25885,26 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
     positionPopper.call(
       this,
-      this[controlElementSymbol7],
-      this[popperElementSymbol5],
+      this[controlElementSymbol6],
+      this[popperElementSymbol4],
       this.getOption("popper", {})
     );
   }
-  function initControlReferences11() {
-    this[controlElementSymbol7] = this.shadowRoot.querySelector(
+  function initControlReferences9() {
+    this[controlElementSymbol6] = this.shadowRoot.querySelector(
       `[${ATTRIBUTE_ROLE}=control]`
     );
     this[buttonElementSymbol3] = this.shadowRoot.querySelector(
       `[${ATTRIBUTE_ROLE}=button]`
     );
-    this[popperElementSymbol5] = this.shadowRoot.querySelector(
+    this[popperElementSymbol4] = this.shadowRoot.querySelector(
       `[${ATTRIBUTE_ROLE}=popper]`
     );
     this[arrowElementSymbol2] = this.shadowRoot.querySelector(
       `[${ATTRIBUTE_ROLE}=arrow]`
     );
   }
-  function getTemplate13() {
+  function getTemplate11() {
     return `
         <div data-monster-role="control" part="control">
             <button data-monster-attributes="disabled path:disabled | if:true, class path:classes.button"
@@ -25914,7 +25920,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         </div>
     `;
   }
-  var timerCallbackSymbol6, resizeObserverSymbol6, closeEventHandler5, controlElementSymbol7, buttonElementSymbol3, popperElementSymbol5, arrowElementSymbol2, PopperButton;
+  var timerCallbackSymbol5, resizeObserverSymbol5, closeEventHandler4, controlElementSymbol6, buttonElementSymbol3, popperElementSymbol4, arrowElementSymbol2, PopperButton;
   var init_popper_button2 = __esm({
     "source/components/form/popper-button.mjs"() {
       init_constants();
@@ -25929,12 +25935,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_popper_button();
       init_floating_ui();
       init_button2();
-      timerCallbackSymbol6 = Symbol("timerCallback");
-      resizeObserverSymbol6 = Symbol("resizeObserver");
-      closeEventHandler5 = Symbol("closeEventHandler");
-      controlElementSymbol7 = Symbol("controlElement");
+      timerCallbackSymbol5 = Symbol("timerCallback");
+      resizeObserverSymbol5 = Symbol("resizeObserver");
+      closeEventHandler4 = Symbol("closeEventHandler");
+      controlElementSymbol6 = Symbol("controlElement");
       buttonElementSymbol3 = Symbol("buttonElement");
-      popperElementSymbol5 = Symbol("popperElement");
+      popperElementSymbol4 = Symbol("popperElement");
       arrowElementSymbol2 = Symbol("arrowElement");
       PopperButton = class extends Popper2 {
         /**
@@ -25964,7 +25970,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         get defaults() {
           return Object.assign({}, super.defaults, {
             templates: {
-              main: getTemplate13()
+              main: getTemplate11()
             },
             actions: {
               click: (e) => {
@@ -25987,8 +25993,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          */
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
-          initControlReferences11.call(this);
-          initEventHandler9.call(this);
+          initControlReferences9.call(this);
+          initEventHandler7.call(this);
           return this;
         }
         /**
@@ -26012,9 +26018,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           super.connectedCallback();
           const document2 = getDocument();
           for (const [, type3] of Object.entries(["click", "touch"])) {
-            document2.addEventListener(type3, this[closeEventHandler5]);
+            document2.addEventListener(type3, this[closeEventHandler4]);
           }
-          updatePopper4.call(this);
+          updatePopper3.call(this);
           attachResizeObserver5.call(this);
         }
         /**
@@ -26023,9 +26029,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         disconnectedCallback() {
           super.disconnectedCallback();
           for (const [, type3] of Object.entries(["click", "touch"])) {
-            document.removeEventListener(type3, this[closeEventHandler5]);
+            document.removeEventListener(type3, this[closeEventHandler4]);
           }
-          disconnectResizeObserver5.call(this);
+          disconnectResizeObserver4.call(this);
         }
         /**
          * The Button.click() method simulates a click on the internal button element.
@@ -26181,12 +26187,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         break;
     }
   }
-  function initControlReferences12() {
+  function initControlReferences10() {
     this[buttonElementSymbol4] = this.shadowRoot.querySelector(
       `[${ATTRIBUTE_ROLE}=button]`
     );
   }
-  function getTemplate14() {
+  function getTemplate12() {
     return `
         <div data-monster-role="control" part="control">
 
@@ -26276,7 +26282,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
               icon: void 0
             },
             templates: {
-              main: getTemplate14()
+              main: getTemplate12()
             },
             mode: "manual",
             labels: {
@@ -26299,7 +26305,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          */
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
-          initControlReferences12.call(this);
+          initControlReferences10.call(this);
           let modes = null;
           const modeOption = this.getOption("mode");
           if (typeof modeOption === "string") {
@@ -26516,7 +26522,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     });
     return this;
   }
-  function initControlReferences13() {
+  function initControlReferences11() {
     this[confirmButtonElementSymbol] = this.shadowRoot.querySelector(
       `[${ATTRIBUTE_ROLE}=confirm]`
     );
@@ -26524,7 +26530,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       `[${ATTRIBUTE_ROLE}=cancel]`
     );
   }
-  function getTemplate15() {
+  function getTemplate13() {
     return `
 
         <div data-monster-role="control" part="control">
@@ -26610,7 +26616,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         get defaults() {
           const obj = Object.assign({}, super.defaults, {
             templates: {
-              main: getTemplate15()
+              main: getTemplate13()
             },
             labels: {
               button: '<slot name="button"></slot>',
@@ -26640,7 +26646,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          */
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
-          initControlReferences13.call(this);
+          initControlReferences11.call(this);
           initEventhandler2.call(this);
         }
         /**
@@ -27076,7 +27082,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   });
 
   // source/components/datatable/dataset.mjs
-  function initEventHandler10() {
+  function initEventHandler8() {
     this[attributeObserverSymbol][ATTRIBUTE_DATATABLE_INDEX] = () => {
       const index = this.getAttribute(ATTRIBUTE_DATATABLE_INDEX);
       if (index) {
@@ -27121,7 +27127,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     const observer = new MutationObserver(callback);
     observer.observe(this, config2);
   }
-  function getTemplate16() {
+  function getTemplate14() {
     return `
         <div data-monster-role="control" part="control">
             <slot></slot>
@@ -27182,7 +27188,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         get defaults() {
           const obj = Object.assign({}, super.defaults, {
             templates: {
-              main: getTemplate16()
+              main: getTemplate14()
             },
             datasource: {
               selector: null
@@ -27286,7 +27292,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
          */
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
-          initEventHandler10.call(this);
+          initEventHandler8.call(this);
           if (!this[datasourceLinkedElementSymbol]) {
             const selector = this.getOption("datasource.selector");
             if (isString(selector)) {
@@ -27352,7 +27358,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   });
   function initDataSourceHandler() {
   }
-  function initEventHandler11() {
+  function initEventHandler9() {
     this[debounceBindSymbol] = {};
     if (this.getOption("features.writeBack") === true) {
       const events = this.getOption("writeBack.events");
@@ -27386,13 +27392,13 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     }
     return this;
   }
-  function initControlReferences14() {
+  function initControlReferences12() {
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
     return this;
   }
-  function getTemplate17() {
+  function getTemplate15() {
     return `
         <div data-monster-role="control" part="control">
             <form data-monster-attributes="disabled path:disabled | if:true, class path:classes.form"
@@ -27433,7 +27439,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         get defaults() {
           const obj = Object.assign({}, super.defaults, {
             templates: {
-              main: getTemplate17()
+              main: getTemplate15()
             },
             classes: {
               form: ""
@@ -27472,8 +27478,8 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
             this[datasourceLinkedElementSymbol] = new Datasource(this);
           }
           super[assembleMethodSymbol]();
-          initControlReferences14.call(this);
-          initEventHandler11.call(this);
+          initControlReferences12.call(this);
+          initEventHandler9.call(this);
           initDataSourceHandler.call(this);
         }
         /**
@@ -27983,7 +27989,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   function formatHierarchicalSelection(value) {
     return buildTreeLabels.call(this, value).join(this.getOption("formatter.separator", " / "));
   }
-  function initEventHandler12() {
+  function initEventHandler10() {
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -28060,7 +28066,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     }
     return options2;
   }
-  function getTemplate18() {
+  function getTemplate16() {
     return `
         <template id="options">
             <div data-monster-role="option"
@@ -28186,7 +28192,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
                 separator: " / "
               },
               templates: {
-                main: getTemplate18()
+                main: getTemplate16()
               }
             },
             initOptionsFromArguments5.call(this)
@@ -28259,7 +28265,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
          */
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
-          initEventHandler12.call(this);
+          initEventHandler10.call(this);
         }
       };
       openOptionEventHandler = Symbol("openOptionEventHandler");
@@ -28299,18 +28305,18 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     STATE_ON: () => STATE_ON,
     ToggleSwitch: () => ToggleSwitch
   });
-  function initControlReferences15() {
-    this[switchElementSymbol3] = this.shadowRoot.querySelector(
+  function initControlReferences13() {
+    this[switchElementSymbol2] = this.shadowRoot.querySelector(
       `[${ATTRIBUTE_ROLE}=switch]`
     );
   }
   function toggleClassOn() {
-    this[switchElementSymbol3].classList.remove(this.getOption("classes.off"));
-    this[switchElementSymbol3].classList.add(this.getOption("classes.on"));
+    this[switchElementSymbol2].classList.remove(this.getOption("classes.off"));
+    this[switchElementSymbol2].classList.add(this.getOption("classes.on"));
   }
   function toggleClassOff() {
-    this[switchElementSymbol3].classList.remove(this.getOption("classes.on"));
-    this[switchElementSymbol3].classList.add(this.getOption("classes.off"));
+    this[switchElementSymbol2].classList.remove(this.getOption("classes.on"));
+    this[switchElementSymbol2].classList.add(this.getOption("classes.off"));
   }
   function toggleClass() {
     if (this.getOption("value") === this.getOption("values.on")) {
@@ -28356,11 +28362,11 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       this.formDisabledCallback(false);
     }
   }
-  function initEventHandler13() {
+  function initEventHandler11() {
     const self2 = this;
     self2.addEventListener("keyup", function(event) {
       if (event.code === "Space") {
-        self2[switchElementSymbol3].click();
+        self2[switchElementSymbol2].click();
       }
     });
     self2.addEventListener("click", function(event) {
@@ -28368,7 +28374,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     });
     return this;
   }
-  function getTemplate19() {
+  function getTemplate17() {
     return `
         <div data-monster-role="control" part="control" tabindex="0">
             <div class="switch" data-monster-role="switch"
@@ -28379,7 +28385,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
             </div>
         </div>`;
   }
-  var switchElementSymbol3, STATE_ON, STATE_OFF, ToggleSwitch;
+  var switchElementSymbol2, STATE_ON, STATE_OFF, ToggleSwitch;
   var init_toggle_switch2 = __esm({
     "source/components/form/toggle-switch.mjs"() {
       init_constants();
@@ -28392,7 +28398,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       init_is();
       init_toggle_switch();
       init_constants2();
-      switchElementSymbol3 = Symbol("switchElement");
+      switchElementSymbol2 = Symbol("switchElement");
       STATE_ON = "on";
       STATE_OFF = "off";
       ToggleSwitch = class extends CustomControl {
@@ -28436,7 +28442,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
               toggleSwitchOff: "\u2716"
             },
             templates: {
-              main: getTemplate19()
+              main: getTemplate17()
             },
             actions: {
               on: () => {
@@ -28454,8 +28460,8 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         [assembleMethodSymbol]() {
           const self2 = this;
           super[assembleMethodSymbol]();
-          initControlReferences15.call(this);
-          initEventHandler13.call(this);
+          initControlReferences13.call(this);
+          initEventHandler11.call(this);
           if (self2.getOption("value") === null) {
             self2.setOption("value", self2.getOption("values.off"));
           }
@@ -28694,7 +28700,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     }
     return this;
   }
-  function getTemplate20() {
+  function getTemplate18() {
     return `
         <slot name="default"></slot>
     `;
@@ -28743,7 +28749,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
             super.defaults,
             {
               templates: {
-                main: getTemplate20()
+                main: getTemplate18()
               },
               url: void 0,
               reload: void 0,
@@ -30043,7 +30049,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       };
     });
   }
-  function getTemplate21() {
+  function getTemplate19() {
     return `
         <div data-monster-role="control" part="control">
             <slot></slot>
@@ -30092,7 +30098,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         get defaults() {
           return Object.assign({}, super.defaults, {
             templates: {
-              main: getTemplate21()
+              main: getTemplate19()
             },
             indexDB: {
               name: "monster",
@@ -30169,7 +30175,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   __export(host_exports, {
     Host: () => Host
   });
-  function initControlReferences16() {
+  function initControlReferences14() {
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -30185,10 +30191,10 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     }
     this[promisesSymbol].push(Embed.assignTranslationsToElement());
   }
-  function initEventHandler14() {
+  function initEventHandler12() {
     return this;
   }
-  function getTemplate22() {
+  function getTemplate20() {
     return `
         <template id="host-container">
             <div data-monster-replace="path:host-container.content"
@@ -30242,7 +30248,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         get defaults() {
           return Object.assign({}, super.defaults, {
             templates: {
-              main: getTemplate22()
+              main: getTemplate20()
             }
           });
         }
@@ -30328,8 +30334,8 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           this[promisesSymbol] = [];
           this[promisesSymbol].push(windowReady);
           super[assembleMethodSymbol]();
-          initControlReferences16.call(this);
-          initEventHandler14.call(this);
+          initControlReferences14.call(this);
+          initEventHandler12.call(this);
           initTranslations.call(this);
           this[focusManagerSymbol] = new FocusManager(this);
           this[resourceManagerSymbol] = new ResourceManager(this);
@@ -30488,7 +30494,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   __export(overlay_exports, {
     Overlay: () => Overlay
   });
-  function initControlReferences17() {
+  function initControlReferences15() {
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -30500,7 +30506,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       "[data-monster-role=overlay-open]"
     );
   }
-  function initEventHandler15() {
+  function initEventHandler13() {
     this[closeEventHandlerSymbol] = (event) => {
       this.close();
     };
@@ -30531,7 +30537,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     }
     return this;
   }
-  function getTemplate23() {
+  function getTemplate21() {
     return `
         <template id="host-overlay">
             <div data-monster-replace="path:host-overlay.content"
@@ -30592,7 +30598,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         get defaults() {
           return Object.assign({}, super.defaults, {
             templates: {
-              main: getTemplate23()
+              main: getTemplate21()
             },
             overlay: [
               {
@@ -30628,8 +30634,8 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
          */
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
-          initControlReferences17.call(this);
-          initEventHandler15.call(this);
+          initControlReferences15.call(this);
+          initEventHandler13.call(this);
         }
         /**
          *
@@ -30802,34 +30808,34 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       height
     });
   }
-  function updateResizeObserverObservation2() {
-    this[resizeObserverSymbol7].disconnect();
+  function updateResizeObserverObservation() {
+    this[resizeObserverSymbol6].disconnect();
     const slottedNodes = getSlottedElements.call(this);
     slottedNodes.forEach((node) => {
-      this[resizeObserverSymbol7].observe(node);
+      this[resizeObserverSymbol6].observe(node);
     });
     if (this[detailsContainerElementSymbol]) {
-      this[resizeObserverSymbol7].observe(this[detailsContainerElementSymbol]);
+      this[resizeObserverSymbol6].observe(this[detailsContainerElementSymbol]);
     }
     this.adjustHeight();
   }
-  function initEventHandler16() {
+  function initEventHandler14() {
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
-    initSlotChangedHandler2.call(this);
+    initSlotChangedHandler.call(this);
     return this;
   }
-  function initSlotChangedHandler2() {
+  function initSlotChangedHandler() {
     this[detailsSlotElementSymbol].addEventListener("slotchange", () => {
-      updateResizeObserverObservation2.call(this);
+      updateResizeObserverObservation.call(this);
     });
   }
-  function initControlReferences18() {
+  function initControlReferences16() {
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
-    this[controlElementSymbol8] = this.shadowRoot.querySelector(
+    this[controlElementSymbol7] = this.shadowRoot.querySelector(
       "[data-monster-role=control]"
     );
     this[detailsElementSymbol] = this.shadowRoot.querySelector(
@@ -30886,16 +30892,16 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     });
   }
   function initResizeObserver() {
-    this[resizeObserverSymbol7] = new ResizeObserver((entries) => {
-      if (this[timerCallbackSymbol7] instanceof DeadMansSwitch) {
+    this[resizeObserverSymbol6] = new ResizeObserver((entries) => {
+      if (this[timerCallbackSymbol6] instanceof DeadMansSwitch) {
         try {
-          this[timerCallbackSymbol7].touch();
+          this[timerCallbackSymbol6].touch();
           return;
         } catch (e) {
-          delete this[timerCallbackSymbol7];
+          delete this[timerCallbackSymbol6];
         }
       }
-      this[timerCallbackSymbol7] = new DeadMansSwitch(200, () => {
+      this[timerCallbackSymbol6] = new DeadMansSwitch(200, () => {
         checkAndRearrangeContent.call(this);
       });
     });
@@ -30903,7 +30909,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   function checkAndRearrangeContent() {
     this.adjustHeight();
   }
-  function getTemplate24() {
+  function getTemplate22() {
     return `
         <div data-monster-role="control" part="control" class="overflow-hidden">
             <div data-monster-role="detail">
@@ -30915,7 +30921,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
             </div>
         </div>`;
   }
-  var timerCallbackSymbol7, detailsElementSymbol, controlElementSymbol8, resizeObserverSymbol7, detailsSlotElementSymbol, detailsContainerElementSymbol, detailsDecoElementSymbol, nameSymbol, Collapse;
+  var timerCallbackSymbol6, detailsElementSymbol, controlElementSymbol7, resizeObserverSymbol6, detailsSlotElementSymbol, detailsContainerElementSymbol, detailsDecoElementSymbol, nameSymbol, Collapse;
   var init_collapse2 = __esm({
     "source/components/layout/collapse.mjs"() {
       init_customelement();
@@ -30928,10 +30934,10 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       init_util3();
       init_deadmansswitch();
       init_constants();
-      timerCallbackSymbol7 = Symbol("timerCallback");
+      timerCallbackSymbol6 = Symbol("timerCallback");
       detailsElementSymbol = Symbol("detailsElement");
-      controlElementSymbol8 = Symbol("controlElement");
-      resizeObserverSymbol7 = Symbol("resizeObserver");
+      controlElementSymbol7 = Symbol("controlElement");
+      resizeObserverSymbol6 = Symbol("resizeObserver");
       detailsSlotElementSymbol = Symbol("detailsSlotElement");
       detailsContainerElementSymbol = Symbol("detailsContainerElement");
       detailsDecoElementSymbol = Symbol("detailsDecoElement");
@@ -30970,7 +30976,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         get defaults() {
           return Object.assign({}, super.defaults, {
             templates: {
-              main: getTemplate24()
+              main: getTemplate22()
             },
             classes: {
               container: "padding"
@@ -30989,10 +30995,10 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
          */
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
-          initControlReferences18.call(this);
+          initControlReferences16.call(this);
           initStateFromHostConfig.call(this);
           initResizeObserver.call(this);
-          initEventHandler16.call(this);
+          initEventHandler14.call(this);
           if (this.getOption("openByDefault")) {
             this.open();
           }
@@ -31002,7 +31008,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
          */
         connectedCallback() {
           super.connectedCallback();
-          updateResizeObserverObservation2.call(this);
+          updateResizeObserverObservation.call(this);
         }
         /**
          * @return {void}
@@ -31064,7 +31070,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
               updateStateConfig.call(this);
               fireCustomEvent(this, "monster-" + this[nameSymbol] + "-open", {});
               setTimeout(() => {
-                this[controlElementSymbol8].classList.remove("overflow-hidden");
+                this[controlElementSymbol7].classList.remove("overflow-hidden");
               }, 500);
             }, 0);
           }, 0);
@@ -31081,7 +31087,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
             return this;
           }
           fireCustomEvent(this, "monster-" + this[nameSymbol] + "-before-close", {});
-          this[controlElementSymbol8].classList.add("overflow-hidden");
+          this[controlElementSymbol7].classList.add("overflow-hidden");
           setTimeout(() => {
             this[detailsElementSymbol].classList.remove("active");
             setTimeout(() => {
@@ -31118,7 +31124,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   });
 
   // source/components/layout/details.mjs
-  function initControlReferences19() {
+  function initControlReferences17() {
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -31126,7 +31132,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       "[data-monster-role=button]"
     );
   }
-  function initEventHandler17() {
+  function initEventHandler15() {
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -31164,7 +31170,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     this.setOption("labels.button", label);
     return label;
   }
-  function getTemplate25() {
+  function getTemplate23() {
     return `
         <div data-monster-role="control" part="control" class="overflow-hidden">
             <div data-monster-role="summary" part="summary">
@@ -31223,7 +31229,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         get defaults() {
           return Object.assign({}, super.defaults, {
             templates: {
-              main: getTemplate25()
+              main: getTemplate23()
             },
             labels: {
               button: "Details"
@@ -31236,8 +31242,8 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
           initButtonLabel.call(this);
-          initControlReferences19.call(this);
-          initEventHandler17.call(this);
+          initControlReferences17.call(this);
+          initEventHandler15.call(this);
         }
         /**
          * @return {void}
@@ -35452,1201 +35458,198 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
             } catch (e) {
               console.error("Error setting key", key, e);
             }
-          });
-          Promise.resolve().then(() => __toESM(require_lib(), 1)).then(({ default: Storage2 }) => {
-            g.localStorage = new Storage2(null, { strict: true });
-            g.sessionStorage = new Storage2(null, { strict: true });
-            window2["localStorage"] = g.localStorage;
-            window2["sessionStorage"] = g.sessionStorage;
-            resolve(g);
-          }).catch((e) => {
-            console.error("Error loading dom-storage", e);
-            reject(e);
-          });
-        })
-      );
-    });
-  }
-
-  // test/cases/components/layout/tabs.mjs
-  var expect2 = expect;
-  use(chaiDom);
-  var global2 = getGlobal();
-  var html1 = `
-    <monster-tabs id="mytabs">
-        <div data-monster-button-label="TAB1">
-            <div>
-                Das ist tab 1
-            </div>
-
-        </div>
-        <div data-monster-button-label="TAB2">
-            Das ist tab 2
-        </div>
-        <div>
-            Das ist tab 3 ohne button
-        </div>
-        <div></div>
-    </monster-tabs>
-`;
-  var Tabs2;
-  describe("Tabs", function() {
-    before(function(done) {
-      initJSDOM().then(() => {
-        Promise.resolve().then(() => (init_dist(), dist_exports)).catch((e) => done(e));
-        let promises = [];
-        if (!global2["crypto"]) {
-          promises.push(Promise.resolve().then(() => (init_webcrypto_es(), webcrypto_es_exports)).then((m) => {
-            const Crypto3 = m["Crypto"];
-            global2["crypto"] = new Crypto3();
-          }));
-        }
-        promises.push(Promise.resolve().then(() => (init_tabs2(), tabs_exports)).then((m) => {
-          Tabs2 = m["Tabs"];
-        }));
-        Promise.all(promises).then(() => {
-          done();
-        }).catch((e) => done(e));
-      });
-    });
-    describe("document.createElement()", function() {
-      afterEach(() => {
-        let mocks = document.getElementById("mocks");
-        mocks.innerHTML = "";
-      });
-      it("should have buttons and tabs", function(done) {
-        let mocks = document.getElementById("mocks");
-        mocks.innerHTML = html1;
-        setTimeout(() => {
-          try {
-            const tabs = document.getElementById("mytabs");
-            expect2(tabs).is.instanceof(Tabs2);
-            setTimeout(() => {
-              let nav = tabs.shadowRoot.querySelector("nav");
-              const buttons = tabs.shadowRoot.querySelectorAll("button[part=button]");
-              expect2(buttons[0]).is.instanceof(HTMLButtonElement);
-              expect2(nav.hasChildNodes()).to.be.true;
-              expect2(buttons.length).to.be.equal(4);
-              done();
-            }, 100);
-          } catch (e) {
-            return done(e);
-          }
-        }, 0);
-      });
-    });
-  });
-
-  // test/cases/components/layout/slit-panel.mjs
-  init_global();
-  var expect3 = expect;
-  use(chaiDom);
-  var global3 = getGlobal();
-  var html12 = `
-    <monster-split-panel id="my-split-panel">
-       
-    </monster-split-panel>
-`;
-  var SplitScreen;
-  describe("SplitScreen", function() {
-    before(function(done) {
-      initJSDOM().then(() => {
-        Promise.resolve().then(() => (init_dist(), dist_exports)).catch((e) => done(e));
-        let promises = [];
-        if (!global3["crypto"]) {
-          promises.push(Promise.resolve().then(() => (init_webcrypto_es(), webcrypto_es_exports)).then((m) => {
-            const Crypto3 = m["Crypto"];
-            global3["crypto"] = new Crypto3();
-          }));
-        }
-        promises.push(Promise.resolve().then(() => (init_split_panel2(), split_panel_exports)).then((m) => {
-          SplitScreen = m["SplitPanel"];
-        }));
-        Promise.all(promises).then(() => {
-          done();
-        }).catch((e) => done(e));
-      });
-    });
-    describe("document.createElement()", function() {
-      afterEach(() => {
-        let mocks = document.getElementById("mocks");
-        mocks.innerHTML = "";
-      });
-      it("should have buttons and SplitScreen", function(done) {
-        let mocks = document.getElementById("mocks");
-        mocks.innerHTML = html12;
-        setTimeout(() => {
-          try {
-            const SplitScreen3 = document.getElementById("my-split-panel");
-            expect3(SplitScreen3).is.instanceof(HTMLElement);
-            setTimeout(() => {
-              let div = SplitScreen3.shadowRoot.querySelector("div");
-              expect3(div.hasChildNodes()).to.be.true;
-              done();
-            }, 100);
-          } catch (e) {
-            return done(e);
-          }
-        }, 0);
-      });
-    });
-  });
-
-  // test/cases/components/layout/panel.mjs
-  init_global();
-  var expect4 = expect;
-  use(chaiDom);
-  var global4 = getGlobal();
-  var html13 = `
-    <monster-panel id="my-panel">
-       
-    </monster-panel>
-`;
-  var SplitScreen2;
-  describe("SplitScreen", function() {
-    before(function(done) {
-      initJSDOM().then(() => {
-        Promise.resolve().then(() => (init_dist(), dist_exports)).catch((e) => done(e));
-        let promises = [];
-        if (!global4["crypto"]) {
-          promises.push(Promise.resolve().then(() => (init_webcrypto_es(), webcrypto_es_exports)).then((m) => {
-            const Crypto3 = m["Crypto"];
-            global4["crypto"] = new Crypto3();
-          }));
-        }
-        promises.push(Promise.resolve().then(() => (init_panel2(), panel_exports)).then((m) => {
-          SplitScreen2 = m["Panel"];
-        }));
-        Promise.all(promises).then(() => {
-          done();
-        }).catch((e) => done(e));
-      });
-    });
-    describe("document.createElement()", function() {
-      afterEach(() => {
-        let mocks = document.getElementById("mocks");
-        mocks.innerHTML = "";
-      });
-      it("should have buttons and SplitScreen", function(done) {
-        let mocks = document.getElementById("mocks");
-        mocks.innerHTML = html13;
-        setTimeout(() => {
-          try {
-            const SplitScreen3 = document.getElementById("my-panel");
-            expect4(SplitScreen3).is.instanceof(HTMLElement);
-            setTimeout(() => {
-              let div = SplitScreen3.shadowRoot.querySelector("div");
-              expect4(div.hasChildNodes()).to.be.true;
-              done();
-            }, 100);
-          } catch (e) {
-            return done(e);
-          }
-        }, 0);
-      });
-    });
-  });
-
-  // source/components/content/editor/plugin/text.mjs
-  init_constants();
-  init_attributes();
-  init_constants2();
-  init_customelement();
-
-  // source/components/content/editor/plugin/stylesheet/text.mjs
-  init_attributes();
-  init_constants2();
-  var TextStyleSheet = new CSSStyleSheet();
-  try {
-    TextStyleSheet.insertRule(`
-@layer text { 
-[data-monster-role=contenteditable]:focus,[data-monster-role=contenteditable]:hover{outline:var(--monster-outline-width) solid var(--monster-color-primary-2);outline-offset:16px}[data-monster-role=contenteditable]:focus-visible{outline:var(--monster-outline-width) solid var(--monster-color-primary-2);outline-offset:16px}[data-monster-role=toolbar]{display:none;left:0;position:absolute;top:0}:focus-visible{outline:none} 
-}`, 0);
-  } catch (e) {
-    addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
-  }
-
-  // source/components/content/editor/plugin.mjs
-  init_constants();
-  init_customelement();
-  init_customelement();
-  var editorElementSymbol = Symbol("editorElement");
-  var rangeSymbol = Symbol("range");
-  var Plugin = class extends CustomElement {
-    /**
-     * This method is called by the `instanceof` operator.
-     * @returns {symbol}
-     */
-    static get [instanceSymbol]() {
-      return Symbol.for(
-        "@schukai/monster/components/content/editor/plugin@@instance"
-      );
-    }
-    /**
-     *
-     * @return {Components.Content.Editor
-     */
-    [assembleMethodSymbol]() {
-      super[assembleMethodSymbol]();
-      this.setAttribute("data-monster-role", "plugin");
-      return this;
-    }
-    /**
-     * To set the options via the HTML Tag, the attribute `data-monster-options` must be used.
-     * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
-     *
-     * The individual configuration values can be found in the table.
-     *
-     * @property {Object} templates Template definitions
-     * @property {string} templates.main Main template
-     * @property {Object} labels Label definitions
-     * @property {Object} actions Callbacks
-     * @property {string} actions.click="throw Error" Callback when clicked
-     * @property {Object} features Features
-     * @property {Object} classes CSS classes
-     * @property {boolean} disabled=false Disabled state
-     */
-    get defaults() {
-      return Object.assign({}, super.defaults, {
-        range: null
-        // templates: {
-        // 	main: getTemplate(),
-        // },
-        // labels: {
-        // },
-        // classes: {
-        // },
-        // disabled: false,
-        // features: {
-        // },
-        // actions: {
-        // 	click: () => {
-        // 		throw new Error("the click action is not defined");
-        // 	},
-        // }
-      });
-    }
-    /**
-     * @param {Range} range
-     * @returns {Plugin}
-     */
-    setRange(range) {
-      this[rangeSymbol] = range;
-      return this;
-    }
-    /**
-     * @returns {Plugin}
-     */
-    resetRange() {
-      this[rangeSymbol] = null;
-      return this;
-    }
-    /**
-     * @returns {Range|null}
-     */
-    getRange() {
-      return this[rangeSymbol];
-    }
-    /**
-     * @return {string}
-     */
-    static getTag() {
-      throw new Error("Not implemented");
-    }
-    /**
-     * @return {CSSStyleSheet[]}
-     */
-    static getCSSStyleSheet() {
-      return [];
-    }
-  };
-
-  // source/components/content/editor/plugin/text.mjs
-  init_button2();
-
-  // source/components/form/button-bar.mjs
-  init_constants();
-  init_pathfinder();
-  init_attributes();
-  init_constants2();
-  init_customelement();
-  init_customelement();
-  init_events();
-  init_util();
-  init_global();
-  init_id();
-  init_deadmansswitch();
-  init_processing();
-  init_constants3();
-
-  // source/components/form/stylesheet/button-bar.mjs
-  init_attributes();
-  init_constants2();
-  var ButtonBarStyleSheet = new CSSStyleSheet();
-  try {
-    ButtonBarStyleSheet.insertRule(
-      `
-@layer buttonbar { 
-.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}[data-monster-role=control]{box-sizing:border-box;outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:host{box-sizing:border-box;display:block}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin:4rem 0 1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin:4rem 0 1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin:4rem 0 1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin:4rem 0 1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin:4rem 0 1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin:4rem 0 1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-feature-settings:"tnum";font-weight:700;letter-spacing:.1em;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}.monospace{font-family:var(--monster-font-family-monospace)}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}div[data-monster-role=control]{height:100%;position:relative}div[data-monster-role=control] [data-monster-role=button-bar]{display:flex;flex-direction:row}:is(div[data-monster-role=control] [data-monster-role=button-bar]) :not(slot[name=button]){display:flex}:is(div[data-monster-role=control] [data-monster-role=button-bar]) [data-monster-role=popper-nav]{align-items:stretch;display:flex}:is(div[data-monster-role=control] [data-monster-role=button-bar]) [data-monster-role=switch]{display:flex}.hidden:is(:is(div[data-monster-role=control] [data-monster-role=button-bar]) [data-monster-role=switch]){display:none}:is(div[data-monster-role=control] [data-monster-role=button-bar]) ::slotted(:not(:last-child)){margin-right:calc(var(--monster-border-width)*-1)}div[data-monster-role=control] slot[name=popper]{align-content:center;align-items:center;display:flex;flex-direction:column;flex-wrap:nowrap;gap:.4rem;justify-content:space-between} 
-}`,
-      0
-    );
-  } catch (e) {
-    addAttributeToken(
-      document.getRootNode().querySelector("html"),
-      ATTRIBUTE_ERRORMESSAGE,
-      e + ""
-    );
-  }
-
-  // source/components/form/button-bar.mjs
-  init_floating_ui();
-
-  // source/dom/dimension.mjs
-  init_util();
-  init_validate();
-  var CURRENT_DEVICE_DPI = function() {
-    let i = 0;
-    for (i = 56; i < 2e3; i++) {
-      if (getWindow2().matchMedia(`(max-resolution: ${i}dpi)`).matches === true) {
-        return i;
-      }
-    }
-    return i;
-  };
-  function getDeviceDPI() {
-    if (typeof CURRENT_DEVICE_DPI === "function") {
-      CURRENT_DEVICE_DPI = CURRENT_DEVICE_DPI();
-    }
-    return getWindow2().devicePixelRatio * CURRENT_DEVICE_DPI;
-  }
-  function convertToPixels(value, parentElement = document.documentElement, fontSizeElement = document.documentElement) {
-    validateString(value);
-    const regex = /^(-?[\d.]+)(.*)$/;
-    const matchResult = value.match(regex);
-    if (!matchResult) {
-      throw new Error(`Invalid value format: ${value}`);
-    }
-    const [, num, unit] = matchResult;
-    const number = parseFloat(num);
-    const dpi = getDeviceDPI();
-    if (unit === "px") {
-      return number;
-    } else if (unit === "em") {
-      const fontSize = parseFloat(
-        window.getComputedStyle(fontSizeElement).fontSize
-      );
-      return number * fontSize;
-    } else if (unit === "rem") {
-      const rootFontSize = parseFloat(
-        window.getComputedStyle(parentElement).fontSize
-      );
-      return number * rootFontSize;
-    } else if (unit === "%") {
-      const parentWidth = parseFloat(
-        window.getComputedStyle(parentElement).width
-      );
-      return number * parentWidth / 100;
-    } else if (unit === "in") {
-      return number * dpi;
-    } else if (unit === "cm") {
-      return number * dpi / 2.54;
-    } else if (unit === "mm") {
-      return number * dpi / 25.4;
-    } else if (unit === "pt") {
-      return number * dpi / 72;
-    } else if (unit === "pc") {
-      return number * dpi / 6;
-    } else {
-      throw new Error(`Unsupported unit: ${unit}`);
-    }
-  }
-
-  // source/components/form/button-bar.mjs
-  var timerCallbackSymbol3 = Symbol("timerCallback");
-  var resizeObserverSymbol3 = Symbol("windowResizeObserver");
-  var dimensionsSymbol2 = Symbol("dimensions");
-  var controlElementSymbol4 = Symbol("controlElement");
-  var buttonBarSlotElementSymbol = Symbol("buttonBarSlotElement");
-  var popperSlotElementSymbol = Symbol("popperSlotElement");
-  var buttonBarElementSymbol = Symbol("buttonBarElement");
-  var popperElementSymbol2 = Symbol("popperElement");
-  var closeEventHandler2 = Symbol("closeEventHandler");
-  var popperSwitchEventHandler2 = Symbol("popperSwitchEventHandler");
-  var popperNavElementSymbol2 = Symbol("popperNavElement");
-  var switchElementSymbol2 = Symbol("switchElement");
-  var ATTRIBUTE_POPPER_POSITION = "data-monster-popper-position";
-  var ButtonBar = class extends CustomElement {
-    /**
-     * This method is called by the `instanceof` operator.
-     * @return {symbol}
-     */
-    static get [instanceSymbol]() {
-      return Symbol.for("@schukai/monster/components/form/button-bar@@instance");
-    }
-    /**
-     * To set the options via the HTML tag, the attribute `data-monster-options` must be used.
-     * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
-     *
-     * The individual configuration values can be found in the table.
-     *
-     * @property {Object} templates Template definitions
-     * @property {string} templates.main Main template
-     * @property {Object} labels
-     * @property {Object} popper FloatingUI popper configuration
-     * @property {string} popper.placement=top Placement of the popper
-     * @property {Array<string>} popper.middleware Middleware for the popper
-     */
-    get defaults() {
-      const obj = Object.assign({}, super.defaults, {
-        templates: {
-          main: getTemplate7()
-        },
-        labels: {},
-        popper: {
-          placement: "left",
-          middleware: ["autoPlacement", "shift", "offset:5"]
-        }
-      });
-      initDefaultsFromAttributes.call(this, obj);
-      return obj;
-    }
-    /**
-     * This method is called internal and should not be called directly.
-     */
-    [assembleMethodSymbol]() {
-      super[assembleMethodSymbol]();
-      this[dimensionsSymbol2] = new Pathfinder({ data: {} });
-      initControlReferences7.call(this);
-      initEventHandler5.call(this);
-      initButtonBar.call(this).then(() => {
-        initPopperSwitch2.call(this);
-      });
-    }
-    /**
-     * This method is called internal and should not be called directly.
-     *
-     * @return {CSSStyleSheet[]}
-     */
-    static getCSSStyleSheet() {
-      return [ButtonBarStyleSheet];
-    }
-    /**
-     * This method is called internal and should not be called directly.
-     *
-     * @return {string}
-     */
-    static getTag() {
-      return "monster-button-bar";
-    }
-    /**
-     * This method is called by the dom and should not be called directly.
-     *
-     * @return {void}
-     */
-    connectedCallback() {
-      super.connectedCallback();
-      const document2 = getDocument();
-      for (const [, type3] of Object.entries(["click", "touch"])) {
-        document2.addEventListener(type3, this[closeEventHandler2]);
-      }
-      setTimeout(() => {
-        updatePopper.call(this);
-        updateResizeObserverObservation.call(this);
-      }, 0);
-    }
-    /**
-     * This method determines which attributes are to be monitored by `attributeChangedCallback()`.
-     *
-     * @return {string[]}
-     */
-    static get observedAttributes() {
-      const attributes = super.observedAttributes;
-      attributes.push(ATTRIBUTE_POPPER_POSITION);
-      return attributes;
-    }
-    /**
-     * This method is called by the dom and should not be called directly.
-     *
-     * @return {void}
-     */
-    disconnectedCallback() {
-      super.disconnectedCallback();
-      const document2 = getDocument();
-      for (const [, type3] of Object.entries(["click", "touch"])) {
-        document2.removeEventListener(type3, this[closeEventHandler2]);
-      }
-      disconnectResizeObserver2.call(this);
-    }
-    /**
-     * Close the slotted dialog.
-     * @return {ButtonBar}
-     */
-    hideDialog() {
-      hide4.call(this);
-      return this;
-    }
-    /**
-     * Open the slotted dialog.
-     * @return {ButtonBar}
-     */
-    showDialog() {
-      show3.call(this);
-      return this;
-    }
-    /**
-     * Toggle the slotted dialog.
-     * @return {ButtonBar}
-     */
-    toggleDialog() {
-      toggle.call(this);
-      return this;
-    }
-  };
-  function initDefaultsFromAttributes(obj) {
-    if (this.hasAttribute(ATTRIBUTE_POPPER_POSITION)) {
-      obj.popper.placement = this.getAttribute(ATTRIBUTE_POPPER_POSITION);
-    }
-    return obj;
-  }
-  function initEventHandler5() {
-    const self2 = this;
-    self2[closeEventHandler2] = (event) => {
-      const path = event.composedPath();
-      for (const [, element] of Object.entries(path)) {
-        if (element === self2) {
-          return;
-        }
-      }
-      hide4.call(self2);
-    };
-    if (self2[buttonBarSlotElementSymbol]) {
-      self2[buttonBarSlotElementSymbol].addEventListener("slotchange", (event) => {
-        checkAndRearrangeButtons2.call(self2);
-      });
-    }
-    if (self2[popperElementSymbol2]) {
-      self2[popperElementSymbol2].addEventListener("slotchange", (event) => {
-        checkAndRearrangeButtons2.call(self2);
-      });
-    }
-    self2[attributeObserverSymbol][ATTRIBUTE_POPPER_POSITION] = function(value) {
-      self2.setOption("classes.button", value);
-    };
-    self2[resizeObserverSymbol3] = new ResizeObserver((entries) => {
-      if (self2[timerCallbackSymbol3] instanceof DeadMansSwitch) {
-        try {
-          self2[timerCallbackSymbol3].touch();
-          return;
-        } catch (e) {
-          if (e.message !== "has already run") {
-            throw e;
-          }
-          delete self2[timerCallbackSymbol3];
-        }
-      }
-      self2[timerCallbackSymbol3] = new DeadMansSwitch(200, () => {
-        requestAnimationFrame(() => {
-          updatePopper.call(self2);
-          self2[dimensionsSymbol2].setVia("data.calculated", false);
-          try {
-            checkAndRearrangeButtons2.call(self2);
-          } catch (error) {
-            addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, error?.message || "An error occurred while rearranging the buttons");
-          }
-        });
-      });
-    });
-    initSlotChangedHandler.call(self2);
-  }
-  function initSlotChangedHandler() {
-    this[buttonBarElementSymbol].addEventListener("slotchange", () => {
-      updateResizeObserverObservation.call(this);
-    });
-  }
-  function checkAndRearrangeButtons2() {
-    if (this[dimensionsSymbol2].getVia("data.calculated", false) !== true) {
-      calculateButtonBarDimensions.call(this);
-    }
-    rearrangeButtons2.call(this);
-  }
-  function rearrangeButtons2() {
-    let sum = this[switchElementSymbol2].offsetWidth;
-    const space = this[dimensionsSymbol2].getVia("data.space");
-    const buttonReferences = this[dimensionsSymbol2].getVia(
-      "data.buttonReferences"
-    );
-    for (const ref of buttonReferences) {
-      sum += this[dimensionsSymbol2].getVia(`data.button.${ref}`);
-      let elements = getSlottedElements.call(
-        this,
-        '[data-monster-reference="' + ref + '"]',
-        null
-      );
-      if (elements.size === 0) {
-        elements = getSlottedElements.call(
-          this,
-          '[data-monster-reference="' + ref + '"]',
-          "popper"
-        );
-      }
-      const nextValue = elements.values().next();
-      if (!nextValue) {
-        continue;
-      }
-      const element = nextValue?.value;
-      if (!(element instanceof HTMLElement)) {
-        continue;
-      }
-      if (sum > space) {
-        element.setAttribute("slot", "popper");
-      } else {
-        element.removeAttribute("slot");
-      }
-    }
-    const inVisibleButtons = getSlottedElements.call(this, ":scope", "popper");
-    if (inVisibleButtons.size > 0) {
-      this[switchElementSymbol2].classList.remove("hidden");
-    } else {
-      this[switchElementSymbol2].classList.add("hidden");
-      setTimeout(() => {
-        hide4.call(this);
-      }, 1);
-    }
-  }
-  function calcBoxWidth2(node) {
-    const dim = getGlobal()?.getComputedStyle(node);
-    if (dim === null) {
-      addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, "no computed style");
-      throw new Error("no computed style");
-    }
-    const bounding = node.getBoundingClientRect();
-    return convertToPixels(dim["border-left-width"]) + convertToPixels(dim["padding-left"]) + convertToPixels(dim["margin-left"]) + bounding["width"] + convertToPixels(dim["border-right-width"]) + convertToPixels(dim["margin-right"]) + convertToPixels(dim["padding-left"]);
-  }
-  function calculateButtonBarDimensions() {
-    const computedStyle = getComputedStyle(this.parentElement);
-    if (computedStyle === null) {
-      throw new Error("no computed style");
-    }
-    let width = this.parentElement.clientWidth;
-    if (computedStyle.getPropertyValue("box-sizing") !== "border-box") {
-      width = computedStyle.getPropertyValue("width");
-      let pixel = 0;
-      try {
-        pixel = convertToPixels(width);
-      } catch (e) {
-        addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e?.message || "An error occurred while calculating the dimensions");
-      }
-      this[dimensionsSymbol2].setVia("data.space", pixel);
-    } else {
-      let borderWidth = getComputedStyle(this).getPropertyValue(
-        "--monster-border-width"
-      );
-      if (borderWidth === null || borderWidth === "") {
-        borderWidth = "0px";
-      }
-      let borderWidthWithoutUnit = 0;
-      try {
-        borderWidthWithoutUnit = convertToPixels(borderWidth);
-      } catch (e) {
-        addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e?.message || "An error occurred while calculating the dimensions");
-      }
-      this[dimensionsSymbol2].setVia(
-        "data.space",
-        width - 2 * borderWidthWithoutUnit
-      );
-    }
-    this[dimensionsSymbol2].setVia("data.visible", !(width === 0));
-    const buttonReferences = [];
-    const visibleButtons = getSlottedElements.call(this, ":scope", null);
-    for (const [, button] of visibleButtons.entries()) {
-      if (!button.hasAttribute("data-monster-reference")) {
-        button.setAttribute("data-monster-reference", new ID("vb").toString());
-      }
-      const ref = button.getAttribute("data-monster-reference");
-      if (ref === null) continue;
-      buttonReferences.push(ref);
-      this[dimensionsSymbol2].setVia(
-        `data.button.${ref}`,
-        calcBoxWidth2.call(this, button)
-      );
-    }
-    const invisibleButtons = getSlottedElements.call(this, ":scope", "popper");
-    for (const [, button] of invisibleButtons.entries()) {
-      if (!button.hasAttribute("data-monster-reference")) {
-        button.setAttribute("data-monster-reference", new ID("ib").toString());
-      }
-      const ref = button.getAttribute("data-monster-reference");
-      if (ref === null) continue;
-      if (ref.indexOf("ib") !== 0) {
-        buttonReferences.push(ref);
-      }
-    }
-    this[dimensionsSymbol2].setVia("data.calculated", true);
-    this[dimensionsSymbol2].setVia("data.buttonReferences", buttonReferences);
-  }
-  function updateResizeObserverObservation() {
-    this[resizeObserverSymbol3].disconnect();
-    const slottedNodes = getSlottedElements.call(this);
-    slottedNodes.forEach((node) => {
-      this[resizeObserverSymbol3].observe(node);
-    });
-    if (this.parentElement === null) return;
-    this[resizeObserverSymbol3].observe(this.parentElement);
-  }
-  function disconnectResizeObserver2() {
-    if (this[resizeObserverSymbol3] instanceof ResizeObserver) {
-      this[resizeObserverSymbol3].disconnect();
-    }
-  }
-  function toggle() {
-    if (this[popperElementSymbol2].style.display === STYLE_DISPLAY_MODE_BLOCK) {
-      hide4.call(this);
-    } else {
-      show3.call(this);
-    }
-  }
-  function hide4() {
-    this[popperElementSymbol2].style.display = "none";
-    removeAttributeToken(this[controlElementSymbol4], "class", "open");
-  }
-  function show3() {
-    if (this.getOption("disabled", false) === true) {
-      return;
-    }
-    if (this[popperElementSymbol2].style.display === STYLE_DISPLAY_MODE_BLOCK) {
-      return;
-    }
-    this[popperElementSymbol2].style.visibility = "hidden";
-    this[popperElementSymbol2].style.display = STYLE_DISPLAY_MODE_BLOCK;
-    addAttributeToken(this[controlElementSymbol4], "class", "open");
-    updatePopper.call(this);
-  }
-  function updatePopper() {
-    if (this[popperElementSymbol2].style.display !== STYLE_DISPLAY_MODE_BLOCK) {
-      return;
-    }
-    if (this.getOption("disabled", false) === true) {
-      return;
-    }
-    positionPopper.call(
-      this,
-      this[switchElementSymbol2],
-      this[popperElementSymbol2],
-      this.getOption("popper", {})
-    );
-  }
-  function initControlReferences7() {
-    if (!this.shadowRoot) {
-      throw new Error("no shadow-root is defined");
-    }
-    this[controlElementSymbol4] = this.shadowRoot.querySelector(
-      `[${ATTRIBUTE_ROLE}=control]`
-    );
-    this[buttonBarElementSymbol] = this.shadowRoot.querySelector(
-      `[${ATTRIBUTE_ROLE}=button-bar]`
-    );
-    this[popperElementSymbol2] = this.shadowRoot.querySelector(
-      `[${ATTRIBUTE_ROLE}=popper]`
-    );
-    this[popperNavElementSymbol2] = this.shadowRoot.querySelector(
-      `[${ATTRIBUTE_ROLE}=popper-nav]`
-    );
-    this[switchElementSymbol2] = this.shadowRoot.querySelector(
-      `[${ATTRIBUTE_ROLE}=switch]`
-    );
-    this[buttonBarSlotElementSymbol] = null;
-    if (this[buttonBarElementSymbol])
-      this[buttonBarSlotElementSymbol] = this[buttonBarElementSymbol].querySelector(`slot`);
-    this[popperSlotElementSymbol] = null;
-    if (this[popperElementSymbol2])
-      this[popperSlotElementSymbol] = this[popperElementSymbol2].querySelector(`slot`);
-  }
-  function initButtonBar() {
-    if (!this.shadowRoot) {
-      throw new Error("no shadow-root is defined");
-    }
-    return new Processing(() => {
-      checkAndRearrangeButtons2.call(this);
-    }).run();
-  }
-  function initPopperSwitch2() {
-    this[popperSwitchEventHandler2] = (event) => {
-      const element = findTargetElementFromEvent(event, ATTRIBUTE_ROLE, "switch");
-      if (element instanceof HTMLButtonElement) {
-        toggle.call(this);
-      }
-    };
-    for (const type3 of ["click", "touch"]) {
-      this[switchElementSymbol2].addEventListener(
-        type3,
-        this[popperSwitchEventHandler2]
+          });
+          Promise.resolve().then(() => __toESM(require_lib(), 1)).then(({ default: Storage2 }) => {
+            g.localStorage = new Storage2(null, { strict: true });
+            g.sessionStorage = new Storage2(null, { strict: true });
+            window2["localStorage"] = g.localStorage;
+            window2["sessionStorage"] = g.sessionStorage;
+            resolve(g);
+          }).catch((e) => {
+            console.error("Error loading dom-storage", e);
+            reject(e);
+          });
+        })
       );
-    }
+    });
   }
-  function getTemplate7() {
-    return `
-        <div data-monster-role="control" part="control">
-            <div data-monster-role="button-bar">
-                <slot></slot>
-                <div part="popper-nav" data-monster-role="popper-nav"
-                     tabindex="-1">
-                    <button part="popper-switch" data-monster-role="switch"
-                            class="monster-button-outline-tertiary hidden">
-                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
-                             viewBox="0 0 16 16">
-                            <path d="M9.5 13a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm0-5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm0-5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z"/>
-                        </svg>
-                    </button>
-                </div>
-            </div>
-            <div data-monster-role="popper">
-                <slot name="popper"></slot>
+
+  // test/cases/components/layout/tabs.mjs
+  var expect2 = expect;
+  use(chaiDom);
+  var global2 = getGlobal();
+  var html1 = `
+    <monster-tabs id="mytabs">
+        <div data-monster-button-label="TAB1">
+            <div>
+                Das ist tab 1
             </div>
-        </div>`;
-  }
-  registerCustomElement(ButtonBar);
 
-  // source/components/content/editor/plugin/text.mjs
-  init_events();
-  init_floating_ui_dom();
-  var editorElementSymbol2 = Symbol("editorElement");
-  var contenteditableElementSymbol = Symbol("contenteditableElement");
-  var toolbarElementSymbol = Symbol("toolbarElement");
-  var Text = class extends Plugin {
-    /**
-     * This method is called by the `instanceof` operator.
-     * @returns {symbol}
-     */
-    static get [instanceSymbol]() {
-      return Symbol.for("@schukai/monster/components/content/editor/plugin/text@@instance");
-    }
-    /**
-     *
-     * @return {Components.Content.Editor
-     */
-    [assembleMethodSymbol]() {
-      super[assembleMethodSymbol]();
-      initControlReferences8.call(this);
-      initEventHandler6.call(this);
-      initContentEditable.call(this);
-      return this;
-    }
-    /**
-     * To set the options via the HTML Tag, the attribute `data-monster-options` must be used.
-     * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
-     *
-     * The individual configuration values can be found in the table.
-     *
-     * @property {Object} templates Template definitions
-     * @property {string} templates.main Main template
-     * @property {Object} labels Label definitions
-     * @property {Object} actions Callbacks
-     * @property {string} actions.click="throw Error" Callback when clicked
-     * @property {Object} features Features
-     * @property {Object} classes CSS classes
-     * @property {boolean} disabled=false Disabled state
-     */
-    get defaults() {
-      return Object.assign({}, super.defaults, {
-        templates: {
-          main: getTemplate8()
-        },
-        labels: {},
-        classes: {},
-        disabled: false,
-        features: {},
-        actions: {
-          click: () => {
-            throw new Error("the click action is not defined");
-          }
+        </div>
+        <div data-monster-button-label="TAB2">
+            Das ist tab 2
+        </div>
+        <div>
+            Das ist tab 3 ohne button
+        </div>
+        <div></div>
+    </monster-tabs>
+`;
+  var Tabs2;
+  describe("Tabs", function() {
+    before(function(done) {
+      initJSDOM().then(() => {
+        Promise.resolve().then(() => (init_dist(), dist_exports)).catch((e) => done(e));
+        let promises = [];
+        if (!global2["crypto"]) {
+          promises.push(Promise.resolve().then(() => (init_webcrypto_es(), webcrypto_es_exports)).then((m) => {
+            const Crypto3 = m["Crypto"];
+            global2["crypto"] = new Crypto3();
+          }));
         }
+        promises.push(Promise.resolve().then(() => (init_tabs2(), tabs_exports)).then((m) => {
+          Tabs2 = m["Tabs"];
+        }));
+        Promise.all(promises).then(() => {
+          done();
+        }).catch((e) => done(e));
       });
-    }
-    /**
-     * @param {Range} range
-     * @returns {Plugin}
-     */
-    setRange(range) {
-      super.setRange(range);
-      if (range.startContainer === range.endContainer && range.startOffset === range.endOffset) {
-        return this;
-      }
-      showToolbar.call(this);
-      return this;
-    }
-    /**
-     * @returns {Text}
-     */
-    resetRange() {
-      super.resetRange();
-      hideToolbar.call(this);
-      return this;
-    }
-    /**
-     * @return {string}
-     */
-    static getTag() {
-      return "monster-editor-plugin-text";
-    }
-    /**
-     * @return {CSSStyleSheet[]}
-     */
-    static getCSSStyleSheet() {
-      return [TextStyleSheet];
-    }
-  };
-  function initContentEditable() {
-    const slotted = getSlottedElements.call(this);
-    for (const element of slotted) {
-      if (element instanceof HTMLElement) {
-        element.setAttribute("contenteditable", "true");
-      }
-    }
-  }
-  function showToolbar() {
-    if (shouldShowTextFormattingToolbar(this.getRange())) {
-      this[toolbarElementSymbol].style.display = "flex";
-      positionToolbar(this[toolbarElementSymbol], this[editorElementSymbol2]);
-    }
-  }
-  function hideToolbar() {
-    this[toolbarElementSymbol].style.display = "none";
-  }
-  function testableWrapperShouldShowTextFormattingToolbar(range) {
-    return shouldShowTextFormattingToolbar(range);
-  }
-  function shouldShowTextFormattingToolbar(range) {
-    if (!range) {
-      return false;
-    }
-    function isFormatAble(node) {
-      const formatAbleTags = ["SPAN", "DIV", "P", "STRONG", "EM", "B", "I", "LABEL"];
-      let currentNode = node;
-      while (currentNode && currentNode.nodeType === 1) {
-        if (formatAbleTags.includes(currentNode.nodeName)) {
-          return true;
-        }
-        currentNode = currentNode.parentNode;
-      }
-      return false;
-    }
-    const rangeContents = range.cloneContents();
-    let textNodes = Array.from(rangeContents.querySelectorAll("*")).filter((node) => node.nodeType === 3);
-    return textNodes.every(isFormatAble);
-  }
-  function positionToolbar(toolbar, element) {
-    try {
-      computePosition2(element, toolbar, {
-        placement: "top",
-        middleware: [
-          flip3(),
-          offset3(10)
-        ]
-      }).then(({ x, y }) => {
-        Object.assign(toolbar.style, {
-          left: `${x}px`,
-          top: `${y}px`
-        });
-      }).catch((error) => {
-        addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, error?.message || "An error occurred while positioning the toolbar");
+    });
+    describe("document.createElement()", function() {
+      afterEach(() => {
+        let mocks = document.getElementById("mocks");
+        mocks.innerHTML = "";
+      });
+      it("should have buttons and tabs", function(done) {
+        let mocks = document.getElementById("mocks");
+        mocks.innerHTML = html1;
+        setTimeout(() => {
+          try {
+            const tabs = document.getElementById("mytabs");
+            expect2(tabs).is.instanceof(Tabs2);
+            setTimeout(() => {
+              let nav = tabs.shadowRoot.querySelector("nav");
+              const buttons = tabs.shadowRoot.querySelectorAll("button[part=button]");
+              expect2(buttons[0]).is.instanceof(HTMLButtonElement);
+              expect2(nav.hasChildNodes()).to.be.true;
+              expect2(buttons.length).to.be.equal(4);
+              done();
+            }, 100);
+          } catch (e) {
+            return done(e);
+          }
+        }, 0);
       });
-    } catch (error) {
-      addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, error?.message || "An error occurred while positioning the toolbar");
-    }
-  }
-  function initEventHandler6() {
-    const self2 = this;
-    const element = this[editorElementSymbol2];
-    const buttons = element.querySelectorAll(`[${ATTRIBUTE_ROLE}="format-button"]`);
-    function handleButtonAction(styleProperty, styleValue) {
-      return (event) => {
-        const range = self2.getRange();
-        if (range) {
-          applyStyleToSelection(styleProperty, styleValue, range);
-        }
-      };
-    }
-    buttons.forEach((button) => {
-      const command = button.getAttribute("data-monster-command");
-      switch (command) {
-        case "bold":
-          button.setOption("actions.click", handleButtonAction("fontWeight", "bold"));
-          break;
-        case "italic":
-          button.setOption("actions.click", handleButtonAction("fontStyle", "italic"));
-          break;
-        case "underline":
-          button.setOption("actions.click", handleButtonAction("textDecoration", "underline"));
-          break;
-        case "strike":
-          button.setOption("actions.click", handleButtonAction("textDecoration", "line-through"));
-          break;
-        case "subscript":
-          button.setOption("actions.click", handleButtonAction("verticalAlign", "sub"));
-          break;
-        case "superscript":
-          button.setOption("actions.click", handleButtonAction("verticalAlign", "super"));
-          break;
-        case "align-left":
-          button.setOption("actions.click", handleButtonAction("textAlign", "left"));
-          break;
-        case "align-center":
-          button.setOption("actions.click", handleButtonAction("textAlign", "center"));
-          break;
-        case "align-right":
-          button.setOption("actions.click", handleButtonAction("textAlign", "right"));
-          break;
-      }
     });
-    return this;
-  }
-  function applyStyleToSelection(styleProperty, styleValue, range) {
-  }
-  function initControlReferences8() {
-    this[editorElementSymbol2] = this.shadowRoot.querySelector(
-      `[${ATTRIBUTE_ROLE}="control"]`
-    );
-    this[contenteditableElementSymbol] = this.shadowRoot.querySelector(`[${ATTRIBUTE_ROLE}="contenteditable"]`);
-    this[toolbarElementSymbol] = this.shadowRoot.querySelector(`[${ATTRIBUTE_ROLE}="toolbar"]`);
-  }
-  function getTemplate8() {
-    return `
-        <div data-monster-role="control" part="control">
-
-            <div data-monster-role="toolbar" part="toolbar">
-                <monster-button-bar>
-                    <monster-button data-monster-role="format-button" data-monster-command="bold">
-                        <svg xmlns="http://www.w3.org/2000/svg"
-                             width="16" height="16"
-                             fill="var(--monster-color-primary-1)"
-                             viewBox="0 0 16 16">
-                            <path d="M8.21 13c2.106 0 3.412-1.087 3.412-2.823 0-1.306-.984-2.283-2.324-2.386v-.055a2.176 2.176 0 0 0 1.852-2.14c0-1.51-1.162-2.46-3.014-2.46H3.843V13zM5.908 4.674h1.696c.963 0 1.517.451 1.517 1.244 0 .834-.629 1.32-1.73 1.32H5.908V4.673zm0 6.788V8.598h1.73c1.217 0 1.88.492 1.88 1.415 0 .943-.643 1.449-1.832 1.449H5.907z"/>
-                        </svg>
-                    </monster-button>
-                    <monster-button data-monster-role="format-button" data-monster-command="italic">
-                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"
-                             fill="var(--monster-color-primary-1)" viewBox="0 0 16 16">
-                            <path d="M7.991 11.674 9.53 4.455c.123-.595.246-.71 1.347-.807l.11-.52H7.211l-.11.52c1.06.096 1.128.212 1.005.807L6.57 11.674c-.123.595-.246.71-1.346.806l-.11.52h3.774l.11-.52c-1.06-.095-1.129-.211-1.006-.806z"/>
-                        </svg>
-                    </monster-button>
-                    <monster-button data-monster-role="format-button" data-monster-command="underline">
-                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"
-                             fill="var(--monster-color-primary-1)"
-                             viewBox="0 0 16 16">
-                            <path d="M5.313 3.136h-1.23V9.54c0 2.105 1.47 3.623 3.917 3.623s3.917-1.518 3.917-3.623V3.136h-1.23v6.323c0 1.49-.978 2.57-2.687 2.57s-2.687-1.08-2.687-2.57zM12.5 15h-9v-1h9z"/>
-                        </svg>
-                    </monster-button>
-                    <monster-button data-monster-role="format-button" data-monster-command="strike">
-                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"
-                             fill="var(--monster-color-primary-1)"
-                             viewBox="0 0 16 16">
-                            <path d="M6.333 5.686c0 .31.083.581.27.814H5.166a2.8 2.8 0 0 1-.099-.76c0-1.627 1.436-2.768 3.48-2.768 1.969 0 3.39 1.175 3.445 2.85h-1.23c-.11-1.08-.964-1.743-2.25-1.743-1.23 0-2.18.602-2.18 1.607zm2.194 7.478c-2.153 0-3.589-1.107-3.705-2.81h1.23c.144 1.06 1.129 1.703 2.544 1.703 1.34 0 2.31-.705 2.31-1.675 0-.827-.547-1.374-1.914-1.675L8.046 8.5H1v-1h14v1h-3.504c.468.437.675.994.675 1.697 0 1.826-1.436 2.967-3.644 2.967"/>
-                        </svg>
-                    </monster-button>
-                    <monster-button data-monster-role="format-button" data-monster-command="subscript">
-                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"
-                             fill="var(--monster-color-primary-1)"
-                             viewBox="0 0 16 16">
-                            <path d="m3.266 12.496.96-2.853H7.76l.96 2.853H10L6.62 3H5.38L2 12.496zm2.748-8.063 1.419 4.23h-2.88l1.426-4.23zm6.132 7.203v-.075c0-.332.234-.618.619-.618.354 0 .618.256.618.58 0 .362-.271.649-.52.898l-1.788 1.832V15h3.59v-.958h-1.923v-.045l.973-1.04c.415-.438.867-.845.867-1.547 0-.8-.701-1.41-1.787-1.41-1.23 0-1.795.8-1.795 1.576v.06z"/>
-                        </svg>
-                    </monster-button>
-                    <monster-button data-monster-role="format-button" data-monster-command="superscript">
-                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"
-                             fill="var(--monster-color-primary-1)"
-                             viewBox="0 0 16 16">
-                            <path d="m4.266 12.496.96-2.853H8.76l.96 2.853H11L7.62 3H6.38L3 12.496zm2.748-8.063 1.419 4.23h-2.88l1.426-4.23zm5.132-1.797v-.075c0-.332.234-.618.619-.618.354 0 .618.256.618.58 0 .362-.271.649-.52.898l-1.788 1.832V6h3.59v-.958h-1.923v-.045l.973-1.04c.415-.438.867-.845.867-1.547 0-.8-.701-1.41-1.787-1.41C11.565 1 11 1.8 11 2.576v.06z"/>
-                        </svg>
-                    </monster-button>
-                    <!--                    <monster-button data-monster-role="format-button" data-monster-command="text-start">-->
-                    <!--                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="var(&#45;&#45;monster-color-primary-1)"-->
-                    <!--                            viewBox="0 0 16 16">-->
-                    <!--                            <path fill-rule="evenodd"-->
-                    <!--                                  d="M2 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m0-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5"/>-->
-                    <!--                        </svg>-->
-                    <!--                    </monster-button>-->
-                    <!--                    <monster-button data-monster-role="format-button" data-monster-command="align-center">-->
-                    <!--                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="var(&#45;&#45;monster-color-primary-1)"-->
-                    <!--                           viewBox="0 0 16 16">-->
-                    <!--                            <path fill-rule="evenodd"-->
-                    <!--                                  d="M4 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5"/>-->
-                    <!--                        </svg>-->
-                    <!--                    </monster-button>-->
-                    <!--                    <monster-button data-monster-role="format-button" data-monster-command="text-end">-->
-                    <!--                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="var(&#45;&#45;monster-color-primary-1)"-->
-                    <!--                             viewBox="0 0 16 16">-->
-                    <!--                            <path fill-rule="evenodd"-->
-                    <!--                                  d="M6 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m-4-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m4-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m-4-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5"/>-->
-                    <!--                        </svg>-->
-                    <!--                    </monster-button>-->
-                    <!--                    <monster-button data-monster-role="format-button" data-monster-command="text-justify">-->
-                    <!--                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="var(&#45;&#45;monster-color-primary-1)"-->
-                    <!--                           viewBox="0 0 16 16">-->
-                    <!--                            <path fill-rule="evenodd"-->
-                    <!--                                  d="M2 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5"/>-->
-                    <!--                        </svg>-->
-                    <!--                    </monster-button>-->
-                    <monster-button data-monster-role="format-button" data-monster-command="erase">
-                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"
-                             fill="var(--monster-color-primary-1)" viewBox="0 0 16 16">
-                            <path d="M8.086 2.207a2 2 0 0 1 2.828 0l3.879 3.879a2 2 0 0 1 0 2.828l-5.5 5.5A2 2 0 0 1 7.879 15H5.12a2 2 0 0 1-1.414-.586l-2.5-2.5a2 2 0 0 1 0-2.828zm2.121.707a1 1 0 0 0-1.414 0L4.16 7.547l5.293 5.293 4.633-4.633a1 1 0 0 0 0-1.414zM8.746 13.547 3.453 8.254 1.914 9.793a1 1 0 0 0 0 1.414l2.5 2.5a1 1 0 0 0 .707.293H7.88a1 1 0 0 0 .707-.293z"/>
-                        </svg>
-                    </monster-button>
-
-
-                </monster-button-bar>
-
-            </div>
-
-
-            <div data-monster-role="contenteditable" part="contenteditable">
-                <slot></slot>
-            </div>
-        </div>`;
-  }
-  registerCustomElement(Text);
+  });
 
-  // test/cases/components/content/editor/plugin/text.mjs
+  // test/cases/components/layout/slit-panel.mjs
   init_global();
-  var expect5 = expect;
+  var expect3 = expect;
   use(chaiDom);
-  var global5 = getGlobal();
-  var MockRange = class {
-    constructor() {
-      this.contents = global5.document.createElement("div");
-    }
-    cloneContents() {
-      return this.contents.cloneNode(true);
-    }
-    addElement(tagName, text) {
-      let element = global5.document.createElement(tagName);
-      element.textContent = text;
-      this.contents.appendChild(element);
-    }
-  };
-  function isNodeEnvironment() {
-    return typeof process !== "undefined" && process.versions && process.versions.node;
-  }
-  describe("Text Formatting Toolbar Visibility", function() {
-    beforeEach(function() {
-      if (isNodeEnvironment()) {
-        this.skip();
-      }
+  var global3 = getGlobal();
+  var html12 = `
+    <monster-split-panel id="my-split-panel">
+       
+    </monster-split-panel>
+`;
+  var SplitScreen;
+  describe("SplitScreen", function() {
+    before(function(done) {
+      initJSDOM().then(() => {
+        Promise.resolve().then(() => (init_dist(), dist_exports)).catch((e) => done(e));
+        let promises = [];
+        if (!global3["crypto"]) {
+          promises.push(Promise.resolve().then(() => (init_webcrypto_es(), webcrypto_es_exports)).then((m) => {
+            const Crypto3 = m["Crypto"];
+            global3["crypto"] = new Crypto3();
+          }));
+        }
+        promises.push(Promise.resolve().then(() => (init_split_panel2(), split_panel_exports)).then((m) => {
+          SplitScreen = m["SplitPanel"];
+        }));
+        Promise.all(promises).then(() => {
+          done();
+        }).catch((e) => done(e));
+      });
+    });
+    describe("document.createElement()", function() {
+      afterEach(() => {
+        let mocks = document.getElementById("mocks");
+        mocks.innerHTML = "";
+      });
+      it("should have buttons and SplitScreen", function(done) {
+        let mocks = document.getElementById("mocks");
+        mocks.innerHTML = html12;
+        setTimeout(() => {
+          try {
+            const SplitScreen3 = document.getElementById("my-split-panel");
+            expect3(SplitScreen3).is.instanceof(HTMLElement);
+            setTimeout(() => {
+              let div = SplitScreen3.shadowRoot.querySelector("div");
+              expect3(div.hasChildNodes()).to.be.true;
+              done();
+            }, 100);
+          } catch (e) {
+            return done(e);
+          }
+        }, 0);
+      });
     });
-    it("should show toolbar when selection is within simple text in div", function() {
-      let range = new MockRange();
-      range.addElement("div", "Hello, world!");
-      let result = testableWrapperShouldShowTextFormattingToolbar(range);
-      expect5(result).to.be.true;
+  });
+
+  // test/cases/components/layout/panel.mjs
+  init_global();
+  var expect4 = expect;
+  use(chaiDom);
+  var global4 = getGlobal();
+  var html13 = `
+    <monster-panel id="my-panel">
+       
+    </monster-panel>
+`;
+  var SplitScreen2;
+  describe("SplitScreen", function() {
+    before(function(done) {
+      initJSDOM().then(() => {
+        Promise.resolve().then(() => (init_dist(), dist_exports)).catch((e) => done(e));
+        let promises = [];
+        if (!global4["crypto"]) {
+          promises.push(Promise.resolve().then(() => (init_webcrypto_es(), webcrypto_es_exports)).then((m) => {
+            const Crypto3 = m["Crypto"];
+            global4["crypto"] = new Crypto3();
+          }));
+        }
+        promises.push(Promise.resolve().then(() => (init_panel2(), panel_exports)).then((m) => {
+          SplitScreen2 = m["Panel"];
+        }));
+        Promise.all(promises).then(() => {
+          done();
+        }).catch((e) => done(e));
+      });
     });
-    it("should not show toolbar when selection includes non-formattable elements", function() {
-      let range = new MockRange();
-      range.addElement("div", "Hello, ");
-      range.addElement("img", "");
-      range.addElement("span", "world!");
-      debugger;
-      let result = testableWrapperShouldShowTextFormattingToolbar(range);
-      expect5(result).to.be.false;
+    describe("document.createElement()", function() {
+      afterEach(() => {
+        let mocks = document.getElementById("mocks");
+        mocks.innerHTML = "";
+      });
+      it("should have buttons and SplitScreen", function(done) {
+        let mocks = document.getElementById("mocks");
+        mocks.innerHTML = html13;
+        setTimeout(() => {
+          try {
+            const SplitScreen3 = document.getElementById("my-panel");
+            expect4(SplitScreen3).is.instanceof(HTMLElement);
+            setTimeout(() => {
+              let div = SplitScreen3.shadowRoot.querySelector("div");
+              expect4(div.hasChildNodes()).to.be.true;
+              done();
+            }, 100);
+          } catch (e) {
+            return done(e);
+          }
+        }, 0);
+      });
     });
   });
 
@@ -36655,7 +35658,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
 
   // test/util/intersection-mock.mjs
   init_global();
-  var global6 = getGlobal();
+  var global5 = getGlobal();
   function setupIntersectionObserverMock({
     root = null,
     rootMargin = "",
@@ -36693,7 +35696,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       configurable: true,
       value: MockIntersectionObserver
     });
-    Object.defineProperty(global6, "IntersectionObserver", {
+    Object.defineProperty(global5, "IntersectionObserver", {
       writable: true,
       configurable: true,
       value: MockIntersectionObserver
@@ -36709,9 +35712,9 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   }
 
   // test/cases/components/form/reload.mjs
-  var expect6 = expect;
+  var expect5 = expect;
   use(chaiDom);
-  var global7 = getGlobal();
+  var global6 = getGlobal();
   var mockintersectionobserver;
   var html14 = `
     <div id="test1">
@@ -36756,13 +35759,13 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         });
         describe("create from template", function() {
           it("should contains monster-reload", function() {
-            expect6(document.getElementById("test2")).contain.html("<monster-reload");
+            expect5(document.getElementById("test2")).contain.html("<monster-reload");
           });
         });
       });
       describe("document.createElement", function() {
         it("should instance of reload", function() {
-          expect6(document.createElement("monster-reload")).is.instanceof(Reload2);
+          expect5(document.createElement("monster-reload")).is.instanceof(Reload2);
         });
       });
     });
@@ -36779,7 +35782,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         mocks.appendChild(reload);
         setTimeout(() => {
           try {
-            expect6(document.getElementById("mocks")).contain.html("<monster-reload");
+            expect5(document.getElementById("mocks")).contain.html("<monster-reload");
           } catch (e) {
             return done(e);
           }
@@ -36796,8 +35799,8 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
 
                 </div>
             `;
-        fetchReference4 = global7["fetch"];
-        global7["fetch"] = function(url, options2) {
+        fetchReference4 = global6["fetch"];
+        global6["fetch"] = function(url, options2) {
           let headers = /* @__PURE__ */ new Map();
           headers.set("content-type", "text/html");
           return new Promise((resolve, reject) => {
@@ -36817,7 +35820,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       });
       afterEach(() => {
         mocks.innerHTML = "";
-        global7["fetch"] = fetchReference4;
+        global6["fetch"] = fetchReference4;
       });
       it("should load content from url", function(done) {
         const reload = document.createElement("monster-reload");
@@ -36825,7 +35828,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         reload.addEventListener("monster-fetched", (event) => {
           try {
             const element = document.querySelector("monster-reload");
-            expect6(element).contain.html("hello world");
+            expect5(element).contain.html("hello world");
             done();
           } catch (e) {
             done(e);
@@ -36861,9 +35864,9 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   };
 
   // test/cases/components/form/state-button.mjs
-  var expect7 = expect;
+  var expect6 = expect;
   use(chaiDom);
-  var global8 = getGlobal();
+  var global7 = getGlobal();
   var html15 = `
     <div id="test1">
     </div>
@@ -36891,8 +35894,8 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     before(function(done) {
       initJSDOM().then(() => {
         Promise.resolve().then(() => (init_dist(), dist_exports)).catch((e) => done(e));
-        if (!global8.ResizeObserver) {
-          global8.ResizeObserver = ResizeObserverMock;
+        if (!global7.ResizeObserver) {
+          global7.ResizeObserver = ResizeObserverMock;
         }
         Promise.resolve().then(() => (init_state_button2(), state_button_exports)).then((m) => {
           StateButton2 = m["StateButton"];
@@ -36920,13 +35923,13 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         });
         describe("create from template", function() {
           it("should contains monster-state-button", function() {
-            expect7(document.getElementById("test2")).contain.html("<monster-state-button");
+            expect6(document.getElementById("test2")).contain.html("<monster-state-button");
           });
         });
       });
       describe("document.createElement", function() {
         it("should instance of state-button", function() {
-          expect7(document.createElement("monster-state-button")).is.instanceof(StateButton2);
+          expect6(document.createElement("monster-state-button")).is.instanceof(StateButton2);
         });
       });
     });
@@ -36942,8 +35945,8 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         setTimeout(() => {
           try {
             const options2 = button.shadowRoot.querySelector("button");
-            expect7(options2).is.instanceof(HTMLButtonElement);
-            expect7(options2.hasChildNodes()).to.be.true;
+            expect6(options2).is.instanceof(HTMLButtonElement);
+            expect6(options2.hasChildNodes()).to.be.true;
           } catch (e) {
             return done(e);
           }
@@ -36955,9 +35958,9 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
 
   // test/cases/components/form/select.mjs
   init_global();
-  var expect8 = expect;
+  var expect7 = expect;
   use(chaiDom);
-  var global9 = getGlobal();
+  var global8 = getGlobal();
   var html16 = `
     <div id="test1">
     </div>
@@ -36985,9 +35988,9 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     before(function(done) {
       initJSDOM().then(() => {
         Promise.resolve().then(() => (init_dist(), dist_exports)).catch((e) => done(e));
-        fetchReference = global9["fetch"];
-        if (!global9.ResizeObserver) {
-          global9.ResizeObserver = ResizeObserverMock;
+        fetchReference = global8["fetch"];
+        if (!global8.ResizeObserver) {
+          global8.ResizeObserver = ResizeObserverMock;
         }
         Promise.resolve().then(() => (init_select2(), select_exports)).then((m) => {
           Select2 = m["Select"];
@@ -36999,7 +36002,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       beforeEach(() => {
         let mocks = document.getElementById("mocks");
         mocks.innerHTML = html16;
-        global9["fetch"] = function(url, options2) {
+        global8["fetch"] = function(url, options2) {
           let headers = /* @__PURE__ */ new Map();
           headers.set("content-type", "application/json");
           return new Promise((resolve, reject) => {
@@ -37042,7 +36045,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       afterEach(() => {
         let mocks = document.getElementById("mocks");
         mocks.innerHTML = "";
-        global9["fetch"] = fetchReference;
+        global8["fetch"] = fetchReference;
       });
       describe("create from template", function() {
         beforeEach(() => {
@@ -37052,18 +36055,18 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         afterEach(() => {
           let mocks = document.getElementById("mocks");
           mocks.innerHTML = "";
-          global9["fetch"] = fetchReference;
+          global8["fetch"] = fetchReference;
         });
         describe("create from template", function() {
           it("should contains monster-select", function() {
-            expect8(document.getElementById("test2")).contain.html("<monster-select");
+            expect7(document.getElementById("test2")).contain.html("<monster-select");
           });
         });
       });
       describe("document.createElement", function() {
         it("should instance of select", function() {
           const select = document.createElement("monster-select");
-          expect8(select).is.instanceof(Select2);
+          expect7(select).is.instanceof(Select2);
         });
         it("should have options", function(done) {
           let mocks = document.getElementById("mocks");
@@ -37076,12 +36079,12 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
             setTimeout(() => {
               try {
                 const options2 = select.shadowRoot.querySelectorAll("[data-monster-role=option]");
-                expect8(options2.length).is.equal(3);
+                expect7(options2.length).is.equal(3);
                 const optionHtml = select.shadowRoot.querySelector("[data-monster-role=options]");
-                expect8(optionHtml).contain.html('data-monster-insert-reference="options-0"');
-                expect8(optionHtml).contain.html('data-monster-insert-reference="options-1"');
-                expect8(optionHtml).contain.html('data-monster-insert-reference="options-2"');
-                expect8(optionHtml).contain.not.html('data-monster-insert-reference="options-3"');
+                expect7(optionHtml).contain.html('data-monster-insert-reference="options-0"');
+                expect7(optionHtml).contain.html('data-monster-insert-reference="options-1"');
+                expect7(optionHtml).contain.html('data-monster-insert-reference="options-2"');
+                expect7(optionHtml).contain.not.html('data-monster-insert-reference="options-3"');
               } catch (e2) {
                 done(e2);
                 return;
@@ -37105,10 +36108,10 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         setTimeout(() => {
           try {
             const options2 = select.shadowRoot.querySelector("[data-monster-role=options]");
-            expect8(options2).is.instanceof(HTMLDivElement);
+            expect7(options2).is.instanceof(HTMLDivElement);
             const a2 = options2.parentNode.outerHTML;
             const b = options2.childNodes.length;
-            expect8(options2.hasChildNodes()).to.be.false;
+            expect7(options2.hasChildNodes()).to.be.false;
           } catch (e) {
             return done(e);
           }
@@ -37121,9 +36124,9 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   // test/cases/components/form/confirm-button.mjs
   init_dataurl();
   init_global();
-  var expect9 = expect;
+  var expect8 = expect;
   use(chaiDom);
-  var global10 = getGlobal();
+  var global9 = getGlobal();
   var html17;
   var options;
   var html23;
@@ -37131,8 +36134,8 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   describe("ConfirmButton", function() {
     before(function(done) {
       Promise.resolve().then(() => (init_dist(), dist_exports)).catch((e) => done(e));
-      if (!global10.ResizeObserver) {
-        global10.ResizeObserver = ResizeObserverMock;
+      if (!global9.ResizeObserver) {
+        global9.ResizeObserver = ResizeObserverMock;
       }
       options = new DataUrl(btoa(JSON.stringify({
         popper: {
@@ -37178,13 +36181,13 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         });
         describe("create from template", function() {
           it("should contains monster-confirm-button", function() {
-            expect9(document.getElementById("test2")).contain.html("<monster-confirm-button");
+            expect8(document.getElementById("test2")).contain.html("<monster-confirm-button");
           });
         });
       });
       describe("document.createElement", function() {
         it("should instance of button", function() {
-          expect9(document.createElement("monster-confirm-button")).is.instanceof(ConfirmButton2);
+          expect8(document.createElement("monster-confirm-button")).is.instanceof(ConfirmButton2);
         });
       });
     });
@@ -37200,7 +36203,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         setTimeout(() => {
           try {
             const content = button.shadowRoot.querySelector("monster-button");
-            expect9(content.hasChildNodes()).to.be.true;
+            expect8(content.hasChildNodes()).to.be.true;
           } catch (e) {
             return done(e);
           }
@@ -37297,7 +36300,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   };
 
   // test/cases/components/form/form.mjs
-  var expect10 = expect;
+  var expect9 = expect;
   use(chaiDom);
   var html18 = `
     <div id="test1">
@@ -37348,7 +36351,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           localStorage.setItem("test-key", "{}");
         });
         it("should contains monster-form", function() {
-          expect10(document.getElementById("test1")).contain.html("<monster-form");
+          expect9(document.getElementById("test1")).contain.html("<monster-form");
         });
       });
       describe("create from template html2", function() {
@@ -37372,12 +36375,12 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         it("should contains monster-form", function() {
           let mocks = document.getElementById("mocks");
           mocks.innerHTML = html24;
-          expect10(document.getElementById("test2")).contain.html("<monster-form");
+          expect9(document.getElementById("test2")).contain.html("<monster-form");
         });
         it("should click", function(done) {
           let mocks = document.getElementById("mocks");
           mocks.innerHTML = html24;
-          expect10(document.getElementById("test2")).contain.html("<monster-form");
+          expect9(document.getElementById("test2")).contain.html("<monster-form");
           setTimeout(() => {
             const form2 = document.getElementById("form2");
             if (!form2.shadowRoot) {
@@ -37394,9 +36397,9 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
 
   // test/cases/components/form/tree-select.mjs
   init_global();
-  var expect11 = expect;
+  var expect10 = expect;
   use(chaiDom);
-  var global11 = getGlobal();
+  var global10 = getGlobal();
   var html19 = `
     <div id="test1">
     </div>
@@ -37424,7 +36427,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     before(function(done) {
       initJSDOM().then(() => {
         Promise.resolve().then(() => (init_dist(), dist_exports)).catch((e) => done(e));
-        fetchReference2 = global11["fetch"];
+        fetchReference2 = global10["fetch"];
         Promise.resolve().then(() => (init_tree_select2(), tree_select_exports)).then((m) => {
           TreeSelect2 = m["TreeSelect"];
           done();
@@ -37435,7 +36438,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       beforeEach(() => {
         let mocks = document.getElementById("mocks");
         mocks.innerHTML = html19;
-        global11["fetch"] = function(url, options2) {
+        global10["fetch"] = function(url, options2) {
           let headers = /* @__PURE__ */ new Map();
           headers.set("content-type", "application/json");
           return new Promise((resolve, reject) => {
@@ -37481,7 +36484,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       afterEach(() => {
         let mocks = document.getElementById("mocks");
         mocks.innerHTML = "";
-        global11["fetch"] = fetchReference2;
+        global10["fetch"] = fetchReference2;
       });
       describe("create from template", function() {
         beforeEach(() => {
@@ -37491,17 +36494,17 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         afterEach(() => {
           let mocks = document.getElementById("mocks");
           mocks.innerHTML = "";
-          global11["fetch"] = fetchReference2;
+          global10["fetch"] = fetchReference2;
         });
         describe("create from template", function() {
           it("should contains monster-tree-select", function() {
-            expect11(document.getElementById("test2")).contain.html("<monster-tree-select");
+            expect10(document.getElementById("test2")).contain.html("<monster-tree-select");
           });
         });
       });
       describe("document.createElement", function() {
         it("should instance of select", function() {
-          expect11(document.createElement("monster-tree-select")).is.instanceof(TreeSelect2);
+          expect10(document.createElement("monster-tree-select")).is.instanceof(TreeSelect2);
         });
         it("should have options", function(done) {
           let mocks = document.getElementById("mocks");
@@ -37514,12 +36517,12 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
             setTimeout(() => {
               try {
                 const options2 = treeselect.shadowRoot.querySelectorAll("[data-monster-role=option]");
-                expect11(options2.length).is.equal(3);
+                expect10(options2.length).is.equal(3);
                 const optionHtml = treeselect.shadowRoot.querySelector("[data-monster-role=options]");
-                expect11(optionHtml).contain.html('data-monster-insert-reference="options-0"');
-                expect11(optionHtml).contain.html('data-monster-insert-reference="options-1"');
-                expect11(optionHtml).contain.html('data-monster-insert-reference="options-2"');
-                expect11(optionHtml).contain.not.html('data-monster-insert-reference="options-3"');
+                expect10(optionHtml).contain.html('data-monster-insert-reference="options-0"');
+                expect10(optionHtml).contain.html('data-monster-insert-reference="options-1"');
+                expect10(optionHtml).contain.html('data-monster-insert-reference="options-2"');
+                expect10(optionHtml).contain.not.html('data-monster-insert-reference="options-3"');
               } catch (e2) {
                 done(e2);
                 return;
@@ -37543,8 +36546,8 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         setTimeout(() => {
           try {
             const options2 = select.shadowRoot.querySelector("[data-monster-role=options]");
-            expect11(options2).is.instanceof(HTMLDivElement);
-            expect11(options2.hasChildNodes()).to.be.false;
+            expect10(options2).is.instanceof(HTMLDivElement);
+            expect10(options2.hasChildNodes()).to.be.false;
           } catch (e) {
             return done(e);
           }
@@ -37556,9 +36559,9 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
 
   // test/cases/components/form/button.mjs
   init_global();
-  var expect12 = expect;
+  var expect11 = expect;
   use(chaiDom);
-  var global12 = getGlobal();
+  var global11 = getGlobal();
   var html110 = `
     <div id="test1">
     </div>
@@ -37610,13 +36613,13 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         });
         describe("create from template", function() {
           it("should contains monster-button", function() {
-            expect12(document.getElementById("test2")).contain.html("<monster-button");
+            expect11(document.getElementById("test2")).contain.html("<monster-button");
           });
         });
       });
       describe("document.createElement", function() {
         it("should instance of button", function() {
-          expect12(document.createElement("monster-button")).is.instanceof(Button2);
+          expect11(document.createElement("monster-button")).is.instanceof(Button2);
         });
       });
     });
@@ -37632,8 +36635,8 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         setTimeout(() => {
           try {
             const options2 = button.shadowRoot.querySelector("button");
-            expect12(options2).is.instanceof(HTMLButtonElement);
-            expect12(options2.hasChildNodes()).to.be.true;
+            expect11(options2).is.instanceof(HTMLButtonElement);
+            expect11(options2.hasChildNodes()).to.be.true;
           } catch (e) {
             return done(e);
           }
@@ -37645,9 +36648,9 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
 
   // test/cases/components/form/toggle-switch.mjs
   init_global();
-  var expect13 = expect;
+  var expect12 = expect;
   use(chaiDom);
-  var global13 = getGlobal();
+  var global12 = getGlobal();
   var html111 = `
     <div id="test1">
     </div>
@@ -37688,13 +36691,13 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         });
         describe("create from template", function() {
           it("should contains monster-toggle-switch", function() {
-            expect13(document.getElementById("test2")).contain.html("<monster-toggle-switch");
+            expect12(document.getElementById("test2")).contain.html("<monster-toggle-switch");
           });
         });
       });
       describe("document.createElement", function() {
         it("should instance of monster-toggle-switch", function() {
-          expect13(document.createElement("monster-toggle-switch")).is.instanceof(ToggleSwitch2);
+          expect12(document.createElement("monster-toggle-switch")).is.instanceof(ToggleSwitch2);
         });
       });
     });
@@ -37711,23 +36714,23 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         const toggleSwitch = document.createElement("monster-toggle-switch");
         toggleSwitch.setOption("actions.on", "true");
         toggleSwitch.setOption("actions.off", "false");
-        expect13(toggleSwitch.value).is.equal("off");
-        expect13(toggleSwitch.state).is.equal("off");
+        expect12(toggleSwitch.value).is.equal("off");
+        expect12(toggleSwitch.state).is.equal("off");
         toggleSwitch.toggle();
-        expect13(toggleSwitch.value).is.equal("on");
-        expect13(toggleSwitch.state).is.equal("on");
+        expect12(toggleSwitch.value).is.equal("on");
+        expect12(toggleSwitch.state).is.equal("on");
         toggleSwitch.toggle();
-        expect13(toggleSwitch.value).is.equal("off");
-        expect13(toggleSwitch.state).is.equal("off");
+        expect12(toggleSwitch.value).is.equal("off");
+        expect12(toggleSwitch.state).is.equal("off");
       });
       it("toggle on to off", function() {
         const toggleSwitch = document.createElement("monster-toggle-switch");
         toggleSwitch.toggleOn();
-        expect13(toggleSwitch.value).is.equal("on");
-        expect13(toggleSwitch.state).is.equal("on");
+        expect12(toggleSwitch.value).is.equal("on");
+        expect12(toggleSwitch.state).is.equal("on");
         toggleSwitch.toggleOff();
-        expect13(toggleSwitch.value).is.equal("off");
-        expect13(toggleSwitch.state).is.equal("off");
+        expect12(toggleSwitch.value).is.equal("off");
+        expect12(toggleSwitch.state).is.equal("off");
       });
     });
     describe("describe css", function() {
@@ -37744,13 +36747,13 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         toggleSwitch.value = "on";
         document.getElementById("mocks").appendChild(toggleSwitch);
         let hasClassA = toggleSwitch.shadowRoot.querySelectorAll('[data-monster-role="switch"]')[0].classList.contains(toggleSwitch.getOption("classes.on"));
-        expect13(hasClassA).is.true;
+        expect12(hasClassA).is.true;
         toggleSwitch.value = "off";
         setTimeout(() => {
           let hasClassB = toggleSwitch.shadowRoot.querySelectorAll('[data-monster-role="switch"]')[0].classList.contains(toggleSwitch.getOption("classes.on"));
-          expect13(hasClassB).is.false;
+          expect12(hasClassB).is.false;
           let hasClassC = toggleSwitch.shadowRoot.querySelectorAll('[data-monster-role="switch"]')[0].classList.contains(toggleSwitch.getOption("classes.off"));
-          expect13(hasClassC).is.true;
+          expect12(hasClassC).is.true;
           done();
         }, 0);
       });
@@ -37766,38 +36769,38 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       });
       it("the default value is off", function() {
         let toggleSwitch = document.createElement("monster-toggle-switch");
-        expect13(toggleSwitch.value).is.equal("off");
-        expect13(toggleSwitch.state).is.equal("off");
+        expect12(toggleSwitch.value).is.equal("off");
+        expect12(toggleSwitch.state).is.equal("off");
       });
       it("incorrect values are not accepted", function() {
         let toggleSwitch = document.createElement("monster-toggle-switch");
         toggleSwitch.setOption("values.on", "true");
         toggleSwitch.setOption("values.off", "false");
         toggleSwitch.value = "test";
-        expect13(toggleSwitch.value).is.equal("false");
-        expect13(toggleSwitch.state).is.equal("off");
-        expect13(toggleSwitch.hasAttribute("disabled")).is.false;
+        expect12(toggleSwitch.value).is.equal("false");
+        expect12(toggleSwitch.state).is.equal("off");
+        expect12(toggleSwitch.hasAttribute("disabled")).is.false;
         document.getElementById("mocks").appendChild(toggleSwitch);
-        expect13(toggleSwitch.hasAttribute("disabled")).is.true;
+        expect12(toggleSwitch.hasAttribute("disabled")).is.true;
       });
       it("correct values are accepted", function() {
         const toggleSwitch = document.createElement("monster-toggle-switch");
         toggleSwitch.setOption("values.on", "true");
         toggleSwitch.setOption("values.off", "false");
         toggleSwitch.value = "true";
-        expect13(toggleSwitch.value).is.equal("true");
-        expect13(toggleSwitch.state).is.equal("on");
+        expect12(toggleSwitch.value).is.equal("true");
+        expect12(toggleSwitch.state).is.equal("on");
         document.getElementById("mocks").appendChild(toggleSwitch);
-        expect13(toggleSwitch.hasAttribute("disabled")).is.false;
+        expect12(toggleSwitch.hasAttribute("disabled")).is.false;
       });
     });
   });
 
   // test/cases/components/form/template.mjs
   init_global();
-  var expect14 = expect;
+  var expect13 = expect;
   use(chaiDom);
-  var global14 = getGlobal();
+  var global13 = getGlobal();
   var mockintersectionobserver2;
   var html112 = `
     <div id="test1">
@@ -37842,13 +36845,13 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         });
         describe("create from template", function() {
           it("should contains monster-template", function() {
-            expect14(document.getElementById("test2")).contain.html("<monster-template");
+            expect13(document.getElementById("test2")).contain.html("<monster-template");
           });
         });
       });
       describe("document.createElement", function() {
         it("should instance of template", function() {
-          expect14(document.createElement("monster-template")).is.instanceof(Template3);
+          expect13(document.createElement("monster-template")).is.instanceof(Template3);
         });
       });
     });
@@ -37865,7 +36868,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         mocks.appendChild(template);
         setTimeout(() => {
           try {
-            expect14(document.getElementById("mocks")).contain.html("<monster-template");
+            expect13(document.getElementById("mocks")).contain.html("<monster-template");
           } catch (e) {
             return done(e);
           }
@@ -37882,8 +36885,8 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
 
                 </div>
             `;
-        fetchReference4 = global14["fetch"];
-        global14["fetch"] = function(url, options2) {
+        fetchReference4 = global13["fetch"];
+        global13["fetch"] = function(url, options2) {
           let headers = /* @__PURE__ */ new Map();
           headers.set("content-type", "text/html");
           return new Promise((resolve, reject) => {
@@ -37903,7 +36906,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       });
       afterEach(() => {
         mocks.innerHTML = "";
-        global14["fetch"] = fetchReference4;
+        global13["fetch"] = fetchReference4;
       });
       it("should load content from url", function(done) {
         const template = document.createElement("monster-template");
@@ -37913,7 +36916,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           try {
             const element = document.querySelector("monster-template");
             const shadowRoot = element.shadowRoot;
-            expect14(shadowRoot).contain.html("hello world");
+            expect13(shadowRoot).contain.html("hello world");
             done();
           } catch (e) {
             done(e);
@@ -37925,7 +36928,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   });
 
   // test/cases/components/notify/message.mjs
-  var expect15 = expect;
+  var expect14 = expect;
   use(chaiDom);
   var Message2;
   describe("Message", function() {
@@ -37940,13 +36943,13 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     describe("document.createElement", function() {
       it("should instance of Message", function() {
         const control = document.createElement("monster-notify-message");
-        expect15(control).is.instanceof(Message2);
+        expect14(control).is.instanceof(Message2);
       });
     });
   });
 
   // test/cases/components/notify/notify.mjs
-  var expect16 = expect;
+  var expect15 = expect;
   use(chaiDom);
   var Notify2;
   describe("Notify", function() {
@@ -37960,7 +36963,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     });
     describe("document.createElement", function() {
       it("should instance of notify", function() {
-        expect16(document.createElement("monster-notify")).is.instanceof(Notify2);
+        expect15(document.createElement("monster-notify")).is.instanceof(Notify2);
       });
       it("should have messages", function(done) {
         let mocks = document.getElementById("mocks");
@@ -37976,7 +36979,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
                 mutationobserver2.disconnect();
                 try {
                   const messages = notify.shadowRoot.querySelectorAll("monster-notify-message");
-                  expect16(messages.length).is.equal(3);
+                  expect15(messages.length).is.equal(3);
                 } catch (e) {
                   return done(e);
                 }
@@ -37993,9 +36996,9 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
 
   // test/cases/components/host/host.mjs
   init_global();
-  var expect17 = expect;
+  var expect16 = expect;
   use(chaiDom);
-  var global15 = getGlobal();
+  var global14 = getGlobal();
   describe("Host", function() {
     let host;
     let html118 = `
@@ -38024,7 +37027,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       mocks.appendChild(formControl);
       setTimeout(() => {
         try {
-          expect17(document.getElementById("mocks")).contain.html('<monster-host data-monster-objectlink="Symbol(@schukai/monster/dom/custom-element@@options-updater-link)"></monster-host>');
+          expect16(document.getElementById("mocks")).contain.html('<monster-host data-monster-objectlink="Symbol(@schukai/monster/dom/custom-element@@options-updater-link)"></monster-host>');
         } catch (e) {
           return done(e);
         }
@@ -38035,9 +37038,9 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
 
   // test/cases/components/host/overlay.mjs
   init_global();
-  var expect18 = expect;
+  var expect17 = expect;
   use(chaiDom);
-  var global16 = getGlobal();
+  var global15 = getGlobal();
   describe("Overlay", function() {
     let host;
     let html118 = `
@@ -38065,7 +37068,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       mocks.appendChild(formControl);
       setTimeout(() => {
         try {
-          expect18(document.getElementById("mocks")).contain.html(
+          expect17(document.getElementById("mocks")).contain.html(
             ' <monster-overlay data-monster-objectlink="Symbol(@schukai/monster/dom/custom-element@@options-updater-link)"></monster-overlay>'
           );
         } catch (e) {
@@ -38116,9 +37119,9 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
 
   // test/cases/components/host/details.mjs
   init_global();
-  var expect19 = expect;
+  var expect18 = expect;
   use(chaiDom);
-  var global17 = getGlobal();
+  var global16 = getGlobal();
   describe("Details", function() {
     let host;
     let html118 = `
@@ -38128,8 +37131,8 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       initJSDOM().then(() => {
         Promise.resolve().then(() => (init_details3(), details_exports)).then((m) => {
           host = m["Details"];
-          if (!global17.ResizeObserver) {
-            global17.ResizeObserver = ResizeObserverMock;
+          if (!global16.ResizeObserver) {
+            global16.ResizeObserver = ResizeObserverMock;
           }
           done();
         }).catch((e) => done(e));
@@ -38148,7 +37151,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       const formControl = document.createElement("monster-details");
       setTimeout(() => {
         try {
-          expect19(document.getElementById("mocks")).contain.html(
+          expect18(document.getElementById("mocks")).contain.html(
             '<monster-details id="details1" data-monster-objectlink="Symbol(@schukai/monster/dom/custom-element@@options-updater-link)" data-monster-button-label="Details"></monster-details>'
           );
         } catch (e) {
@@ -40730,6 +39733,66 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     });
   });
 
+  // source/dom/dimension.mjs
+  init_util();
+  init_validate();
+  var CURRENT_DEVICE_DPI = function() {
+    let i = 0;
+    for (i = 56; i < 2e3; i++) {
+      if (getWindow2().matchMedia(`(max-resolution: ${i}dpi)`).matches === true) {
+        return i;
+      }
+    }
+    return i;
+  };
+  function getDeviceDPI() {
+    if (typeof CURRENT_DEVICE_DPI === "function") {
+      CURRENT_DEVICE_DPI = CURRENT_DEVICE_DPI();
+    }
+    return getWindow2().devicePixelRatio * CURRENT_DEVICE_DPI;
+  }
+  function convertToPixels(value, parentElement = document.documentElement, fontSizeElement = document.documentElement) {
+    validateString(value);
+    const regex = /^(-?[\d.]+)(.*)$/;
+    const matchResult = value.match(regex);
+    if (!matchResult) {
+      throw new Error(`Invalid value format: ${value}`);
+    }
+    const [, num, unit] = matchResult;
+    const number = parseFloat(num);
+    const dpi = getDeviceDPI();
+    if (unit === "px") {
+      return number;
+    } else if (unit === "em") {
+      const fontSize = parseFloat(
+        window.getComputedStyle(fontSizeElement).fontSize
+      );
+      return number * fontSize;
+    } else if (unit === "rem") {
+      const rootFontSize = parseFloat(
+        window.getComputedStyle(parentElement).fontSize
+      );
+      return number * rootFontSize;
+    } else if (unit === "%") {
+      const parentWidth = parseFloat(
+        window.getComputedStyle(parentElement).width
+      );
+      return number * parentWidth / 100;
+    } else if (unit === "in") {
+      return number * dpi;
+    } else if (unit === "cm") {
+      return number * dpi / 2.54;
+    } else if (unit === "mm") {
+      return number * dpi / 25.4;
+    } else if (unit === "pt") {
+      return number * dpi / 72;
+    } else if (unit === "pc") {
+      return number * dpi / 6;
+    } else {
+      throw new Error(`Unsupported unit: ${unit}`);
+    }
+  }
+
   // test/cases/dom/dimension.mjs
   init_util();
   init_global();
@@ -40906,7 +39969,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   }
 
   // test/cases/dom/resource/link/stylesheet.mjs
-  var expect20 = expect;
+  var expect19 = expect;
   use(chaiDom);
   describe("Stylesheet", function() {
     before(function(done) {
@@ -40944,19 +40007,19 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         });
       });
       it("append and remove Stylesheet ", (done) => {
-        expect20(stylesheet.isConnected()).to.be.false;
+        expect19(stylesheet.isConnected()).to.be.false;
         stylesheet.connect().available().then(() => {
-          expect20(stylesheet.isConnected()).to.be.true;
-          expect20(document.querySelector('[href="' + url + '"]')).to.exist;
+          expect19(stylesheet.isConnected()).to.be.true;
+          expect19(document.querySelector('[href="' + url + '"]')).to.exist;
           document.getElementById(id).remove();
-          expect20(stylesheet.isConnected()).to.be.false;
-          expect20(document.querySelector('[href="' + url + '"]')).not.to.exist;
+          expect19(stylesheet.isConnected()).to.be.false;
+          expect19(document.querySelector('[href="' + url + '"]')).not.to.exist;
           stylesheet.connect().available().then(() => {
-            expect20(stylesheet.isConnected()).to.be.true;
-            expect20(document.querySelector('[href="' + url + '"]')).to.exist;
+            expect19(stylesheet.isConnected()).to.be.true;
+            expect19(document.querySelector('[href="' + url + '"]')).to.exist;
             document.getElementById(id).remove();
-            expect20(document.querySelector('[href="' + url + '"]')).not.to.exist;
-            expect20(stylesheet.isConnected()).to.be.false;
+            expect19(document.querySelector('[href="' + url + '"]')).not.to.exist;
+            expect19(stylesheet.isConnected()).to.be.false;
             done();
           }).catch((e) => done(e));
         }).catch((e) => done(e));
@@ -40968,7 +40031,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   init_link();
   init_dataurl();
   init_id();
-  var expect21 = expect;
+  var expect20 = expect;
   use(chaiDom);
   describe("Link", function() {
     before(function(done) {
@@ -41006,19 +40069,19 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         });
       });
       it("append and remove Link ", (done) => {
-        expect21(link.isConnected()).to.be.false;
+        expect20(link.isConnected()).to.be.false;
         link.connect().available().then(() => {
-          expect21(link.isConnected()).to.be.true;
-          expect21(document.querySelector('[href="' + url + '"]')).to.exist;
+          expect20(link.isConnected()).to.be.true;
+          expect20(document.querySelector('[href="' + url + '"]')).to.exist;
           document.getElementById(id).remove();
-          expect21(link.isConnected()).to.be.false;
-          expect21(document.querySelector('[href="' + url + '"]')).not.to.exist;
+          expect20(link.isConnected()).to.be.false;
+          expect20(document.querySelector('[href="' + url + '"]')).not.to.exist;
           link.connect().available().then(() => {
-            expect21(link.isConnected()).to.be.true;
-            expect21(document.querySelector('[href="' + url + '"]')).to.exist;
+            expect20(link.isConnected()).to.be.true;
+            expect20(document.querySelector('[href="' + url + '"]')).to.exist;
             document.getElementById(id).remove();
-            expect21(document.querySelector('[href="' + url + '"]')).not.to.exist;
-            expect21(link.isConnected()).to.be.false;
+            expect20(document.querySelector('[href="' + url + '"]')).not.to.exist;
+            expect20(link.isConnected()).to.be.false;
             done();
           }).catch((e) => done(e));
         }).catch((e) => done(e));
@@ -41030,7 +40093,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   init_script();
   init_dataurl();
   init_id();
-  var expect22 = expect;
+  var expect21 = expect;
   use(chaiDom);
   describe("Script", function() {
     before(function(done) {
@@ -41081,19 +40144,19 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         });
       });
       it("append and remove script ", (done) => {
-        expect22(script.isConnected()).to.be.false;
+        expect21(script.isConnected()).to.be.false;
         script.connect().available().then(() => {
-          expect22(script.isConnected()).to.be.true;
-          expect22(document.querySelector('[src="' + url + '"]')).to.exist;
+          expect21(script.isConnected()).to.be.true;
+          expect21(document.querySelector('[src="' + url + '"]')).to.exist;
           document.getElementById(id).remove();
-          expect22(script.isConnected()).to.be.false;
-          expect22(document.querySelector('[src="' + url + '"]')).not.to.exist;
+          expect21(script.isConnected()).to.be.false;
+          expect21(document.querySelector('[src="' + url + '"]')).not.to.exist;
           script.connect().available().then(() => {
-            expect22(script.isConnected()).to.be.true;
-            expect22(document.querySelector('[src="' + url + '"]')).to.exist;
+            expect21(script.isConnected()).to.be.true;
+            expect21(document.querySelector('[src="' + url + '"]')).to.exist;
             document.getElementById(id).remove();
-            expect22(document.querySelector('[src="' + url + '"]')).not.to.exist;
-            expect22(script.isConnected()).to.be.false;
+            expect21(document.querySelector('[src="' + url + '"]')).not.to.exist;
+            expect21(script.isConnected()).to.be.false;
             done();
           }).catch((e) => done(e));
         }).catch((e) => done(e));
@@ -41105,7 +40168,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   init_data();
   init_dataurl();
   init_id();
-  var expect23 = expect;
+  var expect22 = expect;
   use(chaiDom);
   describe("Data", function() {
     let fetchReference4, returnStatus, mutationobserver2, addedNodes2 = [];
@@ -41156,22 +40219,22 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         });
       });
       it("data is not connected", () => {
-        expect23(data.isConnected()).to.be.false;
+        expect22(data.isConnected()).to.be.false;
       });
       it("connect and check availability", (done) => {
         data.connect().available().then(() => {
-          expect23(data.isConnected(), "isConnected 1").to.be.true;
-          expect23(document.querySelector('[type="application/json"]'), "exists 1").to.exist;
+          expect22(data.isConnected(), "isConnected 1").to.be.true;
+          expect22(document.querySelector('[type="application/json"]'), "exists 1").to.exist;
           const e = document.getElementById(id).parentElement;
           document.getElementById(id).remove();
-          expect23(data.isConnected(), "isConnected 2").to.be.false;
-          expect23(document.querySelector('[type="application/json"]'), "exists 2").not.to.exist;
+          expect22(data.isConnected(), "isConnected 2").to.be.false;
+          expect22(document.querySelector('[type="application/json"]'), "exists 2").not.to.exist;
           data.connect().available().then(() => {
-            expect23(data.isConnected(), "isConnected 3").to.be.true;
-            expect23(document.querySelector('[type="application/json"]'), "exists 3").to.exist;
+            expect22(data.isConnected(), "isConnected 3").to.be.true;
+            expect22(document.querySelector('[type="application/json"]'), "exists 3").to.exist;
             document.getElementById(id).remove();
-            expect23(document.querySelector('[type="application/json"]'), "exists 4").not.to.exist;
-            expect23(data.isConnected(), "isConnected 4").to.be.false;
+            expect22(document.querySelector('[type="application/json"]'), "exists 4").not.to.exist;
+            expect22(data.isConnected(), "isConnected 4").to.be.false;
             done();
           }).catch((e2) => done(e2));
         }).catch((e) => done(e));
@@ -41431,17 +40494,17 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
 
   // test/cases/dom/worker/factory.mjs
   init_global();
-  var global18 = getGlobal();
+  var global17 = getGlobal();
   describe("Worker", function() {
     before(function(done) {
       if (isNode()) {
-        Object.defineProperty(global18["URL"], "createObjectURL", {
+        Object.defineProperty(global17["URL"], "createObjectURL", {
           writable: true,
           value: () => {
             return "/example.mjs";
           }
         });
-        global18["Worker"] = class {
+        global17["Worker"] = class {
           terminate() {
           }
           onerror() {
@@ -41449,7 +40512,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           onmessage() {
           }
         };
-        let a2 = typeof global18["Worker"];
+        let a2 = typeof global17["Worker"];
         let a1 = typeof Worker;
       }
       const jsdom = initJSDOM().then(() => {
@@ -41470,7 +40533,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   init_id();
   init_observer();
   init_proxyobserver();
-  var expect24 = expect;
+  var expect23 = expect;
   use(chaiDom);
   var html113 = `
     <template id="current">
@@ -41590,31 +40653,31 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       describe("test Getter && Setter", function() {
         it("setEventTypes()", function() {
           let element = document.getElementById("test1");
-          expect24(new Updater2(element).setEventTypes(["touch"])).to.be.instanceof(Updater2);
+          expect23(new Updater2(element).setEventTypes(["touch"])).to.be.instanceof(Updater2);
         });
         it("getSubject()", function() {
           let element = document.getElementById("test1");
           let subject = { a: 1 };
-          expect24(new Updater2(element, subject).getSubject().a).to.be.equal(1);
+          expect23(new Updater2(element, subject).getSubject().a).to.be.equal(1);
         });
       });
       describe("test control methods", function() {
         it("enableEventProcessing()", function() {
           let element = document.getElementById("test1");
-          expect24(new Updater2(element).enableEventProcessing()).to.be.instanceof(Updater2);
+          expect23(new Updater2(element).enableEventProcessing()).to.be.instanceof(Updater2);
         });
         it("disableEventProcessing()", function() {
           let element = document.getElementById("test1");
-          expect24(new Updater2(element).disableEventProcessing()).to.be.instanceof(Updater2);
+          expect23(new Updater2(element).disableEventProcessing()).to.be.instanceof(Updater2);
         });
       });
       describe("test Errors", function() {
         it("should throw value is not an instance of HTMLElement Error", function() {
-          expect24(() => new Updater2()).to.throw(TypeError);
+          expect23(() => new Updater2()).to.throw(TypeError);
         });
         it("should throw value is wrong", function() {
           let element = document.getElementById("test1");
-          expect24(() => new Updater2(element, null)).to.throw(TypeError);
+          expect23(() => new Updater2(element, null)).to.throw(TypeError);
         });
         it("should throw Error: the value is not iterable", function(done) {
           let element = document.getElementById("test1");
@@ -41633,8 +40696,8 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
                 done(new Error("should never called!"));
               }, 100);
             }).catch((e) => {
-              expect24(e).is.instanceOf(Error);
-              expect24(e + "").to.be.equal("Error: the value is not iterable");
+              expect23(e).is.instanceOf(Error);
+              expect23(e + "").to.be.equal("Error: the value is not iterable");
               done();
             });
           }, 100);
@@ -41649,7 +40712,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
             element,
             {}
           );
-          expect24(typeof d).is.equal("object");
+          expect23(typeof d).is.equal("object");
         });
       });
     });
@@ -41674,9 +40737,9 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           );
           d.run().then(() => {
             setTimeout(() => {
-              expect24(typeof d).is.equal("object");
+              expect23(typeof d).is.equal("object");
               for (let i = 0; i < 6; i++) {
-                expect24(element).contain.html('<li data-monster-replace="path:a.b.' + i + ' | tojson" data-monster-insert-reference="current-' + i + '">{"i":"' + i + '"}</li>');
+                expect23(element).contain.html('<li data-monster-replace="path:a.b.' + i + ' | tojson" data-monster-insert-reference="current-' + i + '">{"i":"' + i + '"}</li>');
               }
               done();
             }, 100);
@@ -41703,7 +40766,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         it("should handle checkbox click events", function(done) {
           updater.enableEventProcessing();
           let subject = updater.getSubject();
-          expect24(subject).is.equal(proxyobserver.getSubject());
+          expect23(subject).is.equal(proxyobserver.getSubject());
           let expected = ["checked", void 0, "checked"];
           proxyobserver.attachObserver(new Observer(function() {
             let e = expected.shift();
@@ -41724,7 +40787,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         it("should handle radio click events 1", function(done) {
           updater.enableEventProcessing();
           let subject = updater.getSubject();
-          expect24(subject).is.equal(proxyobserver.getSubject());
+          expect23(subject).is.equal(proxyobserver.getSubject());
           let expected = ["r1", "r2", "r1"];
           let clickTargets = ["r2", "r1"];
           proxyobserver.attachObserver(new Observer(function() {
@@ -41751,7 +40814,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           let selectElement = document.getElementById("select1");
           updater.enableEventProcessing();
           let subject = updater.getSubject();
-          expect24(subject).is.equal(proxyobserver.getSubject());
+          expect23(subject).is.equal(proxyobserver.getSubject());
           let expected = ["value2", "value1", "value2"];
           proxyobserver.attachObserver(new Observer(function() {
             let e = expected.shift();
@@ -41776,7 +40839,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           let textareaElement = document.getElementById("textarea");
           updater.enableEventProcessing();
           let subject = updater.getSubject();
-          expect24(subject).is.equal(proxyobserver.getSubject());
+          expect23(subject).is.equal(proxyobserver.getSubject());
           let expected = ["testX", "lorem ipsum", ""];
           let testValues = ["lorem ipsum", ""];
           proxyobserver.attachObserver(new Observer(function() {
@@ -41802,7 +40865,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           let selectElement = document.getElementById("select2");
           updater.enableEventProcessing();
           let subject = updater.getSubject();
-          expect24(subject).is.equal(proxyobserver.getSubject());
+          expect23(subject).is.equal(proxyobserver.getSubject());
           let expected = [
             ["value1"],
             ["value2", "value3", "value4"],
@@ -41859,10 +40922,10 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           });
           d.run().then(() => {
             setTimeout(() => {
-              expect24(typeof d).is.equal("object");
-              expect24(element).contain.html('<div data-monster-replace="path:text | tolower">hallo</div>');
-              expect24(element).contain.html('<div data-monster-replace="path:text | call:myformatter">HALLOyes!</div>');
-              expect24(element).contain.html('<div data-monster-replace="static:hello\\ ">hello </div>');
+              expect23(typeof d).is.equal("object");
+              expect23(element).contain.html('<div data-monster-replace="path:text | tolower">hallo</div>');
+              expect23(element).contain.html('<div data-monster-replace="path:text | call:myformatter">HALLOyes!</div>');
+              expect23(element).contain.html('<div data-monster-replace="static:hello\\ ">hello </div>');
               return done();
             }, 100);
           }).catch(
@@ -41893,10 +40956,10 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           );
           d.run().then(() => {
             setTimeout(() => {
-              expect24(typeof d).is.equal("object");
-              expect24(element).contain.html('<div data-monster-insert="myid path:a.b">');
-              expect24(element).contain.html('<p data-monster-insert="myinnerid path:a.b" data-monster-insert-reference="myid-0">');
-              expect24(element).contain.html('<span data-monster-replace="path:a.b.0 | tojson" data-monster-insert-reference="myinnerid-0">{"i":"0"}</span>');
+              expect23(typeof d).is.equal("object");
+              expect23(element).contain.html('<div data-monster-insert="myid path:a.b">');
+              expect23(element).contain.html('<p data-monster-insert="myinnerid path:a.b" data-monster-insert-reference="myid-0">');
+              expect23(element).contain.html('<span data-monster-replace="path:a.b.0 | tojson" data-monster-insert-reference="myinnerid-0">{"i":"0"}</span>');
               done();
             }, 100);
           }).catch(
@@ -41912,17 +40975,17 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         it("should change attributes", function(done) {
           let element = document.getElementById("test3");
           let text = document.getElementById("text");
-          expect24(text.value).to.be.equal("");
+          expect23(text.value).to.be.equal("");
           let radio = document.getElementById("radio");
-          expect24(radio.checked).to.be.false;
+          expect23(radio.checked).to.be.false;
           let checkbox = document.getElementById("checkbox");
-          expect24(checkbox.checked).to.be.false;
+          expect23(checkbox.checked).to.be.false;
           let select = document.getElementById("select");
-          expect24(select.selectedIndex).to.be.equal(0);
+          expect23(select.selectedIndex).to.be.equal(0);
           let multiselect = document.getElementById("multiselect");
-          expect24(multiselect.selectedIndex).to.be.equal(-1);
+          expect23(multiselect.selectedIndex).to.be.equal(-1);
           let textarea = document.getElementById("textarea");
-          expect24(textarea.value).to.be.equal("");
+          expect23(textarea.value).to.be.equal("");
           let d = new Updater2(
             element,
             {
@@ -41940,20 +41003,20 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           );
           d.run().then(() => {
             setTimeout(() => {
-              expect24(element).contain.html('<div data-monster-attributes="class path:a.b" class="div-class">');
-              expect24(element).contain.html('<input data-monster-attributes="value path:a.c" id="input1" value="hello">');
-              expect24(element).contain.html('<textarea name="textarea" id="textarea" data-monster-attributes="value path:a.textarea" value="test">');
-              expect24(element).contain.html('<input data-monster-attributes="checked path:a.radio" type="radio" name="radio" value="r1" id="radio" checked="true">');
-              expect24(text.value, "text control").to.be.equal(d.getSubject()["a"]["c"]);
-              expect24(radio.checked, "radio control").to.be.equal(true);
-              expect24(textarea.value, "textarea control").to.be.equal(d.getSubject()["a"]["textarea"]);
-              expect24(select.selectedIndex, "select control").to.be.equal(1);
+              expect23(element).contain.html('<div data-monster-attributes="class path:a.b" class="div-class">');
+              expect23(element).contain.html('<input data-monster-attributes="value path:a.c" id="input1" value="hello">');
+              expect23(element).contain.html('<textarea name="textarea" id="textarea" data-monster-attributes="value path:a.textarea" value="test">');
+              expect23(element).contain.html('<input data-monster-attributes="checked path:a.radio" type="radio" name="radio" value="r1" id="radio" checked="true">');
+              expect23(text.value, "text control").to.be.equal(d.getSubject()["a"]["c"]);
+              expect23(radio.checked, "radio control").to.be.equal(true);
+              expect23(textarea.value, "textarea control").to.be.equal(d.getSubject()["a"]["textarea"]);
+              expect23(select.selectedIndex, "select control").to.be.equal(1);
               let multiselectSelectedOptions = [];
               for (const [index, obj] of Object.entries(multiselect.selectedOptions)) {
                 multiselectSelectedOptions.push(obj.value);
               }
-              expect24(JSON.stringify(multiselectSelectedOptions), "multiselect control").to.be.equal(JSON.stringify(d.getSubject()["a"]["multiselect"]));
-              expect24(checkbox.checked, "checkbox control").to.be.true;
+              expect23(JSON.stringify(multiselectSelectedOptions), "multiselect control").to.be.equal(JSON.stringify(d.getSubject()["a"]["multiselect"]));
+              expect23(checkbox.checked, "checkbox control").to.be.true;
               done();
             }, 100);
           }).catch(
@@ -41978,7 +41041,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       it("should include space", function() {
         const div = document.getElementById(id.toString());
         const pipe = div.getAttribute("data-monster-replace");
-        expect24(pipe.length).to.be.equal(20);
+        expect23(pipe.length).to.be.equal(20);
       });
     });
     describe("manuel update", function() {
@@ -41995,9 +41058,9 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         document.getElementById(id).value = "hello";
         const updater = new Updater2(mocks);
         const subject = updater.getSubject();
-        expect24(subject).to.not.have.property("myvalue");
+        expect23(subject).to.not.have.property("myvalue");
         updater.retrieve();
-        expect24(subject).to.have.property("myvalue");
+        expect23(subject).to.have.property("myvalue");
       });
     });
     describe("Updater() 20220107", function() {
@@ -42029,7 +41092,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
             d.run().then(() => {
               setTimeout(() => {
                 try {
-                  expect24(containerElement).contain.html("<div>yeah! <b>Test</b>!</div>");
+                  expect23(containerElement).contain.html("<div>yeah! <b>Test</b>!</div>");
                 } catch (e) {
                   return done(e);
                 }
@@ -42126,7 +41189,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   init_constants();
   init_util();
   init_proxyobserver();
-  var expect25 = expect;
+  var expect24 = expect;
   use(chaiDom);
   var html114 = `
     <div id="test1">
@@ -42174,7 +41237,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
       });
       it("should assign an updater to an element", function(done) {
         let element = document2.getElementById("test2");
-        expect25(document2.getElementById("mocks").innerHTML).to.equal(html29);
+        expect24(document2.getElementById("mocks").innerHTML).to.equal(html29);
         const a2 = { a: 1 };
         const b = { b: 2 };
         const ap = new ProxyObserver(a2);
@@ -42185,11 +41248,11 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         set2.add(element);
         assignUpdaterToElement.call(element, set2, ap);
         assignUpdaterToElement.call(element, set2, bp);
-        expect25(JSON.stringify(x)).to.equal('{"a":1}');
-        expect25(JSON.stringify(y)).to.equal('{"b":2}');
+        expect24(JSON.stringify(x)).to.equal('{"a":1}');
+        expect24(JSON.stringify(y)).to.equal('{"b":2}');
         const sy = updaterSymbolSymbol;
         let v = element.getAttribute("data-monster-objectlink");
-        expect25(v).to.equal("Symbol(" + updaterSymbolKey + ")");
+        expect24(v).to.equal("Symbol(" + updaterSymbolKey + ")");
         const updater = element[sy];
         for (const v2 of updater) {
           for (const u of v2) {
@@ -42198,17 +41261,17 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
             });
           }
         }
-        expect25(updater).to.be.an.instanceof(Set);
-        expect25(updater).to.be.a("Set");
+        expect24(updater).to.be.an.instanceof(Set);
+        expect24(updater).to.be.a("Set");
         x.a = 3;
         bp.getSubject().b = 4;
         setTimeout(() => {
           let mockHTML = document2.getElementById("mocks");
-          expect25(mockHTML.querySelector("#test2")).to.have.value("3");
-          expect25(mockHTML.querySelector("#test2")).to.have.attribute("data-monster-objectlink", "Symbol(" + updaterSymbolKey + ")");
-          expect25(element.value).to.equal("3");
-          expect25(JSON.stringify(ap.getRealSubject())).to.equal('{"a":3}');
-          expect25(JSON.stringify(bp.getRealSubject())).to.equal('{"b":4}');
+          expect24(mockHTML.querySelector("#test2")).to.have.value("3");
+          expect24(mockHTML.querySelector("#test2")).to.have.attribute("data-monster-objectlink", "Symbol(" + updaterSymbolKey + ")");
+          expect24(element.value).to.equal("3");
+          expect24(JSON.stringify(ap.getRealSubject())).to.equal('{"a":3}');
+          expect24(JSON.stringify(bp.getRealSubject())).to.equal('{"b":4}');
           done();
         }, 50);
       });
@@ -42275,21 +41338,21 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
                 </monster-testclass2>
                 `;
           let monster = document2.getElementById("thisisatest");
-          expect25(monster.getOption("demotest")).is.eql(1425);
+          expect24(monster.getOption("demotest")).is.eql(1425);
         });
       });
       describe("create", function() {
         it("should return custom-element object", function() {
           let d = new TestComponent();
-          expect25(typeof d).is.equal("object");
+          expect24(typeof d).is.equal("object");
         });
       });
       describe("connect empty element", function() {
         it("document should contain monster-testclass", function() {
           let d = document2.createElement("monster-testclass");
           document2.getElementById("test1").appendChild(d);
-          expect25(document2.getElementsByTagName("monster-testclass").length).is.equal(1);
-          expect25(document2.getElementById("test1")).contain.html('<monster-testclass data-monster-error="Error: html is not set."></monster-testclass>');
+          expect24(document2.getElementsByTagName("monster-testclass").length).is.equal(1);
+          expect24(document2.getElementById("test1")).contain.html('<monster-testclass data-monster-error="Error: html is not set."></monster-testclass>');
         });
       });
       describe("connect element with html", function() {
@@ -42298,9 +41361,9 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           document2.getElementById("test1").appendChild(d);
           setTimeout(function() {
             try {
-              expect25(document2.getElementsByTagName("monster-testclass2").length).is.equal(1);
-              expect25(document2.getElementsByTagName("monster-testclass2").item(0).shadowRoot.innerHTML).is.equal('<h1></h1><article><p>test</p><div id="container"></div></article>');
-              expect25(document2.getElementById("test1")).contain.html('<monster-testclass2 data-monster-objectlink="Symbol(' + updaterSymbolKey + ')"></monster-testclass2>');
+              expect24(document2.getElementsByTagName("monster-testclass2").length).is.equal(1);
+              expect24(document2.getElementsByTagName("monster-testclass2").item(0).shadowRoot.innerHTML).is.equal('<h1></h1><article><p>test</p><div id="container"></div></article>');
+              expect24(document2.getElementById("test1")).contain.html('<monster-testclass2 data-monster-objectlink="Symbol(' + updaterSymbolKey + ')"></monster-testclass2>');
               return done();
             } catch (e) {
               done(e);
@@ -42312,11 +41375,11 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         it("delegatesFocus should change from true to false", function() {
           let element = document2.createElement("monster-testclass");
           const o = element[internalSymbol].realSubject;
-          expect25(Object.is(element[internalSymbol].realSubject, o)).to.be.true;
-          expect25(element[internalSymbol].realSubject.options.delegatesFocus).to.be.true;
-          expect25(element[internalSymbol].subject.options.delegatesFocus).to.be.true;
-          expect25(element.getOption("delegatesFocus")).to.be.true;
-          expect25(Object.is(element[internalSymbol].realSubject, o)).to.be.true;
+          expect24(Object.is(element[internalSymbol].realSubject, o)).to.be.true;
+          expect24(element[internalSymbol].realSubject.options.delegatesFocus).to.be.true;
+          expect24(element[internalSymbol].subject.options.delegatesFocus).to.be.true;
+          expect24(element.getOption("delegatesFocus")).to.be.true;
+          expect24(Object.is(element[internalSymbol].realSubject, o)).to.be.true;
         });
       });
       describe("setOptions()", function() {
@@ -42334,9 +41397,9 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           }
           it(text, function() {
             let d = document2.createElement("monster-testclass");
-            expect25(d.getOption(key)).to.be.not.equal(newValue);
+            expect24(d.getOption(key)).to.be.not.equal(newValue);
             let x = d.setOption(key, newValue);
-            expect25(d.getOption(key)).to.be.equal(newValue);
+            expect24(d.getOption(key)).to.be.equal(newValue);
           });
         });
       });
@@ -42361,7 +41424,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           it(text, function() {
             let d = document2.createElement("monster-testclass");
             let x = d.getOption(key, defaultValue);
-            expect25(x).to.be.equal(value);
+            expect24(x).to.be.equal(value);
           });
         });
       });
@@ -42395,7 +41458,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           let d = document2.createElement(htmlTAG);
           let div = document2.getElementById("test1");
           div.append(d);
-          expect25(div).contain.html('data-monster-error="TypeError: value is not an instance of CSSStyleSheet"');
+          expect24(div).contain.html('data-monster-error="TypeError: value is not an instance of CSSStyleSheet"');
           done();
         });
       });
@@ -42429,7 +41492,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           let d = document2.createElement(htmlTAG);
           let div = document2.getElementById("test1");
           div.append(d);
-          expect25(d.shadowRoot.innerHTML).is.eq("<h1>test</h1>");
+          expect24(d.shadowRoot.innerHTML).is.eq("<h1>test</h1>");
           done();
         });
       });
@@ -42461,7 +41524,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           let d = document2.createElement(htmlTAG);
           let div = document2.getElementById("test1");
           div.append(d);
-          expect25(d.shadowRoot.innerHTML).is.eq("<style>a { color:red }</style><h1>test</h1>");
+          expect24(d.shadowRoot.innerHTML).is.eq("<style>a { color:red }</style><h1>test</h1>");
           done();
         });
       });
@@ -42493,7 +41556,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           let d = document2.createElement(htmlTAG);
           let div = document2.getElementById("test1");
           div.append(d);
-          expect25(d.shadowRoot.innerHTML).is.eq("<style>a { color:red }</style><h1>test</h1>");
+          expect24(d.shadowRoot.innerHTML).is.eq("<style>a { color:red }</style><h1>test</h1>");
           done();
         });
       });
@@ -42516,11 +41579,11 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           let div = document2.getElementById("test1");
           div.append(d);
           let n1 = document2.createElement("p");
-          expect25(d.hasNode(n1)).to.be.false;
-          expect25(d.hasNode(t)).to.be.true;
-          expect25(d.hasNode(p)).to.be.true;
-          expect25(d.hasNode(p1)).to.be.true;
-          expect25(d.hasNode(t1)).to.be.true;
+          expect24(d.hasNode(n1)).to.be.false;
+          expect24(d.hasNode(t)).to.be.true;
+          expect24(d.hasNode(p)).to.be.true;
+          expect24(d.hasNode(p1)).to.be.true;
+          expect24(d.hasNode(t1)).to.be.true;
         });
         it("hasNode monster-testclass2 should return ...", function() {
           let d = document2.createElement("monster-testclass2");
@@ -42536,11 +41599,11 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           let a2 = d.shadowRoot.getElementById("container");
           d.shadowRoot.getElementById("container").appendChild(p);
           let n1 = document2.createElement("p");
-          expect25(d.hasNode(n1)).to.be.false;
-          expect25(d.hasNode(t)).to.be.true;
-          expect25(d.hasNode(p)).to.be.true;
-          expect25(d.hasNode(p1)).to.be.true;
-          expect25(d.hasNode(t1)).to.be.true;
+          expect24(d.hasNode(n1)).to.be.false;
+          expect24(d.hasNode(t)).to.be.true;
+          expect24(d.hasNode(p)).to.be.true;
+          expect24(d.hasNode(p1)).to.be.true;
+          expect24(d.hasNode(t1)).to.be.true;
         });
       });
     });
@@ -42792,7 +41855,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
 
   // test/cases/dom/customelement-initfromscripthost.mjs
   init_util();
-  var expect26 = expect;
+  var expect25 = expect;
   use(chaiDom);
   describe("DOM", function() {
     let CustomElement2, registerCustomElement2, TestComponent, document2, TestComponent2, assignUpdaterToElement;
@@ -42843,8 +41906,8 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           let control = document2.createElement(randomTagNumber);
           control.setAttribute("data-monster-script-host", "call-back-host");
           document2.getElementById("container").appendChild(control);
-          expect26(control.getOption("test")).is.eql(0);
-          expect26(control.hasAttribute("data-monster-error")).is.true;
+          expect25(control.getOption("test")).is.eql(0);
+          expect25(control.hasAttribute("data-monster-error")).is.true;
         });
         it("should found callback initCustomControlCallback", function() {
           let mocks = document2.getElementById("mocks");
@@ -42856,21 +41919,21 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           let control = document2.createElement(randomTagNumber);
           control.setAttribute("data-monster-script-host", "call-back-host");
           document2.getElementById("container").appendChild(control);
-          expect26(control.getOption("test")).is.eql(1);
-          expect26(control.hasAttribute("data-monster-error")).is.false;
+          expect25(control.getOption("test")).is.eql(1);
+          expect25(control.hasAttribute("data-monster-error")).is.false;
         });
         it("should found callback initCustomControlCallback from self", function() {
           let mocks = document2.getElementById("mocks");
           mocks.innerHTML = `<div id="call-back-host"></div><div id="container"></div>`;
           let control = document2.createElement(randomTagNumber);
-          expect26(control.getOption("test")).is.eql(0);
+          expect25(control.getOption("test")).is.eql(0);
           control.initCustomControlCallback = function(control2) {
             control2.setOption("test", 2);
           };
           control.setAttribute("data-monster-script-host", "call-back-host");
           document2.getElementById("container").appendChild(control);
-          expect26(control.getOption("test")).is.eql(2);
-          expect26(control.hasAttribute("data-monster-error")).is.false;
+          expect25(control.getOption("test")).is.eql(2);
+          expect25(control.hasAttribute("data-monster-error")).is.false;
         });
       });
     });
@@ -43278,7 +42341,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
 
   // test/cases/dom/customcontrol.mjs
   init_util();
-  var expect27 = expect;
+  var expect26 = expect;
   use(chaiDom);
   var html116 = `
     <div id="test1">
@@ -43330,19 +42393,19 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           };
           registerCustomElement2(TestComponent2);
         } catch (e) {
-          expect27(e).to.be.not.null;
+          expect26(e).to.be.not.null;
         }
         element = document2.createElement("monster-customcontrol2");
       });
       afterEach(() => {
       });
       it("should return undefined", function() {
-        expect27(element.formDisabledCallback()).to.be.undefined;
-        expect27(element.hasAttribute("disabled")).to.be.false;
-        expect27(element.formDisabledCallback(true)).to.be.undefined;
-        expect27(element.hasAttribute("disabled")).to.be.true;
+        expect26(element.formDisabledCallback()).to.be.undefined;
+        expect26(element.hasAttribute("disabled")).to.be.false;
+        expect26(element.formDisabledCallback(true)).to.be.undefined;
+        expect26(element.hasAttribute("disabled")).to.be.true;
         const d = element.getAttribute("disabled");
-        expect27(d).to.not.be.null;
+        expect26(d).to.not.be.null;
       });
     });
     describe("CustomControl()", function() {
@@ -43362,17 +42425,17 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
           try {
             d = new TestComponent();
           } catch (e) {
-            expect27(e).to.be.null;
+            expect26(e).to.be.null;
           }
-          expect27(typeof d).is.equal("object");
+          expect26(typeof d).is.equal("object");
         });
       });
       describe("connect empty element", function() {
         it("document should contain monster-customcontrol", function() {
           let d = document2.createElement("monster-customcontrol");
           document2.getElementById("test1").appendChild(d);
-          expect27(document2.getElementsByTagName("monster-customcontrol").length).is.equal(1);
-          expect27(document2.getElementById("test1")).contain.html('<monster-customcontrol data-monster-error="Error: html is not set."></monster-customcontrol>');
+          expect26(document2.getElementsByTagName("monster-customcontrol").length).is.equal(1);
+          expect26(document2.getElementById("test1")).contain.html('<monster-customcontrol data-monster-error="Error: html is not set."></monster-customcontrol>');
         });
       });
       describe("Test ElementInternals", function() {
@@ -43383,22 +42446,22 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         it("formAssociated", function() {
           let d = document2.createElement("monster-customcontrol");
           form.appendChild(d);
-          expect27(d.constructor.formAssociated).to.be.true;
+          expect26(d.constructor.formAssociated).to.be.true;
         });
         it("form", function() {
           let d = document2.createElement("monster-customcontrol");
           form.appendChild(d);
-          expect27(d.form).to.be.instanceof(HTMLFormElement);
+          expect26(d.form).to.be.instanceof(HTMLFormElement);
         });
         it("value getter", function() {
           let d = document2.createElement("monster-customcontrol");
           form.appendChild(d);
-          expect27(() => d.value).to.throw(Error);
+          expect26(() => d.value).to.throw(Error);
         });
         it("value setter", function() {
           let d = document2.createElement("monster-customcontrol");
           form.appendChild(d);
-          expect27(() => d.value = 4).to.throw(Error);
+          expect26(() => d.value = 4).to.throw(Error);
         });
         it("setFormValue", function() {
           let d = document2.createElement("monster-customcontrol");
@@ -43407,12 +42470,12 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         it("name getter", function() {
           let d = document2.createElement("monster-customcontrol");
           form.appendChild(d);
-          expect27(d.name).to.be.null;
+          expect26(d.name).to.be.null;
         });
         it("type getter", function() {
           let d = document2.createElement("monster-customcontrol");
           form.appendChild(d);
-          expect27(d.type).to.be.equal("monster-customcontrol");
+          expect26(d.type).to.be.equal("monster-customcontrol");
         });
         it("validity getter", function() {
           let d = document2.createElement("monster-customcontrol");
@@ -43437,7 +42500,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         it("setValidity()", function() {
           let d = document2.createElement("monster-customcontrol");
           form.appendChild(d);
-          expect27(d.setValidity({ "valueMissing": true }, "my message")).to.be.undefined;
+          expect26(d.setValidity({ "valueMissing": true }, "my message")).to.be.undefined;
         });
       });
     });
@@ -47975,6 +47038,60 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
         });
       });
     });
+    describe(".isInstanceExtended()", function() {
+      class Base2 {
+      }
+      class Derived extends Base2 {
+      }
+      function AnotherClass() {
+      }
+      let baseInstance = new Base2();
+      let derivedInstance = new Derived();
+      const cases = [
+        [() => {
+        }, void 0, false, "function vs undefined"],
+        [new ID(), () => {
+        }, false, "ID instance vs function"],
+        [new ID(), ID, true, "ID instance vs ID"],
+        ["test1", void 0, false, "string vs undefined"],
+        [void 0, void 0, false, "undefined vs undefined"],
+        [null, void 0, false, "null vs undefined"],
+        [2, void 0, false, "number vs undefined"],
+        [false, void 0, false, "false vs undefined"],
+        [parseInt("a"), void 0, false, "NaN vs undefined"],
+        [true, void 0, false, "true vs undefined"],
+        [4.5, void 0, false, "float vs undefined"],
+        [{}, void 0, false, "object vs undefined"],
+        [[1, 2, 3], void 0, false, "array vs undefined"],
+        [Symbol("foo"), void 0, false, "symbol vs undefined"],
+        [baseInstance, Base2, true, "Base instance vs Base"],
+        [derivedInstance, Base2, true, "Derived instance vs Base"],
+        [derivedInstance, Derived, true, "Derived instance vs Derived"],
+        [baseInstance, Derived, false, "Base instance vs Derived"],
+        [baseInstance, AnotherClass, false, "Base instance vs AnotherClass"],
+        [derivedInstance, () => {
+        }, false, "Derived instance vs function"],
+        [new AnotherClass(), AnotherClass, true, "AnotherClass instance vs AnotherClass"]
+      ];
+      let protoModifiedInstance = new Base2();
+      Object.setPrototypeOf(protoModifiedInstance, Derived.prototype);
+      cases.push(
+        [protoModifiedInstance, Base2, true, "Proto modified Base instance vs Base"],
+        [protoModifiedInstance, Derived, true, "Proto modified Base instance vs Derived"]
+      );
+      cases.forEach(function(data) {
+        const a2 = data.shift();
+        const b = data.shift();
+        const c = data.shift();
+        const d = data.shift();
+        it("isInstance(" + JSON.stringify(a2) + ", [Function]) should return " + c, function() {
+          if (isInstance(a2, b) !== c) {
+            console.log(d);
+          }
+          expect(isInstance(a2, b)).to.equal(c);
+        });
+      });
+    });
     describe(".isObject()", function() {
       [
         ["test1", false],
@@ -49131,15 +48248,15 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   // test/cases/i18n/providers/fetch.mjs
   init_translations();
   init_global();
-  var global19 = getGlobal();
+  var global18 = getGlobal();
   var fetchReference3;
   describe("Translation Provider Fetch", function() {
     afterEach(() => {
-      global19["fetch"] = fetchReference3;
+      global18["fetch"] = fetchReference3;
     });
     beforeEach(() => {
-      fetchReference3 = global19["fetch"];
-      global19["fetch"] = function(url, options2) {
+      fetchReference3 = global18["fetch"];
+      global18["fetch"] = function(url, options2) {
         return new Promise((resolve, reject) => {
           resolve({
             json: function() {
@@ -49173,7 +48290,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   init_embed();
   init_translations();
   init_global();
-  var global20 = getGlobal();
+  var global19 = getGlobal();
   var html117 = `
 <script id="templocale" type="application/json">
 {
@@ -51424,34 +50541,6 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
  * @copyright schukai GmbH
  * @throws {Error} unsupported
  */
-/**
- * Converts a CSS value to pixels.
- *
- * As Example:
- *
- * ```js
- * convertToPixels('1em') // returns the current font size in pixels
- * convertToPixels('1rem') // returns the current root font size in pixels
- * convertToPixels('1px') // returns 1
- * convertToPixels('100%') // returns the current width of the parent element in pixels
- * ```
- *
- * Following units are supported:
- * - px
- * - em
- * - rem
- * - %
- *
- * @param {string} value
- * @param {HTMLElement} [parentElement=document.documentElement]
- * @param {HTMLElement} [fontSizeElement=document.documentElement]
- * @return {number}
- * @license AGPLv3
- * @since 3.34.0
- * @copyright schukai GmbH
- * @throws {Error} Unsupported unit
- * @throws {Error} Invalid value format
- */
 /**
  * The class represents a record.
  *
@@ -51559,6 +50648,34 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
  * @copyright schukai GmbH
  * @author schukai GmbH
  */
+/**
+ * Converts a CSS value to pixels.
+ *
+ * As Example:
+ *
+ * ```js
+ * convertToPixels('1em') // returns the current font size in pixels
+ * convertToPixels('1rem') // returns the current root font size in pixels
+ * convertToPixels('1px') // returns 1
+ * convertToPixels('100%') // returns the current width of the parent element in pixels
+ * ```
+ *
+ * Following units are supported:
+ * - px
+ * - em
+ * - rem
+ * - %
+ *
+ * @param {string} value
+ * @param {HTMLElement} [parentElement=document.documentElement]
+ * @param {HTMLElement} [fontSizeElement=document.documentElement]
+ * @return {number}
+ * @license AGPLv3
+ * @since 3.34.0
+ * @copyright schukai GmbH
+ * @throws {Error} Unsupported unit
+ * @throws {Error} Invalid value format
+ */
 /**
  * A factory for creating worker instances.
  *
@@ -51802,7 +50919,7 @@ pvtsutils/build/index.js:
   (*!
    * MIT License
    * 
-   * Copyright (c) 2017-2022 Peculiar Ventures, LLC
+   * Copyright (c) 2017-2024 Peculiar Ventures, LLC
    * 
    * Permission is hereby granted, free of charge, to any person obtaining a copy
    * of this software and associated documentation files (the "Software"), to deal
@@ -52127,7 +51244,7 @@ chai/chai.js:
      *)
   *)
 */
-//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc291cmNlL3R5cGVzL2lzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy90eXBlb2YubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2V4dGVuZC5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RvbS1zdG9yYWdlQDIuMS4wL25vZGVfbW9kdWxlcy9kb20tc3RvcmFnZS9saWIvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2VsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsQDEuMy4xMi9ub2RlX21vZHVsZXMvZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGwvZGlzdC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHZ0c3V0aWxzQDEuMy41L25vZGVfbW9kdWxlcy9wdnRzdXRpbHMvYnVpbGQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3B2dXRpbHNAMS4xLjMvbm9kZV9tb2R1bGVzL3B2dXRpbHMvYnVpbGQvdXRpbHMuZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FzbjFqc0AzLjAuNS9ub2RlX21vZHVsZXMvYXNuMWpzL2J1aWxkL2luZGV4LmVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2VudW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL2JpdF9zdHJpbmcuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvdHlwZXMvb2N0ZXRfc3RyaW5nLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2NvbnZlcnRlcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvaGVscGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3NjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xMy9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9zdG9yYWdlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2RlY29yYXRvcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvZXJyb3JzL3NjaGVtYV92YWxpZGF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2Vycm9ycy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xMy9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9wYXJzZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvc2VyaWFsaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xMy9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9vYmplY3RzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2NvbnZlcnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuOC4xL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIranNvbi1zY2hlbWFAMS4xLjEyL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvanNvbi1zY2hlbWEvYnVpbGQvaW5kZXguZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3dlYmNyeXB0by1jb3JlQDEuOC4xL25vZGVfbW9kdWxlcy93ZWJjcnlwdG8tY29yZS9idWlsZC93ZWJjcnlwdG8tY29yZS5lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2llZWU3NTRAMS4yLjEvbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2J1ZmZlckA1LjcuMS9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrd2ViY3J5cHRvQDEuNS4wL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvd2ViY3J5cHRvL2J1aWxkL3dlYmNyeXB0by5lcy5qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RhbnRzLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFZpZXdwb3J0UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9pbmRleC5qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvYmFzZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3N0YWNrLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9wYXRoZmluZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdG9rZW5saXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL2Nsb25lLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9sb2NhbGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vbG9jYWxlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL3RyYW5zZm9ybWVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9waXBlLm1qcyIsICIuLi8uLi9zb3VyY2UvdGV4dC9mb3JtYXR0ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9tZWRpYXR5cGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcXVldWUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy91bmlxdWVxdWV1ZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXJsaXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcHJveHlvYnNlcnZlci5tanMiLCAiLi4vLi4vc291cmNlL2RvbS90aGVtZS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS90ZW1wbGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGlmZi5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvdHJpbXNwYWNlcy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9ldmVudHMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdXBkYXRlci5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9zbG90dGVkLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwvZXh0cmFjdC1rZXlzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwvaW5pdC1vcHRpb25zLWZyb20tYXR0cmlidXRlcy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS91dGlsL3NldC1vcHRpb24tZnJvbS1hdHRyaWJ1dGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vY3VzdG9tZWxlbWVudC5tanMiLCAiLi4vLi4vc291cmNlL21hdGgvcmFuZG9tLm1qcyIsICIuLi8uLi9zb3VyY2UvdXRpbC9kZWFkbWFuc3N3aXRjaC5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvcHJvY2Vzc2luZy9jYWxsYmFjay5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvcHJvY2Vzc2luZy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25zdGFudHMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L3RhYnMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdXRpbC9mZXRjaC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvc3R5bGVzaGVldC90aGVtZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS91dGlsL3BvcHBlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9zdHlsZXNoZWV0L21lc3NhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvc3R5bGVzaGVldC9ub3RpZnkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L3NwbGl0LXBhbmVsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3BsaXQtcGFuZWwubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L3BhbmVsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvcGFuZWwubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vY3VzdG9tY29udHJvbC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L2J1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvc3R5bGVzaGVldC9yaXBwbGUubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vYnV0dG9uLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGZsb2F0aW5nLXVpK3V0aWxzQDAuMi44L25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aStjb3JlQDEuNi44L25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvY29yZS9kaXN0L2Zsb2F0aW5nLXVpLmNvcmUubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmxvYXRpbmctdWkrdXRpbHNAMC4yLjgvbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS91dGlscy9kaXN0L2Zsb2F0aW5nLXVpLnV0aWxzLmRvbS5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aStkb21AMS42LjEyL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvZG9tL2Rpc3QvZmxvYXRpbmctdWkuZG9tLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3V0aWwvZmxvYXRpbmctdWkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcmVsb2FkLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvc3RhdGUtYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3R5cGVzL3N0YXRlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvYnVpbGRtYXAubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9zZWxlY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc2VsZWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcG9wcGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvcG9wcGVyLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9wb3BwZXItYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvY29uZmlybS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZGF0YXRhYmxlL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGFzb3VyY2UubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2RhdGF0YWJsZS9zdHlsZXNoZWV0L2RhdGFzZXQubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2RhdGF0YWJsZS91dGlsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9zdHlsZXNoZWV0L2Zvcm0ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhc2V0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvZm9ybS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9mb3JtLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9ub2RlLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9idWlsZHRyZWUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC90cmVlLXNlbGVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3RvZ2dsZS1zd2l0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdG9nZ2xlLXN3aXRjaC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9zdHlsZXNoZWV0L2hvc3QubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZWFkeS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9mb2N1c21hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9pbnRlcm5hbC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9kYXRhLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2xpbmsubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvbGluay9zdHlsZXNoZWV0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL3NjcmlwdC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZW1hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvc3R5bGVzaGVldC9jb25maWctbWFuYWdlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9jb25maWctbWFuYWdlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9ob3N0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3N0eWxlc2hlZXQvb3ZlcmxheS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9vdmVybGF5Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L2RldGFpbHMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvY29uc3RhbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC9jb2xsYXBzZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L2NvbGxhcHNlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlscy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9kZXRhaWxzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcmFuZG9taWQubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy91dWlkLm1qcyIsICJwcmVwYXJlLmpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDUuMS4yL25vZGVfbW9kdWxlcy9jaGFpL2NoYWkuanMiLCAiLi4vdXRpbC9jaGFpLWRvbS5tanMiLCAiLi4vdXRpbC9qc2RvbS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9sYXlvdXQvc2xpdC1wYW5lbC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9sYXlvdXQvcGFuZWwubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2NvbnRlbnQvZWRpdG9yL3BsdWdpbi90ZXh0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9jb250ZW50L2VkaXRvci9wbHVnaW4vc3R5bGVzaGVldC90ZXh0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9jb250ZW50L2VkaXRvci9wbHVnaW4ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vYnV0dG9uLWJhci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L2J1dHRvbi1iYXIubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vZGltZW5zaW9uLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2NvbnRlbnQvZWRpdG9yL3BsdWdpbi90ZXh0Lm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vcmVsb2FkLm1qcyIsICIuLi91dGlsL2ludGVyc2VjdGlvbi1tb2NrLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vc3RhdGUtYnV0dG9uLm1qcyIsICIuLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL2NvbmZpcm0tYnV0dG9uLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vZm9ybS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vdHJlZS1zZWxlY3QubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9idXR0b24ubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS90b2dnbGUtc3dpdGNoLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGUubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvbm90aWZ5L21lc3NhZ2UubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvbm90aWZ5L25vdGlmeS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ob3N0L2hvc3QubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvaG9zdC9vdmVybGF5Lm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2hvc3QvdXRpbC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ob3N0L2RldGFpbHMubWpzIiwgIi4uL2Nhc2VzL3RleHQvZm9ybWF0dGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdGV4dC9nZW5lcmF0ZS1yYW5nZS1jb21wYXJpc29uLWV4cHJlc3Npb24ubWpzIiwgIi4uL2Nhc2VzL3RleHQvdXRpbC5tanMiLCAiLi4vLi4vc291cmNlL3RleHQvYnJhY2tldGVkLWtleS12YWx1ZS1oYXNoLm1qcyIsICIuLi9jYXNlcy90ZXh0L2JyYWNrZXRlZC1rZXktdmFsdWUtaGFzaC5tanMiLCAiLi4vY2FzZXMvbWF0aC9yYW5kb20ubWpzIiwgIi4uL2Nhc2VzL3V0aWwvdHJpbXNwYWNlcy5tanMiLCAiLi4vY2FzZXMvdXRpbC9wcm9jZXNzaW5nLm1qcyIsICIuLi9jYXNlcy91dGlsL2RlYWRtYW5zc3dpdGNoLm1qcyIsICIuLi8uLi9zb3VyY2UvdXRpbC9jb21wYXJhdG9yLm1qcyIsICIuLi9jYXNlcy91dGlsL2NvbXBhcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL2ZyZWV6ZS5tanMiLCAiLi4vY2FzZXMvdXRpbC9mcmVlemUubWpzIiwgIi4uL2Nhc2VzL3V0aWwvY2xvbmUubWpzIiwgIi4uLy4uL3NvdXJjZS9sb2dnaW5nL2hhbmRsZXIvY29uc29sZS5tanMiLCAiLi4vLi4vc291cmNlL2xvZ2dpbmcvaGFuZGxlci5tanMiLCAiLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZW50cnkubWpzIiwgIi4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2dlci5tanMiLCAiLi4vY2FzZXMvbG9nZ2luZy9oYW5kbGVyL2NvbnNvbGUubWpzIiwgIi4uL2Nhc2VzL2xvZ2dpbmcvbG9nZ2VyLm1qcyIsICIuLi9jYXNlcy9sb2dnaW5nL2hhbmRsZXIubWpzIiwgIi4uL2Nhc2VzL2xvZ2dpbmcvbG9nZW50cnkubWpzIiwgIi4uLy4uL3NvdXJjZS9uZXQvd2ViY29ubmVjdC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmFibGVxdWV1ZS5tanMiLCAiLi4vLi4vc291cmNlL25ldC93ZWJjb25uZWN0L21lc3NhZ2UubWpzIiwgIi4uL2Nhc2VzL25ldC93ZWJjb25uZWN0Lm1qcyIsICIuLi91dGlsL3dlYnNvY2tldC5tanMiLCAiLi4vY2FzZXMvbmV0L3dlYmNvbm5lY3QvbWVzc2FnZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3ZlcnNpb24ubWpzIiwgIi4uL2Nhc2VzL21vbnN0ZXIubWpzIiwgIi4uL2Nhc2VzL2RvbS9kaW1lbnNpb24ubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3J1bnRpbWUubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9saW5rL3N0eWxlc2hlZXQubWpzIiwgIi4uL3V0aWwvY2xlYW51cGRvbS5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL2xpbmsubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9zY3JpcHQubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9kYXRhLm1qcyIsICIuLi9jYXNlcy9kb20vdXRpbC9pbml0LW9wdGlvbnMtZnJvbS1hdHRyaWJ1dGVzLm1qcyIsICIuLi9jYXNlcy9kb20vdXRpbC9leHRyYWN0LWtleXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vd29ya2VyL2ZhY3RvcnkubWpzIiwgIi4uL2Nhc2VzL2RvbS93b3JrZXIvZmFjdG9yeS5tanMiLCAiLi4vY2FzZXMvZG9tL3VwZGF0ZXIubWpzIiwgIi4uL2Nhc2VzL2RvbS9sb2NhbGUubWpzIiwgIi4uL2Nhc2VzL2RvbS90aGVtZS5tanMiLCAiLi4vY2FzZXMvZG9tL2N1c3RvbWVsZW1lbnQubWpzIiwgIi4uL2Nhc2VzL2RvbS9mb2N1c21hbmFnZXIubWpzIiwgIi4uL2Nhc2VzL2RvbS9maW5kLm1qcyIsICIuLi9jYXNlcy9kb20vcmVhZHkubWpzIiwgIi4uL2Nhc2VzL2RvbS91dGlsLm1qcyIsICIuLi9jYXNlcy9kb20vY3VzdG9tZWxlbWVudC1pbml0ZnJvbXNjcmlwdGhvc3QubWpzIiwgIi4uL2Nhc2VzL2RvbS9zbG90dGVkLW5vZGVzLm1qcyIsICIuLi9jYXNlcy9kb20vYXR0cmlidXRlcy5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlLm1qcyIsICIuLi9jYXNlcy9kb20vcmVzb3VyY2VtYW5hZ2VyLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2Fzc2VtYmxlci5tanMiLCAiLi4vY2FzZXMvZG9tL2Fzc2VtYmxlci5tanMiLCAiLi4vY2FzZXMvZG9tL2N1c3RvbWNvbnRyb2wubWpzIiwgIi4uL2Nhc2VzL2RvbS90ZW1wbGF0ZS5tanMiLCAiLi4vY2FzZXMvZG9tL2V2ZW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9kb20ubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9kb20ubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzIiwgIi4uL3V0aWwvbG9jYWxzdG9yYWdlLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0Lm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3dlYnNvY2tldC5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS93cml0ZWVycm9yLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL2RhdGEtZmV0Y2gtZXJyb3IubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlLm1qcyIsICIuLi9jYXNlcy9kYXRhL2J1aWxkbWFwLm1qcyIsICIuLi9jYXNlcy9kYXRhL3RyYW5zZm9ybWVyLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RpZmYubWpzIiwgIi4uL2Nhc2VzL2RhdGEvYnVpbGR0cmVlLm1qcyIsICIuLi9jYXNlcy9kYXRhL3BhdGhmaW5kZXIubWpzIiwgIi4uL2Nhc2VzL2RhdGEvcGlwZS5tanMiLCAiLi4vY2FzZXMvZGF0YS9leHRlbmQubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hYnN0cmFjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2ludmFsaWQubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvaW52YWxpZC5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9hYnN0cmFjdG9wZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvYWJzdHJhY3RvcGVyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvb3JvcGVyYXRvci5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9vcm9wZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaXNvYmplY3QubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvaXNvYmplY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hbmRvcGVyYXRvci5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9hbmRvcGVyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2lzYXJyYXkubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvaXNhcnJheS5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC92YWxpZC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvbm9kZWxpc3QubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2Jhc2UubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL21lZGlhdHlwZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdG9rZW5saXN0Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9wcm94eW9ic2VydmVyLm1qcyIsICIuLi9jYXNlcy90eXBlcy92ZXJzaW9uLm1qcyIsICIuLi9jYXNlcy90eXBlcy9nbG9iYWwubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL29ic2VydmVybGlzdC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvaW50ZXJuYWwubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL29ic2VydmFibGVxdWV1ZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvZGF0YXVybC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL2JpbmFyeS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvYmluYXJ5Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9vYnNlcnZlci5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3JlZ2V4Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9yZWdleC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvcmFuZG9taWQubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2lkLm1qcyIsICIuLi9jYXNlcy90eXBlcy91dWlkLm1qcyIsICIuLi9jYXNlcy90eXBlcy9pcy5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdmFsaWRhdGUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3R5cGVvZi5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdW5pcXVlcXVldWUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3N0YWNrLm1qcyIsICIuLi9jYXNlcy90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL25vZGUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3F1ZXVlLm1qcyIsICIuLi9jYXNlcy90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL2Zvcm1hdHRlci5tanMiLCAiLi4vY2FzZXMvaTE4bi9mb3JtYXR0ZXIubWpzIiwgIi4uL2Nhc2VzL2kxOG4vbG9jYWxlLm1qcyIsICIuLi9jYXNlcy9pMThuL3Byb3ZpZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZmV0Y2gubWpzIiwgIi4uL2Nhc2VzL2kxOG4vcHJvdmlkZXJzL2ZldGNoLm1qcyIsICIuLi9jYXNlcy9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanMiLCAiLi4vY2FzZXMvaTE4bi90cmFuc2xhdGlvbnMubWpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQge1xuXHRpc0l0ZXJhYmxlLFxuXHRpc1ByaW1pdGl2ZSxcblx0aXNTeW1ib2wsXG5cdGlzQm9vbGVhbixcblx0aXNTdHJpbmcsXG5cdGlzT2JqZWN0LFxuXHRpc0luc3RhbmNlLFxuXHRpc0FycmF5LFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0ludGVnZXIsXG59O1xuXG4vKipcbiAqIFdpdGggdGhpcyBmdW5jdGlvbiB5b3UgY2FuIGNoZWNrIGlmIGEgdmFsdWUgaXMgaXRlcmFibGUuXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5pc1ByaW1pdGl2ZSgpYC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtMS5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNJdGVyYWJsZSh2YWx1ZSkge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZT8uW1N5bWJvbC5pdGVyYXRvcl0gPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgcHJpbWl0aXZlIChzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgTmFOLCB1bmRlZmluZWQsIG51bGwgb3Igc3ltYm9sKVxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy0yLm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHR2YXIgdHlwZTtcblxuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRpZiAoXG5cdFx0dHlwZSA9PT0gXCJzdHJpbmdcIiB8fFxuXHRcdHR5cGUgPT09IFwibnVtYmVyXCIgfHxcblx0XHR0eXBlID09PSBcImJvb2xlYW5cIiB8fFxuXHRcdHR5cGUgPT09IFwic3ltYm9sXCJcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIHN5bWJvbFxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy0zLm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRyZXR1cm4gXCJzeW1ib2xcIiA9PT0gdHlwZW9mIHZhbHVlID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBib29sZWFuLlxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy00Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcblx0aWYgKHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBzdHJpbmdcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtNS5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBvYmplY3RcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtNi5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcblx0aWYgKGlzQXJyYXkodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblxuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIG9iamVjdCBhbmQgaW5zdGFuY2Ugb2YgaW5zdGFuY2UuXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTcubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0geyp9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGlzSW5zdGFuY2UodmFsdWUsIGluc3RhbmNlKSB7XG5cdGlmICghaXNPYmplY3QodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghaXNGdW5jdGlvbihpbnN0YW5jZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCFpbnN0YW5jZS5oYXNPd25Qcm9wZXJ0eShcInByb3RvdHlwZVwiKSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBpbnN0YW5jZSA/IHRydWUgOiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgYXJyYXlcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtOC5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZGUvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvaXNBcnJheVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbHVlKSB7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgZnVuY3Rpb25cbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtOS5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuXHRpZiAoaXNBcnJheSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKGlzUHJpbWl0aXZlKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG5cdGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYW4gaW50ZWdlci5cbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtMTAubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuXHRyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0aXNBcnJheSxcblx0aXNCb29sZWFuLFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0luc3RhbmNlLFxuXHRpc0ludGVnZXIsXG5cdGlzSXRlcmFibGUsXG5cdGlzT2JqZWN0LFxuXHRpc1ByaW1pdGl2ZSxcblx0aXNTdHJpbmcsXG5cdGlzU3ltYm9sLFxufSBmcm9tIFwiLi9pcy5tanNcIjtcblxuZXhwb3J0IHtcblx0dmFsaWRhdGVJdGVyYWJsZSxcblx0dmFsaWRhdGVQcmltaXRpdmUsXG5cdHZhbGlkYXRlQm9vbGVhbixcblx0dmFsaWRhdGVTdHJpbmcsXG5cdHZhbGlkYXRlT2JqZWN0LFxuXHR2YWxpZGF0ZUluc3RhbmNlLFxuXHR2YWxpZGF0ZUFycmF5LFxuXHR2YWxpZGF0ZVN5bWJvbCxcblx0dmFsaWRhdGVGdW5jdGlvbixcblx0dmFsaWRhdGVJbnRlZ2VyLFxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgcHJpbWl0aXZlIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzUHJpbWl0aXZlKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlSXRlcmFibGV9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUl0ZXJhYmxlKCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUl0ZXJhYmxlKFtdKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHByaW1pdGl2ZVxuICogQHNlZSB7QGxpbmsgaXNQcmltaXRpdmV9XG4gKiBAc2VlIHtAbGluayBNb25zdGVyLlR5cGVzLmlzUHJpbWl0aXZlfVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5UeXBlcyNpc1ByaW1pdGl2ZX1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJdGVyYWJsZSh2YWx1ZSkge1xuXHRpZiAoIWlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBpdGVyYWJsZVwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIHByaW1pdGl2ZSB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc1ByaW1pdGl2ZSgpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZVByaW1pdGl2ZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlUHJpbWl0aXZlKCcyJykpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlUHJpbWl0aXZlKFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBwcmltaXRpdmVcbiAqIEBzZWUge0BsaW5rIGlzUHJpbWl0aXZlfVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5UeXBlcy5pc1ByaW1pdGl2ZX1cbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuVHlwZXMjaXNQcmltaXRpdmV9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUHJpbWl0aXZlKHZhbHVlKSB7XG5cdGlmICghaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhIHByaW1pdGl2ZVwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGJvb2xlYW4gdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNCb29sZWFuKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlQm9vbGVhbn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQm9vbGVhbihmYWxzZSkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQm9vbGVhbignMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVCb29sZWFuKFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9ICB2YWx1ZSBpcyBub3QgcHJpbWl0aXZlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQm9vbGVhbih2YWx1ZSkge1xuXHRpZiAoIWlzQm9vbGVhbih2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgYm9vbGVhblwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIHN0cmluZyB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc1N0cmluZygpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZVN0cmluZ30gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlU3RyaW5nKCcyJykpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlU3RyaW5nKFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdHJpbmcodmFsdWUpIHtcblx0aWYgKCFpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgc3RyaW5nXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgb2JqZWN0IHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzT2JqZWN0KCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlT2JqZWN0fSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVPYmplY3Qoe30pKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZU9iamVjdCgnMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVPYmplY3QoW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU9iamVjdCh2YWx1ZSkge1xuXHRpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBvYmplY3RcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBvYmplY3QgaW5zdGFuY2UuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVJbnN0YW5jZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW5zdGFuY2Uoe30sIE9iamVjdCkpIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVJbnN0YW5jZSgnMicsIE9iamVjdCkpIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW5zdGFuY2UoW10sIE9iamVjdCkpIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2ZcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJbnN0YW5jZSh2YWx1ZSwgaW5zdGFuY2UpIHtcblx0aWYgKCFpc0luc3RhbmNlKHZhbHVlLCBpbnN0YW5jZSkpIHtcblx0XHRsZXQgbiA9IFwiXCI7XG5cdFx0aWYgKGlzT2JqZWN0KGluc3RhbmNlKSB8fCBpc0Z1bmN0aW9uKGluc3RhbmNlKSkge1xuXHRcdFx0biA9IGluc3RhbmNlPy5bXCJuYW1lXCJdO1xuXHRcdH1cblxuXHRcdGlmIChuKSB7XG5cdFx0XHRuID0gYCAke259YDtcblx0XHR9XG5cblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Yke259YCk7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBhcnJheSB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc0FycmF5KCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlQXJyYXl9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUFycmF5KCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUFycmF5KFtdKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBhcnJheVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5KHZhbHVlKSB7XG5cdGlmICghaXNBcnJheSh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGFuIGFycmF5XCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgc3ltYm9sIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzU3ltYm9sKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlU3ltYm9sfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVTeW1ib2woJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlU3ltYm9sKCkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gc3ltYm9sXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3ltYm9sKHZhbHVlKSB7XG5cdGlmICghaXNTeW1ib2wodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhbiBzeW1ib2xcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBmdW5jdGlvbiB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc0Z1bmN0aW9uKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlRnVuY3Rpb259IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUZ1bmN0aW9uKCgpPT57fSkpIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVGdW5jdGlvbignMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVGdW5jdGlvbihbXSkpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbih2YWx1ZSkge1xuXHRpZiAoIWlzRnVuY3Rpb24odmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgaXMgYW4gaW50ZWdlci4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNJbnRlZ2VyKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlRnVuY3Rpb259IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUludGVnZXIodHJ1ZSkpIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW50ZWdlcignMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVJbnRlZ2VyKDIpKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJbnRlZ2VyKHZhbHVlKSB7XG5cdGlmICghaXNJbnRlZ2VyKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0dmFsaWRhdGVGdW5jdGlvbixcblx0dmFsaWRhdGVPYmplY3QsXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgZ2V0R2xvYmFsLCBnZXRHbG9iYWxPYmplY3QsIGdldEdsb2JhbEZ1bmN0aW9uIH07XG5cbi8qKlxuICogQHR5cGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cbmxldCBnbG9iYWxSZWZlcmVuY2U7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBlbnZpcm9ubWVudC5cbiAqL1xuKGZ1bmN0aW9uICgpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gZ2xvYmFsVGhpcztcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRnbG9iYWxSZWZlcmVuY2UgPSBzZWxmO1xuXHRcdHJldHVybjtcblx0fSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gd2luZG93O1xuXHRcdHJldHVybjtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCBcIl9fbW9uc3Rlcl9fXCIsIHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHR9KTtcblxuXHRpZiAodHlwZW9mIF9fbW9uc3Rlcl9fID09PSBcIm9iamVjdFwiKSB7XG5cdFx0X19tb25zdGVyX18uZ2xvYmFsVGhpcyA9IF9fbW9uc3Rlcl9fO1xuXHRcdGRlbGV0ZSBPYmplY3QucHJvdG90eXBlLl9fbW9uc3Rlcl9fO1xuXG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gZ2xvYmFsVGhpcztcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0cnkge1xuXHRcdGdsb2JhbFJlZmVyZW5jZSA9IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcblx0fSBjYXRjaCAoZSkge31cblxuXHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBlbnZpcm9ubWVudC5cIik7XG59KSgpO1xuXG4vKipcbiAqIFJldHVybiBnbG9iYWxUaGlzXG4gKlxuICogSWYgZ2xvYmFsVGhpcyBpcyBub3QgYXZhaWxhYmxlLCBpdCB3aWxsIGJlIHBvbHlmaWxsZWRcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQHJldHVybiB7b2JqZWN0fSBnbG9iYWxUaGlzXG4gKi9cbmZ1bmN0aW9uIGdldEdsb2JhbCgpIHtcblx0cmV0dXJuIGdsb2JhbFJlZmVyZW5jZTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gZ2xvYmFsIG9iamVjdCBvciB0aHJvdyBFcnJvclxuICpcbiAqIFlvdSBjYW4gY2FsbCB0aGUgbWV0aG9kIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYE1vbnN0ZXIuVHlwZXMuZ2V0R2xvYmFsT2JqZWN0KClgLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge01vbnN0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL21vbnN0ZXIubWpzJztcbiAqIE1vbnN0ZXIuVHlwZXMuZ2V0R2xvYmFsT2JqZWN0KCdkb2N1bWVudCcpXG4gKiAvLyBcdTIxQTYgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWxzbyBpbnRlZ3JhdGUgdGhpcyBmdW5jdGlvbiBpbmRpdmlkdWFsbHkuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7Z2V0R2xvYmFsT2JqZWN0fSBmcm9tICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BzY2h1a2FpL21vbnN0ZXJAMS4zMC4wL2Rpc3QvbW9kdWxlcy90eXBlcy9nbG9iYWwubWpzJztcbiAqIGdldEdsb2JhbE9iamVjdCgnZG9jdW1lbnQnKVxuICogLy8gXHUyMUE2IHsgfVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb2JqZWN0IGlzIG5vdCBkZWZpbmVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsT2JqZWN0KG5hbWUpIHtcblx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdGNvbnN0IG8gPSBnbG9iYWxSZWZlcmVuY2U/LltuYW1lXTtcblx0aWYgKHR5cGVvZiBvID09PSBcInVuZGVmaW5lZFwiKVxuXHRcdHRocm93IG5ldyBFcnJvcihgdGhlIG9iamVjdCAke25hbWV9IGlzIG5vdCBkZWZpbmVkYCk7XG5cdHZhbGlkYXRlT2JqZWN0KG8pO1xuXHRyZXR1cm4gbztcbn1cblxuLyoqXG4gKiBSZXR1cm4gZ2xvYmFsIGZ1bmN0aW9uIG9yIHRocm93IEVycm9yXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5nZXRHbG9iYWxGdW5jdGlvbigpYC5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtNb25zdGVyfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9tb25zdGVyLm1qcyc7XG4gKiBjb25zb2xlLmxvZyhNb25zdGVyLlR5cGVzLmdldEdsb2JhbEZ1bmN0aW9uKCdwYXJzZUludCcpKSAvLyBcdTIxQTYgZiBwYXJzZUludCgpIHsgfVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFsc28gaW50ZWdyYXRlIHRoaXMgZnVuY3Rpb24gaW5kaXZpZHVhbGx5LlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge2dldEdsb2JhbEZ1bmN0aW9ufSBmcm9tICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BzY2h1a2FpL21vbnN0ZXJAMS4zMC4wL2Rpc3QvbW9kdWxlcy90eXBlcy9nbG9iYWwubWpzJztcbiAqIGNvbnNvbGUubG9nKGdldEdsb2JhbEZ1bmN0aW9uKCdwYXJzZUludCcpKSAvLyBcdTIxQTYgZiBwYXJzZUludCgpIHsgfVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZnVuY3Rpb24gaXMgbm90IGRlZmluZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldEdsb2JhbEZ1bmN0aW9uKG5hbWUpIHtcblx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdGNvbnN0IGYgPSBnbG9iYWxSZWZlcmVuY2U/LltuYW1lXTtcblx0aWYgKHR5cGVvZiBmID09PSBcInVuZGVmaW5lZFwiKVxuXHRcdHRocm93IG5ldyBFcnJvcihgdGhlIGZ1bmN0aW9uICR7bmFtZX0gaXMgbm90IGRlZmluZWRgKTtcblx0dmFsaWRhdGVGdW5jdGlvbihmKTtcblx0cmV0dXJuIGY7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuZXhwb3J0IHsgdHlwZU9mIH07XG5cbi8qKlxuICogVGhlIGJ1aWx0LWluIHR5cGVvZiBtZXRob2QgaXMga25vd24gdG8gaGF2ZSBzb21lIGhpc3RvcmljYWwgd2Vha25lc3Nlcy4gVGhpcyBmdW5jdGlvbiB0cmllcyB0byBwcm92aWRlIGEgYmV0dGVyIGFuZCBtb3JlIGFjY3VyYXRlIHJlc3VsdC5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgcHJpbWl0aXZlXG4gKi9cbmZ1bmN0aW9uIHR5cGVPZih2YWx1ZSkge1xuXHRsZXQgdHlwZSA9IHt9LnRvU3RyaW5nLmNhbGwodmFsdWUpLm1hdGNoKC9cXHMoW2EtekEtWl0rKS8pWzFdO1xuXHRpZiAoXCJPYmplY3RcIiA9PT0gdHlwZSkge1xuXHRcdGNvbnN0IG5hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuXHRcdGlmIChuYW1lKSB7XG5cdFx0XHRyZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3VsdHMgPSAvXihjbGFzc3xmdW5jdGlvbilcXHMrKFxcdyspLy5leGVjKFxuXHRcdFx0dmFsdWUuY29uc3RydWN0b3IudG9TdHJpbmcoKSxcblx0XHQpO1xuXHRcdHR5cGUgPSByZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMiA/IHJlc3VsdHNbMl0gOiBcIlwiO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUudG9Mb3dlckNhc2UoKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHR5cGVPZiB9IGZyb20gXCIuLi90eXBlcy90eXBlb2YubWpzXCI7XG5cbmV4cG9ydCB7IGV4dGVuZCB9O1xuXG4vKipcbiAqIEV4dGVuZCBjb3BpZXMgYWxsIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3JcbiAqIG1vcmUgc291cmNlIG9iamVjdHMgdG8gYSB0YXJnZXQgb2JqZWN0LiBJdCByZXR1cm5zIHRoZSBtb2RpZmllZCB0YXJnZXQgb2JqZWN0LlxuICpcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhcmd1bWVudFxuICogQHRocm93cyB7RXJyb3J9IHR5cGUgbWlzbWF0Y2hcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhcmd1bWVudFxuICogQHBhcmFtIGFyZ3NcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKC4uLmFyZ3MpIHtcblx0bGV0IG87XG5cdGxldCBpO1xuXG5cdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBhcmd1bWVudCAke0pTT04uc3RyaW5naWZ5KGFyZ3NbMF0pfWApO1xuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBhID0gYXJnc1tpXTtcblxuXHRcdGlmICghKGlzT2JqZWN0KGEpIHx8IGlzQXJyYXkoYSkpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGFyZ3VtZW50ICR7SlNPTi5zdHJpbmdpZnkoYSl9YCk7XG5cdFx0fVxuXG5cdFx0aWYgKG8gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0byA9IGE7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGsgaW4gYSkge1xuXHRcdFx0Y29uc3QgdiA9IGE/LltrXTtcblxuXHRcdFx0aWYgKHYgPT09IG8/LltrXSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKChpc09iamVjdCh2KSAmJiB0eXBlT2YodikgPT09IFwib2JqZWN0XCIpIHx8IGlzQXJyYXkodikpIHtcblx0XHRcdFx0aWYgKG9ba10gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChpc0FycmF5KHYpKSB7XG5cdFx0XHRcdFx0XHRvW2tdID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9ba10gPSB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVPZihvW2tdKSAhPT0gdHlwZU9mKHYpKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRcdGB0eXBlIG1pc21hdGNoOiAke0pTT04uc3RyaW5naWZ5KG9ba10pfSgke3R5cGVPZihcblx0XHRcdFx0XHRcdFx0XHRvW2tdLFxuXHRcdFx0XHRcdFx0XHQpfSkgIT0gJHtKU09OLnN0cmluZ2lmeSh2KX0oJHt0eXBlT2Yodil9KWAsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc0FycmF5KG9ba10pKSB7XG5cdFx0XHRcdFx0b1trXSA9IFtdO1xuXHRcdFx0XHRcdG9ba10ucHVzaCguLi52KTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG9ba10gPSBleHRlbmQob1trXSwgdik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoaXNBcnJheShvKSkge1xuXHRcdFx0XHRcdG8ucHVzaCh2KTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvW2tdID0gdjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbztcbn1cbiIsICIvLyBodHRwOi8vd3d3LnJhamRlZXBkLmNvbS9hcnRpY2xlcy9jaHJvbWUvbG9jYWxzdHJnL0xvY2FsU3RvcmFnZVNhbXBsZS5odG1cblxuLy8gTk9URTpcbi8vIHRoaXMgdmFyaWVzIGZyb20gYWN0dWFsIGxvY2FsU3RvcmFnZSBpbiBzb21lIHN1YnRsZSB3YXlzXG5cbi8vIGFsc28sIHRoZXJlIGlzIG5vIHBlcnNpc3RlbmNlXG4vLyBUT0RPIHBlcnNpc3RcbihmdW5jdGlvbiAoKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5cbiAgZnVuY3Rpb24gU3RvcmFnZShwYXRoLCBvcHRzKSB7XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgdmFyIGRiO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfX19wcml2X2JrX19fJywge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgcGF0aDogcGF0aFxuICAgICAgfVxuICAgICwgd3JpdGFibGU6IGZhbHNlXG4gICAgLCBlbnVtZXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfX19wcml2X3N0cmljdF9fXycsIHtcbiAgICAgIHZhbHVlOiAhIW9wdHMuc3RyaWN0XG4gICAgLCB3cml0YWJsZTogZmFsc2VcbiAgICAsIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19fX3ByaXZfd3NfX18nLCB7XG4gICAgICB2YWx1ZTogb3B0cy53cyB8fCAnICAnXG4gICAgLCB3cml0YWJsZTogZmFsc2VcbiAgICAsIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgZGIgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoKSk7XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBkYiA9IHt9O1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKGRiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHRoaXNba2V5XSA9IGRiW2tleV07XG4gICAgfSwgdGhpcyk7XG4gIH1cblxuICBTdG9yYWdlLnByb3RvdHlwZS5nZXRJdGVtID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGlmICh0aGlzLl9fX3ByaXZfc3RyaWN0X19fKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcodGhpc1trZXldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIFN0b3JhZ2UucHJvdG90eXBlLnNldEl0ZW0gPSBmdW5jdGlvbiAoa2V5LCB2YWwpIHtcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXNba2V5XSA9IG51bGw7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9fX3ByaXZfc3RyaWN0X19fKSB7XG4gICAgICB0aGlzW2tleV0gPSBTdHJpbmcodmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trZXldID0gdmFsO1xuICAgIH1cbiAgICB0aGlzLl9fX3NhdmVfX18oKTtcbiAgfTtcblxuICBTdG9yYWdlLnByb3RvdHlwZS5yZW1vdmVJdGVtID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgdGhpcy5fX19zYXZlX19fKCk7XG4gIH07XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIC8vIGZpbHRlcnMgb3V0IHByb3RvdHlwZSBrZXlzXG4gICAgT2JqZWN0LmtleXMoc2VsZikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBzZWxmW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICBkZWxldGUgc2VsZltrZXldO1xuICAgIH0pO1xuICB9O1xuXG4gIFN0b3JhZ2UucHJvdG90eXBlLmtleSA9IGZ1bmN0aW9uIChpKSB7XG4gICAgaSA9IGkgfHwgMDtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcylbaV07XG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0b3JhZ2UucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcykubGVuZ3RoO1xuICAgIH1cbiAgfSk7XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUuX19fc2F2ZV9fXyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBpZiAoIXRoaXMuX19fcHJpdl9ia19fXy5wYXRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX19fcHJpdl9ia19fXy5sb2NrKSB7XG4gICAgICB0aGlzLl9fX3ByaXZfYmtfX18ud2FpdCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fX19wcml2X2JrX19fLmxvY2sgPSB0cnVlO1xuICAgIGZzLndyaXRlRmlsZShcbiAgICAgIHRoaXMuX19fcHJpdl9ia19fXy5wYXRoXG4gICAgLCBKU09OLnN0cmluZ2lmeSh0aGlzLCBudWxsLCB0aGlzLl9fX3ByaXZfd3NfX18pXG4gICAgLCAndXRmOCdcbiAgICAsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBzZWxmLl9fX3ByaXZfYmtfX18ubG9jayA9IGZhbHNlO1xuICAgICAgaWYgKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHdyaXRlIHRvIGRhdGFiYXNlJywgc2VsZi5fX19wcml2X2JrX19fLnBhdGgpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc2VsZi5fX19wcml2X2JrX19fLndhaXQpIHtcbiAgICAgICAgc2VsZi5fX19wcml2X2JrX19fLndhaXQgPSBmYWxzZTtcbiAgICAgICAgc2VsZi5fX19zYXZlX19fKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0b3JhZ2UsICdjcmVhdGUnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIChwYXRoLCBvcHRzKSB7XG4gICAgICByZXR1cm4gbmV3IFN0b3JhZ2UocGF0aCwgb3B0cyk7XG4gICAgfVxuICAsIHdyaXRhYmxlOiBmYWxzZVxuICAsIGVudW1lcmFibGU6IGZhbHNlXG4gIH0pO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gU3RvcmFnZTtcbn0oKSk7XG4iLCAiKGZ1bmN0aW9uIChleHBvcnRzKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgY29uc3QgcmVmTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB2YWxpZGl0eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgaGlkZGVuSW5wdXRNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IGludGVybmFsc01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2VNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IGZvcm1zTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBzaGFkb3dIb3N0c01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgZm9ybUVsZW1lbnRzTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCByZWZWYWx1ZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdXBncmFkZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3Qgc2hhZG93Um9vdE1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdmFsaWRhdGlvbkFuY2hvck1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgZG9jdW1lbnRGcmFnbWVudE1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgY29ubmVjdGVkQ2FsbGJhY2tNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHZhbGlkaXR5VXBncmFkZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICBjb25zdCBhb20gPSB7XG4gICAgICAgIGFyaWFBdG9taWM6ICdhcmlhLWF0b21pYycsXG4gICAgICAgIGFyaWFBdXRvQ29tcGxldGU6ICdhcmlhLWF1dG9jb21wbGV0ZScsXG4gICAgICAgIGFyaWFCdXN5OiAnYXJpYS1idXN5JyxcbiAgICAgICAgYXJpYUNoZWNrZWQ6ICdhcmlhLWNoZWNrZWQnLFxuICAgICAgICBhcmlhQ29sQ291bnQ6ICdhcmlhLWNvbGNvdW50JyxcbiAgICAgICAgYXJpYUNvbEluZGV4OiAnYXJpYS1jb2xpbmRleCcsXG4gICAgICAgIGFyaWFDb2xJbmRleFRleHQ6ICdhcmlhLWNvbGluZGV4dGV4dCcsXG4gICAgICAgIGFyaWFDb2xTcGFuOiAnYXJpYS1jb2xzcGFuJyxcbiAgICAgICAgYXJpYUN1cnJlbnQ6ICdhcmlhLWN1cnJlbnQnLFxuICAgICAgICBhcmlhRGVzY3JpcHRpb246ICdhcmlhLWRlc2NyaXB0aW9uJyxcbiAgICAgICAgYXJpYURpc2FibGVkOiAnYXJpYS1kaXNhYmxlZCcsXG4gICAgICAgIGFyaWFFeHBhbmRlZDogJ2FyaWEtZXhwYW5kZWQnLFxuICAgICAgICBhcmlhSGFzUG9wdXA6ICdhcmlhLWhhc3BvcHVwJyxcbiAgICAgICAgYXJpYUhpZGRlbjogJ2FyaWEtaGlkZGVuJyxcbiAgICAgICAgYXJpYUludmFsaWQ6ICdhcmlhLWludmFsaWQnLFxuICAgICAgICBhcmlhS2V5U2hvcnRjdXRzOiAnYXJpYS1rZXlzaG9ydGN1dHMnLFxuICAgICAgICBhcmlhTGFiZWw6ICdhcmlhLWxhYmVsJyxcbiAgICAgICAgYXJpYUxldmVsOiAnYXJpYS1sZXZlbCcsXG4gICAgICAgIGFyaWFMaXZlOiAnYXJpYS1saXZlJyxcbiAgICAgICAgYXJpYU1vZGFsOiAnYXJpYS1tb2RhbCcsXG4gICAgICAgIGFyaWFNdWx0aUxpbmU6ICdhcmlhLW11bHRpbGluZScsXG4gICAgICAgIGFyaWFNdWx0aVNlbGVjdGFibGU6ICdhcmlhLW11bHRpc2VsZWN0YWJsZScsXG4gICAgICAgIGFyaWFPcmllbnRhdGlvbjogJ2FyaWEtb3JpZW50YXRpb24nLFxuICAgICAgICBhcmlhUGxhY2Vob2xkZXI6ICdhcmlhLXBsYWNlaG9sZGVyJyxcbiAgICAgICAgYXJpYVBvc0luU2V0OiAnYXJpYS1wb3NpbnNldCcsXG4gICAgICAgIGFyaWFQcmVzc2VkOiAnYXJpYS1wcmVzc2VkJyxcbiAgICAgICAgYXJpYVJlYWRPbmx5OiAnYXJpYS1yZWFkb25seScsXG4gICAgICAgIGFyaWFSZWxldmFudDogJ2FyaWEtcmVsZXZhbnQnLFxuICAgICAgICBhcmlhUmVxdWlyZWQ6ICdhcmlhLXJlcXVpcmVkJyxcbiAgICAgICAgYXJpYVJvbGVEZXNjcmlwdGlvbjogJ2FyaWEtcm9sZWRlc2NyaXB0aW9uJyxcbiAgICAgICAgYXJpYVJvd0NvdW50OiAnYXJpYS1yb3djb3VudCcsXG4gICAgICAgIGFyaWFSb3dJbmRleDogJ2FyaWEtcm93aW5kZXgnLFxuICAgICAgICBhcmlhUm93SW5kZXhUZXh0OiAnYXJpYS1yb3dpbmRleHRleHQnLFxuICAgICAgICBhcmlhUm93U3BhbjogJ2FyaWEtcm93c3BhbicsXG4gICAgICAgIGFyaWFTZWxlY3RlZDogJ2FyaWEtc2VsZWN0ZWQnLFxuICAgICAgICBhcmlhU2V0U2l6ZTogJ2FyaWEtc2V0c2l6ZScsXG4gICAgICAgIGFyaWFTb3J0OiAnYXJpYS1zb3J0JyxcbiAgICAgICAgYXJpYVZhbHVlTWF4OiAnYXJpYS12YWx1ZW1heCcsXG4gICAgICAgIGFyaWFWYWx1ZU1pbjogJ2FyaWEtdmFsdWVtaW4nLFxuICAgICAgICBhcmlhVmFsdWVOb3c6ICdhcmlhLXZhbHVlbm93JyxcbiAgICAgICAgYXJpYVZhbHVlVGV4dDogJ2FyaWEtdmFsdWV0ZXh0JyxcbiAgICAgICAgcm9sZTogJ3JvbGUnXG4gICAgfTtcbiAgICBjb25zdCBpbml0QW9tID0gKHJlZiwgaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiBhb20pIHtcbiAgICAgICAgICAgIGludGVybmFsc1trZXldID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBjbG9zdXJlVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IGFvbVtrZXldO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGludGVybmFscywga2V5LCB7XG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvc3VyZVZhbHVlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb3N1cmVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVNYXAuc2V0KHJlZiwgaW50ZXJuYWxzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGluaXROb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChub2RlKTtcbiAgICAgICAgY29uc3QgeyBmb3JtIH0gPSBpbnRlcm5hbHM7XG4gICAgICAgIGluaXRGb3JtKG5vZGUsIGZvcm0sIGludGVybmFscyk7XG4gICAgICAgIGluaXRMYWJlbHMobm9kZSwgaW50ZXJuYWxzLmxhYmVscyk7XG4gICAgfVxuICAgIGNvbnN0IHdhbGtGaWVsZHNldCA9IChub2RlLCBmaXJzdFJlbmRlciA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobm9kZSwgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIHtcbiAgICAgICAgICAgIGFjY2VwdE5vZGUobm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbHNNYXAuaGFzKG5vZGUpID9cbiAgICAgICAgICAgICAgICAgICAgTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUIDogTm9kZUZpbHRlci5GSUxURVJfU0tJUDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgIGNvbnN0IGlzQ2FsbE5lY2Vzc2FyeSA9ICghZmlyc3RSZW5kZXIgfHwgbm9kZS5kaXNhYmxlZCk7XG4gICAgICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudC5mb3JtRGlzYWJsZWRDYWxsYmFjayAmJiBpc0NhbGxOZWNlc3NhcnkpIHtcbiAgICAgICAgICAgICAgICBzZXREaXNhYmxlZChjdXJyZW50LCBub2RlLmRpc2FibGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSB3YWxrZXIubmV4dE5vZGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGlzYWJsZWRPck5hbWVPYnNlcnZlckNvbmZpZyA9IHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbJ2Rpc2FibGVkJywgJ25hbWUnXSB9O1xuICAgIGNvbnN0IGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXIgPSBtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkgPyBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zTGlzdCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG11dGF0aW9uLnRhcmdldDtcbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBzZXREaXNhYmxlZCh0YXJnZXQsIHRhcmdldC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXJnZXQubG9jYWxOYW1lID09PSAnZmllbGRzZXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhbGtGaWVsZHNldCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnbmFtZScpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZWZWYWx1ZU1hcC5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxzLnNldEZvcm1WYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkgOiB7fTtcbiAgICBmdW5jdGlvbiBvYnNlcnZlckNhbGxiYWNrKG11dGF0aW9uTGlzdCkge1xuICAgICAgICBtdXRhdGlvbkxpc3QuZm9yRWFjaChtdXRhdGlvblJlY29yZCA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGFkZGVkTm9kZXMsIHJlbW92ZWROb2RlcyB9ID0gbXV0YXRpb25SZWNvcmQ7XG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IEFycmF5LmZyb20oYWRkZWROb2Rlcyk7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkID0gQXJyYXkuZnJvbShyZW1vdmVkTm9kZXMpO1xuICAgICAgICAgICAgYWRkZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaWYgKGludGVybmFsc01hcC5oYXMobm9kZSkgJiYgbm9kZS5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBpbml0Tm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVwZ3JhZGVNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IHVwZ3JhZGVNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhb21LZXlzID0gT2JqZWN0LmtleXMoYW9tKTtcbiAgICAgICAgICAgICAgICAgICAgYW9tS2V5c1xuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihrZXkgPT4gaW50ZXJuYWxzW2tleV0gIT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYW9tW2tleV0sIGludGVybmFsc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVNYXAuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFsaWRpdHlVcGdyYWRlTWFwLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSB2YWxpZGl0eVVwZ3JhZGVNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnaW50ZXJuYWxzLXZhbGlkJywgaW50ZXJuYWxzLnZhbGlkaXR5LnZhbGlkLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnaW50ZXJuYWxzLWludmFsaWQnLCAoIWludGVybmFscy52YWxpZGl0eS52YWxpZCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdhcmlhLWludmFsaWQnLCAoIWludGVybmFscy52YWxpZGl0eS52YWxpZCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkaXR5VXBncmFkZU1hcC5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChub2RlLmxvY2FsTmFtZSA9PT0gJ2Zvcm0nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1FbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobm9kZSwgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdE5vZGUobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW50ZXJuYWxzTWFwLmhhcyhub2RlKSAmJiBub2RlLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddICYmICEoZm9ybUVsZW1lbnRzICYmIGZvcm1FbGVtZW50cy5oYXMobm9kZSkpKSA/IE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVCA6IE5vZGVGaWx0ZXIuRklMVEVSX1NLSVA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IHdhbGtlci5uZXh0Tm9kZSgpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE5vZGUoY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWxOYW1lID09PSAnZmllbGRzZXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXIub2JzZXJ2ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoZGlzYWJsZWRPck5hbWVPYnNlcnZlciwgbm9kZSwgZGlzYWJsZWRPck5hbWVPYnNlcnZlckNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIHdhbGtGaWVsZHNldChub2RlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlbW92ZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBpbnRlcm5hbHNNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHMgJiYgaGlkZGVuSW5wdXRNYXAuZ2V0KGludGVybmFscykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSGlkZGVuSW5wdXRzKGludGVybmFscyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzaGFkb3dIb3N0c01hcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBzaGFkb3dIb3N0c01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZyYWdtZW50T2JzZXJ2ZXJDYWxsYmFjayhtdXRhdGlvbkxpc3QpIHtcbiAgICAgICAgbXV0YXRpb25MaXN0LmZvckVhY2gobXV0YXRpb24gPT4ge1xuICAgICAgICAgICAgY29uc3QgeyByZW1vdmVkTm9kZXMgfSA9IG11dGF0aW9uO1xuICAgICAgICAgICAgcmVtb3ZlZE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBkb2N1bWVudEZyYWdtZW50TWFwLmdldChtdXRhdGlvbi50YXJnZXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHNNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVJbnRlcm5hbHMobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZGVmZXJVcGdyYWRlID0gKGZyYWdtZW50KSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnJhZ21lbnRPYnNlcnZlckNhbGxiYWNrKTtcbiAgICAgICAgaWYgKCgoX2EgPSB3aW5kb3cgPT09IG51bGwgfHwgd2luZG93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW5kb3cuU2hhZHlET00pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pblVzZSkgJiZcbiAgICAgICAgICAgIGZyYWdtZW50Lm1vZGUgJiZcbiAgICAgICAgICAgIGZyYWdtZW50Lmhvc3QpIHtcbiAgICAgICAgICAgIGZyYWdtZW50ID0gZnJhZ21lbnQuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICAoX2IgPSBvYnNlcnZlci5vYnNlcnZlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChvYnNlcnZlciwgZnJhZ21lbnQsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgICAgICBkb2N1bWVudEZyYWdtZW50TWFwLnNldChmcmFnbWVudCwgb2JzZXJ2ZXIpO1xuICAgIH07XG4gICAgbXV0YXRpb25PYnNlcnZlckV4aXN0cygpID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIob2JzZXJ2ZXJDYWxsYmFjaykgOiB7fTtcbiAgICBjb25zdCBvYnNlcnZlckNvbmZpZyA9IHtcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0IHNldERpc2FibGVkID0gKHJlZiwgZGlzYWJsZWQpID0+IHtcbiAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZSgnaW50ZXJuYWxzLWRpc2FibGVkJywgZGlzYWJsZWQpO1xuICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVmLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWYuZm9ybURpc2FibGVkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJlZi5mb3JtRGlzYWJsZWRDYWxsYmFjay5hcHBseShyZWYsIFtkaXNhYmxlZF0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVIaWRkZW5JbnB1dHMgPSAoaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGNvbnN0IGhpZGRlbklucHV0cyA9IGhpZGRlbklucHV0TWFwLmdldChpbnRlcm5hbHMpO1xuICAgICAgICBoaWRkZW5JbnB1dHMuZm9yRWFjaChoaWRkZW5JbnB1dCA9PiB7XG4gICAgICAgICAgICBoaWRkZW5JbnB1dC5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGhpZGRlbklucHV0TWFwLnNldChpbnRlcm5hbHMsIFtdKTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUhpZGRlbklucHV0ID0gKHJlZiwgaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgaW5wdXQudHlwZSA9ICdoaWRkZW4nO1xuICAgICAgICBpbnB1dC5uYW1lID0gcmVmLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xuICAgICAgICByZWYuYWZ0ZXIoaW5wdXQpO1xuICAgICAgICBoaWRkZW5JbnB1dE1hcC5nZXQoaW50ZXJuYWxzKS5wdXNoKGlucHV0KTtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH07XG4gICAgY29uc3QgaW5pdFJlZiA9IChyZWYsIGludGVybmFscykgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGhpZGRlbklucHV0TWFwLnNldChpbnRlcm5hbHMsIFtdKTtcbiAgICAgICAgKF9hID0gZGlzYWJsZWRPck5hbWVPYnNlcnZlci5vYnNlcnZlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChkaXNhYmxlZE9yTmFtZU9ic2VydmVyLCByZWYsIGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXJDb25maWcpO1xuICAgIH07XG4gICAgY29uc3QgaW5pdExhYmVscyA9IChyZWYsIGxhYmVscykgPT4ge1xuICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgQXJyYXkuZnJvbShsYWJlbHMpLmZvckVhY2gobGFiZWwgPT4gbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZWYuY2xpY2suYmluZChyZWYpKSk7XG4gICAgICAgICAgICBsZXQgZmlyc3RMYWJlbElkID0gbGFiZWxzWzBdLmlkO1xuICAgICAgICAgICAgaWYgKCFsYWJlbHNbMF0uaWQpIHtcbiAgICAgICAgICAgICAgICBmaXJzdExhYmVsSWQgPSBgJHtsYWJlbHNbMF0uaHRtbEZvcn1fTGFiZWxgO1xuICAgICAgICAgICAgICAgIGxhYmVsc1swXS5pZCA9IGZpcnN0TGFiZWxJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGZpcnN0TGFiZWxJZCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldEZvcm1WYWxpZGl0eSA9IChmb3JtKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUNvbnRyb2xWYWxpZGl0eSA9IEFycmF5LmZyb20oZm9ybS5lbGVtZW50cylcbiAgICAgICAgICAgIC5maWx0ZXIoKGVsZW1lbnQpID0+ICFlbGVtZW50LnRhZ05hbWUuaW5jbHVkZXMoJy0nKSAmJiBlbGVtZW50LnZhbGlkaXR5KVxuICAgICAgICAgICAgLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWxpZGl0eS52YWxpZCk7XG4gICAgICAgIGNvbnN0IHBvbHlmaWxsZWRFbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZm9ybSkgfHwgW107XG4gICAgICAgIGNvbnN0IHBvbHlmaWxsZWRWYWxpZGl0eSA9IEFycmF5LmZyb20ocG9seWZpbGxlZEVsZW1lbnRzKVxuICAgICAgICAgICAgLmZpbHRlcihjb250cm9sID0+IGNvbnRyb2wuaXNDb25uZWN0ZWQpXG4gICAgICAgICAgICAubWFwKChjb250cm9sKSA9PiBpbnRlcm5hbHNNYXAuZ2V0KGNvbnRyb2wpLnZhbGlkaXR5LnZhbGlkKTtcbiAgICAgICAgY29uc3QgaGFzSW52YWxpZCA9IFsuLi5uYXRpdmVDb250cm9sVmFsaWRpdHksIC4uLnBvbHlmaWxsZWRWYWxpZGl0eV0uaW5jbHVkZXMoZmFsc2UpO1xuICAgICAgICBmb3JtLnRvZ2dsZUF0dHJpYnV0ZSgnaW50ZXJuYWxzLWludmFsaWQnLCBoYXNJbnZhbGlkKTtcbiAgICAgICAgZm9ybS50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy12YWxpZCcsICFoYXNJbnZhbGlkKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1JbnB1dENhbGxiYWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHNldEZvcm1WYWxpZGl0eShmaW5kUGFyZW50Rm9ybShldmVudC50YXJnZXQpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1DaGFuZ2VDYWxsYmFjayA9IChldmVudCkgPT4ge1xuICAgICAgICBzZXRGb3JtVmFsaWRpdHkoZmluZFBhcmVudEZvcm0oZXZlbnQudGFyZ2V0KSk7XG4gICAgfTtcbiAgICBjb25zdCB3aXJlU3VibWl0TG9naWMgPSAoZm9ybSkgPT4ge1xuICAgICAgICBjb25zdCBzdWJtaXRCdXR0b25TZWxlY3RvciA9IFsnYnV0dG9uW3R5cGU9c3VibWl0XScsICdpbnB1dFt0eXBlPXN1Ym1pdF0nLCAnYnV0dG9uOm5vdChbdHlwZV0pJ11cbiAgICAgICAgICAgIC5tYXAoc2VsID0+IGAke3NlbH06bm90KFtkaXNhYmxlZF0pYClcbiAgICAgICAgICAgIC5tYXAoc2VsID0+IGAke3NlbH06bm90KFtmb3JtXSkke2Zvcm0uaWQgPyBgLCR7c2VsfVtmb3JtPScke2Zvcm0uaWR9J11gIDogJyd9YClcbiAgICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICBpZiAodGFyZ2V0LmNsb3Nlc3Qoc3VibWl0QnV0dG9uU2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBmb3JtRWxlbWVudHNNYXAuZ2V0KGZvcm0pO1xuICAgICAgICAgICAgICAgIGlmIChmb3JtLm5vVmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20oZWxlbWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGl0eUxpc3QgPSBub2Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxzLnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRpdHlMaXN0LmluY2x1ZGVzKGZhbHNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmb3JtUmVzZXRDYWxsYmFjayA9IChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLnNpemUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY29uc3RydWN0b3IuZm9ybUFzc29jaWF0ZWQgJiYgZWxlbWVudC5mb3JtUmVzZXRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZvcm1SZXNldENhbGxiYWNrLmFwcGx5KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbml0Rm9ybSA9IChyZWYsIGZvcm0sIGludGVybmFscykgPT4ge1xuICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgY29uc3QgZm9ybUVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChmb3JtKTtcbiAgICAgICAgICAgIGlmIChmb3JtRWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBmb3JtRWxlbWVudHMuYWRkKHJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbml0U2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIGluaXRTZXQuYWRkKHJlZik7XG4gICAgICAgICAgICAgICAgZm9ybUVsZW1lbnRzTWFwLnNldChmb3JtLCBpbml0U2V0KTtcbiAgICAgICAgICAgICAgICB3aXJlU3VibWl0TG9naWMoZm9ybSk7XG4gICAgICAgICAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdyZXNldCcsIGZvcm1SZXNldENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZm9ybUlucHV0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZm9ybUNoYW5nZUNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcm1zTWFwLnNldChmb3JtLCB7IHJlZiwgaW50ZXJuYWxzIH0pO1xuICAgICAgICAgICAgaWYgKHJlZi5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSAmJiByZWYuZm9ybUFzc29jaWF0ZWRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWYuZm9ybUFzc29jaWF0ZWRDYWxsYmFjay5hcHBseShyZWYsIFtmb3JtXSk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRGb3JtVmFsaWRpdHkoZm9ybSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXJlbnRGb3JtID0gKGVsZW0pID0+IHtcbiAgICAgICAgbGV0IHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQudGFnTmFtZSAhPT0gJ0ZPUk0nKSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBmaW5kUGFyZW50Rm9ybShwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfTtcbiAgICBjb25zdCB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQgPSAocmVmLCBtZXNzYWdlLCBFcnJvclR5cGUgPSBET01FeGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKCFyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvclR5cGUobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG92ZXJyaWRlRm9ybU1ldGhvZCA9IChmb3JtLCByZXR1cm5WYWx1ZSwgbWV0aG9kKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChmb3JtKTtcbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLnNpemUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IGludGVybmFsc1ttZXRob2RdKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZ3JhZGVJbnRlcm5hbHMgPSAocmVmKSA9PiB7XG4gICAgICAgIGlmIChyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQocmVmKTtcbiAgICAgICAgICAgIGNvbnN0IHsgbGFiZWxzLCBmb3JtIH0gPSBpbnRlcm5hbHM7XG4gICAgICAgICAgICBpbml0TGFiZWxzKHJlZiwgbGFiZWxzKTtcbiAgICAgICAgICAgIGluaXRGb3JtKHJlZiwgZm9ybSwgaW50ZXJuYWxzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gbXV0YXRpb25PYnNlcnZlckV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcbiAgICB9XG5cbiAgICBjbGFzcyBWYWxpZGl0eVN0YXRlIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLmJhZElucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnBhdHRlcm5NaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yYW5nZU92ZXJmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJhbmdlVW5kZXJmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnN0ZXBNaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b29Mb25nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRvb1Nob3J0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnR5cGVNaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlTWlzc2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgT2JqZWN0LnNlYWwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc2V0VmFsaWQgPSAodmFsaWRpdHlPYmplY3QpID0+IHtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QuYmFkSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QuY3VzdG9tRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QucGF0dGVybk1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnJhbmdlT3ZlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QucmFuZ2VVbmRlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3Quc3RlcE1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnRvb0xvbmcgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudG9vU2hvcnQgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudHlwZU1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudmFsdWVNaXNzaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB2YWxpZGl0eU9iamVjdDtcbiAgICB9O1xuICAgIGNvbnN0IHJlY29uY2lsZVZhbGlkaXR5ID0gKHZhbGlkaXR5T2JqZWN0LCBuZXdTdGF0ZSwgZm9ybSkgPT4ge1xuICAgICAgICB2YWxpZGl0eU9iamVjdC52YWxpZCA9IGlzVmFsaWQobmV3U3RhdGUpO1xuICAgICAgICBPYmplY3Qua2V5cyhuZXdTdGF0ZSkuZm9yRWFjaChrZXkgPT4gdmFsaWRpdHlPYmplY3Rba2V5XSA9IG5ld1N0YXRlW2tleV0pO1xuICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgc2V0Rm9ybVZhbGlkaXR5KGZvcm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZGl0eU9iamVjdDtcbiAgICB9O1xuICAgIGNvbnN0IGlzVmFsaWQgPSAodmFsaWRpdHlTdGF0ZSkgPT4ge1xuICAgICAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdmFsaWRpdHlTdGF0ZSkge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3ZhbGlkJyAmJiB2YWxpZGl0eVN0YXRlW2tleV0gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGN1c3RvbVN0YXRlTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBmdW5jdGlvbiBhZGRTdGF0ZShyZWYsIHN0YXRlTmFtZSkge1xuICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKHN0YXRlTmFtZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZWYucGFydCkge1xuICAgICAgICAgICAgcmVmLnBhcnQuYWRkKHN0YXRlTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xhc3MgQ3VzdG9tU3RhdGVTZXQgZXh0ZW5kcyBTZXQge1xuICAgICAgICBzdGF0aWMgZ2V0IGlzUG9seWZpbGxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKHJlZikge1xuICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgIGlmICghcmVmIHx8ICFyZWYudGFnTmFtZSB8fCByZWYudGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBjb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VzdG9tU3RhdGVNYXAuc2V0KHRoaXMsIHJlZik7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKHN0YXRlKSB7XG4gICAgICAgICAgICBpZiAoIS9eLS0vLnRlc3Qoc3RhdGUpIHx8IHR5cGVvZiBzdGF0ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGBGYWlsZWQgdG8gZXhlY3V0ZSAnYWRkJyBvbiAnQ3VzdG9tU3RhdGVTZXQnOiBUaGUgc3BlY2lmaWVkIHZhbHVlICR7c3RhdGV9IG11c3Qgc3RhcnQgd2l0aCAnLS0nLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VwZXIuYWRkKHN0YXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IGN1c3RvbVN0YXRlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlTmFtZSA9IGBzdGF0ZSR7c3RhdGV9YDtcbiAgICAgICAgICAgIGlmIChyZWYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBhZGRTdGF0ZShyZWYsIHN0YXRlTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUocmVmLCBzdGF0ZU5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBjbGVhcigpIHtcbiAgICAgICAgICAgIGZvciAobGV0IFtlbnRyeV0gb2YgdGhpcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZShlbnRyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdXBlci5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZShzdGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VwZXIuZGVsZXRlKHN0YXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IGN1c3RvbVN0YXRlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGlmIChyZWYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKGBzdGF0ZSR7c3RhdGV9YCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChyZWYucGFydCkge1xuICAgICAgICAgICAgICAgICAgICByZWYucGFydC5yZW1vdmUoYHN0YXRlJHtzdGF0ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZShgc3RhdGUke3N0YXRlfWAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5wYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYucGFydC5yZW1vdmUoYHN0YXRlJHtzdGF0ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICAgICAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICAgICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cztcbiAgICBjbGFzcyBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbiB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBfSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25fZWxlbWVudHMuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cywgZWxlbWVudHMsIFwiZlwiKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnbmFtZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ25hbWUnKV0gPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cywgXCJmXCIpLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBbKF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cyA9IG5ldyBXZWFrTWFwKCksIFN5bWJvbC5pdGVyYXRvcildKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uX2VsZW1lbnRzLCBcImZcIilbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0oaSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbaV0gPT0gbnVsbCA/IG51bGwgOiB0aGlzW2ldO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVkSXRlbShuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tuYW1lXSA9PSBudWxsID8gbnVsbCA6IHRoaXNbbmFtZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXRjaEZvcm1Qcm90b3R5cGUoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrVmFsaWRpdHkgPSBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLmNoZWNrVmFsaWRpdHk7XG4gICAgICAgIEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuY2hlY2tWYWxpZGl0eSA9IGNoZWNrVmFsaWRpdHlPdmVycmlkZTtcbiAgICAgICAgY29uc3QgcmVwb3J0VmFsaWRpdHkgPSBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnJlcG9ydFZhbGlkaXR5O1xuICAgICAgICBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnJlcG9ydFZhbGlkaXR5ID0gcmVwb3J0VmFsaWRpdHlPdmVycmlkZTtcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tWYWxpZGl0eU92ZXJyaWRlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IGNoZWNrVmFsaWRpdHkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVGb3JtTWV0aG9kKHRoaXMsIHJldHVyblZhbHVlLCAnY2hlY2tWYWxpZGl0eScpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlcG9ydFZhbGlkaXR5T3ZlcnJpZGUoLi4uYXJncykge1xuICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gcmVwb3J0VmFsaWRpdHkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVGb3JtTWV0aG9kKHRoaXMsIHJldHVyblZhbHVlLCAncmVwb3J0VmFsaWRpdHknKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGdldCB9ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLCAnZWxlbWVudHMnKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUsICdlbGVtZW50cycsIHtcbiAgICAgICAgICAgIGdldCguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBnZXQuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2x5ZmlsbGVkRWxlbWVudHMgPSBBcnJheS5mcm9tKGZvcm1FbGVtZW50c01hcC5nZXQodGhpcykgfHwgW10pO1xuICAgICAgICAgICAgICAgIGlmIChwb2x5ZmlsbGVkRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JkZXJlZEVsZW1lbnRzID0gQXJyYXkuZnJvbShlbGVtZW50cykuY29uY2F0KHBvbHlmaWxsZWRFbGVtZW50cykuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiAyID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24ob3JkZXJlZEVsZW1lbnRzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIEVsZW1lbnRJbnRlcm5hbHMge1xuICAgICAgICBzdGF0aWMgZ2V0IGlzUG9seWZpbGxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKHJlZikge1xuICAgICAgICAgICAgaWYgKCFyZWYgfHwgIXJlZi50YWdOYW1lIHx8IHJlZi50YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IHJlZi5nZXRSb290Tm9kZSgpO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHkgPSBuZXcgVmFsaWRpdHlTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZXMgPSBuZXcgQ3VzdG9tU3RhdGVTZXQocmVmKTtcbiAgICAgICAgICAgIHJlZk1hcC5zZXQodGhpcywgcmVmKTtcbiAgICAgICAgICAgIHZhbGlkaXR5TWFwLnNldCh0aGlzLCB2YWxpZGl0eSk7XG4gICAgICAgICAgICBpbnRlcm5hbHNNYXAuc2V0KHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBpbml0QW9tKHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBpbml0UmVmKHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBPYmplY3Quc2VhbCh0aGlzKTtcbiAgICAgICAgICAgIGlmIChyb290Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICBkZWZlclVwZ3JhZGUocm9vdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNoZWNrVmFsaWRpdHkoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdjaGVja1ZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMud2lsbFZhbGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eSA9IHZhbGlkaXR5TWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGlmICghdmFsaWRpdHkudmFsaWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGl0eUV2ZW50ID0gbmV3IEV2ZW50KCdpbnZhbGlkJywge1xuICAgICAgICAgICAgICAgICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVmLmRpc3BhdGNoRXZlbnQodmFsaWRpdHlFdmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRpdHkudmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGZvcm0oKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAnZm9ybScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBsZXQgZm9ybTtcbiAgICAgICAgICAgIGlmIChyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBmb3JtID0gZmluZFBhcmVudEZvcm0ocmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbHMoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAnbGFiZWxzJyBwcm9wZXJ0eSBmcm9tICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gcmVmLmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgICAgIGNvbnN0IGhvc3RSb290ID0gcmVmLmdldFJvb3ROb2RlKCk7XG4gICAgICAgICAgICBpZiAoaG9zdFJvb3QgJiYgaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG9zdFJvb3QucXVlcnlTZWxlY3RvckFsbChgW2Zvcj1cIiR7aWR9XCJdYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmVwb3J0VmFsaWRpdHkoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdyZXBvcnRWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgaWYgKCF0aGlzLndpbGxWYWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSB0aGlzLmNoZWNrVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IHZhbGlkYXRpb25BbmNob3JNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgaWYgKGFuY2hvciAmJiAhcmVmLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlcG9ydFZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXZhbGlkICYmIGFuY2hvcikge1xuICAgICAgICAgICAgICAgIHJlZi5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGFuY2hvci5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIHNldEZvcm1WYWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0Rm9ybVZhbHVlJyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICByZW1vdmVIaWRkZW5JbnB1dHModGhpcyk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZi5nZXRBdHRyaWJ1dGUoJ25hbWUnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWRkZW5JbnB1dCA9IGNyZWF0ZUhpZGRlbklucHV0KHJlZiwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbklucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh2YWx1ZSkucmV2ZXJzZSgpLmZvckVhY2goKFtmb3JtRGF0YUtleSwgZm9ybURhdGFWYWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtRGF0YVZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlkZGVuSW5wdXQgPSBjcmVhdGVIaWRkZW5JbnB1dChyZWYsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuSW5wdXQubmFtZSA9IGZvcm1EYXRhS2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuSW5wdXQudmFsdWUgPSBmb3JtRGF0YVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWZWYWx1ZU1hcC5zZXQocmVmLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VmFsaWRpdHkodmFsaWRpdHlDaGFuZ2VzLCB2YWxpZGF0aW9uTWVzc2FnZSwgYW5jaG9yKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdzZXRWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgaWYgKCF2YWxpZGl0eUNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gZXhlY3V0ZSBcXCdzZXRWYWxpZGl0eVxcJyBvbiBcXCdFbGVtZW50SW50ZXJuYWxzXFwnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAwIHByZXNlbnQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWxpZGF0aW9uQW5jaG9yTWFwLnNldCh0aGlzLCBhbmNob3IpO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHkgPSB2YWxpZGl0eU1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eUNoYW5nZXNPYmogPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbGlkaXR5Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHZhbGlkaXR5Q2hhbmdlc09ialtrZXldID0gdmFsaWRpdHlDaGFuZ2VzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXModmFsaWRpdHlDaGFuZ2VzT2JqKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZCh2YWxpZGl0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjaGVjayA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdmFsaWRpdHkpLCB2YWxpZGl0eUNoYW5nZXNPYmopO1xuICAgICAgICAgICAgZGVsZXRlIGNoZWNrLnZhbGlkO1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCB9ID0gcmVjb25jaWxlVmFsaWRpdHkodmFsaWRpdHksIGNoZWNrLCB0aGlzLmZvcm0pO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCAmJiAhdmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGBGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0VmFsaWRpdHknIG9uICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHNlY29uZCBhcmd1bWVudCBzaG91bGQgbm90IGJlIGVtcHR5IGlmIG9uZSBvciBtb3JlIGZsYWdzIGluIHRoZSBmaXJzdCBhcmd1bWVudCBhcmUgdHJ1ZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbGlkYXRpb25NZXNzYWdlTWFwLnNldCh0aGlzLCB2YWxpZCA/ICcnIDogdmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKHJlZi5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIHJlZi50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy1pbnZhbGlkJywgIXZhbGlkKTtcbiAgICAgICAgICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKCdpbnRlcm5hbHMtdmFsaWQnLCB2YWxpZCk7XG4gICAgICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgYCR7IXZhbGlkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsaWRpdHlVcGdyYWRlTWFwLnNldChyZWYsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldCBzaGFkb3dSb290KCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290TWFwLmdldChyZWYpO1xuICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICd2YWxpZGF0aW9uTWVzc2FnZScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGdldCB2YWxpZGl0eSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICd2YWxpZGl0eScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eSA9IHZhbGlkaXR5TWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGl0eTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgd2lsbFZhbGlkYXRlKCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gcmVhZCB0aGUgJ3dpbGxWYWxpZGF0ZScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBpZiAoKHJlZi5kaXNhYmxlZCB8fCByZWYuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB8fFxuICAgICAgICAgICAgICAgIHJlZi5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc0VsZW1lbnRJbnRlcm5hbHNTdXBwb3J0ZWQoKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhd2luZG93LkVsZW1lbnRJbnRlcm5hbHMgfHwgIUhUTUxFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hJbnRlcm5hbHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjbGFzcyBFbGVtZW50SW50ZXJuYWxzRmVhdHVyZURldGVjdGlvbiBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbHMgPSB0aGlzLmF0dGFjaEludGVybmFscygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhbmRvbU5hbWUgPSBgZWxlbWVudC1pbnRlcm5hbHMtZmVhdHVyZS1kZXRlY3Rpb24tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csICcnKX1gO1xuICAgICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUocmFuZG9tTmFtZSwgRWxlbWVudEludGVybmFsc0ZlYXR1cmVEZXRlY3Rpb24pO1xuICAgICAgICBjb25zdCBmZWF0dXJlRGV0ZWN0aW9uRWxlbWVudCA9IG5ldyBFbGVtZW50SW50ZXJuYWxzRmVhdHVyZURldGVjdGlvbigpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3NoYWRvd1Jvb3QnLFxuICAgICAgICAgICAgJ2Zvcm0nLFxuICAgICAgICAgICAgJ3dpbGxWYWxpZGF0ZScsXG4gICAgICAgICAgICAndmFsaWRpdHknLFxuICAgICAgICAgICAgJ3ZhbGlkYXRpb25NZXNzYWdlJyxcbiAgICAgICAgICAgICdsYWJlbHMnLFxuICAgICAgICAgICAgJ3NldEZvcm1WYWx1ZScsXG4gICAgICAgICAgICAnc2V0VmFsaWRpdHknLFxuICAgICAgICAgICAgJ2NoZWNrVmFsaWRpdHknLFxuICAgICAgICAgICAgJ3JlcG9ydFZhbGlkaXR5J1xuICAgICAgICBdLmV2ZXJ5KHByb3AgPT4gcHJvcCBpbiBmZWF0dXJlRGV0ZWN0aW9uRWxlbWVudC5pbnRlcm5hbHMpO1xuICAgIH1cbiAgICBsZXQgaGFzRWxlbWVudEludGVybmFsc1BvbHlmaWxsQmVlbkFwcGxpZWQgPSBmYWxzZTtcbiAgICBsZXQgaGFzQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbEJlZW5BcHBsaWVkID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZm9yY2VDdXN0b21TdGF0ZVNldFBvbHlmaWxsKGF0dGFjaEludGVybmFscykge1xuICAgICAgICBpZiAoaGFzQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbEJlZW5BcHBsaWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaGFzQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbEJlZW5BcHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgd2luZG93LkN1c3RvbVN0YXRlU2V0ID0gQ3VzdG9tU3RhdGVTZXQ7XG4gICAgICAgIGlmIChhdHRhY2hJbnRlcm5hbHMpIHtcbiAgICAgICAgICAgIEhUTUxFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hJbnRlcm5hbHMgPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGF0dGFjaEludGVybmFscy5jYWxsKHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIGludGVybmFscy5zdGF0ZXMgPSBuZXcgQ3VzdG9tU3RhdGVTZXQodGhpcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFscztcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZm9yY2VFbGVtZW50SW50ZXJuYWxzUG9seWZpbGwoZm9yY2VDdXN0b21TdGF0ZVNldCA9IHRydWUpIHtcbiAgICAgICAgaWYgKGhhc0VsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbEJlZW5BcHBsaWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaGFzRWxlbWVudEludGVybmFsc1BvbHlmaWxsQmVlbkFwcGxpZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHdpbmRvdy5FbGVtZW50SW50ZXJuYWxzID0gRWxlbWVudEludGVybmFscztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluZSA9IEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuZGVmaW5lO1xuICAgICAgICAgICAgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5kZWZpbmUgPSBmdW5jdGlvbiAobmFtZSwgY29uc3RydWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29uc3RydWN0b3IuZm9ybUFzc29jaWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdGVkQ2FsbGJhY2sgPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29ubmVjdGVkQ2FsbGJhY2tNYXAuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2tNYXAuc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXREaXNhYmxlZCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGVkQ2FsbGJhY2sgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZENhbGxiYWNrLmFwcGx5KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZUludGVybmFscyh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmaW5lLmNhbGwodGhpcywgbmFtZSwgY29uc3RydWN0b3IsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaEludGVybmFscyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGFnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgJ2F0dGFjaEludGVybmFscycgb24gJ0hUTUxFbGVtZW50JzogVW5hYmxlIHRvIGF0dGFjaCBFbGVtZW50SW50ZXJuYWxzIHRvIG5vbi1jdXN0b20gZWxlbWVudHMuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHNNYXAuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oYERPTUV4Y2VwdGlvbjogRmFpbGVkIHRvIGV4ZWN1dGUgJ2F0dGFjaEludGVybmFscycgb24gJ0hUTUxFbGVtZW50JzogRWxlbWVudEludGVybmFscyBmb3IgdGhlIHNwZWNpZmllZCBlbGVtZW50IHdhcyBhbHJlYWR5IGF0dGFjaGVkLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnRJbnRlcm5hbHModGhpcyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGF0dGFjaFNoYWRvd09ic2VydmVyKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gYXR0YWNoU2hhZG93LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIHNoYWRvd1Jvb3RNYXAuc2V0KHRoaXMsIHNoYWRvd1Jvb3QpO1xuICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlckNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5TaGFkeURPTSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCBvYnNlcnZlckNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHNoYWRvd1Jvb3QsIG9ic2VydmVyQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dIb3N0c01hcC5zZXQodGhpcywgb2JzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaFNoYWRvdyA9IEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdztcbiAgICAgICAgICAgIEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdyA9IGF0dGFjaFNoYWRvd09ic2VydmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG9ic2VydmVyQ2FsbGJhY2spO1xuICAgICAgICAgICAgZG9jdW1lbnRPYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgb2JzZXJ2ZXJDb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgSFRNTEZvcm1FbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcGF0Y2hGb3JtUHJvdG90eXBlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcmNlQ3VzdG9tU3RhdGVTZXQgfHxcbiAgICAgICAgICAgICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmICF3aW5kb3cuQ3VzdG9tU3RhdGVTZXQpKSB7XG4gICAgICAgICAgICBmb3JjZUN1c3RvbVN0YXRlU2V0UG9seWZpbGwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlzQ2VQb2x5ZmlsbCA9ICEhY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjaztcbiAgICBpZiAoIWlzQ2VQb2x5ZmlsbCkge1xuICAgICAgICBpZiAoIWlzRWxlbWVudEludGVybmFsc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgICAgICBmb3JjZUVsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhd2luZG93LkN1c3RvbVN0YXRlU2V0KSB7XG4gICAgICAgICAgICBmb3JjZUN1c3RvbVN0YXRlU2V0UG9seWZpbGwoSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaEludGVybmFscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnRzLmZvcmNlQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbCA9IGZvcmNlQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbDtcbiAgICBleHBvcnRzLmZvcmNlRWxlbWVudEludGVybmFsc1BvbHlmaWxsID0gZm9yY2VFbGVtZW50SW50ZXJuYWxzUG9seWZpbGw7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4gICAgcmV0dXJuIGV4cG9ydHM7XG5cbn0pKHt9KTtcbiIsICIvKiFcbiAqIE1JVCBMaWNlbnNlXG4gKiBcbiAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIyIFBlY3VsaWFyIFZlbnR1cmVzLCBMTENcbiAqIFxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICogXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKiBcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBBUlJBWV9CVUZGRVJfTkFNRSA9IFwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIjtcbmNsYXNzIEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB7XG4gICAgc3RhdGljIGlzQXJyYXlCdWZmZXIoZGF0YSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpID09PSBBUlJBWV9CVUZGRVJfTkFNRTtcbiAgICB9XG4gICAgc3RhdGljIHRvQXJyYXlCdWZmZXIoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5ieXRlTGVuZ3RoID09PSBkYXRhLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuYnl0ZU9mZnNldCA9PT0gMCAmJiBkYXRhLmJ5dGVMZW5ndGggPT09IGRhdGEuYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50b1VpbnQ4QXJyYXkoZGF0YS5idWZmZXIpXG4gICAgICAgICAgICAuc2xpY2UoZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVPZmZzZXQgKyBkYXRhLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICAuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgdG9VaW50OEFycmF5KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9WaWV3KGRhdGEsIFVpbnQ4QXJyYXkpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9WaWV3KGRhdGEsIHR5cGUpIHtcbiAgICAgICAgaWYgKGRhdGEuY29uc3RydWN0b3IgPT09IHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgdHlwZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB0eXBlKGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBwcm92aWRlZCB2YWx1ZSBpcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNCdWZmZXJTb3VyY2UoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKVxuICAgICAgICAgICAgfHwgdGhpcy5pc0FycmF5QnVmZmVyKGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkge1xuICAgICAgICByZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpXG4gICAgICAgICAgICB8fCAoZGF0YSAmJiB0aGlzLmlzQXJyYXlCdWZmZXIoZGF0YS5idWZmZXIpKTtcbiAgICB9XG4gICAgc3RhdGljIGlzRXF1YWwoYSwgYikge1xuICAgICAgICBjb25zdCBhVmlldyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYSk7XG4gICAgICAgIGNvbnN0IGJWaWV3ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShiKTtcbiAgICAgICAgaWYgKGFWaWV3Lmxlbmd0aCAhPT0gYlZpZXcuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYVZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhVmlld1tpXSAhPT0gYlZpZXdbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHN0YXRpYyBjb25jYXQoLi4uYXJncykge1xuICAgICAgICBsZXQgYnVmZmVycztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnc1swXSkgJiYgIShhcmdzWzFdIGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICBidWZmZXJzID0gYXJnc1swXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZ3NbMF0pICYmIGFyZ3NbMV0gaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgYnVmZmVycyA9IGFyZ3NbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoYXJnc1thcmdzLmxlbmd0aCAtIDFdIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzID0gYXJncy5zbGljZSgwLCBhcmdzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnVmZmVycyA9IGFyZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNpemUgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7XG4gICAgICAgICAgICBzaXplICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuICAgICAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgICAgICByZXMuc2V0KHZpZXcsIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gdmlldy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b1ZpZXcocmVzLCBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXMuYnVmZmVyO1xuICAgIH1cbn1cblxuY29uc3QgU1RSSU5HX1RZUEUgPSBcInN0cmluZ1wiO1xuY29uc3QgSEVYX1JFR0VYID0gL15bMC05YS1mXSskL2k7XG5jb25zdCBCQVNFNjRfUkVHRVggPSAvXig/OltBLVphLXowLTkrL117NH0pKig/OltBLVphLXowLTkrL117Mn09PXxbQS1aYS16MC05Ky9dezN9PSk/JC87XG5jb25zdCBCQVNFNjRVUkxfUkVHRVggPSAvXlthLXpBLVowLTktX10rJC87XG5jbGFzcyBVdGY4Q29udmVydGVyIHtcbiAgICBzdGF0aWMgZnJvbVN0cmluZyh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IHMgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodGV4dCkpO1xuICAgICAgICBjb25zdCB1aW50QXJyYXkgPSBuZXcgVWludDhBcnJheShzLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdWludEFycmF5W2ldID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1aW50QXJyYXkuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgdG9TdHJpbmcoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgbGV0IGVuY29kZWRTdHJpbmcgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZW5jb2RlZFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVjb2RlZFN0cmluZyA9IGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZW5jb2RlZFN0cmluZykpO1xuICAgICAgICByZXR1cm4gZGVjb2RlZFN0cmluZztcbiAgICB9XG59XG5jbGFzcyBVdGYxNkNvbnZlcnRlciB7XG4gICAgc3RhdGljIHRvU3RyaW5nKGJ1ZmZlciwgbGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihidWZmZXIpO1xuICAgICAgICBjb25zdCBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhhcnJheUJ1ZmZlcik7XG4gICAgICAgIGxldCByZXMgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5QnVmZmVyLmJ5dGVMZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgY29kZSA9IGRhdGFWaWV3LmdldFVpbnQxNihpLCBsaXR0bGVFbmRpYW4pO1xuICAgICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGZyb21TdHJpbmcodGV4dCwgbGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IEFycmF5QnVmZmVyKHRleHQubGVuZ3RoICogMik7XG4gICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHJlcyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZGF0YVZpZXcuc2V0VWludDE2KGkgKiAyLCB0ZXh0LmNoYXJDb2RlQXQoaSksIGxpdHRsZUVuZGlhbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5jbGFzcyBDb252ZXJ0IHtcbiAgICBzdGF0aWMgaXNIZXgoZGF0YSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFNUUklOR19UWVBFXG4gICAgICAgICAgICAmJiBIRVhfUkVHRVgudGVzdChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQmFzZTY0KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSBTVFJJTkdfVFlQRVxuICAgICAgICAgICAgJiYgQkFTRTY0X1JFR0VYLnRlc3QoZGF0YSk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0Jhc2U2NFVybChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gU1RSSU5HX1RZUEVcbiAgICAgICAgICAgICYmIEJBU0U2NFVSTF9SRUdFWC50ZXN0KGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgVG9TdHJpbmcoYnVmZmVyLCBlbmMgPSBcInV0ZjhcIikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIHN3aXRjaCAoZW5jLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGY4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9VdGY4U3RyaW5nKGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9CaW5hcnkoYnVmKTtcbiAgICAgICAgICAgIGNhc2UgXCJoZXhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub0hleChidWYpO1xuICAgICAgICAgICAgY2FzZSBcImJhc2U2NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvQmFzZTY0KGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwiYmFzZTY0dXJsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9CYXNlNjRVcmwoYnVmKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1ZiwgdHJ1ZSk7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmJlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1Zik7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIGVuY29kaW5nICcke2VuY30nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIEZyb21TdHJpbmcoc3RyLCBlbmMgPSBcInV0ZjhcIikge1xuICAgICAgICBpZiAoIXN0cikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGVuYy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21VdGY4U3RyaW5nKHN0cik7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJpbmFyeShzdHIpO1xuICAgICAgICAgICAgY2FzZSBcImhleFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21IZXgoc3RyKTtcbiAgICAgICAgICAgIGNhc2UgXCJiYXNlNjRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmFzZTY0KHN0cik7XG4gICAgICAgICAgICBjYXNlIFwiYmFzZTY0dXJsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJhc2U2NFVybChzdHIpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2bGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIuZnJvbVN0cmluZyhzdHIsIHRydWUpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2XCI6XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci5mcm9tU3RyaW5nKHN0cik7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIGVuY29kaW5nICcke2VuY30nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIFRvQmFzZTY0KGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGlmICh0eXBlb2YgYnRvYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgY29uc3QgYmluYXJ5ID0gdGhpcy5Ub1N0cmluZyhidWYsIFwiYmluYXJ5XCIpO1xuICAgICAgICAgICAgcmV0dXJuIGJ0b2EoYmluYXJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShidWYpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tQmFzZTY0KGJhc2U2NCkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFN0cmluZyhiYXNlNjQpO1xuICAgICAgICBpZiAoIWZvcm1hdHRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUNvbnZlcnQuaXNCYXNlNjQoZm9ybWF0dGVkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50ICdiYXNlNjRUZXh0JyBpcyBub3QgQmFzZTY0IGVuY29kZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhdG9iICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmluYXJ5KGF0b2IoZm9ybWF0dGVkKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oZm9ybWF0dGVkLCBcImJhc2U2NFwiKSkuYnVmZmVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tQmFzZTY0VXJsKGJhc2U2NHVybCkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFN0cmluZyhiYXNlNjR1cmwpO1xuICAgICAgICBpZiAoIWZvcm1hdHRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUNvbnZlcnQuaXNCYXNlNjRVcmwoZm9ybWF0dGVkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50ICdiYXNlNjR1cmwnIGlzIG5vdCBCYXNlNjRVcmwgZW5jb2RlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmFzZTY0KHRoaXMuQmFzZTY0UGFkZGluZyhmb3JtYXR0ZWQucmVwbGFjZSgvXFwtL2csIFwiK1wiKS5yZXBsYWNlKC9cXF8vZywgXCIvXCIpKSk7XG4gICAgfVxuICAgIHN0YXRpYyBUb0Jhc2U2NFVybChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLlRvQmFzZTY0KGRhdGEpLnJlcGxhY2UoL1xcKy9nLCBcIi1cIikucmVwbGFjZSgvXFwvL2csIFwiX1wiKS5yZXBsYWNlKC9cXD0vZywgXCJcIik7XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tVXRmOFN0cmluZyh0ZXh0LCBlbmNvZGluZyA9IENvbnZlcnQuREVGQVVMVF9VVEY4X0VOQ09ESU5HKSB7XG4gICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhc2NpaVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21CaW5hcnkodGV4dCk7XG4gICAgICAgICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGY4Q29udmVydGVyLmZyb21TdHJpbmcodGV4dCk7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmJlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcodGV4dCk7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZsZVwiOlxuICAgICAgICAgICAgY2FzZSBcInVzYzJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIuZnJvbVN0cmluZyh0ZXh0LCB0cnVlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2YgZW5jb2RpbmcgJyR7ZW5jb2Rpbmd9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBUb1V0ZjhTdHJpbmcoYnVmZmVyLCBlbmNvZGluZyA9IENvbnZlcnQuREVGQVVMVF9VVEY4X0VOQ09ESU5HKSB7XG4gICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhc2NpaVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvQmluYXJ5KGJ1ZmZlcik7XG4gICAgICAgICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGY4Q29udmVydGVyLnRvU3RyaW5nKGJ1ZmZlcik7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmJlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1ZmZlcik7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZsZVwiOlxuICAgICAgICAgICAgY2FzZSBcInVzYzJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIudG9TdHJpbmcoYnVmZmVyLCB0cnVlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2YgZW5jb2RpbmcgJyR7ZW5jb2Rpbmd9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tQmluYXJ5KHRleHQpIHtcbiAgICAgICAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gdGV4dC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlc3VsdFZpZXcgPSBuZXcgVWludDhBcnJheShzdHJpbmdMZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHRWaWV3W2ldID0gdGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRWaWV3LmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIFRvQmluYXJ5KGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGxldCByZXMgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgVG9IZXgoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGxlbiA9IGJ1Zi5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBidWZbaV07XG4gICAgICAgICAgICBpZiAoYnl0ZSA8IDE2KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IFwiMFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ICs9IGJ5dGUudG9TdHJpbmcoMTYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tSGV4KGhleFN0cmluZykge1xuICAgICAgICBsZXQgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTdHJpbmcoaGV4U3RyaW5nKTtcbiAgICAgICAgaWYgKCFmb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFDb252ZXJ0LmlzSGV4KGZvcm1hdHRlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnaGV4U3RyaW5nJyBpcyBub3QgSEVYIGVuY29kZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggJSAyKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWQgPSBgMCR7Zm9ybWF0dGVkfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZm9ybWF0dGVkLmxlbmd0aCAvIDIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvcm1hdHRlZC5sZW5ndGg7IGkgPSBpICsgMikge1xuICAgICAgICAgICAgY29uc3QgYyA9IGZvcm1hdHRlZC5zbGljZShpLCBpICsgMik7XG4gICAgICAgICAgICByZXNbaSAvIDJdID0gcGFyc2VJbnQoYywgMTYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXMuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgVG9VdGYxNlN0cmluZyhidWZmZXIsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWZmZXIsIGxpdHRsZUVuZGlhbik7XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tVXRmMTZTdHJpbmcodGV4dCwgbGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcodGV4dCwgbGl0dGxlRW5kaWFuKTtcbiAgICB9XG4gICAgc3RhdGljIEJhc2U2NFBhZGRpbmcoYmFzZTY0KSB7XG4gICAgICAgIGNvbnN0IHBhZENvdW50ID0gNCAtIChiYXNlNjQubGVuZ3RoICUgNCk7XG4gICAgICAgIGlmIChwYWRDb3VudCA8IDQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFkQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGJhc2U2NCArPSBcIj1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmFzZTY0O1xuICAgIH1cbiAgICBzdGF0aWMgZm9ybWF0U3RyaW5nKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIChkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRhdGEucmVwbGFjZSgvW1xcblxcclxcdCBdL2csIFwiXCIpKSB8fCBcIlwiO1xuICAgIH1cbn1cbkNvbnZlcnQuREVGQVVMVF9VVEY4X0VOQ09ESU5HID0gXCJ1dGY4XCI7XG5cbmZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICBjb25zdCByZXMgPSBhcmd1bWVudHNbMF07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb2JqID0gYXJndW1lbnRzW2ldO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICByZXNbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGNvbWJpbmUoLi4uYnVmKSB7XG4gICAgY29uc3QgdG90YWxCeXRlTGVuZ3RoID0gYnVmLm1hcCgoaXRlbSkgPT4gaXRlbS5ieXRlTGVuZ3RoKS5yZWR1Y2UoKHByZXYsIGN1cikgPT4gcHJldiArIGN1cik7XG4gICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkodG90YWxCeXRlTGVuZ3RoKTtcbiAgICBsZXQgY3VycmVudFBvcyA9IDA7XG4gICAgYnVmLm1hcCgoaXRlbSkgPT4gbmV3IFVpbnQ4QXJyYXkoaXRlbSkpLmZvckVhY2goKGFycikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0yIG9mIGFycikge1xuICAgICAgICAgICAgcmVzW2N1cnJlbnRQb3MrK10gPSBpdGVtMjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXMuYnVmZmVyO1xufVxuZnVuY3Rpb24gaXNFcXVhbChieXRlczEsIGJ5dGVzMikge1xuICAgIGlmICghKGJ5dGVzMSAmJiBieXRlczIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGJ5dGVzMS5ieXRlTGVuZ3RoICE9PSBieXRlczIuYnl0ZUxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGIxID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMxKTtcbiAgICBjb25zdCBiMiA9IG5ldyBVaW50OEFycmF5KGJ5dGVzMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlczEuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChiMVtpXSAhPT0gYjJbaV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0cy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXI7XG5leHBvcnRzLkNvbnZlcnQgPSBDb252ZXJ0O1xuZXhwb3J0cy5hc3NpZ24gPSBhc3NpZ247XG5leHBvcnRzLmNvbWJpbmUgPSBjb21iaW5lO1xuZXhwb3J0cy5pc0VxdWFsID0gaXNFcXVhbDtcbiIsICIvKiFcbiBDb3B5cmlnaHQgKGMpIFBlY3VsaWFyIFZlbnR1cmVzLCBMTENcbiovXG5cbmZ1bmN0aW9uIGdldFVUQ0RhdGUoZGF0ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpICsgKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKSk7XHJcbn1cclxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyc1ZhbHVlKHBhcmFtZXRlcnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgdmFyIF9hO1xyXG4gICAgaWYgKChwYXJhbWV0ZXJzIGluc3RhbmNlb2YgT2JqZWN0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChfYSA9IHBhcmFtZXRlcnNbbmFtZV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRlZmF1bHRWYWx1ZTtcclxufVxyXG5mdW5jdGlvbiBidWZmZXJUb0hleENvZGVzKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCA9IDAsIGlucHV0TGVuZ3RoID0gKGlucHV0QnVmZmVyLmJ5dGVMZW5ndGggLSBpbnB1dE9mZnNldCksIGluc2VydFNwYWNlID0gZmFsc2UpIHtcclxuICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIChuZXcgVWludDhBcnJheShpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkpIHtcclxuICAgICAgICBjb25zdCBzdHIgPSBpdGVtLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIGlmIChzdHIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBcIjBcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0ICs9IHN0cjtcclxuICAgICAgICBpZiAoaW5zZXJ0U3BhY2UpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IFwiIFwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQudHJpbSgpO1xyXG59XHJcbmZ1bmN0aW9uIGNoZWNrQnVmZmVyUGFyYW1zKGJhc2VCbG9jaywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgaWYgKCEoaW5wdXRCdWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRCdWZmZXIgbXVzdCBiZSBcXFwiQXJyYXlCdWZmZXJcXFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0QnVmZmVyIGhhcyB6ZXJvIGxlbmd0aFwiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dE9mZnNldCA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRPZmZzZXQgbGVzcyB0aGFuIHplcm9cIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRMZW5ndGggPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0TGVuZ3RoIGxlc3MgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKChpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoIC0gaW5wdXRPZmZzZXQgLSBpbnB1dExlbmd0aCkgPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZCAoaW5jb25zaXN0ZW50IG9mZnNldCBhbmQgbGVuZ3RoIHZhbHVlcylcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiB1dGlsRnJvbUJhc2UoaW5wdXRCdWZmZXIsIGlucHV0QmFzZSkge1xyXG4gICAgbGV0IHJlc3VsdCA9IDA7XHJcbiAgICBpZiAoaW5wdXRCdWZmZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0QnVmZmVyWzBdO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IChpbnB1dEJ1ZmZlci5sZW5ndGggLSAxKTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICByZXN1bHQgKz0gaW5wdXRCdWZmZXJbKGlucHV0QnVmZmVyLmxlbmd0aCAtIDEpIC0gaV0gKiBNYXRoLnBvdygyLCBpbnB1dEJhc2UgKiBpKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuZnVuY3Rpb24gdXRpbFRvQmFzZSh2YWx1ZSwgYmFzZSwgcmVzZXJ2ZWQgPSAoLTEpKSB7XHJcbiAgICBjb25zdCBpbnRlcm5hbFJlc2VydmVkID0gcmVzZXJ2ZWQ7XHJcbiAgICBsZXQgaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xyXG4gICAgbGV0IHJlc3VsdCA9IDA7XHJcbiAgICBsZXQgYmlnZ2VzdCA9IE1hdGgucG93KDIsIGJhc2UpO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICBpZiAodmFsdWUgPCBiaWdnZXN0KSB7XHJcbiAgICAgICAgICAgIGxldCByZXRCdWY7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcm5hbFJlc2VydmVkIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKGkpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbFJlc2VydmVkIDwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAobmV3IEFycmF5QnVmZmVyKDApKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihpbnRlcm5hbFJlc2VydmVkKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGludGVybmFsUmVzZXJ2ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAoaSAtIDEpOyBqID49IDA7IGotLSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYmFzaXMgPSBNYXRoLnBvdygyLCBqICogYmFzZSk7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W3Jlc3VsdCAtIGogLSAxXSA9IE1hdGguZmxvb3IoaW50ZXJuYWxWYWx1ZSAvIGJhc2lzKTtcclxuICAgICAgICAgICAgICAgIGludGVybmFsVmFsdWUgLT0gKHJldFZpZXdbcmVzdWx0IC0gaiAtIDFdKSAqIGJhc2lzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJpZ2dlc3QgKj0gTWF0aC5wb3coMiwgYmFzZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxDb25jYXRCdWYoLi4uYnVmZmVycykge1xyXG4gICAgbGV0IG91dHB1dExlbmd0aCA9IDA7XHJcbiAgICBsZXQgcHJldkxlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7XHJcbiAgICAgICAgb3V0cHV0TGVuZ3RoICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKG91dHB1dExlbmd0aCk7XHJcbiAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcclxuICAgICAgICByZXRWaWV3LnNldChuZXcgVWludDhBcnJheShidWZmZXIpLCBwcmV2TGVuZ3RoKTtcclxuICAgICAgICBwcmV2TGVuZ3RoICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldEJ1ZjtcclxufVxyXG5mdW5jdGlvbiB1dGlsQ29uY2F0VmlldyguLi52aWV3cykge1xyXG4gICAgbGV0IG91dHB1dExlbmd0aCA9IDA7XHJcbiAgICBsZXQgcHJldkxlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IHZpZXcgb2Ygdmlld3MpIHtcclxuICAgICAgICBvdXRwdXRMZW5ndGggKz0gdmlldy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIob3V0cHV0TGVuZ3RoKTtcclxuICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgZm9yIChjb25zdCB2aWV3IG9mIHZpZXdzKSB7XHJcbiAgICAgICAgcmV0Vmlldy5zZXQodmlldywgcHJldkxlbmd0aCk7XHJcbiAgICAgICAgcHJldkxlbmd0aCArPSB2aWV3Lmxlbmd0aDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXRWaWV3O1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxEZWNvZGVUQygpIHtcclxuICAgIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWVIZXgpO1xyXG4gICAgaWYgKHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aCA+PSAyKSB7XHJcbiAgICAgICAgY29uc3QgY29uZGl0aW9uMSA9IChidWZbMF0gPT09IDB4RkYpICYmIChidWZbMV0gJiAweDgwKTtcclxuICAgICAgICBjb25zdCBjb25kaXRpb24yID0gKGJ1ZlswXSA9PT0gMHgwMCkgJiYgKChidWZbMV0gJiAweDgwKSA9PT0gMHgwMCk7XHJcbiAgICAgICAgaWYgKGNvbmRpdGlvbjEgfHwgY29uZGl0aW9uMikge1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOZWVkbGVzc2x5IGxvbmcgZm9ybWF0XCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGJpZ0ludEJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4LmJ5dGVMZW5ndGgpO1xyXG4gICAgY29uc3QgYmlnSW50VmlldyA9IG5ldyBVaW50OEFycmF5KGJpZ0ludEJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYmlnSW50Vmlld1tpXSA9IDA7XHJcbiAgICB9XHJcbiAgICBiaWdJbnRWaWV3WzBdID0gKGJ1ZlswXSAmIDB4ODApO1xyXG4gICAgY29uc3QgYmlnSW50ID0gdXRpbEZyb21CYXNlKGJpZ0ludFZpZXcsIDgpO1xyXG4gICAgY29uc3Qgc21hbGxJbnRCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleC5ieXRlTGVuZ3RoKTtcclxuICAgIGNvbnN0IHNtYWxsSW50VmlldyA9IG5ldyBVaW50OEFycmF5KHNtYWxsSW50QnVmZmVyKTtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy52YWx1ZUhleC5ieXRlTGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBzbWFsbEludFZpZXdbal0gPSBidWZbal07XHJcbiAgICB9XHJcbiAgICBzbWFsbEludFZpZXdbMF0gJj0gMHg3RjtcclxuICAgIGNvbnN0IHNtYWxsSW50ID0gdXRpbEZyb21CYXNlKHNtYWxsSW50VmlldywgOCk7XHJcbiAgICByZXR1cm4gKHNtYWxsSW50IC0gYmlnSW50KTtcclxufVxyXG5mdW5jdGlvbiB1dGlsRW5jb2RlVEModmFsdWUpIHtcclxuICAgIGNvbnN0IG1vZFZhbHVlID0gKHZhbHVlIDwgMCkgPyAodmFsdWUgKiAoLTEpKSA6IHZhbHVlO1xyXG4gICAgbGV0IGJpZ0ludCA9IDEyODtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgaWYgKG1vZFZhbHVlIDw9IGJpZ0ludCkge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzbWFsbEludCA9IGJpZ0ludCAtIG1vZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0QnVmID0gdXRpbFRvQmFzZShzbWFsbEludCwgOCwgaSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbMF0gfD0gMHg4MDtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHJldEJ1ZiA9IHV0aWxUb0Jhc2UobW9kVmFsdWUsIDgsIGkpO1xyXG4gICAgICAgICAgICBsZXQgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIGlmIChyZXRWaWV3WzBdICYgMHg4MCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcEJ1ZiA9IHJldEJ1Zi5zbGljZSgwKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGVtcEJ1Zik7XHJcbiAgICAgICAgICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIocmV0QnVmLmJ5dGVMZW5ndGggKyAxKTtcclxuICAgICAgICAgICAgICAgIHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB0ZW1wQnVmLmJ5dGVMZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldFZpZXdbayArIDFdID0gdGVtcFZpZXdba107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3WzBdID0gMHgwMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICBiaWdJbnQgKj0gTWF0aC5wb3coMiwgOCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKG5ldyBBcnJheUJ1ZmZlcigwKSk7XHJcbn1cclxuZnVuY3Rpb24gaXNFcXVhbEJ1ZmZlcihpbnB1dEJ1ZmZlcjEsIGlucHV0QnVmZmVyMikge1xyXG4gICAgaWYgKGlucHV0QnVmZmVyMS5ieXRlTGVuZ3RoICE9PSBpbnB1dEJ1ZmZlcjIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZpZXcxID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIxKTtcclxuICAgIGNvbnN0IHZpZXcyID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIyKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmlldzEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAodmlldzFbaV0gIT09IHZpZXcyW2ldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiBwYWROdW1iZXIoaW5wdXROdW1iZXIsIGZ1bGxMZW5ndGgpIHtcclxuICAgIGNvbnN0IHN0ciA9IGlucHV0TnVtYmVyLnRvU3RyaW5nKDEwKTtcclxuICAgIGlmIChmdWxsTGVuZ3RoIDwgc3RyLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGlmID0gZnVsbExlbmd0aCAtIHN0ci5sZW5ndGg7XHJcbiAgICBjb25zdCBwYWRkaW5nID0gbmV3IEFycmF5KGRpZik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpZjsgaSsrKSB7XHJcbiAgICAgICAgcGFkZGluZ1tpXSA9IFwiMFwiO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGFkZGluZ1N0cmluZyA9IHBhZGRpbmcuam9pbihcIlwiKTtcclxuICAgIHJldHVybiBwYWRkaW5nU3RyaW5nLmNvbmNhdChzdHIpO1xyXG59XHJcbmNvbnN0IGJhc2U2NFRlbXBsYXRlID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwiO1xyXG5jb25zdCBiYXNlNjRVcmxUZW1wbGF0ZSA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXz1cIjtcclxuZnVuY3Rpb24gdG9CYXNlNjQoaW5wdXQsIHVzZVVybFRlbXBsYXRlID0gZmFsc2UsIHNraXBQYWRkaW5nID0gZmFsc2UsIHNraXBMZWFkaW5nWmVyb3MgPSBmYWxzZSkge1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgbGV0IGZsYWcxID0gMDtcclxuICAgIGxldCBmbGFnMiA9IDA7XHJcbiAgICBsZXQgb3V0cHV0ID0gXCJcIjtcclxuICAgIGNvbnN0IHRlbXBsYXRlID0gKHVzZVVybFRlbXBsYXRlKSA/IGJhc2U2NFVybFRlbXBsYXRlIDogYmFzZTY0VGVtcGxhdGU7XHJcbiAgICBpZiAoc2tpcExlYWRpbmdaZXJvcykge1xyXG4gICAgICAgIGxldCBub25aZXJvUG9zaXRpb24gPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoaSkgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIG5vblplcm9Qb3NpdGlvbiA9IGk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKG5vblplcm9Qb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoaSA8IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGNocjEgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7XHJcbiAgICAgICAgaWYgKGkgPj0gaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZsYWcxID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2hyMiA9IGlucHV0LmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICBpZiAoaSA+PSBpbnB1dC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZmxhZzIgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjaHIzID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgIGNvbnN0IGVuYzEgPSBjaHIxID4+IDI7XHJcbiAgICAgICAgY29uc3QgZW5jMiA9ICgoY2hyMSAmIDB4MDMpIDw8IDQpIHwgKGNocjIgPj4gNCk7XHJcbiAgICAgICAgbGV0IGVuYzMgPSAoKGNocjIgJiAweDBGKSA8PCAyKSB8IChjaHIzID4+IDYpO1xyXG4gICAgICAgIGxldCBlbmM0ID0gY2hyMyAmIDB4M0Y7XHJcbiAgICAgICAgaWYgKGZsYWcxID09PSAxKSB7XHJcbiAgICAgICAgICAgIGVuYzMgPSBlbmM0ID0gNjQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZmxhZzIgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIGVuYzQgPSA2NDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2tpcFBhZGRpbmcpIHtcclxuICAgICAgICAgICAgaWYgKGVuYzMgPT09IDY0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gYCR7dGVtcGxhdGUuY2hhckF0KGVuYzEpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzIpfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZW5jNCA9PT0gNjQpIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gYCR7dGVtcGxhdGUuY2hhckF0KGVuYzEpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzIpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzMpfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gYCR7dGVtcGxhdGUuY2hhckF0KGVuYzEpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzIpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzMpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzQpfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG91dHB1dCArPSBgJHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMSl9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMil9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMyl9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jNCl9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG59XHJcbmZ1bmN0aW9uIGZyb21CYXNlNjQoaW5wdXQsIHVzZVVybFRlbXBsYXRlID0gZmFsc2UsIGN1dFRhaWxaZXJvcyA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZSA9ICh1c2VVcmxUZW1wbGF0ZSkgPyBiYXNlNjRVcmxUZW1wbGF0ZSA6IGJhc2U2NFRlbXBsYXRlO1xyXG4gICAgZnVuY3Rpb24gaW5kZXhPZih0b1NlYXJjaCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjQ7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGVtcGxhdGUuY2hhckF0KGkpID09PSB0b1NlYXJjaClcclxuICAgICAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gNjQ7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB0ZXN0KGluY29taW5nKSB7XHJcbiAgICAgICAgcmV0dXJuICgoaW5jb21pbmcgPT09IDY0KSA/IDB4MDAgOiBpbmNvbWluZyk7XHJcbiAgICB9XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBsZXQgb3V0cHV0ID0gXCJcIjtcclxuICAgIHdoaWxlIChpIDwgaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgZW5jMSA9IGluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xyXG4gICAgICAgIGNvbnN0IGVuYzIgPSAoaSA+PSBpbnB1dC5sZW5ndGgpID8gMHgwMCA6IGluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xyXG4gICAgICAgIGNvbnN0IGVuYzMgPSAoaSA+PSBpbnB1dC5sZW5ndGgpID8gMHgwMCA6IGluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xyXG4gICAgICAgIGNvbnN0IGVuYzQgPSAoaSA+PSBpbnB1dC5sZW5ndGgpID8gMHgwMCA6IGluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xyXG4gICAgICAgIGNvbnN0IGNocjEgPSAodGVzdChlbmMxKSA8PCAyKSB8ICh0ZXN0KGVuYzIpID4+IDQpO1xyXG4gICAgICAgIGNvbnN0IGNocjIgPSAoKHRlc3QoZW5jMikgJiAweDBGKSA8PCA0KSB8ICh0ZXN0KGVuYzMpID4+IDIpO1xyXG4gICAgICAgIGNvbnN0IGNocjMgPSAoKHRlc3QoZW5jMykgJiAweDAzKSA8PCA2KSB8IHRlc3QoZW5jNCk7XHJcbiAgICAgICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMSk7XHJcbiAgICAgICAgaWYgKGVuYzMgIT09IDY0KSB7XHJcbiAgICAgICAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5jNCAhPT0gNjQpIHtcclxuICAgICAgICAgICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGN1dFRhaWxaZXJvcykge1xyXG4gICAgICAgIGNvbnN0IG91dHB1dExlbmd0aCA9IG91dHB1dC5sZW5ndGg7XHJcbiAgICAgICAgbGV0IG5vblplcm9TdGFydCA9ICgtMSk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IChvdXRwdXRMZW5ndGggLSAxKTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgaWYgKG91dHB1dC5jaGFyQ29kZUF0KGkpICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBub25aZXJvU3RhcnQgPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vblplcm9TdGFydCAhPT0gKC0xKSkge1xyXG4gICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc2xpY2UoMCwgbm9uWmVyb1N0YXJ0ICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvdXRwdXQgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvdXRwdXQ7XHJcbn1cclxuZnVuY3Rpb24gYXJyYXlCdWZmZXJUb1N0cmluZyhidWZmZXIpIHtcclxuICAgIGxldCByZXN1bHRTdHJpbmcgPSBcIlwiO1xyXG4gICAgY29uc3QgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygdmlldykge1xyXG4gICAgICAgIHJlc3VsdFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdFN0cmluZztcclxufVxyXG5mdW5jdGlvbiBzdHJpbmdUb0FycmF5QnVmZmVyKHN0cikge1xyXG4gICAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gc3RyLmxlbmd0aDtcclxuICAgIGNvbnN0IHJlc3VsdEJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzdHJpbmdMZW5ndGgpO1xyXG4gICAgY29uc3QgcmVzdWx0VmlldyA9IG5ldyBVaW50OEFycmF5KHJlc3VsdEJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcmVzdWx0Vmlld1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdEJ1ZmZlcjtcclxufVxyXG5jb25zdCBsb2cyID0gTWF0aC5sb2coMik7XHJcbmZ1bmN0aW9uIG5lYXJlc3RQb3dlck9mMihsZW5ndGgpIHtcclxuICAgIGNvbnN0IGJhc2UgPSAoTWF0aC5sb2cobGVuZ3RoKSAvIGxvZzIpO1xyXG4gICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGJhc2UpO1xyXG4gICAgY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kKGJhc2UpO1xyXG4gICAgcmV0dXJuICgoZmxvb3IgPT09IHJvdW5kKSA/IGZsb29yIDogcm91bmQpO1xyXG59XHJcbmZ1bmN0aW9uIGNsZWFyUHJvcHMob2JqZWN0LCBwcm9wc0FycmF5KSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHNBcnJheSkge1xyXG4gICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcF07XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgYXJyYXlCdWZmZXJUb1N0cmluZywgYnVmZmVyVG9IZXhDb2RlcywgY2hlY2tCdWZmZXJQYXJhbXMsIGNsZWFyUHJvcHMsIGZyb21CYXNlNjQsIGdldFBhcmFtZXRlcnNWYWx1ZSwgZ2V0VVRDRGF0ZSwgaXNFcXVhbEJ1ZmZlciwgbmVhcmVzdFBvd2VyT2YyLCBwYWROdW1iZXIsIHN0cmluZ1RvQXJyYXlCdWZmZXIsIHRvQmFzZTY0LCB1dGlsQ29uY2F0QnVmLCB1dGlsQ29uY2F0VmlldywgdXRpbERlY29kZVRDLCB1dGlsRW5jb2RlVEMsIHV0aWxGcm9tQmFzZSwgdXRpbFRvQmFzZSB9O1xuIiwgIi8qIVxuICogQ29weXJpZ2h0IChjKSAyMDE0LCBHTU8gR2xvYmFsU2lnblxuICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBlY3VsaWFyIFZlbnR1cmVzXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogXG4gKiBBdXRob3IgMjAxNC0yMDE5LCBZdXJ5IFN0cm96aGV2c2t5XG4gKiBcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG4gKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKiBcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqIFxuICogKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gKiAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKiBcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG4gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG4gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqIFxuICovXG5cbmltcG9ydCAqIGFzIHB2dHN1dGlscyBmcm9tICdwdnRzdXRpbHMnO1xuaW1wb3J0ICogYXMgcHZ1dGlscyBmcm9tICdwdnV0aWxzJztcblxuZnVuY3Rpb24gYXNzZXJ0QmlnSW50KCkge1xyXG4gICAgaWYgKHR5cGVvZiBCaWdJbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCaWdJbnQgaXMgbm90IGRlZmluZWQuIFlvdXIgZW52aXJvbm1lbnQgZG9lc24ndCBpbXBsZW1lbnQgQmlnSW50LlwiKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjb25jYXQoYnVmZmVycykge1xyXG4gICAgbGV0IG91dHB1dExlbmd0aCA9IDA7XHJcbiAgICBsZXQgcHJldkxlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBidWZmZXIgPSBidWZmZXJzW2ldO1xyXG4gICAgICAgIG91dHB1dExlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShvdXRwdXRMZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyID0gYnVmZmVyc1tpXTtcclxuICAgICAgICByZXRWaWV3LnNldChuZXcgVWludDhBcnJheShidWZmZXIpLCBwcmV2TGVuZ3RoKTtcclxuICAgICAgICBwcmV2TGVuZ3RoICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG59XHJcbmZ1bmN0aW9uIGNoZWNrQnVmZmVyUGFyYW1zKGJhc2VCbG9jaywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgaWYgKCEoaW5wdXRCdWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dEJ1ZmZlciBtdXN0IGJlICdVaW50OEFycmF5J1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dEJ1ZmZlciBoYXMgemVybyBsZW5ndGhcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRPZmZzZXQgPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0T2Zmc2V0IGxlc3MgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0TGVuZ3RoIDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dExlbmd0aCBsZXNzIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICgoaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCAtIGlucHV0T2Zmc2V0IC0gaW5wdXRMZW5ndGgpIDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWQgKGluY29uc2lzdGVudCBvZmZzZXQgYW5kIGxlbmd0aCB2YWx1ZXMpXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cblxuY2xhc3MgVmlld1dyaXRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICB9XHJcbiAgICB3cml0ZShidWYpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLnB1c2goYnVmKTtcclxuICAgIH1cclxuICAgIGZpbmFsKCkge1xyXG4gICAgICAgIHJldHVybiBjb25jYXQodGhpcy5pdGVtcyk7XHJcbiAgICB9XHJcbn1cblxuY29uc3QgcG93ZXJzMiA9IFtuZXcgVWludDhBcnJheShbMV0pXTtcclxuY29uc3QgZGlnaXRzU3RyaW5nID0gXCIwMTIzNDU2Nzg5XCI7XHJcbmNvbnN0IE5BTUUgPSBcIm5hbWVcIjtcclxuY29uc3QgVkFMVUVfSEVYX1ZJRVcgPSBcInZhbHVlSGV4Vmlld1wiO1xyXG5jb25zdCBJU19IRVhfT05MWSA9IFwiaXNIZXhPbmx5XCI7XHJcbmNvbnN0IElEX0JMT0NLID0gXCJpZEJsb2NrXCI7XHJcbmNvbnN0IFRBR19DTEFTUyA9IFwidGFnQ2xhc3NcIjtcclxuY29uc3QgVEFHX05VTUJFUiA9IFwidGFnTnVtYmVyXCI7XHJcbmNvbnN0IElTX0NPTlNUUlVDVEVEID0gXCJpc0NvbnN0cnVjdGVkXCI7XHJcbmNvbnN0IEZST01fQkVSID0gXCJmcm9tQkVSXCI7XHJcbmNvbnN0IFRPX0JFUiA9IFwidG9CRVJcIjtcclxuY29uc3QgTE9DQUwgPSBcImxvY2FsXCI7XHJcbmNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XHJcbmNvbnN0IEVNUFRZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcclxuY29uc3QgRU1QVFlfVklFVyA9IG5ldyBVaW50OEFycmF5KDApO1xyXG5jb25zdCBFTkRfT0ZfQ09OVEVOVF9OQU1FID0gXCJFbmRPZkNvbnRlbnRcIjtcclxuY29uc3QgT0NURVRfU1RSSU5HX05BTUUgPSBcIk9DVEVUIFNUUklOR1wiO1xyXG5jb25zdCBCSVRfU1RSSU5HX05BTUUgPSBcIkJJVCBTVFJJTkdcIjtcblxuZnVuY3Rpb24gSGV4QmxvY2soQmFzZUNsYXNzKSB7XHJcbiAgICB2YXIgX2E7XHJcbiAgICByZXR1cm4gX2EgPSBjbGFzcyBTb21lIGV4dGVuZHMgQmFzZUNsYXNzIHtcclxuICAgICAgICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICAgICAgc3VwZXIoLi4uYXJncyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBhcmdzWzBdIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSAoX2EgPSBwYXJhbXMuaXNIZXhPbmx5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gcGFyYW1zLnZhbHVlSGV4ID8gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocGFyYW1zLnZhbHVlSGV4KSA6IEVNUFRZX1ZJRVc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ2V0IHZhbHVlSGV4KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldCB2YWx1ZUhleCh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3ID0gaW5wdXRCdWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyKSA6IGlucHV0QnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCB2aWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kTGVuZ3RoID0gaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgZW5kTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiWmVybyBidWZmZXIgbGVuZ3RoXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBpbnB1dExlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmRMZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdG9CRVIoc2l6ZU9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSGV4T25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkZsYWcgJ2lzSGV4T25seScgaXMgbm90IHNldCwgYWJvcnRcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCA9PT0gdGhpcy52YWx1ZUhleFZpZXcuYnVmZmVyLmJ5dGVMZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnZhbHVlSGV4Vmlldy5idWZmZXJcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRvSlNPTigpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgICAgICAgICAgaXNIZXhPbmx5OiB0aGlzLmlzSGV4T25seSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUhleDogcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUhleFZpZXcpLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgX2EuTkFNRSA9IFwiaGV4QmxvY2tcIixcclxuICAgICAgICBfYTtcclxufVxuXG5jbGFzcyBMb2NhbEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGJsb2NrTGVuZ3RoID0gMCwgZXJyb3IgPSBFTVBUWV9TVFJJTkcsIHdhcm5pbmdzID0gW10sIHZhbHVlQmVmb3JlRGVjb2RlID0gRU1QVFlfVklFVywgfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgICAgICB0aGlzLndhcm5pbmdzID0gd2FybmluZ3M7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheSh2YWx1ZUJlZm9yZURlY29kZSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgYmxvY2tOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLk5BTUU7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsdWVCZWZvcmVEZWNvZGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgc2V0IHZhbHVlQmVmb3JlRGVjb2RlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSBuZXcgVWludDhBcnJheSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYmxvY2tOYW1lOiB0aGlzLmNvbnN0cnVjdG9yLk5BTUUsXHJcbiAgICAgICAgICAgIGJsb2NrTGVuZ3RoOiB0aGlzLmJsb2NrTGVuZ3RoLFxyXG4gICAgICAgICAgICBlcnJvcjogdGhpcy5lcnJvcixcclxuICAgICAgICAgICAgd2FybmluZ3M6IHRoaXMud2FybmluZ3MsXHJcbiAgICAgICAgICAgIHZhbHVlQmVmb3JlRGVjb2RlOiBwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlQmVmb3JlRGVjb2RlVmlldyksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbEJhc2VCbG9jay5OQU1FID0gXCJiYXNlQmxvY2tcIjtcblxuY2xhc3MgVmFsdWVCbG9jayBleHRlbmRzIExvY2FsQmFzZUJsb2NrIHtcclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcIlVzZXIgbmVlZCB0byBtYWtlIGEgc3BlY2lmaWMgZnVuY3Rpb24gaW4gYSBjbGFzcyB3aGljaCBleHRlbmRzICdWYWx1ZUJsb2NrJ1wiKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJVc2VyIG5lZWQgdG8gbWFrZSBhIHNwZWNpZmljIGZ1bmN0aW9uIGluIGEgY2xhc3Mgd2hpY2ggZXh0ZW5kcyAnVmFsdWVCbG9jaydcIik7XHJcbiAgICB9XHJcbn1cclxuVmFsdWVCbG9jay5OQU1FID0gXCJ2YWx1ZUJsb2NrXCI7XG5cbmNsYXNzIExvY2FsSWRlbnRpZmljYXRpb25CbG9jayBleHRlbmRzIEhleEJsb2NrKExvY2FsQmFzZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGlkQmxvY2sgPSB7fSwgfSA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgaWYgKGlkQmxvY2spIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSAoX2EgPSBpZEJsb2NrLmlzSGV4T25seSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gaWRCbG9jay52YWx1ZUhleCA/IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlkQmxvY2sudmFsdWVIZXgpIDogRU1QVFlfVklFVztcclxuICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9IChfYiA9IGlkQmxvY2sudGFnQ2xhc3MpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IC0xO1xyXG4gICAgICAgICAgICB0aGlzLnRhZ051bWJlciA9IChfYyA9IGlkQmxvY2sudGFnTnVtYmVyKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAtMTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gKF9kID0gaWRCbG9jay5pc0NvbnN0cnVjdGVkKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAtMTtcclxuICAgICAgICAgICAgdGhpcy50YWdOdW1iZXIgPSAtMTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCBmaXJzdE9jdGV0ID0gMDtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMudGFnQ2xhc3MpIHtcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweDAwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHg0MDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICBmaXJzdE9jdGV0IHw9IDB4ODA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweEMwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJVbmtub3duIHRhZyBjbGFzc1wiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25zdHJ1Y3RlZClcclxuICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweDIwO1xyXG4gICAgICAgIGlmICh0aGlzLnRhZ051bWJlciA8IDMxICYmICF0aGlzLmlzSGV4T25seSkge1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoMSk7XHJcbiAgICAgICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBudW1iZXIgPSB0aGlzLnRhZ051bWJlcjtcclxuICAgICAgICAgICAgICAgIG51bWJlciAmPSAweDFGO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3WzBdID0gZmlyc3RPY3RldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZEJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZSh0aGlzLnRhZ051bWJlciwgNyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zik7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSBlbmNvZGVkQnVmLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShzaXplICsgMSk7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMF0gPSAoZmlyc3RPY3RldCB8IDB4MUYpO1xyXG4gICAgICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChzaXplIC0gMSk7IGkrKylcclxuICAgICAgICAgICAgICAgICAgICByZXRWaWV3W2kgKyAxXSA9IGVuY29kZWRWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbc2l6ZV0gPSBlbmNvZGVkVmlld1tzaXplIC0gMV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCArIDEpO1xyXG4gICAgICAgIHJldFZpZXdbMF0gPSAoZmlyc3RPY3RldCB8IDB4MUYpO1xyXG4gICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VyVmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChjdXJWaWV3Lmxlbmd0aCAtIDEpOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2kgKyAxXSA9IGN1clZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICByZXRWaWV3W3RoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGhdID0gY3VyVmlld1tjdXJWaWV3Lmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSBpbnB1dFZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChpbnRCdWZmZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlplcm8gYnVmZmVyIGxlbmd0aFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRhZ0NsYXNzTWFzayA9IGludEJ1ZmZlclswXSAmIDB4QzA7XHJcbiAgICAgICAgc3dpdGNoICh0YWdDbGFzc01hc2spIHtcclxuICAgICAgICAgICAgY2FzZSAweDAwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9ICgxKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDB4NDA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gKDIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMHg4MDpcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoMyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAweEMwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9ICg0KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVW5rbm93biB0YWcgY2xhc3NcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gKGludEJ1ZmZlclswXSAmIDB4MjApID09PSAweDIwO1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgdGFnTnVtYmVyTWFzayA9IGludEJ1ZmZlclswXSAmIDB4MUY7XHJcbiAgICAgICAgaWYgKHRhZ051bWJlck1hc2sgIT09IDB4MUYpIHtcclxuICAgICAgICAgICAgdGhpcy50YWdOdW1iZXIgPSAodGFnTnVtYmVyTWFzayk7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGNvdW50ID0gMTtcclxuICAgICAgICAgICAgbGV0IGludFRhZ051bWJlckJ1ZmZlciA9IHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoMjU1KTtcclxuICAgICAgICAgICAgbGV0IHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCA9IDI1NTtcclxuICAgICAgICAgICAgd2hpbGUgKGludEJ1ZmZlcltjb3VudF0gJiAweDgwKSB7XHJcbiAgICAgICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXJbY291bnQgLSAxXSA9IGludEJ1ZmZlcltjb3VudF0gJiAweDdGO1xyXG4gICAgICAgICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgICAgICAgIGlmIChjb3VudCA+PSBpbnRCdWZmZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPT09IHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCArPSAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVtcEJ1ZmZlclZpZXcgPSBuZXcgVWludDhBcnJheSh0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW50VGFnTnVtYmVyQnVmZmVyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQnVmZmVyVmlld1tpXSA9IGludFRhZ051bWJlckJ1ZmZlcltpXTtcclxuICAgICAgICAgICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXIgPSB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IChjb3VudCArIDEpO1xyXG4gICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXJbY291bnQgLSAxXSA9IGludEJ1ZmZlcltjb3VudF0gJiAweDdGO1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wQnVmZmVyVmlldyA9IG5ldyBVaW50OEFycmF5KGNvdW50KTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgdGVtcEJ1ZmZlclZpZXdbaV0gPSBpbnRUYWdOdW1iZXJCdWZmZXJbaV07XHJcbiAgICAgICAgICAgIGludFRhZ051bWJlckJ1ZmZlciA9IHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoY291bnQpO1xyXG4gICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXIuc2V0KHRlbXBCdWZmZXJWaWV3KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYmxvY2tMZW5ndGggPD0gOSlcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnTnVtYmVyID0gcHZ1dGlscy51dGlsRnJvbUJhc2UoaW50VGFnTnVtYmVyQnVmZmVyLCA3KTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJUYWcgdG9vIGxvbmcsIHJlcHJlc2VudGVkIGFzIGhleC1jb2RlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKCh0aGlzLnRhZ0NsYXNzID09PSAxKSkgJiZcclxuICAgICAgICAgICAgKHRoaXMuaXNDb25zdHJ1Y3RlZCkpIHtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnRhZ051bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgICAgICAgICAgY2FzZSA5OlxyXG4gICAgICAgICAgICAgICAgY2FzZSAxMzpcclxuICAgICAgICAgICAgICAgIGNhc2UgMTQ6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIzOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAyNDpcclxuICAgICAgICAgICAgICAgIGNhc2UgMzE6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMyOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAzMzpcclxuICAgICAgICAgICAgICAgIGNhc2UgMzQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiQ29uc3RydWN0ZWQgZW5jb2RpbmcgdXNlZCBmb3IgcHJpbWl0aXZlIHR5cGVcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB0YWdDbGFzczogdGhpcy50YWdDbGFzcyxcclxuICAgICAgICAgICAgdGFnTnVtYmVyOiB0aGlzLnRhZ051bWJlcixcclxuICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogdGhpcy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxJZGVudGlmaWNhdGlvbkJsb2NrLk5BTUUgPSBcImlkZW50aWZpY2F0aW9uQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxMZW5ndGhCbG9jayBleHRlbmRzIExvY2FsQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgbGVuQmxvY2sgPSB7fSwgfSA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmlzSW5kZWZpbml0ZUZvcm0gPSAoX2EgPSBsZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLmxvbmdGb3JtVXNlZCA9IChfYiA9IGxlbkJsb2NrLmxvbmdGb3JtVXNlZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSAoX2MgPSBsZW5CbG9jay5sZW5ndGgpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDA7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCB2aWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgdmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludEJ1ZmZlciA9IHZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChpbnRCdWZmZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlplcm8gYnVmZmVyIGxlbmd0aFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbnRCdWZmZXJbMF0gPT09IDB4RkYpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiTGVuZ3RoIGJsb2NrIDB4RkYgaXMgcmVzZXJ2ZWQgYnkgc3RhbmRhcmRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzSW5kZWZpbml0ZUZvcm0gPSBpbnRCdWZmZXJbMF0gPT09IDB4ODA7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvbmdGb3JtVXNlZCA9ICEhKGludEJ1ZmZlclswXSAmIDB4ODApO1xyXG4gICAgICAgIGlmICh0aGlzLmxvbmdGb3JtVXNlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAoaW50QnVmZmVyWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IDE7XHJcbiAgICAgICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY291bnQgPSBpbnRCdWZmZXJbMF0gJiAweDdGO1xyXG4gICAgICAgIGlmIChjb3VudCA+IDgpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVG9vIGJpZyBpbnRlZ2VyXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChjb3VudCArIDEpID4gaW50QnVmZmVyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGxlbk9mZnNldCA9IGlucHV0T2Zmc2V0ICsgMTtcclxuICAgICAgICBjb25zdCBsZW5ndGhCdWZmZXJWaWV3ID0gdmlldy5zdWJhcnJheShsZW5PZmZzZXQsIGxlbk9mZnNldCArIGNvdW50KTtcclxuICAgICAgICBpZiAobGVuZ3RoQnVmZmVyVmlld1tjb3VudCAtIDFdID09PSAweDAwKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOZWVkbGVzc2x5IGxvbmcgZW5jb2RlZCBsZW5ndGhcIik7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSBwdnV0aWxzLnV0aWxGcm9tQmFzZShsZW5ndGhCdWZmZXJWaWV3LCA4KTtcclxuICAgICAgICBpZiAodGhpcy5sb25nRm9ybVVzZWQgJiYgKHRoaXMubGVuZ3RoIDw9IDEyNykpXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlVubmVjZXNzYXJ5IHVzYWdlIG9mIGxvbmcgbGVuZ3RoIGZvcm1cIik7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGNvdW50ICsgMTtcclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IHJldEJ1ZjtcclxuICAgICAgICBsZXQgcmV0VmlldztcclxuICAgICAgICBpZiAodGhpcy5sZW5ndGggPiAxMjcpXHJcbiAgICAgICAgICAgIHRoaXMubG9uZ0Zvcm1Vc2VkID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcigxKTtcclxuICAgICAgICAgICAgaWYgKHNpemVPbmx5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3WzBdID0gMHg4MDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5sb25nRm9ybVVzZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZEJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZSh0aGlzLmxlbmd0aCwgOCk7XHJcbiAgICAgICAgICAgIGlmIChlbmNvZGVkQnVmLmJ5dGVMZW5ndGggPiAxMjcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlRvbyBiaWcgbGVuZ3RoXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKEVNUFRZX0JVRkZFUik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKGVuY29kZWRCdWYuYnl0ZUxlbmd0aCArIDEpO1xyXG4gICAgICAgICAgICBpZiAoc2l6ZU9ubHkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkVmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYpO1xyXG4gICAgICAgICAgICByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgcmV0Vmlld1swXSA9IGVuY29kZWRCdWYuYnl0ZUxlbmd0aCB8IDB4ODA7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2kgKyAxXSA9IGVuY29kZWRWaWV3W2ldO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoMSk7XHJcbiAgICAgICAgaWYgKHNpemVPbmx5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgcmV0Vmlld1swXSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBpc0luZGVmaW5pdGVGb3JtOiB0aGlzLmlzSW5kZWZpbml0ZUZvcm0sXHJcbiAgICAgICAgICAgIGxvbmdGb3JtVXNlZDogdGhpcy5sb25nRm9ybVVzZWQsXHJcbiAgICAgICAgICAgIGxlbmd0aDogdGhpcy5sZW5ndGgsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbExlbmd0aEJsb2NrLk5BTUUgPSBcImxlbmd0aEJsb2NrXCI7XG5cbmNvbnN0IHR5cGVTdG9yZSA9IHt9O1xuXG5jbGFzcyBCYXNlQmxvY2sgZXh0ZW5kcyBMb2NhbEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IG5hbWUgPSBFTVBUWV9TVFJJTkcsIG9wdGlvbmFsID0gZmFsc2UsIHByaW1pdGl2ZVNjaGVtYSwgLi4ucGFyYW1ldGVycyB9ID0ge30sIHZhbHVlQmxvY2tUeXBlKSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLm9wdGlvbmFsID0gb3B0aW9uYWw7XHJcbiAgICAgICAgaWYgKHByaW1pdGl2ZVNjaGVtYSkge1xyXG4gICAgICAgICAgICB0aGlzLnByaW1pdGl2ZVNjaGVtYSA9IHByaW1pdGl2ZVNjaGVtYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrID0gbmV3IExvY2FsSWRlbnRpZmljYXRpb25CbG9jayhwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmxlbkJsb2NrID0gbmV3IExvY2FsTGVuZ3RoQmxvY2socGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrID0gdmFsdWVCbG9ja1R5cGUgPyBuZXcgdmFsdWVCbG9ja1R5cGUocGFyYW1ldGVycykgOiBuZXcgVmFsdWVCbG9jayhwYXJhbWV0ZXJzKTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE9mZnNldCA9IHRoaXMudmFsdWVCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgKHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkgPyBpbnB1dExlbmd0aCA6IHRoaXMubGVuQmxvY2subGVuZ3RoKTtcclxuICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZUJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy52YWx1ZUJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgY29uc3QgX3dyaXRlciA9IHdyaXRlciB8fCBuZXcgVmlld1dyaXRlcigpO1xyXG4gICAgICAgIGlmICghd3JpdGVyKSB7XHJcbiAgICAgICAgICAgIHByZXBhcmVJbmRlZmluaXRlRm9ybSh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaWRCbG9ja0J1ZiA9IHRoaXMuaWRCbG9jay50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgX3dyaXRlci53cml0ZShpZEJsb2NrQnVmKTtcclxuICAgICAgICBpZiAodGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgICAgIF93cml0ZXIud3JpdGUobmV3IFVpbnQ4QXJyYXkoWzB4ODBdKS5idWZmZXIpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudG9CRVIoc2l6ZU9ubHksIF93cml0ZXIpO1xyXG4gICAgICAgICAgICBfd3JpdGVyLndyaXRlKG5ldyBBcnJheUJ1ZmZlcigyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUJsb2NrQnVmID0gdGhpcy52YWx1ZUJsb2NrLnRvQkVSKHNpemVPbmx5KTtcclxuICAgICAgICAgICAgdGhpcy5sZW5CbG9jay5sZW5ndGggPSB2YWx1ZUJsb2NrQnVmLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbkJsb2NrQnVmID0gdGhpcy5sZW5CbG9jay50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgICAgIF93cml0ZXIud3JpdGUobGVuQmxvY2tCdWYpO1xyXG4gICAgICAgICAgICBfd3JpdGVyLndyaXRlKHZhbHVlQmxvY2tCdWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXdyaXRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gX3dyaXRlci5maW5hbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIGlkQmxvY2s6IHRoaXMuaWRCbG9jay50b0pTT04oKSxcclxuICAgICAgICAgICAgbGVuQmxvY2s6IHRoaXMubGVuQmxvY2sudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlQmxvY2s6IHRoaXMudmFsdWVCbG9jay50b0pTT04oKSxcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICBvcHRpb25hbDogdGhpcy5vcHRpb25hbCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLnByaW1pdGl2ZVNjaGVtYSlcclxuICAgICAgICAgICAgb2JqZWN0LnByaW1pdGl2ZVNjaGVtYSA9IHRoaXMucHJpbWl0aXZlU2NoZW1hLnRvSlNPTigpO1xyXG4gICAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZyhlbmNvZGluZyA9IFwiYXNjaWlcIikge1xyXG4gICAgICAgIGlmIChlbmNvZGluZyA9PT0gXCJhc2NpaVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uQXNjaWlFbmNvZGluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy50b0JFUigpKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7cHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUJsb2NrLnZhbHVlQmVmb3JlRGVjb2RlVmlldyl9YDtcclxuICAgIH1cclxuICAgIGlzRXF1YWwob3RoZXIpIHtcclxuICAgICAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0aGlzUmF3ID0gdGhpcy50b0JFUigpO1xyXG4gICAgICAgIGNvbnN0IG90aGVyUmF3ID0gb3RoZXIudG9CRVIoKTtcclxuICAgICAgICByZXR1cm4gcHZ1dGlscy5pc0VxdWFsQnVmZmVyKHRoaXNSYXcsIG90aGVyUmF3KTtcclxuICAgIH1cclxufVxyXG5CYXNlQmxvY2suTkFNRSA9IFwiQmFzZUJsb2NrXCI7XHJcbmZ1bmN0aW9uIHByZXBhcmVJbmRlZmluaXRlRm9ybShiYXNlQmxvY2spIHtcclxuICAgIGlmIChiYXNlQmxvY2sgaW5zdGFuY2VvZiB0eXBlU3RvcmUuQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGJhc2VCbG9jay52YWx1ZUJsb2NrLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChwcmVwYXJlSW5kZWZpbml0ZUZvcm0odmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBiYXNlQmxvY2subGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gISFiYXNlQmxvY2subGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybTtcclxufVxuXG5jbGFzcyBCYXNlU3RyaW5nQmxvY2sgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IEVNUFRZX1NUUklORywgLi4ucGFyYW1ldGVycyB9ID0ge30sIHN0cmluZ1ZhbHVlQmxvY2tUeXBlKSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgc3RyaW5nVmFsdWVCbG9ja1R5cGUpO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmxvY2sudmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0T2Zmc2V0ID0gdGhpcy52YWx1ZUJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCAodGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSA/IGlucHV0TGVuZ3RoIDogdGhpcy5sZW5CbG9jay5sZW5ndGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlQmxvY2suZXJyb3I7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJvbUJ1ZmZlcih0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3KTtcclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy52YWx1ZUJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAnJHt0aGlzLnZhbHVlQmxvY2sudmFsdWV9J2A7XHJcbiAgICB9XHJcbn1cclxuQmFzZVN0cmluZ0Jsb2NrLk5BTUUgPSBcIkJhc2VTdHJpbmdCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbFByaW1pdGl2ZVZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGlzSGV4T25seSA9IHRydWUsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pc0hleE9ubHkgPSBpc0hleE9ubHk7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxQcmltaXRpdmVWYWx1ZUJsb2NrLk5BTUUgPSBcIlByaW1pdGl2ZVZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHc7XHJcbmNsYXNzIFByaW1pdGl2ZSBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbFByaW1pdGl2ZVZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuX2EkdyA9IFByaW1pdGl2ZTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5QcmltaXRpdmUgPSBfYSR3O1xyXG59KSgpO1xyXG5QcmltaXRpdmUuTkFNRSA9IFwiUFJJTUlUSVZFXCI7XG5cbmZ1bmN0aW9uIGxvY2FsQ2hhbmdlVHlwZShpbnB1dE9iamVjdCwgbmV3VHlwZSkge1xyXG4gICAgaWYgKGlucHV0T2JqZWN0IGluc3RhbmNlb2YgbmV3VHlwZSkge1xyXG4gICAgICAgIHJldHVybiBpbnB1dE9iamVjdDtcclxuICAgIH1cclxuICAgIGNvbnN0IG5ld09iamVjdCA9IG5ldyBuZXdUeXBlKCk7XHJcbiAgICBuZXdPYmplY3QuaWRCbG9jayA9IGlucHV0T2JqZWN0LmlkQmxvY2s7XHJcbiAgICBuZXdPYmplY3QubGVuQmxvY2sgPSBpbnB1dE9iamVjdC5sZW5CbG9jaztcclxuICAgIG5ld09iamVjdC53YXJuaW5ncyA9IGlucHV0T2JqZWN0Lndhcm5pbmdzO1xyXG4gICAgbmV3T2JqZWN0LnZhbHVlQmVmb3JlRGVjb2RlVmlldyA9IGlucHV0T2JqZWN0LnZhbHVlQmVmb3JlRGVjb2RlVmlldztcclxuICAgIHJldHVybiBuZXdPYmplY3Q7XHJcbn1cclxuZnVuY3Rpb24gbG9jYWxGcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCA9IDAsIGlucHV0TGVuZ3RoID0gaW5wdXRCdWZmZXIubGVuZ3RoKSB7XHJcbiAgICBjb25zdCBpbmNvbWluZ09mZnNldCA9IGlucHV0T2Zmc2V0O1xyXG4gICAgbGV0IHJldHVybk9iamVjdCA9IG5ldyBCYXNlQmxvY2soe30sIFZhbHVlQmxvY2spO1xyXG4gICAgY29uc3QgYmFzZUJsb2NrID0gbmV3IExvY2FsQmFzZUJsb2NrKCk7XHJcbiAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKGJhc2VCbG9jaywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBiYXNlQmxvY2suZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRCdWZmZXIuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgaWYgKCFpbnRCdWZmZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBsZXQgcmVzdWx0T2Zmc2V0ID0gcmV0dXJuT2JqZWN0LmlkQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgIGlmIChyZXR1cm5PYmplY3QuaWRCbG9jay53YXJuaW5ncy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm5PYmplY3Qud2FybmluZ3MuY29uY2F0KHJldHVybk9iamVjdC5pZEJsb2NrLndhcm5pbmdzKTtcclxuICAgIH1cclxuICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gcmV0dXJuT2JqZWN0LmlkQmxvY2suZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaW5wdXRPZmZzZXQgPSByZXN1bHRPZmZzZXQ7XHJcbiAgICBpbnB1dExlbmd0aCAtPSByZXR1cm5PYmplY3QuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgIHJlc3VsdE9mZnNldCA9IHJldHVybk9iamVjdC5sZW5CbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgaWYgKHJldHVybk9iamVjdC5sZW5CbG9jay53YXJuaW5ncy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm5PYmplY3Qud2FybmluZ3MuY29uY2F0KHJldHVybk9iamVjdC5sZW5CbG9jay53YXJuaW5ncyk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IHJldHVybk9iamVjdC5sZW5CbG9jay5lcnJvcjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpbnB1dE9mZnNldCA9IHJlc3VsdE9mZnNldDtcclxuICAgIGlucHV0TGVuZ3RoIC09IHJldHVybk9iamVjdC5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgIGlmICghcmV0dXJuT2JqZWN0LmlkQmxvY2suaXNDb25zdHJ1Y3RlZCAmJlxyXG4gICAgICAgIHJldHVybk9iamVjdC5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gXCJJbmRlZmluaXRlIGxlbmd0aCBmb3JtIHVzZWQgZm9yIHByaW1pdGl2ZSBlbmNvZGluZyBmb3JtXCI7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IG5ld0FTTjFUeXBlID0gQmFzZUJsb2NrO1xyXG4gICAgc3dpdGNoIChyZXR1cm5PYmplY3QuaWRCbG9jay50YWdDbGFzcykge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgaWYgKChyZXR1cm5PYmplY3QuaWRCbG9jay50YWdOdW1iZXIgPj0gMzcpICYmXHJcbiAgICAgICAgICAgICAgICAocmV0dXJuT2JqZWN0LmlkQmxvY2suaXNIZXhPbmx5ID09PSBmYWxzZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiVU5JVkVSU0FMIDM3IGFuZCB1cHBlciB0YWdzIGFyZSByZXNlcnZlZCBieSBBU04uMSBzdGFuZGFyZFwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmV0dXJuT2JqZWN0LmlkQmxvY2sudGFnTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChyZXR1cm5PYmplY3QuaWRCbG9jay5pc0NvbnN0cnVjdGVkKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocmV0dXJuT2JqZWN0LmxlbkJsb2NrLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiVHlwZSBbVU5JVkVSU0FMIDBdIGlzIHJlc2VydmVkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuRW5kT2ZDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkJvb2xlYW47XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuSW50ZWdlcjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5CaXRTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuT2N0ZXRTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuTnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5PYmplY3RJZGVudGlmaWVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5FbnVtZXJhdGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5VdGY4U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5SZWxhdGl2ZU9iamVjdElkZW50aWZpZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE0OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlRJTUU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE1OlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiW1VOSVZFUlNBTCAxNV0gaXMgcmVzZXJ2ZWQgYnkgQVNOLjEgc3RhbmRhcmRcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE2OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlNlcXVlbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxNzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5TZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE4OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLk51bWVyaWNTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE5OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlByaW50YWJsZVN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjA6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVGVsZXRleFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjE6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVmlkZW90ZXhTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIyOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLklBNVN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjM6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVVRDVGltZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjQ6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuR2VuZXJhbGl6ZWRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyNTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5HcmFwaGljU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyNjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5WaXNpYmxlU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyNzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5HZW5lcmFsU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyODpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5Vbml2ZXJzYWxTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI5OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkNoYXJhY3RlclN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzA6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuQm1wU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzMTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5EQVRFO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzMjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5UaW1lT2ZEYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMzOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkRhdGVUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzNDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5EdXJhdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdPYmplY3QgPSByZXR1cm5PYmplY3QuaWRCbG9jay5pc0NvbnN0cnVjdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IHR5cGVTdG9yZS5Db25zdHJ1Y3RlZCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3IHR5cGVTdG9yZS5QcmltaXRpdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICBuZXdPYmplY3QuaWRCbG9jayA9IHJldHVybk9iamVjdC5pZEJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld09iamVjdC5sZW5CbG9jayA9IHJldHVybk9iamVjdC5sZW5CbG9jaztcclxuICAgICAgICAgICAgICAgICAgICBuZXdPYmplY3Qud2FybmluZ3MgPSByZXR1cm5PYmplY3Qud2FybmluZ3M7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0ID0gbmV3T2JqZWN0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSByZXR1cm5PYmplY3QuaWRCbG9jay5pc0NvbnN0cnVjdGVkXHJcbiAgICAgICAgICAgICAgICA/IHR5cGVTdG9yZS5Db25zdHJ1Y3RlZFxyXG4gICAgICAgICAgICAgICAgOiB0eXBlU3RvcmUuUHJpbWl0aXZlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybk9iamVjdCA9IGxvY2FsQ2hhbmdlVHlwZShyZXR1cm5PYmplY3QsIG5ld0FTTjFUeXBlKTtcclxuICAgIHJlc3VsdE9mZnNldCA9IHJldHVybk9iamVjdC5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgcmV0dXJuT2JqZWN0LmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPyBpbnB1dExlbmd0aCA6IHJldHVybk9iamVjdC5sZW5CbG9jay5sZW5ndGgpO1xyXG4gICAgcmV0dXJuT2JqZWN0LnZhbHVlQmVmb3JlRGVjb2RlVmlldyA9IGlucHV0QnVmZmVyLnN1YmFycmF5KGluY29taW5nT2Zmc2V0LCBpbmNvbWluZ09mZnNldCArIHJldHVybk9iamVjdC5ibG9ja0xlbmd0aCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG9mZnNldDogcmVzdWx0T2Zmc2V0LFxyXG4gICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGZyb21CRVIoaW5wdXRCdWZmZXIpIHtcclxuICAgIGlmICghaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBCYXNlQmxvY2soe30sIFZhbHVlQmxvY2spO1xyXG4gICAgICAgIHJlc3VsdC5lcnJvciA9IFwiSW5wdXQgYnVmZmVyIGhhcyB6ZXJvIGxlbmd0aFwiO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbG9jYWxGcm9tQkVSKHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKS5zbGljZSgpLCAwLCBpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoKTtcclxufVxuXG5mdW5jdGlvbiBjaGVja0xlbihpbmRlZmluaXRlTGVuZ3RoLCBsZW5ndGgpIHtcclxuICAgIGlmIChpbmRlZmluaXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVuZ3RoO1xyXG59XHJcbmNsYXNzIExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrIGV4dGVuZHMgVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gW10sIGlzSW5kZWZpbml0ZUZvcm0gPSBmYWxzZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5pc0luZGVmaW5pdGVGb3JtID0gaXNJbmRlZmluaXRlRm9ybTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCB2aWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSB2aWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlplcm8gYnVmZmVyIGxlbmd0aFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY3VycmVudE9mZnNldCA9IGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIHdoaWxlIChjaGVja0xlbih0aGlzLmlzSW5kZWZpbml0ZUZvcm0sIGlucHV0TGVuZ3RoKSA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0dXJuT2JqZWN0ID0gbG9jYWxGcm9tQkVSKHZpZXcsIGN1cnJlbnRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJldHVybk9iamVjdC5vZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gcmV0dXJuT2JqZWN0LnJlc3VsdC5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MuY29uY2F0KHJldHVybk9iamVjdC5yZXN1bHQud2FybmluZ3MpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSByZXR1cm5PYmplY3Qub2Zmc2V0O1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHJldHVybk9iamVjdC5yZXN1bHQuYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIGlucHV0TGVuZ3RoIC09IHJldHVybk9iamVjdC5yZXN1bHQuYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChyZXR1cm5PYmplY3QucmVzdWx0KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSAmJiByZXR1cm5PYmplY3QucmVzdWx0LmNvbnN0cnVjdG9yLk5BTUUgPT09IEVORF9PRl9DT05URU5UX05BTUUpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGggLSAxXS5jb25zdHJ1Y3Rvci5OQU1FID09PSBFTkRfT0ZfQ09OVEVOVF9OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnBvcCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTm8gRW5kT2ZDb250ZW50IGJsb2NrIGVuY29kZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgY29uc3QgX3dyaXRlciA9IHdyaXRlciB8fCBuZXcgVmlld1dyaXRlcigpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlW2ldLnRvQkVSKHNpemVPbmx5LCBfd3JpdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF3cml0ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF93cml0ZXIuZmluYWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBpc0luZGVmaW5pdGVGb3JtOiB0aGlzLmlzSW5kZWZpbml0ZUZvcm0sXHJcbiAgICAgICAgICAgIHZhbHVlOiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgICBvYmplY3QudmFsdWUucHVzaCh2YWx1ZS50b0pTT04oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2suTkFNRSA9IFwiQ29uc3RydWN0ZWRWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSR2O1xyXG5jbGFzcyBDb25zdHJ1Y3RlZCBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLmlzQ29uc3RydWN0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPSB0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm07XHJcbiAgICAgICAgY29uc3QgcmVzdWx0T2Zmc2V0ID0gdGhpcy52YWx1ZUJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCAodGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSA/IGlucHV0TGVuZ3RoIDogdGhpcy5sZW5CbG9jay5sZW5ndGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlQmxvY2suZXJyb3I7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pZEJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxlbkJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmxlbkJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy52YWx1ZUJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLnZhbHVlQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMudmFsdWVCbG9jay52YWx1ZSkge1xyXG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZS50b1N0cmluZyhcImFzY2lpXCIpLnNwbGl0KFwiXFxuXCIpLm1hcChvID0+IGAgICR7b31gKS5qb2luKFwiXFxuXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmxvY2tOYW1lID0gdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID09PSAzXHJcbiAgICAgICAgICAgID8gYFske3RoaXMuaWRCbG9jay50YWdOdW1iZXJ9XWBcclxuICAgICAgICAgICAgOiB0aGlzLmNvbnN0cnVjdG9yLk5BTUU7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5sZW5ndGhcclxuICAgICAgICAgICAgPyBgJHtibG9ja05hbWV9IDpcXG4ke3ZhbHVlcy5qb2luKFwiXFxuXCIpfWBcclxuICAgICAgICAgICAgOiBgJHtibG9ja05hbWV9IDpgO1xyXG4gICAgfVxyXG59XHJcbl9hJHYgPSBDb25zdHJ1Y3RlZDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5Db25zdHJ1Y3RlZCA9IF9hJHY7XHJcbn0pKCk7XHJcbkNvbnN0cnVjdGVkLk5BTUUgPSBcIkNPTlNUUlVDVEVEXCI7XG5cbmNsYXNzIExvY2FsRW5kT2ZDb250ZW50VmFsdWVCbG9jayBleHRlbmRzIFZhbHVlQmxvY2sge1xyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsRW5kT2ZDb250ZW50VmFsdWVCbG9jay5vdmVycmlkZSA9IFwiRW5kT2ZDb250ZW50VmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkdTtcclxuY2xhc3MgRW5kT2ZDb250ZW50IGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsRW5kT2ZDb250ZW50VmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMDtcclxuICAgIH1cclxufVxyXG5fYSR1ID0gRW5kT2ZDb250ZW50O1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkVuZE9mQ29udGVudCA9IF9hJHU7XHJcbn0pKCk7XHJcbkVuZE9mQ29udGVudC5OQU1FID0gRU5EX09GX0NPTlRFTlRfTkFNRTtcblxudmFyIF9hJHQ7XHJcbmNsYXNzIE51bGwgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gNTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxlbkJsb2NrLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5vbi16ZXJvIGxlbmd0aCBvZiB2YWx1ZSBibG9jayBmb3IgTnVsbCB0eXBlXCIpO1xyXG4gICAgICAgIGlmICghdGhpcy5pZEJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxlbkJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmxlbkJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgaWYgKChpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKSA+IGlucHV0QnVmZmVyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWQgKGluY29uc2lzdGVudCBvZmZzZXQgYW5kIGxlbmd0aCB2YWx1ZXMpXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBjb25zdCByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoMik7XHJcbiAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgcmV0Vmlld1swXSA9IDB4MDU7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMV0gPSAweDAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod3JpdGVyKSB7XHJcbiAgICAgICAgICAgIHdyaXRlci53cml0ZShyZXRCdWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9YDtcclxuICAgIH1cclxufVxyXG5fYSR0ID0gTnVsbDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5OdWxsID0gX2EkdDtcclxufSkoKTtcclxuTnVsbC5OQU1FID0gXCJOVUxMXCI7XG5cbmNsYXNzIExvY2FsQm9vbGVhblZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLnZhbHVlSGV4KSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocGFyYW1ldGVycy52YWx1ZUhleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG9jdGV0IG9mIHRoaXMudmFsdWVIZXhWaWV3KSB7XHJcbiAgICAgICAgICAgIGlmIChvY3RldCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3WzBdID0gdmFsdWUgPyAweEZGIDogMHgwMDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGlucHV0VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIGlucHV0VmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAoaW5wdXRMZW5ndGggPiAxKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJCb29sZWFuIHZhbHVlIGVuY29kZWQgaW4gbW9yZSB0aGVuIDEgb2N0ZXRcIik7XHJcbiAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIHB2dXRpbHMudXRpbERlY29kZVRDLmNhbGwodGhpcyk7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGlucHV0TGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKTtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbEJvb2xlYW5WYWx1ZUJsb2NrLk5BTUUgPSBcIkJvb2xlYW5WYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRzO1xyXG5jbGFzcyBCb29sZWFuIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsQm9vbGVhblZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0VmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy5nZXRWYWx1ZX1gO1xyXG4gICAgfVxyXG59XHJcbl9hJHMgPSBCb29sZWFuO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkJvb2xlYW4gPSBfYSRzO1xyXG59KSgpO1xyXG5Cb29sZWFuLk5BTUUgPSBcIkJPT0xFQU5cIjtcblxuY2xhc3MgTG9jYWxPY3RldFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyBpc0NvbnN0cnVjdGVkID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gaXNDb25zdHJ1Y3RlZDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQgPSAwO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sucHJvdG90eXBlLmZyb21CRVIuY2FsbCh0aGlzLCBpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRCbG9ja05hbWUgPSB0aGlzLnZhbHVlW2ldLmNvbnN0cnVjdG9yLk5BTUU7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJsb2NrTmFtZSA9PT0gRU5EX09GX0NPTlRFTlRfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmRPZkNvbnRlbnQgaXMgdW5leHBlY3RlZCwgT0NURVQgU1RSSU5HIG1heSBjb25zaXN0cyBvZiBPQ1RFVCBTVFJJTkdzIG9ubHlcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QmxvY2tOYW1lICE9PSBPQ1RFVF9TVFJJTkdfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIk9DVEVUIFNUUklORyBtYXkgY29uc2lzdHMgb2YgT0NURVQgU1RSSU5HcyBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IHN1cGVyLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBpbnB1dExlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKVxyXG4gICAgICAgICAgICByZXR1cm4gTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sucHJvdG90eXBlLnRvQkVSLmNhbGwodGhpcywgc2l6ZU9ubHksIHdyaXRlcik7XHJcbiAgICAgICAgcmV0dXJuIHNpemVPbmx5XHJcbiAgICAgICAgICAgID8gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGgpXHJcbiAgICAgICAgICAgIDogdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIGlzQ29uc3RydWN0ZWQ6IHRoaXMuaXNDb25zdHJ1Y3RlZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsT2N0ZXRTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIk9jdGV0U3RyaW5nVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkcjtcclxuY2xhc3MgT2N0ZXRTdHJpbmcgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyBpZEJsb2NrID0ge30sIGxlbkJsb2NrID0ge30sIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYztcclxuICAgICAgICAoX2IgPSBwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IChwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQgPSAhISgoX2MgPSBwYXJhbWV0ZXJzLnZhbHVlKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSk7XHJcbiAgICAgICAgc3VwZXIoe1xyXG4gICAgICAgICAgICBpZEJsb2NrOiB7XHJcbiAgICAgICAgICAgICAgICBpc0NvbnN0cnVjdGVkOiBwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQsXHJcbiAgICAgICAgICAgICAgICAuLi5pZEJsb2NrLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBsZW5CbG9jazoge1xyXG4gICAgICAgICAgICAgICAgLi4ubGVuQmxvY2ssXHJcbiAgICAgICAgICAgICAgICBpc0luZGVmaW5pdGVGb3JtOiAhIXBhcmFtZXRlcnMuaXNJbmRlZmluaXRlRm9ybSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4ucGFyYW1ldGVycyxcclxuICAgICAgICB9LCBMb2NhbE9jdGV0U3RyaW5nVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gNDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkID0gdGhpcy5pZEJsb2NrLmlzQ29uc3RydWN0ZWQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPSB0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm07XHJcbiAgICAgICAgaWYgKGlucHV0TGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlkQmxvY2suZXJyb3IubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxlbkJsb2NrLmVycm9yLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSBpbnB1dEJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gbmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpIDogaW5wdXRCdWZmZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1ZiA9IHZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGJ1Zi5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuID0gbG9jYWxGcm9tQkVSKGJ1ZiwgMCwgYnVmLmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhc24ub2Zmc2V0ICE9PSAtMSAmJiBhc24ub2Zmc2V0ID09PSBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBbYXNuLnJlc3VsdF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkIHx8ICh0aGlzLnZhbHVlQmxvY2sudmFsdWUgJiYgdGhpcy52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdGVkLnByb3RvdHlwZS5vbkFzY2lpRW5jb2RpbmcuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3B2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcpfWA7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBhcnJheSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgY29udGVudCBvZiB0aGlzLnZhbHVlQmxvY2sudmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBPY3RldFN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaChjb250ZW50LnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci5jb25jYXQoYXJyYXkpO1xyXG4gICAgfVxyXG59XHJcbl9hJHIgPSBPY3RldFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5PY3RldFN0cmluZyA9IF9hJHI7XHJcbn0pKCk7XHJcbk9jdGV0U3RyaW5nLk5BTUUgPSBPQ1RFVF9TVFJJTkdfTkFNRTtcblxuY2xhc3MgTG9jYWxCaXRTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdW51c2VkQml0cyA9IDAsIGlzQ29uc3RydWN0ZWQgPSBmYWxzZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSB1bnVzZWRCaXRzO1xyXG4gICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IGlzQ29uc3RydWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGg7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBpZiAoIWlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlc3VsdE9mZnNldCA9IC0xO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sucHJvdG90eXBlLmZyb21CRVIuY2FsbCh0aGlzLCBpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRCbG9ja05hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5OQU1FO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCbG9ja05hbWUgPT09IEVORF9PRl9DT05URU5UX05BTUUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kT2ZDb250ZW50IGlzIHVuZXhwZWN0ZWQsIEJJVCBTVFJJTkcgbWF5IGNvbnNpc3RzIG9mIEJJVCBTVFJJTkdzIG9ubHlcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QmxvY2tOYW1lICE9PSBCSVRfU1RSSU5HX05BTUUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJCSVQgU1RSSU5HIG1heSBjb25zaXN0cyBvZiBCSVQgU1RSSU5HcyBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVCbG9jayA9IHZhbHVlLnZhbHVlQmxvY2s7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMudW51c2VkQml0cyA+IDApICYmICh2YWx1ZUJsb2NrLnVudXNlZEJpdHMgPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlVzaW5nIG9mIFxcXCJ1bnVzZWQgYml0c1xcXCIgaW5zaWRlIGNvbnN0cnVjdGl2ZSBCSVQgU1RSSU5HIGFsbG93ZWQgZm9yIGxlYXN0IG9uZSBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gdmFsdWVCbG9jay51bnVzZWRCaXRzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlucHV0VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIGlucHV0VmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludEJ1ZmZlciA9IGlucHV0Vmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gaW50QnVmZmVyWzBdO1xyXG4gICAgICAgIGlmICh0aGlzLnVudXNlZEJpdHMgPiA3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlVudXNlZCBiaXRzIGZvciBCaXRTdHJpbmcgbXVzdCBiZSBpbiByYW5nZSAwLTdcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudW51c2VkQml0cykge1xyXG4gICAgICAgICAgICBjb25zdCBidWYgPSBpbnRCdWZmZXIuc3ViYXJyYXkoMSk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVmLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc24gPSBsb2NhbEZyb21CRVIoYnVmLCAwLCBidWYuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFzbi5vZmZzZXQgIT09IC0xICYmIGFzbi5vZmZzZXQgPT09IChpbnB1dExlbmd0aCAtIDEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbYXNuLnJlc3VsdF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBpbnRCdWZmZXIuc3ViYXJyYXkoMSk7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGludEJ1ZmZlci5sZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jay5wcm90b3R5cGUudG9CRVIuY2FsbCh0aGlzLCBzaXplT25seSwgd3JpdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCArIDEpO1xyXG4gICAgICAgIHJldFZpZXdbMF0gPSB0aGlzLnVudXNlZEJpdHM7XHJcbiAgICAgICAgcmV0Vmlldy5zZXQodGhpcy52YWx1ZUhleFZpZXcsIDEpO1xyXG4gICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdW51c2VkQml0czogdGhpcy51bnVzZWRCaXRzLFxyXG4gICAgICAgICAgICBpc0NvbnN0cnVjdGVkOiB0aGlzLmlzQ29uc3RydWN0ZWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbEJpdFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiQml0U3RyaW5nVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkcTtcclxuY2xhc3MgQml0U3RyaW5nIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgaWRCbG9jayA9IHt9LCBsZW5CbG9jayA9IHt9LCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYiwgX2M7XHJcbiAgICAgICAgKF9iID0gcGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAocGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkID0gISEoKF9jID0gcGFyYW1ldGVycy52YWx1ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCkpO1xyXG4gICAgICAgIHN1cGVyKHtcclxuICAgICAgICAgICAgaWRCbG9jazoge1xyXG4gICAgICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogcGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgICAgICAgICAgLi4uaWRCbG9jayxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbGVuQmxvY2s6IHtcclxuICAgICAgICAgICAgICAgIC4uLmxlbkJsb2NrLFxyXG4gICAgICAgICAgICAgICAgaXNJbmRlZmluaXRlRm9ybTogISFwYXJhbWV0ZXJzLmlzSW5kZWZpbml0ZUZvcm0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLnBhcmFtZXRlcnMsXHJcbiAgICAgICAgfSwgTG9jYWxCaXRTdHJpbmdWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzQ29uc3RydWN0ZWQgPSB0aGlzLmlkQmxvY2suaXNDb25zdHJ1Y3RlZDtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suaXNJbmRlZmluaXRlRm9ybSA9IHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybTtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZUJsb2NrLmlzQ29uc3RydWN0ZWQgfHwgKHRoaXMudmFsdWVCbG9jay52YWx1ZSAmJiB0aGlzLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gQ29uc3RydWN0ZWQucHJvdG90eXBlLm9uQXNjaWlFbmNvZGluZy5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgYml0cyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUhleCA9IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgYnl0ZSBvZiB2YWx1ZUhleCkge1xyXG4gICAgICAgICAgICAgICAgYml0cy5wdXNoKGJ5dGUudG9TdHJpbmcoMikucGFkU3RhcnQoOCwgXCIwXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBiaXRzU3RyID0gYml0cy5qb2luKFwiXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7Yml0c1N0ci5zdWJzdHJpbmcoMCwgYml0c1N0ci5sZW5ndGggLSB0aGlzLnZhbHVlQmxvY2sudW51c2VkQml0cyl9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuX2EkcSA9IEJpdFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5CaXRTdHJpbmcgPSBfYSRxO1xyXG59KSgpO1xyXG5CaXRTdHJpbmcuTkFNRSA9IEJJVF9TVFJJTkdfTkFNRTtcblxudmFyIF9hJHA7XHJcbmZ1bmN0aW9uIHZpZXdBZGQoZmlyc3QsIHNlY29uZCkge1xyXG4gICAgY29uc3QgYyA9IG5ldyBVaW50OEFycmF5KFswXSk7XHJcbiAgICBjb25zdCBmaXJzdFZpZXcgPSBuZXcgVWludDhBcnJheShmaXJzdCk7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc2Vjb25kKTtcclxuICAgIGxldCBmaXJzdFZpZXdDb3B5ID0gZmlyc3RWaWV3LnNsaWNlKDApO1xyXG4gICAgY29uc3QgZmlyc3RWaWV3Q29weUxlbmd0aCA9IGZpcnN0Vmlld0NvcHkubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXdDb3B5ID0gc2Vjb25kVmlldy5zbGljZSgwKTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXdDb3B5TGVuZ3RoID0gc2Vjb25kVmlld0NvcHkubGVuZ3RoIC0gMTtcclxuICAgIGxldCB2YWx1ZSA9IDA7XHJcbiAgICBjb25zdCBtYXggPSAoc2Vjb25kVmlld0NvcHlMZW5ndGggPCBmaXJzdFZpZXdDb3B5TGVuZ3RoKSA/IGZpcnN0Vmlld0NvcHlMZW5ndGggOiBzZWNvbmRWaWV3Q29weUxlbmd0aDtcclxuICAgIGxldCBjb3VudGVyID0gMDtcclxuICAgIGZvciAobGV0IGkgPSBtYXg7IGkgPj0gMDsgaS0tLCBjb3VudGVyKyspIHtcclxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICAgICAgY2FzZSAoY291bnRlciA8IHNlY29uZFZpZXdDb3B5Lmxlbmd0aCk6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdICsgc2Vjb25kVmlld0NvcHlbc2Vjb25kVmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSArIGNbMF07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gKyBjWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjWzBdID0gdmFsdWUgLyAxMDtcclxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICAgICAgY2FzZSAoY291bnRlciA+PSBmaXJzdFZpZXdDb3B5Lmxlbmd0aCk6XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5ID0gcHZ1dGlscy51dGlsQ29uY2F0VmlldyhuZXcgVWludDhBcnJheShbdmFsdWUgJSAxMF0pLCBmaXJzdFZpZXdDb3B5KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZSAlIDEwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjWzBdID4gMClcclxuICAgICAgICBmaXJzdFZpZXdDb3B5ID0gcHZ1dGlscy51dGlsQ29uY2F0VmlldyhjLCBmaXJzdFZpZXdDb3B5KTtcclxuICAgIHJldHVybiBmaXJzdFZpZXdDb3B5O1xyXG59XHJcbmZ1bmN0aW9uIHBvd2VyMihuKSB7XHJcbiAgICBpZiAobiA+PSBwb3dlcnMyLmxlbmd0aCkge1xyXG4gICAgICAgIGZvciAobGV0IHAgPSBwb3dlcnMyLmxlbmd0aDsgcCA8PSBuOyBwKyspIHtcclxuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyBVaW50OEFycmF5KFswXSk7XHJcbiAgICAgICAgICAgIGxldCBkaWdpdHMgPSAocG93ZXJzMltwIC0gMV0pLnNsaWNlKDApO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gKGRpZ2l0cy5sZW5ndGggLSAxKTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gbmV3IFVpbnQ4QXJyYXkoWyhkaWdpdHNbaV0gPDwgMSkgKyBjWzBdXSk7XHJcbiAgICAgICAgICAgICAgICBjWzBdID0gbmV3VmFsdWVbMF0gLyAxMDtcclxuICAgICAgICAgICAgICAgIGRpZ2l0c1tpXSA9IG5ld1ZhbHVlWzBdICUgMTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNbMF0gPiAwKVxyXG4gICAgICAgICAgICAgICAgZGlnaXRzID0gcHZ1dGlscy51dGlsQ29uY2F0VmlldyhjLCBkaWdpdHMpO1xyXG4gICAgICAgICAgICBwb3dlcnMyLnB1c2goZGlnaXRzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcG93ZXJzMltuXTtcclxufVxyXG5mdW5jdGlvbiB2aWV3U3ViKGZpcnN0LCBzZWNvbmQpIHtcclxuICAgIGxldCBiID0gMDtcclxuICAgIGNvbnN0IGZpcnN0VmlldyA9IG5ldyBVaW50OEFycmF5KGZpcnN0KTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXcgPSBuZXcgVWludDhBcnJheShzZWNvbmQpO1xyXG4gICAgY29uc3QgZmlyc3RWaWV3Q29weSA9IGZpcnN0Vmlldy5zbGljZSgwKTtcclxuICAgIGNvbnN0IGZpcnN0Vmlld0NvcHlMZW5ndGggPSBmaXJzdFZpZXdDb3B5Lmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3Q29weSA9IHNlY29uZFZpZXcuc2xpY2UoMCk7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3Q29weUxlbmd0aCA9IHNlY29uZFZpZXdDb3B5Lmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgdmFsdWU7XHJcbiAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gc2Vjb25kVmlld0NvcHlMZW5ndGg7IGkgPj0gMDsgaS0tLCBjb3VudGVyKyspIHtcclxuICAgICAgICB2YWx1ZSA9IGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdIC0gc2Vjb25kVmlld0NvcHlbc2Vjb25kVmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSAtIGI7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKHZhbHVlIDwgMCk6XHJcbiAgICAgICAgICAgICAgICBiID0gMTtcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdID0gdmFsdWUgKyAxMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYiA9IDA7XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChiID4gMCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAoZmlyc3RWaWV3Q29weUxlbmd0aCAtIHNlY29uZFZpZXdDb3B5TGVuZ3RoICsgMSk7IGkgPj0gMDsgaS0tLCBjb3VudGVyKyspIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSAtIGI7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA8IDApIHtcclxuICAgICAgICAgICAgICAgIGIgPSAxO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZSArIDEwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYiA9IDA7XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlyc3RWaWV3Q29weS5zbGljZSgpO1xyXG59XHJcbmNsYXNzIExvY2FsSW50ZWdlclZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlRGVjID0gMDtcclxuICAgICAgICBpZiAocGFyYW1ldGVycy52YWx1ZUhleCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlSGV4KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVEZWMgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZUhleCgpIHtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoID49IDQpIHtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVG9vIGJpZyBJbnRlZ2VyIGZvciBkZWNvZGluZywgaGV4IG9ubHlcIik7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWVEZWMgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlRGVjID0gcHZ1dGlscy51dGlsRGVjb2RlVEMuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHNldCB2YWx1ZURlYyh2KSB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWVEZWMgPSB2O1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShwdnV0aWxzLnV0aWxFbmNvZGVUQyh2KSk7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsdWVEZWMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlRGVjO1xyXG4gICAgfVxyXG4gICAgZnJvbURFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoLCBleHBlY3RlZExlbmd0aCA9IDApIHtcclxuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gLTEpXHJcbiAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIGlmICgodmlld1swXSA9PT0gMHgwMCkgJiYgKCh2aWV3WzFdICYgMHg4MCkgIT09IDApKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdmlldy5zdWJhcnJheSgxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChleHBlY3RlZExlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZpZXcubGVuZ3RoIDwgZXhwZWN0ZWRMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGV4cGVjdGVkTGVuZ3RoIC0gdmlldy5sZW5ndGgpID4gMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRMZW5ndGggPSB2aWV3Lmxlbmd0aCArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB2aWV3LnN1YmFycmF5KGV4cGVjdGVkTGVuZ3RoIC0gdmlldy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0RFUihzaXplT25seSA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjYXNlICgodmlld1swXSAmIDB4ODApICE9PSAwKTpcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRWaWV3WzBdID0gMHgwMDtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkVmlldy5zZXQodmlldywgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB1cGRhdGVkVmlldztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICgodmlld1swXSA9PT0gMHgwMCkgJiYgKCh2aWV3WzFdICYgMHg4MCkgPT09IDApKTpcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHRoaXMudmFsdWVIZXhWaWV3LnN1YmFycmF5KDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnRvQkVSKHNpemVPbmx5KTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE9mZnNldCA9IHN1cGVyLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZUhleCgpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIHJldHVybiBzaXplT25seVxyXG4gICAgICAgICAgICA/IG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGgpXHJcbiAgICAgICAgICAgIDogdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlRGVjOiB0aGlzLnZhbHVlRGVjLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICBjb25zdCBmaXJzdEJpdCA9ICh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggKiA4KSAtIDE7XHJcbiAgICAgICAgbGV0IGRpZ2l0cyA9IG5ldyBVaW50OEFycmF5KCh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggKiA4KSAvIDMpO1xyXG4gICAgICAgIGxldCBiaXROdW1iZXIgPSAwO1xyXG4gICAgICAgIGxldCBjdXJyZW50Qnl0ZTtcclxuICAgICAgICBjb25zdCBhc24xVmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBmbGFnID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgYnl0ZU51bWJlciA9IChhc24xVmlldy5ieXRlTGVuZ3RoIC0gMSk7IGJ5dGVOdW1iZXIgPj0gMDsgYnl0ZU51bWJlci0tKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRCeXRlID0gYXNuMVZpZXdbYnl0ZU51bWJlcl07XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGN1cnJlbnRCeXRlICYgMSkgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGJpdE51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGZpcnN0Qml0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0gdmlld1N1Yihwb3dlcjIoYml0TnVtYmVyKSwgZGlnaXRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiLVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSB2aWV3QWRkKGRpZ2l0cywgcG93ZXIyKGJpdE51bWJlcikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJpdE51bWJlcisrO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEJ5dGUgPj49IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWdpdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGRpZ2l0c1tpXSlcclxuICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZmxhZylcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBkaWdpdHNTdHJpbmcuY2hhckF0KGRpZ2l0c1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmbGFnID09PSBmYWxzZSlcclxuICAgICAgICAgICAgcmVzdWx0ICs9IGRpZ2l0c1N0cmluZy5jaGFyQXQoMCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG5fYSRwID0gTG9jYWxJbnRlZ2VyVmFsdWVCbG9jaztcclxuTG9jYWxJbnRlZ2VyVmFsdWVCbG9jay5OQU1FID0gXCJJbnRlZ2VyVmFsdWVCbG9ja1wiO1xyXG4oKCkgPT4ge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9hJHAucHJvdG90eXBlLCBcInZhbHVlSGV4XCIsIHtcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodik7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVIZXgoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG59KSgpO1xuXG52YXIgX2EkbztcclxuY2xhc3MgSW50ZWdlciBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbEludGVnZXJWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyO1xyXG4gICAgfVxyXG4gICAgdG9CaWdJbnQoKSB7XHJcbiAgICAgICAgYXNzZXJ0QmlnSW50KCk7XHJcbiAgICAgICAgcmV0dXJuIEJpZ0ludCh0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbUJpZ0ludCh2YWx1ZSkge1xyXG4gICAgICAgIGFzc2VydEJpZ0ludCgpO1xyXG4gICAgICAgIGNvbnN0IGJpZ0ludFZhbHVlID0gQmlnSW50KHZhbHVlKTtcclxuICAgICAgICBjb25zdCB3cml0ZXIgPSBuZXcgVmlld1dyaXRlcigpO1xyXG4gICAgICAgIGNvbnN0IGhleCA9IGJpZ0ludFZhbHVlLnRvU3RyaW5nKDE2KS5yZXBsYWNlKC9eLS8sIFwiXCIpO1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShwdnRzdXRpbHMuQ29udmVydC5Gcm9tSGV4KGhleCkpO1xyXG4gICAgICAgIGlmIChiaWdJbnRWYWx1ZSA8IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBuZXcgVWludDhBcnJheSh2aWV3Lmxlbmd0aCArICh2aWV3WzBdICYgMHg4MCA/IDEgOiAwKSk7XHJcbiAgICAgICAgICAgIGZpcnN0WzBdIHw9IDB4ODA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SW50ID0gQmlnSW50KGAweCR7cHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgoZmlyc3QpfWApO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmRJbnQgPSBmaXJzdEludCArIGJpZ0ludFZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShwdnRzdXRpbHMuQ29udmVydC5Gcm9tSGV4KHNlY29uZEludC50b1N0cmluZygxNikpKTtcclxuICAgICAgICAgICAgc2Vjb25kWzBdIHw9IDB4ODA7XHJcbiAgICAgICAgICAgIHdyaXRlci53cml0ZShzZWNvbmQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHZpZXdbMF0gJiAweDgwKSB7XHJcbiAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGUobmV3IFVpbnQ4QXJyYXkoWzBdKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd3JpdGVyLndyaXRlKHZpZXcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXMgPSBuZXcgSW50ZWdlcih7XHJcbiAgICAgICAgICAgIHZhbHVlSGV4OiB3cml0ZXIuZmluYWwoKSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgY29udmVydFRvREVSKCkge1xyXG4gICAgICAgIGNvbnN0IGludGVnZXIgPSBuZXcgSW50ZWdlcih7IHZhbHVlSGV4OiB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3IH0pO1xyXG4gICAgICAgIGludGVnZXIudmFsdWVCbG9jay50b0RFUigpO1xyXG4gICAgICAgIHJldHVybiBpbnRlZ2VyO1xyXG4gICAgfVxyXG4gICAgY29udmVydEZyb21ERVIoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHtcclxuICAgICAgICAgICAgdmFsdWVIZXg6IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXdbMF0gPT09IDBcclxuICAgICAgICAgICAgICAgID8gdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldy5zdWJhcnJheSgxKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHt0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKX1gO1xyXG4gICAgfVxyXG59XHJcbl9hJG8gPSBJbnRlZ2VyO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkludGVnZXIgPSBfYSRvO1xyXG59KSgpO1xyXG5JbnRlZ2VyLk5BTUUgPSBcIklOVEVHRVJcIjtcblxudmFyIF9hJG47XHJcbmNsYXNzIEVudW1lcmF0ZWQgZXh0ZW5kcyBJbnRlZ2VyIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDEwO1xyXG4gICAgfVxyXG59XHJcbl9hJG4gPSBFbnVtZXJhdGVkO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkVudW1lcmF0ZWQgPSBfYSRuO1xyXG59KSgpO1xyXG5FbnVtZXJhdGVkLk5BTUUgPSBcIkVOVU1FUkFURURcIjtcblxuY2xhc3MgTG9jYWxTaWRWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZURlYyA9IC0xLCBpc0ZpcnN0U2lkID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZURlYyA9IHZhbHVlRGVjO1xyXG4gICAgICAgIHRoaXMuaXNGaXJzdFNpZCA9IGlzRmlyc3RTaWQ7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBpZiAoIWlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5wdXRWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgaW5wdXRWaWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXdbaV0gPSBpbnRCdWZmZXJbaV0gJiAweDdGO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoKys7XHJcbiAgICAgICAgICAgIGlmICgoaW50QnVmZmVyW2ldICYgMHg4MCkgPT09IDB4MDApXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGVtcFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYmxvY2tMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0ZW1wVmlld1tpXSA9IHRoaXMudmFsdWVIZXhWaWV3W2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHRlbXBWaWV3O1xyXG4gICAgICAgIGlmICgoaW50QnVmZmVyW3RoaXMuYmxvY2tMZW5ndGggLSAxXSAmIDB4ODApICE9PSAweDAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVIZXhWaWV3WzBdID09PSAweDAwKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOZWVkbGVzc2x5IGxvbmcgZm9ybWF0IG9mIFNJRCBlbmNvZGluZ1wiKTtcclxuICAgICAgICBpZiAodGhpcy5ibG9ja0xlbmd0aCA8PSA4KVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlRGVjID0gcHZ1dGlscy51dGlsRnJvbUJhc2UodGhpcy52YWx1ZUhleFZpZXcsIDcpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlRvbyBiaWcgU0lEIGZvciBkZWNvZGluZywgaGV4IG9ubHlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZUJpZ0ludCh2YWx1ZSkge1xyXG4gICAgICAgIGFzc2VydEJpZ0ludCgpO1xyXG4gICAgICAgIGxldCBiaXRzID0gQmlnSW50KHZhbHVlKS50b1N0cmluZygyKTtcclxuICAgICAgICB3aGlsZSAoYml0cy5sZW5ndGggJSA3KSB7XHJcbiAgICAgICAgICAgIGJpdHMgPSBcIjBcIiArIGJpdHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYml0cy5sZW5ndGggLyA3KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGJ5dGVzW2ldID0gcGFyc2VJbnQoYml0cy5zbGljZShpICogNywgaSAqIDcgKyA3KSwgMikgKyAoaSArIDEgPCBieXRlcy5sZW5ndGggPyAweDgwIDogMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJvbUJFUihieXRlcy5idWZmZXIsIDAsIGJ5dGVzLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSGV4T25seSkge1xyXG4gICAgICAgICAgICBpZiAoc2l6ZU9ubHkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1clZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICh0aGlzLmJsb2NrTGVuZ3RoIC0gMSk7IGkrKylcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbaV0gPSBjdXJWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1t0aGlzLmJsb2NrTGVuZ3RoIC0gMV0gPSBjdXJWaWV3W3RoaXMuYmxvY2tMZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBlbmNvZGVkQnVmID0gcHZ1dGlscy51dGlsVG9CYXNlKHRoaXMudmFsdWVEZWMsIDcpO1xyXG4gICAgICAgIGlmIChlbmNvZGVkQnVmLmJ5dGVMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRXJyb3IgZHVyaW5nIGVuY29kaW5nIFNJRCB2YWx1ZVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoKTtcclxuICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IGVuY29kZWRCdWYuYnl0ZUxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2ldID0gZW5jb2RlZFZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICByZXRWaWV3W2xlbl0gPSBlbmNvZGVkVmlld1tsZW5dO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0VmlldztcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSGV4T25seSlcclxuICAgICAgICAgICAgcmVzdWx0ID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUhleFZpZXcpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0ZpcnN0U2lkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2lkVmFsdWUgPSB0aGlzLnZhbHVlRGVjO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVEZWMgPD0gMzkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gXCIwLlwiO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVEZWMgPD0gNzkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gXCIxLlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWRWYWx1ZSAtPSA0MDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiMi5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2lkVmFsdWUgLT0gODA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy52YWx1ZURlYy50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZURlYzogdGhpcy52YWx1ZURlYyxcclxuICAgICAgICAgICAgaXNGaXJzdFNpZDogdGhpcy5pc0ZpcnN0U2lkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxTaWRWYWx1ZUJsb2NrLk5BTUUgPSBcInNpZEJsb2NrXCI7XG5cbmNsYXNzIExvY2FsT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2sgZXh0ZW5kcyBWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBFTVBUWV9TVFJJTkcsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQgPSBpbnB1dE9mZnNldDtcclxuICAgICAgICB3aGlsZSAoaW5wdXRMZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gbmV3IExvY2FsU2lkVmFsdWVCbG9jaygpO1xyXG4gICAgICAgICAgICByZXN1bHRPZmZzZXQgPSBzaWRCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCByZXN1bHRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHNpZEJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICBzaWRCbG9jay5pc0ZpcnN0U2lkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSBzaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgaW5wdXRMZW5ndGggLT0gc2lkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChzaWRCbG9jayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIGNvbnN0IHJldEJ1ZmZlcnMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVCdWYgPSB0aGlzLnZhbHVlW2ldLnRvQkVSKHNpemVPbmx5KTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlQnVmLmJ5dGVMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlW2ldLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXRCdWZmZXJzLnB1c2godmFsdWVCdWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uY2F0KHJldEJ1ZmZlcnMpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgbGV0IHBvczEgPSAwO1xyXG4gICAgICAgIGxldCBwb3MyID0gMDtcclxuICAgICAgICBsZXQgc2lkID0gXCJcIjtcclxuICAgICAgICBsZXQgZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgcG9zMiA9IHN0cmluZy5pbmRleE9mKFwiLlwiLCBwb3MxKTtcclxuICAgICAgICAgICAgaWYgKHBvczIgPT09IC0xKVxyXG4gICAgICAgICAgICAgICAgc2lkID0gc3RyaW5nLnN1YnN0cmluZyhwb3MxKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgc2lkID0gc3RyaW5nLnN1YnN0cmluZyhwb3MxLCBwb3MyKTtcclxuICAgICAgICAgICAgcG9zMSA9IHBvczIgKyAxO1xyXG4gICAgICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSB0aGlzLnZhbHVlWzBdO1xyXG4gICAgICAgICAgICAgICAgbGV0IHBsdXMgPSAwO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzaWRCbG9jay52YWx1ZURlYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVzID0gNDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1cyA9IDgwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFNJRCA9IHBhcnNlSW50KHNpZCwgMTApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBhcnNlZFNJRCkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgc2lkQmxvY2sudmFsdWVEZWMgPSBwYXJzZWRTSUQgKyBwbHVzO1xyXG4gICAgICAgICAgICAgICAgZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSBuZXcgTG9jYWxTaWRWYWx1ZUJsb2NrKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2lkID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcclxuICAgICAgICAgICAgICAgICAgICBhc3NlcnRCaWdJbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWRWYWx1ZSA9IEJpZ0ludChzaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNpZEJsb2NrLnZhbHVlQmlnSW50ID0gc2lkVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzaWRCbG9jay52YWx1ZURlYyA9IHBhcnNlSW50KHNpZCwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihzaWRCbG9jay52YWx1ZURlYykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzaWRCbG9jay5pc0ZpcnN0U2lkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChzaWRCbG9jayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IHdoaWxlIChwb3MyICE9PSAtMSk7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBsZXQgaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlzSGV4T25seSA9IHRoaXMudmFsdWVbaV0uaXNIZXhPbmx5O1xyXG4gICAgICAgICAgICBsZXQgc2lkU3RyID0gdGhpcy52YWx1ZVtpXS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBpZiAoaSAhPT0gMClcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGAke3Jlc3VsdH0uYDtcclxuICAgICAgICAgICAgaWYgKGlzSGV4T25seSkge1xyXG4gICAgICAgICAgICAgICAgc2lkU3RyID0gYHske3NpZFN0cn19YDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlW2ldLmlzRmlyc3RTaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYDIueyR7c2lkU3RyfSAtIDgwfWA7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFN0cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2lkU3RyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHNpZEFycmF5OiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBvYmplY3Quc2lkQXJyYXkucHVzaCh0aGlzLnZhbHVlW2ldLnRvSlNPTigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcclxuICAgIH1cclxufVxyXG5Mb2NhbE9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrLk5BTUUgPSBcIk9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRtO1xyXG5jbGFzcyBPYmplY3RJZGVudGlmaWVyIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDY7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCkgfHwgXCJlbXB0eVwifWA7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFZhbHVlKCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5fYSRtID0gT2JqZWN0SWRlbnRpZmllcjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5PYmplY3RJZGVudGlmaWVyID0gX2EkbTtcclxufSkoKTtcclxuT2JqZWN0SWRlbnRpZmllci5OQU1FID0gXCJPQkpFQ1QgSURFTlRJRklFUlwiO1xuXG5jbGFzcyBMb2NhbFJlbGF0aXZlU2lkVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKExvY2FsQmFzZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlRGVjID0gMCwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlRGVjID0gdmFsdWVEZWM7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBpZiAoaW5wdXRMZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpXHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSBpbnB1dFZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4Vmlld1tpXSA9IGludEJ1ZmZlcltpXSAmIDB4N0Y7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGgrKztcclxuICAgICAgICAgICAgaWYgKChpbnRCdWZmZXJbaV0gJiAweDgwKSA9PT0gMHgwMClcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0ZW1wVmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ibG9ja0xlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB0ZW1wVmlld1tpXSA9IHRoaXMudmFsdWVIZXhWaWV3W2ldO1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdGVtcFZpZXc7XHJcbiAgICAgICAgaWYgKChpbnRCdWZmZXJbdGhpcy5ibG9ja0xlbmd0aCAtIDFdICYgMHg4MCkgIT09IDB4MDApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy52YWx1ZUhleFZpZXdbMF0gPT09IDB4MDApXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5lZWRsZXNzbHkgbG9uZyBmb3JtYXQgb2YgU0lEIGVuY29kaW5nXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLmJsb2NrTGVuZ3RoIDw9IDgpXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVEZWMgPSBwdnV0aWxzLnV0aWxGcm9tQmFzZSh0aGlzLnZhbHVlSGV4VmlldywgNyk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVG9vIGJpZyBTSUQgZm9yIGRlY29kaW5nLCBoZXggb25seVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgaWYgKHNpemVPbmx5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCkpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJWaWV3ID0gdGhpcy52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAodGhpcy5ibG9ja0xlbmd0aCAtIDEpOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2ldID0gY3VyVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgIHJldFZpZXdbdGhpcy5ibG9ja0xlbmd0aCAtIDFdID0gY3VyVmlld1t0aGlzLmJsb2NrTGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZW5jb2RlZEJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZSh0aGlzLnZhbHVlRGVjLCA3KTtcclxuICAgICAgICBpZiAoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVycm9yIGR1cmluZyBlbmNvZGluZyBTSUQgdmFsdWVcIjtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkVmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYpO1xyXG4gICAgICAgICAgICBjb25zdCBsZW4gPSBlbmNvZGVkQnVmLmJ5dGVMZW5ndGggLSAxO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpXSA9IGVuY29kZWRWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1tsZW5dID0gZW5jb2RlZFZpZXdbbGVuXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNIZXhPbmx5KVxyXG4gICAgICAgICAgICByZXN1bHQgPSBwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMudmFsdWVEZWMudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWVEZWM6IHRoaXMudmFsdWVEZWMsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbFJlbGF0aXZlU2lkVmFsdWVCbG9jay5OQU1FID0gXCJyZWxhdGl2ZVNpZEJsb2NrXCI7XG5cbmNsYXNzIExvY2FsUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jayBleHRlbmRzIFZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IEVNUFRZX1NUUklORywgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdE9mZnNldCA9IGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIHdoaWxlIChpbnB1dExlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSBuZXcgTG9jYWxSZWxhdGl2ZVNpZFZhbHVlQmxvY2soKTtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gc2lkQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgcmVzdWx0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBzaWRCbG9jay5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSBzaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgaW5wdXRMZW5ndGggLT0gc2lkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChzaWRCbG9jayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgY29uc3QgcmV0QnVmZmVycyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUJ1ZiA9IHRoaXMudmFsdWVbaV0udG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWVCdWYuYnl0ZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMudmFsdWVbaV0uZXJyb3I7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldEJ1ZmZlcnMucHVzaCh2YWx1ZUJ1Zik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25jYXQocmV0QnVmZmVycyk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgICAgICBsZXQgcG9zMSA9IDA7XHJcbiAgICAgICAgbGV0IHBvczIgPSAwO1xyXG4gICAgICAgIGxldCBzaWQgPSBcIlwiO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgcG9zMiA9IHN0cmluZy5pbmRleE9mKFwiLlwiLCBwb3MxKTtcclxuICAgICAgICAgICAgaWYgKHBvczIgPT09IC0xKVxyXG4gICAgICAgICAgICAgICAgc2lkID0gc3RyaW5nLnN1YnN0cmluZyhwb3MxKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgc2lkID0gc3RyaW5nLnN1YnN0cmluZyhwb3MxLCBwb3MyKTtcclxuICAgICAgICAgICAgcG9zMSA9IHBvczIgKyAxO1xyXG4gICAgICAgICAgICBjb25zdCBzaWRCbG9jayA9IG5ldyBMb2NhbFJlbGF0aXZlU2lkVmFsdWVCbG9jaygpO1xyXG4gICAgICAgICAgICBzaWRCbG9jay52YWx1ZURlYyA9IHBhcnNlSW50KHNpZCwgMTApO1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4oc2lkQmxvY2sudmFsdWVEZWMpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChzaWRCbG9jayk7XHJcbiAgICAgICAgfSB3aGlsZSAocG9zMiAhPT0gLTEpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpc0hleE9ubHkgPSB0aGlzLnZhbHVlW2ldLmlzSGV4T25seTtcclxuICAgICAgICAgICAgbGV0IHNpZFN0ciA9IHRoaXMudmFsdWVbaV0udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaWYgKGkgIT09IDApXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBgJHtyZXN1bHR9LmA7XHJcbiAgICAgICAgICAgIGlmIChpc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIHNpZFN0ciA9IGB7JHtzaWRTdHJ9fWA7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2lkU3RyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaWRTdHI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgc2lkQXJyYXk6IFtdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBvYmplY3Quc2lkQXJyYXkucHVzaCh0aGlzLnZhbHVlW2ldLnRvSlNPTigpKTtcclxuICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jay5OQU1FID0gXCJSZWxhdGl2ZU9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRsO1xyXG5jbGFzcyBSZWxhdGl2ZU9iamVjdElkZW50aWZpZXIgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxSZWxhdGl2ZU9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxMztcclxuICAgIH1cclxuICAgIGdldFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHNldFZhbHVlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHt0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKSB8fCBcImVtcHR5XCJ9YDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0VmFsdWUoKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbl9hJGwgPSBSZWxhdGl2ZU9iamVjdElkZW50aWZpZXI7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyID0gX2EkbDtcclxufSkoKTtcclxuUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyLk5BTUUgPSBcIlJlbGF0aXZlT2JqZWN0SWRlbnRpZmllclwiO1xuXG52YXIgX2EkaztcclxuY2xhc3MgU2VxdWVuY2UgZXh0ZW5kcyBDb25zdHJ1Y3RlZCB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxNjtcclxuICAgIH1cclxufVxyXG5fYSRrID0gU2VxdWVuY2U7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuU2VxdWVuY2UgPSBfYSRrO1xyXG59KSgpO1xyXG5TZXF1ZW5jZS5OQU1FID0gXCJTRVFVRU5DRVwiO1xuXG52YXIgX2EkajtcclxuY2xhc3MgU2V0IGV4dGVuZHMgQ29uc3RydWN0ZWQge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTc7XHJcbiAgICB9XHJcbn1cclxuX2EkaiA9IFNldDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5TZXQgPSBfYSRqO1xyXG59KSgpO1xyXG5TZXQuTkFNRSA9IFwiU0VUXCI7XG5cbmNsYXNzIExvY2FsU3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IEVNUFRZX1NUUklORztcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiU3RyaW5nVmFsdWVCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbFNpbXBsZVN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbFN0cmluZ1ZhbHVlQmxvY2sge1xyXG59XHJcbkxvY2FsU2ltcGxlU3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJTaW1wbGVTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbmNsYXNzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sgZXh0ZW5kcyBCYXNlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsU2ltcGxlU3RyaW5nVmFsdWVCbG9jayk7XHJcbiAgICB9XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHN0ckxlbiA9IGlucHV0U3RyaW5nLmxlbmd0aDtcclxuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHN0ckxlbik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJMZW47IGkrKylcclxuICAgICAgICAgICAgdmlld1tpXSA9IGlucHV0U3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gaW5wdXRTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxTaW1wbGVTdHJpbmdCbG9jay5OQU1FID0gXCJTSU1QTEUgU1RSSU5HXCI7XG5cbmNsYXNzIExvY2FsVXRmOFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGZyb21CdWZmZXIoaW5wdXRCdWZmZXIpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IHB2dHN1dGlscy5Db252ZXJ0LlRvVXRmOFN0cmluZyhpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goYEVycm9yIGR1cmluZyBcImRlY29kZVVSSUNvbXBvbmVudFwiOiAke2V4fSwgdXNpbmcgcmF3IHN0cmluZ2ApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBwdnRzdXRpbHMuQ29udmVydC5Ub0JpbmFyeShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShwdnRzdXRpbHMuQ29udmVydC5Gcm9tVXRmOFN0cmluZyhpbnB1dFN0cmluZykpO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IGlucHV0U3RyaW5nO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsVXRmOFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiVXRmOFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJGk7XHJcbmNsYXNzIFV0ZjhTdHJpbmcgZXh0ZW5kcyBMb2NhbFV0ZjhTdHJpbmdWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDEyO1xyXG4gICAgfVxyXG59XHJcbl9hJGkgPSBVdGY4U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlV0ZjhTdHJpbmcgPSBfYSRpO1xyXG59KSgpO1xyXG5VdGY4U3RyaW5nLk5BTUUgPSBcIlVURjhTdHJpbmdcIjtcblxuY2xhc3MgTG9jYWxCbXBTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9VdGYxNlN0cmluZyhpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBpbnB1dFN0cmluZztcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocHZ0c3V0aWxzLkNvbnZlcnQuRnJvbVV0ZjE2U3RyaW5nKGlucHV0U3RyaW5nKSk7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxCbXBTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIkJtcFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJGg7XHJcbmNsYXNzIEJtcFN0cmluZyBleHRlbmRzIExvY2FsQm1wU3RyaW5nVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMzA7XHJcbiAgICB9XHJcbn1cclxuX2EkaCA9IEJtcFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5CbXBTdHJpbmcgPSBfYSRoO1xyXG59KSgpO1xyXG5CbXBTdHJpbmcuTkFNRSA9IFwiQk1QU3RyaW5nXCI7XG5cbmNsYXNzIExvY2FsVW5pdmVyc2FsU3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IGNvcHlCdWZmZXIgPSBBcnJheUJ1ZmZlci5pc1ZpZXcoaW5wdXRCdWZmZXIpID8gaW5wdXRCdWZmZXIuc2xpY2UoKS5idWZmZXIgOiBpbnB1dEJ1ZmZlci5zbGljZSgwKTtcclxuICAgICAgICBjb25zdCB2YWx1ZVZpZXcgPSBuZXcgVWludDhBcnJheShjb3B5QnVmZmVyKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlVmlldy5sZW5ndGg7IGkgKz0gNCkge1xyXG4gICAgICAgICAgICB2YWx1ZVZpZXdbaV0gPSB2YWx1ZVZpZXdbaSArIDNdO1xyXG4gICAgICAgICAgICB2YWx1ZVZpZXdbaSArIDFdID0gdmFsdWVWaWV3W2kgKyAyXTtcclxuICAgICAgICAgICAgdmFsdWVWaWV3W2kgKyAyXSA9IDB4MDA7XHJcbiAgICAgICAgICAgIHZhbHVlVmlld1tpICsgM10gPSAweDAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIG5ldyBVaW50MzJBcnJheShjb3B5QnVmZmVyKSk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyTGVuZ3RoID0gaW5wdXRTdHJpbmcubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlSGV4VmlldyA9IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShzdHJMZW5ndGggKiA0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ckxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGVCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UoaW5wdXRTdHJpbmcuY2hhckNvZGVBdChpKSwgOCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGVWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoY29kZUJ1Zik7XHJcbiAgICAgICAgICAgIGlmIChjb2RlVmlldy5sZW5ndGggPiA0KVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpZiA9IDQgLSBjb2RlVmlldy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAoY29kZVZpZXcubGVuZ3RoIC0gMSk7IGogPj0gMDsgai0tKVxyXG4gICAgICAgICAgICAgICAgdmFsdWVIZXhWaWV3W2kgKiA0ICsgaiArIGRpZl0gPSBjb2RlVmlld1tqXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gaW5wdXRTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxVbml2ZXJzYWxTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIlVuaXZlcnNhbFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJGc7XHJcbmNsYXNzIFVuaXZlcnNhbFN0cmluZyBleHRlbmRzIExvY2FsVW5pdmVyc2FsU3RyaW5nVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjg7XHJcbiAgICB9XHJcbn1cclxuX2EkZyA9IFVuaXZlcnNhbFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5Vbml2ZXJzYWxTdHJpbmcgPSBfYSRnO1xyXG59KSgpO1xyXG5Vbml2ZXJzYWxTdHJpbmcuTkFNRSA9IFwiVW5pdmVyc2FsU3RyaW5nXCI7XG5cbnZhciBfYSRmO1xyXG5jbGFzcyBOdW1lcmljU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxODtcclxuICAgIH1cclxufVxyXG5fYSRmID0gTnVtZXJpY1N0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5OdW1lcmljU3RyaW5nID0gX2EkZjtcclxufSkoKTtcclxuTnVtZXJpY1N0cmluZy5OQU1FID0gXCJOdW1lcmljU3RyaW5nXCI7XG5cbnZhciBfYSRlO1xyXG5jbGFzcyBQcmludGFibGVTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE5O1xyXG4gICAgfVxyXG59XHJcbl9hJGUgPSBQcmludGFibGVTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuUHJpbnRhYmxlU3RyaW5nID0gX2EkZTtcclxufSkoKTtcclxuUHJpbnRhYmxlU3RyaW5nLk5BTUUgPSBcIlByaW50YWJsZVN0cmluZ1wiO1xuXG52YXIgX2EkZDtcclxuY2xhc3MgVGVsZXRleFN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjA7XHJcbiAgICB9XHJcbn1cclxuX2EkZCA9IFRlbGV0ZXhTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVGVsZXRleFN0cmluZyA9IF9hJGQ7XHJcbn0pKCk7XHJcblRlbGV0ZXhTdHJpbmcuTkFNRSA9IFwiVGVsZXRleFN0cmluZ1wiO1xuXG52YXIgX2EkYztcclxuY2xhc3MgVmlkZW90ZXhTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDIxO1xyXG4gICAgfVxyXG59XHJcbl9hJGMgPSBWaWRlb3RleFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5WaWRlb3RleFN0cmluZyA9IF9hJGM7XHJcbn0pKCk7XHJcblZpZGVvdGV4U3RyaW5nLk5BTUUgPSBcIlZpZGVvdGV4U3RyaW5nXCI7XG5cbnZhciBfYSRiO1xyXG5jbGFzcyBJQTVTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDIyO1xyXG4gICAgfVxyXG59XHJcbl9hJGIgPSBJQTVTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuSUE1U3RyaW5nID0gX2EkYjtcclxufSkoKTtcclxuSUE1U3RyaW5nLk5BTUUgPSBcIklBNVN0cmluZ1wiO1xuXG52YXIgX2EkYTtcclxuY2xhc3MgR3JhcGhpY1N0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjU7XHJcbiAgICB9XHJcbn1cclxuX2EkYSA9IEdyYXBoaWNTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuR3JhcGhpY1N0cmluZyA9IF9hJGE7XHJcbn0pKCk7XHJcbkdyYXBoaWNTdHJpbmcuTkFNRSA9IFwiR3JhcGhpY1N0cmluZ1wiO1xuXG52YXIgX2EkOTtcclxuY2xhc3MgVmlzaWJsZVN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjY7XHJcbiAgICB9XHJcbn1cclxuX2EkOSA9IFZpc2libGVTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVmlzaWJsZVN0cmluZyA9IF9hJDk7XHJcbn0pKCk7XHJcblZpc2libGVTdHJpbmcuTkFNRSA9IFwiVmlzaWJsZVN0cmluZ1wiO1xuXG52YXIgX2EkODtcclxuY2xhc3MgR2VuZXJhbFN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjc7XHJcbiAgICB9XHJcbn1cclxuX2EkOCA9IEdlbmVyYWxTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuR2VuZXJhbFN0cmluZyA9IF9hJDg7XHJcbn0pKCk7XHJcbkdlbmVyYWxTdHJpbmcuTkFNRSA9IFwiR2VuZXJhbFN0cmluZ1wiO1xuXG52YXIgX2EkNztcclxuY2xhc3MgQ2hhcmFjdGVyU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyOTtcclxuICAgIH1cclxufVxyXG5fYSQ3ID0gQ2hhcmFjdGVyU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkNoYXJhY3RlclN0cmluZyA9IF9hJDc7XHJcbn0pKCk7XHJcbkNoYXJhY3RlclN0cmluZy5OQU1FID0gXCJDaGFyYWN0ZXJTdHJpbmdcIjtcblxudmFyIF9hJDY7XHJcbmNsYXNzIFVUQ1RpbWUgZXh0ZW5kcyBWaXNpYmxlU3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUsIHZhbHVlRGF0ZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnllYXIgPSAwO1xyXG4gICAgICAgIHRoaXMubW9udGggPSAwO1xyXG4gICAgICAgIHRoaXMuZGF5ID0gMDtcclxuICAgICAgICB0aGlzLmhvdXIgPSAwO1xyXG4gICAgICAgIHRoaXMubWludXRlID0gMDtcclxuICAgICAgICB0aGlzLnNlY29uZCA9IDA7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSh2YWx1ZS5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlld1tpXSA9IHZhbHVlLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZURhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSh2YWx1ZURhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy50b0J1ZmZlcigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjM7XHJcbiAgICB9XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy5mcm9tU3RyaW5nKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpKSk7XHJcbiAgICB9XHJcbiAgICB0b0J1ZmZlcigpIHtcclxuICAgICAgICBjb25zdCBzdHIgPSB0aGlzLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHN0ci5sZW5ndGgpO1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB2aWV3W2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcclxuICAgIH1cclxuICAgIGZyb21EYXRlKGlucHV0RGF0ZSkge1xyXG4gICAgICAgIHRoaXMueWVhciA9IGlucHV0RGF0ZS5nZXRVVENGdWxsWWVhcigpO1xyXG4gICAgICAgIHRoaXMubW9udGggPSBpbnB1dERhdGUuZ2V0VVRDTW9udGgoKSArIDE7XHJcbiAgICAgICAgdGhpcy5kYXkgPSBpbnB1dERhdGUuZ2V0VVRDRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuaG91ciA9IGlucHV0RGF0ZS5nZXRVVENIb3VycygpO1xyXG4gICAgICAgIHRoaXMubWludXRlID0gaW5wdXREYXRlLmdldFVUQ01pbnV0ZXMoKTtcclxuICAgICAgICB0aGlzLnNlY29uZCA9IGlucHV0RGF0ZS5nZXRVVENTZWNvbmRzKCk7XHJcbiAgICB9XHJcbiAgICB0b0RhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGggLSAxLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQpKSk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgcGFyc2VyID0gLyhcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KVovaWc7XHJcbiAgICAgICAgY29uc3QgcGFyc2VyQXJyYXkgPSBwYXJzZXIuZXhlYyhpbnB1dFN0cmluZyk7XHJcbiAgICAgICAgaWYgKHBhcnNlckFycmF5ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChwYXJzZXJBcnJheVsxXSwgMTApO1xyXG4gICAgICAgIGlmICh5ZWFyID49IDUwKVxyXG4gICAgICAgICAgICB0aGlzLnllYXIgPSAxOTAwICsgeWVhcjtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMueWVhciA9IDIwMDAgKyB5ZWFyO1xyXG4gICAgICAgIHRoaXMubW9udGggPSBwYXJzZUludChwYXJzZXJBcnJheVsyXSwgMTApO1xyXG4gICAgICAgIHRoaXMuZGF5ID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbM10sIDEwKTtcclxuICAgICAgICB0aGlzLmhvdXIgPSBwYXJzZUludChwYXJzZXJBcnJheVs0XSwgMTApO1xyXG4gICAgICAgIHRoaXMubWludXRlID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbNV0sIDEwKTtcclxuICAgICAgICB0aGlzLnNlY29uZCA9IHBhcnNlSW50KHBhcnNlckFycmF5WzZdLCAxMCk7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZyhlbmNvZGluZyA9IFwiaXNvXCIpIHtcclxuICAgICAgICBpZiAoZW5jb2RpbmcgPT09IFwiaXNvXCIpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3V0cHV0QXJyYXkgPSBuZXcgQXJyYXkoNyk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzBdID0gcHZ1dGlscy5wYWROdW1iZXIoKCh0aGlzLnllYXIgPCAyMDAwKSA/ICh0aGlzLnllYXIgLSAxOTAwKSA6ICh0aGlzLnllYXIgLSAyMDAwKSksIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVsxXSA9IHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubW9udGgsIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVsyXSA9IHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuZGF5LCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbM10gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLmhvdXIsIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVs0XSA9IHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubWludXRlLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbNV0gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLnNlY29uZCwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzZdID0gXCJaXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRBcnJheS5qb2luKFwiXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoZW5jb2RpbmcpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHt0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCl9YDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgeWVhcjogdGhpcy55ZWFyLFxyXG4gICAgICAgICAgICBtb250aDogdGhpcy5tb250aCxcclxuICAgICAgICAgICAgZGF5OiB0aGlzLmRheSxcclxuICAgICAgICAgICAgaG91cjogdGhpcy5ob3VyLFxyXG4gICAgICAgICAgICBtaW51dGU6IHRoaXMubWludXRlLFxyXG4gICAgICAgICAgICBzZWNvbmQ6IHRoaXMuc2Vjb25kLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuX2EkNiA9IFVUQ1RpbWU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVVRDVGltZSA9IF9hJDY7XHJcbn0pKCk7XHJcblVUQ1RpbWUuTkFNRSA9IFwiVVRDVGltZVwiO1xuXG52YXIgX2EkNTtcclxuY2xhc3MgR2VuZXJhbGl6ZWRUaW1lIGV4dGVuZHMgVVRDVGltZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICB2YXIgX2I7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgKF9iID0gdGhpcy5taWxsaXNlY29uZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKHRoaXMubWlsbGlzZWNvbmQgPSAwKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyNDtcclxuICAgIH1cclxuICAgIGZyb21EYXRlKGlucHV0RGF0ZSkge1xyXG4gICAgICAgIHN1cGVyLmZyb21EYXRlKGlucHV0RGF0ZSk7XHJcbiAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IGlucHV0RGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcclxuICAgIH1cclxuICAgIHRvRGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gKG5ldyBEYXRlKERhdGUuVVRDKHRoaXMueWVhciwgdGhpcy5tb250aCAtIDEsIHRoaXMuZGF5LCB0aGlzLmhvdXIsIHRoaXMubWludXRlLCB0aGlzLnNlY29uZCwgdGhpcy5taWxsaXNlY29uZCkpKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICBsZXQgaXNVVEMgPSBmYWxzZTtcclxuICAgICAgICBsZXQgdGltZVN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGRhdGVUaW1lU3RyaW5nID0gXCJcIjtcclxuICAgICAgICBsZXQgZnJhY3Rpb25QYXJ0ID0gMDtcclxuICAgICAgICBsZXQgcGFyc2VyO1xyXG4gICAgICAgIGxldCBob3VyRGlmZmVyZW5jZSA9IDA7XHJcbiAgICAgICAgbGV0IG1pbnV0ZURpZmZlcmVuY2UgPSAwO1xyXG4gICAgICAgIGlmIChpbnB1dFN0cmluZ1tpbnB1dFN0cmluZy5sZW5ndGggLSAxXSA9PT0gXCJaXCIpIHtcclxuICAgICAgICAgICAgdGltZVN0cmluZyA9IGlucHV0U3RyaW5nLnN1YnN0cmluZygwLCBpbnB1dFN0cmluZy5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgaXNVVEMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gbmV3IE51bWJlcihpbnB1dFN0cmluZ1tpbnB1dFN0cmluZy5sZW5ndGggLSAxXSk7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihudW1iZXIudmFsdWVPZigpKSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgdGltZVN0cmluZyA9IGlucHV0U3RyaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNVVEMpIHtcclxuICAgICAgICAgICAgaWYgKHRpbWVTdHJpbmcuaW5kZXhPZihcIitcIikgIT09IC0xKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICBpZiAodGltZVN0cmluZy5pbmRleE9mKFwiLVwiKSAhPT0gLTEpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgbXVsdGlwbGllciA9IDE7XHJcbiAgICAgICAgICAgIGxldCBkaWZmZXJlbmNlUG9zaXRpb24gPSB0aW1lU3RyaW5nLmluZGV4T2YoXCIrXCIpO1xyXG4gICAgICAgICAgICBsZXQgZGlmZmVyZW5jZVN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlUG9zaXRpb24gPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBkaWZmZXJlbmNlUG9zaXRpb24gPSB0aW1lU3RyaW5nLmluZGV4T2YoXCItXCIpO1xyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGllciA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlUG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBkaWZmZXJlbmNlU3RyaW5nID0gdGltZVN0cmluZy5zdWJzdHJpbmcoZGlmZmVyZW5jZVBvc2l0aW9uICsgMSk7XHJcbiAgICAgICAgICAgICAgICB0aW1lU3RyaW5nID0gdGltZVN0cmluZy5zdWJzdHJpbmcoMCwgZGlmZmVyZW5jZVBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgIGlmICgoZGlmZmVyZW5jZVN0cmluZy5sZW5ndGggIT09IDIpICYmIChkaWZmZXJlbmNlU3RyaW5nLmxlbmd0aCAhPT0gNCkpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgbGV0IG51bWJlciA9IHBhcnNlSW50KGRpZmZlcmVuY2VTdHJpbmcuc3Vic3RyaW5nKDAsIDIpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obnVtYmVyLnZhbHVlT2YoKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgaG91ckRpZmZlcmVuY2UgPSBtdWx0aXBsaWVyICogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpZmZlcmVuY2VTdHJpbmcubGVuZ3RoID09PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyID0gcGFyc2VJbnQoZGlmZmVyZW5jZVN0cmluZy5zdWJzdHJpbmcoMiwgNCksIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4obnVtYmVyLnZhbHVlT2YoKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICBtaW51dGVEaWZmZXJlbmNlID0gbXVsdGlwbGllciAqIG51bWJlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZnJhY3Rpb25Qb2ludFBvc2l0aW9uID0gdGltZVN0cmluZy5pbmRleE9mKFwiLlwiKTtcclxuICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uID09PSAtMSlcclxuICAgICAgICAgICAgZnJhY3Rpb25Qb2ludFBvc2l0aW9uID0gdGltZVN0cmluZy5pbmRleE9mKFwiLFwiKTtcclxuICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBmcmFjdGlvblBhcnRDaGVjayA9IG5ldyBOdW1iZXIoYDAke3RpbWVTdHJpbmcuc3Vic3RyaW5nKGZyYWN0aW9uUG9pbnRQb3NpdGlvbil9YCk7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihmcmFjdGlvblBhcnRDaGVjay52YWx1ZU9mKCkpKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICBmcmFjdGlvblBhcnQgPSBmcmFjdGlvblBhcnRDaGVjay52YWx1ZU9mKCk7XHJcbiAgICAgICAgICAgIGRhdGVUaW1lU3RyaW5nID0gdGltZVN0cmluZy5zdWJzdHJpbmcoMCwgZnJhY3Rpb25Qb2ludFBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBkYXRlVGltZVN0cmluZyA9IHRpbWVTdHJpbmc7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKGRhdGVUaW1lU3RyaW5nLmxlbmd0aCA9PT0gOCk6XHJcbiAgICAgICAgICAgICAgICBwYXJzZXIgPSAvKFxcZHs0fSkoXFxkezJ9KShcXGR7Mn0pL2lnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgKGRhdGVUaW1lU3RyaW5nLmxlbmd0aCA9PT0gMTApOlxyXG4gICAgICAgICAgICAgICAgcGFyc2VyID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pL2lnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZnJhY3Rpb25SZXN1bHQgPSA2MCAqIGZyYWN0aW9uUGFydDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZSA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uUmVzdWx0ID0gNjAgKiAoZnJhY3Rpb25SZXN1bHQgLSB0aGlzLm1pbnV0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWNvbmQgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBmcmFjdGlvblJlc3VsdCA9IDEwMDAgKiAoZnJhY3Rpb25SZXN1bHQgLSB0aGlzLnNlY29uZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgKGRhdGVUaW1lU3RyaW5nLmxlbmd0aCA9PT0gMTIpOlxyXG4gICAgICAgICAgICAgICAgcGFyc2VyID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkvaWc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmcmFjdGlvblJlc3VsdCA9IDYwICogZnJhY3Rpb25QYXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25SZXN1bHQgPSAxMDAwICogKGZyYWN0aW9uUmVzdWx0IC0gdGhpcy5zZWNvbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWlsbGlzZWNvbmQgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIChkYXRlVGltZVN0cmluZy5sZW5ndGggPT09IDE0KTpcclxuICAgICAgICAgICAgICAgIHBhcnNlciA9IC8oXFxkezR9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkvaWc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZyYWN0aW9uUmVzdWx0ID0gMTAwMCAqIGZyYWN0aW9uUGFydDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcGFyc2VyQXJyYXkgPSBwYXJzZXIuZXhlYyhkYXRlVGltZVN0cmluZyk7XHJcbiAgICAgICAgaWYgKHBhcnNlckFycmF5ID09PSBudWxsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBwYXJzZXJBcnJheS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGopIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGggPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF5ID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdXIgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApICsgaG91ckRpZmZlcmVuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW51dGUgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApICsgbWludXRlRGlmZmVyZW5jZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZCA9IHBhcnNlSW50KHBhcnNlckFycmF5W2pdLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNVVEMgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXBEYXRlID0gbmV3IERhdGUodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubWlsbGlzZWNvbmQpO1xyXG4gICAgICAgICAgICB0aGlzLnllYXIgPSB0ZW1wRGF0ZS5nZXRVVENGdWxsWWVhcigpO1xyXG4gICAgICAgICAgICB0aGlzLm1vbnRoID0gdGVtcERhdGUuZ2V0VVRDTW9udGgoKTtcclxuICAgICAgICAgICAgdGhpcy5kYXkgPSB0ZW1wRGF0ZS5nZXRVVENEYXkoKTtcclxuICAgICAgICAgICAgdGhpcy5ob3VyID0gdGVtcERhdGUuZ2V0VVRDSG91cnMoKTtcclxuICAgICAgICAgICAgdGhpcy5taW51dGUgPSB0ZW1wRGF0ZS5nZXRVVENNaW51dGVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gdGVtcERhdGUuZ2V0VVRDU2Vjb25kcygpO1xyXG4gICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kID0gdGVtcERhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoZW5jb2RpbmcgPSBcImlzb1wiKSB7XHJcbiAgICAgICAgaWYgKGVuY29kaW5nID09PSBcImlzb1wiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dEFycmF5ID0gW107XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy55ZWFyLCA0KSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5tb250aCwgMikpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuZGF5LCAyKSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5ob3VyLCAyKSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5taW51dGUsIDIpKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLnNlY29uZCwgMikpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5taWxsaXNlY29uZCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChcIi5cIik7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubWlsbGlzZWNvbmQsIDMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKFwiWlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dEFycmF5LmpvaW4oXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdXBlci50b1N0cmluZyhlbmNvZGluZyk7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kOiB0aGlzLm1pbGxpc2Vjb25kLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuX2EkNSA9IEdlbmVyYWxpemVkVGltZTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5HZW5lcmFsaXplZFRpbWUgPSBfYSQ1O1xyXG59KSgpO1xyXG5HZW5lcmFsaXplZFRpbWUuTkFNRSA9IFwiR2VuZXJhbGl6ZWRUaW1lXCI7XG5cbnZhciBfYSQ0O1xyXG5jbGFzcyBEQVRFIGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzMTtcclxuICAgIH1cclxufVxyXG5fYSQ0ID0gREFURTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5EQVRFID0gX2EkNDtcclxufSkoKTtcclxuREFURS5OQU1FID0gXCJEQVRFXCI7XG5cbnZhciBfYSQzO1xyXG5jbGFzcyBUaW1lT2ZEYXkgZXh0ZW5kcyBVdGY4U3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDMyO1xyXG4gICAgfVxyXG59XHJcbl9hJDMgPSBUaW1lT2ZEYXk7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVGltZU9mRGF5ID0gX2EkMztcclxufSkoKTtcclxuVGltZU9mRGF5Lk5BTUUgPSBcIlRpbWVPZkRheVwiO1xuXG52YXIgX2EkMjtcclxuY2xhc3MgRGF0ZVRpbWUgZXh0ZW5kcyBVdGY4U3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDMzO1xyXG4gICAgfVxyXG59XHJcbl9hJDIgPSBEYXRlVGltZTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5EYXRlVGltZSA9IF9hJDI7XHJcbn0pKCk7XHJcbkRhdGVUaW1lLk5BTUUgPSBcIkRhdGVUaW1lXCI7XG5cbnZhciBfYSQxO1xyXG5jbGFzcyBEdXJhdGlvbiBleHRlbmRzIFV0ZjhTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMzQ7XHJcbiAgICB9XHJcbn1cclxuX2EkMSA9IER1cmF0aW9uO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkR1cmF0aW9uID0gX2EkMTtcclxufSkoKTtcclxuRHVyYXRpb24uTkFNRSA9IFwiRHVyYXRpb25cIjtcblxudmFyIF9hO1xyXG5jbGFzcyBUSU1FIGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxNDtcclxuICAgIH1cclxufVxyXG5fYSA9IFRJTUU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVElNRSA9IF9hO1xyXG59KSgpO1xyXG5USU1FLk5BTUUgPSBcIlRJTUVcIjtcblxuY2xhc3MgQW55IHtcclxuICAgIGNvbnN0cnVjdG9yKHsgbmFtZSA9IEVNUFRZX1NUUklORywgb3B0aW9uYWwgPSBmYWxzZSwgfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLm9wdGlvbmFsID0gb3B0aW9uYWw7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgQ2hvaWNlIGV4dGVuZHMgQW55IHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBbXSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgUmVwZWF0ZWQgZXh0ZW5kcyBBbnkge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IG5ldyBBbnkoKSwgbG9jYWwgPSBmYWxzZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2FsO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFJhd0RhdGEge1xyXG4gICAgY29uc3RydWN0b3IoeyBkYXRhID0gRU1QVFlfVklFVyB9ID0ge30pIHtcclxuICAgICAgICB0aGlzLmRhdGFWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBnZXQgZGF0YSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHNldCBkYXRhKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhVmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHZhbHVlKTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGVuZExlbmd0aCA9IGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgdGhpcy5kYXRhVmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKS5zdWJhcnJheShpbnB1dE9mZnNldCwgZW5kTGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gZW5kTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiBjb21wYXJlU2NoZW1hKHJvb3QsIGlucHV0RGF0YSwgaW5wdXRTY2hlbWEpIHtcclxuICAgIGlmIChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIENob2ljZSkge1xyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5wdXRTY2hlbWEudmFsdWUubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29tcGFyZVNjaGVtYShyb290LCBpbnB1dERhdGEsIGlucHV0U2NoZW1hLnZhbHVlW2pdKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC52ZXJpZmllZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zdCBfcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IFwiV3JvbmcgdmFsdWVzIGZvciBDaG9pY2UgdHlwZVwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEuaGFzT3duUHJvcGVydHkoTkFNRSkpXHJcbiAgICAgICAgICAgICAgICBfcmVzdWx0Lm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lO1xyXG4gICAgICAgICAgICByZXR1cm4gX3Jlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEgaW5zdGFuY2VvZiBBbnkpIHtcclxuICAgICAgICBpZiAoaW5wdXRTY2hlbWEuaGFzT3duUHJvcGVydHkoTkFNRSkpXHJcbiAgICAgICAgICAgIHJvb3RbaW5wdXRTY2hlbWEubmFtZV0gPSBpbnB1dERhdGE7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKHJvb3QgaW5zdGFuY2VvZiBPYmplY3QpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIHJvb3Qgb2JqZWN0XCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKGlucHV0RGF0YSBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgZGF0YVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKElEX0JMT0NLIGluIGlucHV0U2NoZW1hKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICgoRlJPTV9CRVIgaW4gaW5wdXRTY2hlbWEuaWRCbG9jaykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKFRPX0JFUiBpbiBpbnB1dFNjaGVtYS5pZEJsb2NrKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGVuY29kZWRJZCA9IGlucHV0U2NoZW1hLmlkQmxvY2sudG9CRVIoZmFsc2UpO1xyXG4gICAgaWYgKGVuY29kZWRJZC5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiRXJyb3IgZW5jb2RpbmcgaWRCbG9jayBmb3IgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZWNvZGVkT2Zmc2V0ID0gaW5wdXRTY2hlbWEuaWRCbG9jay5mcm9tQkVSKGVuY29kZWRJZCwgMCwgZW5jb2RlZElkLmJ5dGVMZW5ndGgpO1xyXG4gICAgaWYgKGRlY29kZWRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiRXJyb3IgZGVjb2RpbmcgaWRCbG9jayBmb3IgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5oYXNPd25Qcm9wZXJ0eShUQUdfQ0xBU1MpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2sudGFnQ2xhc3MgIT09IGlucHV0RGF0YS5pZEJsb2NrLnRhZ0NsYXNzKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaGFzT3duUHJvcGVydHkoVEFHX05VTUJFUikgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay50YWdOdW1iZXIgIT09IGlucHV0RGF0YS5pZEJsb2NrLnRhZ051bWJlcikge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmhhc093blByb3BlcnR5KElTX0NPTlNUUlVDVEVEKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmlzQ29uc3RydWN0ZWQgIT09IGlucHV0RGF0YS5pZEJsb2NrLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoIShJU19IRVhfT05MWSBpbiBpbnB1dFNjaGVtYS5pZEJsb2NrKSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaXNIZXhPbmx5ICE9PSBpbnB1dERhdGEuaWRCbG9jay5pc0hleE9ubHkpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5pc0hleE9ubHkpIHtcclxuICAgICAgICBpZiAoKFZBTFVFX0hFWF9WSUVXIGluIGlucHV0U2NoZW1hLmlkQmxvY2spID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hVmlldyA9IGlucHV0U2NoZW1hLmlkQmxvY2sudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIGNvbnN0IGFzbjFWaWV3ID0gaW5wdXREYXRhLmlkQmxvY2sudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIGlmIChzY2hlbWFWaWV3Lmxlbmd0aCAhPT0gYXNuMVZpZXcubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY2hlbWFWaWV3Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChzY2hlbWFWaWV3W2ldICE9PSBhc24xVmlld1sxXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKVxyXG4gICAgICAgICAgICByb290W2lucHV0U2NoZW1hLm5hbWVdID0gaW5wdXREYXRhO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hIGluc3RhbmNlb2YgdHlwZVN0b3JlLkNvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgbGV0IGFkbWlzc2lvbiA9IDA7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHtcclxuICAgICAgICAgICAgICAgIGVycm9yOiBcIlVua25vd24gZXJyb3JcIixcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IG1heExlbmd0aCA9IGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdIGluc3RhbmNlb2YgUmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgIG1heExlbmd0aCA9IGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCA9PT0gMCkgJiZcclxuICAgICAgICAgICAgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoICE9PSAwKSkge1xyXG4gICAgICAgICAgICBsZXQgX29wdGlvbmFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgX29wdGlvbmFsID0gX29wdGlvbmFsICYmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlW2ldLm9wdGlvbmFsIHx8IGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKF9vcHRpb25hbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb290LmVycm9yID0gXCJJbmNvbnNpc3RlbnQgb2JqZWN0IGxlbmd0aFwiO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKChpIC0gYWRtaXNzaW9uKSA+PSBpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlW2ldLm9wdGlvbmFsID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9yZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICByb290LmVycm9yID0gXCJJbmNvbnNpc3RlbnQgbGVuZ3RoIGJldHdlZW4gQVNOLjEgZGF0YSBhbmQgc2NoZW1hXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc3VsdC5uYW1lID0gaW5wdXRTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Jlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdIGluc3RhbmNlb2YgUmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wYXJlU2NoZW1hKHJvb3QsIGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlW2ldLCBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnZlcmlmaWVkID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5vcHRpb25hbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWlzc2lvbisrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoTkFNRSBpbiBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdKSAmJiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5uYW1lLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheVJvb3QgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChMT0NBTCBpbiBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdKSAmJiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5sb2NhbCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJvb3QgPSBpbnB1dERhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5Um9vdCA9IHJvb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJyYXlSb290W2lucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubmFtZV0gPT09IFwidW5kZWZpbmVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJvb3RbaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5uYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJvb3RbaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5uYW1lXS5wdXNoKGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wYXJlU2NoZW1hKHJvb3QsIGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlW2kgLSBhZG1pc3Npb25dLCBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnZlcmlmaWVkID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVtpXS5vcHRpb25hbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWlzc2lvbisrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQudmVyaWZpZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IF9yZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIF9yZXN1bHQubmFtZSA9IGlucHV0U2NoZW1hLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIF9yZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLnByaW1pdGl2ZVNjaGVtYSAmJlxyXG4gICAgICAgIChWQUxVRV9IRVhfVklFVyBpbiBpbnB1dERhdGEudmFsdWVCbG9jaykpIHtcclxuICAgICAgICBjb25zdCBhc24xID0gbG9jYWxGcm9tQkVSKGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgaWYgKGFzbjEub2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBfcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiBhc24xLnJlc3VsdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgX3Jlc3VsdC5uYW1lID0gaW5wdXRTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gX3Jlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVTY2hlbWEocm9vdCwgYXNuMS5yZXN1bHQsIGlucHV0U2NoZW1hLnByaW1pdGl2ZVNjaGVtYSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiB2ZXJpZnlTY2hlbWEoaW5wdXRCdWZmZXIsIGlucHV0U2NoZW1hKSB7XHJcbiAgICBpZiAoKGlucHV0U2NoZW1hIGluc3RhbmNlb2YgT2JqZWN0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWEgdHlwZVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXNuMSA9IGxvY2FsRnJvbUJFUihwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikpO1xyXG4gICAgaWYgKGFzbjEub2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiBhc24xLnJlc3VsdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29tcGFyZVNjaGVtYShhc24xLnJlc3VsdCwgYXNuMS5yZXN1bHQsIGlucHV0U2NoZW1hKTtcclxufVxuXG5leHBvcnQgeyBBbnksIEJhc2VCbG9jaywgQmFzZVN0cmluZ0Jsb2NrLCBCaXRTdHJpbmcsIEJtcFN0cmluZywgQm9vbGVhbiwgQ2hhcmFjdGVyU3RyaW5nLCBDaG9pY2UsIENvbnN0cnVjdGVkLCBEQVRFLCBEYXRlVGltZSwgRHVyYXRpb24sIEVuZE9mQ29udGVudCwgRW51bWVyYXRlZCwgR2VuZXJhbFN0cmluZywgR2VuZXJhbGl6ZWRUaW1lLCBHcmFwaGljU3RyaW5nLCBIZXhCbG9jaywgSUE1U3RyaW5nLCBJbnRlZ2VyLCBOdWxsLCBOdW1lcmljU3RyaW5nLCBPYmplY3RJZGVudGlmaWVyLCBPY3RldFN0cmluZywgUHJpbWl0aXZlLCBQcmludGFibGVTdHJpbmcsIFJhd0RhdGEsIFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllciwgUmVwZWF0ZWQsIFNlcXVlbmNlLCBTZXQsIFRJTUUsIFRlbGV0ZXhTdHJpbmcsIFRpbWVPZkRheSwgVVRDVGltZSwgVW5pdmVyc2FsU3RyaW5nLCBVdGY4U3RyaW5nLCBWYWx1ZUJsb2NrLCBWaWRlb3RleFN0cmluZywgVmlld1dyaXRlciwgVmlzaWJsZVN0cmluZywgY29tcGFyZVNjaGVtYSwgZnJvbUJFUiwgdmVyaWZ5U2NoZW1hIH07XG4iLCAiZXhwb3J0IHZhciBBc25UeXBlVHlwZXM7XG4oZnVuY3Rpb24gKEFzblR5cGVUeXBlcykge1xuICAgIEFzblR5cGVUeXBlc1tBc25UeXBlVHlwZXNbXCJTZXF1ZW5jZVwiXSA9IDBdID0gXCJTZXF1ZW5jZVwiO1xuICAgIEFzblR5cGVUeXBlc1tBc25UeXBlVHlwZXNbXCJTZXRcIl0gPSAxXSA9IFwiU2V0XCI7XG4gICAgQXNuVHlwZVR5cGVzW0FzblR5cGVUeXBlc1tcIkNob2ljZVwiXSA9IDJdID0gXCJDaG9pY2VcIjtcbn0pKEFzblR5cGVUeXBlcyB8fCAoQXNuVHlwZVR5cGVzID0ge30pKTtcbmV4cG9ydCB2YXIgQXNuUHJvcFR5cGVzO1xuKGZ1bmN0aW9uIChBc25Qcm9wVHlwZXMpIHtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQW55XCJdID0gMV0gPSBcIkFueVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJCb29sZWFuXCJdID0gMl0gPSBcIkJvb2xlYW5cIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiT2N0ZXRTdHJpbmdcIl0gPSAzXSA9IFwiT2N0ZXRTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQml0U3RyaW5nXCJdID0gNF0gPSBcIkJpdFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJJbnRlZ2VyXCJdID0gNV0gPSBcIkludGVnZXJcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiRW51bWVyYXRlZFwiXSA9IDZdID0gXCJFbnVtZXJhdGVkXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIk9iamVjdElkZW50aWZpZXJcIl0gPSA3XSA9IFwiT2JqZWN0SWRlbnRpZmllclwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJVdGY4U3RyaW5nXCJdID0gOF0gPSBcIlV0ZjhTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQm1wU3RyaW5nXCJdID0gOV0gPSBcIkJtcFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJVbml2ZXJzYWxTdHJpbmdcIl0gPSAxMF0gPSBcIlVuaXZlcnNhbFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJOdW1lcmljU3RyaW5nXCJdID0gMTFdID0gXCJOdW1lcmljU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlByaW50YWJsZVN0cmluZ1wiXSA9IDEyXSA9IFwiUHJpbnRhYmxlU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlRlbGV0ZXhTdHJpbmdcIl0gPSAxM10gPSBcIlRlbGV0ZXhTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVmlkZW90ZXhTdHJpbmdcIl0gPSAxNF0gPSBcIlZpZGVvdGV4U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIklBNVN0cmluZ1wiXSA9IDE1XSA9IFwiSUE1U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkdyYXBoaWNTdHJpbmdcIl0gPSAxNl0gPSBcIkdyYXBoaWNTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVmlzaWJsZVN0cmluZ1wiXSA9IDE3XSA9IFwiVmlzaWJsZVN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJHZW5lcmFsU3RyaW5nXCJdID0gMThdID0gXCJHZW5lcmFsU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkNoYXJhY3RlclN0cmluZ1wiXSA9IDE5XSA9IFwiQ2hhcmFjdGVyU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlVUQ1RpbWVcIl0gPSAyMF0gPSBcIlVUQ1RpbWVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiR2VuZXJhbGl6ZWRUaW1lXCJdID0gMjFdID0gXCJHZW5lcmFsaXplZFRpbWVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiREFURVwiXSA9IDIyXSA9IFwiREFURVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJUaW1lT2ZEYXlcIl0gPSAyM10gPSBcIlRpbWVPZkRheVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJEYXRlVGltZVwiXSA9IDI0XSA9IFwiRGF0ZVRpbWVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiRHVyYXRpb25cIl0gPSAyNV0gPSBcIkR1cmF0aW9uXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlRJTUVcIl0gPSAyNl0gPSBcIlRJTUVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiTnVsbFwiXSA9IDI3XSA9IFwiTnVsbFwiO1xufSkoQXNuUHJvcFR5cGVzIHx8IChBc25Qcm9wVHlwZXMgPSB7fSkpO1xuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tIFwicHZ0c3V0aWxzXCI7XG5leHBvcnQgY2xhc3MgQml0U3RyaW5nIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMsIHVudXNlZEJpdHMgPSAwKSB7XG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IDA7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mcm9tTnVtYmVyKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UocGFyYW1zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudW51c2VkQml0cyA9IHVudXNlZEJpdHM7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJVbnN1cHBvcnRlZCB0eXBlIG9mICdwYXJhbXMnIGFyZ3VtZW50IGZvciBCaXRTdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnJvbUFTTihhc24pIHtcbiAgICAgICAgaWYgKCEoYXNuIGluc3RhbmNlb2YgYXNuMWpzLkJpdFN0cmluZykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnYXNuJyBpcyBub3QgaW5zdGFuY2Ugb2YgQVNOLjEgQml0U3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IGFzbi52YWx1ZUJsb2NrLnVudXNlZEJpdHM7XG4gICAgICAgIHRoaXMudmFsdWUgPSBhc24udmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRvQVNOKCkge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5CaXRTdHJpbmcoeyB1bnVzZWRCaXRzOiB0aGlzLnVudXNlZEJpdHMsIHZhbHVlSGV4OiB0aGlzLnZhbHVlIH0pO1xuICAgIH1cbiAgICB0b1NjaGVtYShuYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMWpzLkJpdFN0cmluZyh7IG5hbWUgfSk7XG4gICAgfVxuICAgIHRvTnVtYmVyKCkge1xuICAgICAgICBsZXQgcmVzID0gXCJcIjtcbiAgICAgICAgY29uc3QgdWludEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZSk7XG4gICAgICAgIGZvciAoY29uc3Qgb2N0ZXQgb2YgdWludEFycmF5KSB7XG4gICAgICAgICAgICByZXMgKz0gb2N0ZXQudG9TdHJpbmcoMikucGFkU3RhcnQoOCwgXCIwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJlcyA9IHJlcy5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKTtcbiAgICAgICAgaWYgKHRoaXMudW51c2VkQml0cykge1xuICAgICAgICAgICAgcmVzID0gcmVzLnNsaWNlKHRoaXMudW51c2VkQml0cykucGFkU3RhcnQodGhpcy51bnVzZWRCaXRzLCBcIjBcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHJlcywgMik7XG4gICAgfVxuICAgIGZyb21OdW1iZXIodmFsdWUpIHtcbiAgICAgICAgbGV0IGJpdHMgPSB2YWx1ZS50b1N0cmluZygyKTtcbiAgICAgICAgY29uc3Qgb2N0ZXRTaXplID0gKGJpdHMubGVuZ3RoICsgNykgPj4gMztcbiAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gKG9jdGV0U2l6ZSA8PCAzKSAtIGJpdHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBvY3RldHMgPSBuZXcgVWludDhBcnJheShvY3RldFNpemUpO1xuICAgICAgICBiaXRzID0gYml0cy5wYWRTdGFydChvY3RldFNpemUgPDwgMywgXCIwXCIpLnNwbGl0KFwiXCIpLnJldmVyc2UoKS5qb2luKFwiXCIpO1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBvY3RldFNpemUpIHtcbiAgICAgICAgICAgIG9jdGV0c1tpbmRleF0gPSBwYXJzZUludChiaXRzLnNsaWNlKGluZGV4IDw8IDMsIChpbmRleCA8PCAzKSArIDgpLCAyKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IG9jdGV0cy5idWZmZXI7XG4gICAgfVxufVxuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tIFwicHZ0c3V0aWxzXCI7XG5leHBvcnQgY2xhc3MgT2N0ZXRTdHJpbmcge1xuICAgIGdldCBieXRlTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5idWZmZXIuYnl0ZUxlbmd0aDtcbiAgICB9XG4gICAgZ2V0IGJ5dGVPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihwYXJhbSkge1xuICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihwYXJhbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKHBhcmFtKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIocGFyYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwYXJhbSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHBhcmFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZyb21BU04oYXNuKSB7XG4gICAgICAgIGlmICghKGFzbiBpbnN0YW5jZW9mIGFzbjFqcy5PY3RldFN0cmluZykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnYXNuJyBpcyBub3QgaW5zdGFuY2Ugb2YgQVNOLjEgT2N0ZXRTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWZmZXIgPSBhc24udmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRvQVNOKCkge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5PY3RldFN0cmluZyh7IHZhbHVlSGV4OiB0aGlzLmJ1ZmZlciB9KTtcbiAgICB9XG4gICAgdG9TY2hlbWEobmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5PY3RldFN0cmluZyh7IG5hbWUgfSk7XG4gICAgfVxufVxuIiwgImV4cG9ydCAqIGZyb20gXCIuL2JpdF9zdHJpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29jdGV0X3N0cmluZ1wiO1xuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBBc25Qcm9wVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuaW1wb3J0IHsgT2N0ZXRTdHJpbmcgfSBmcm9tIFwiLi90eXBlcy9pbmRleFwiO1xuZXhwb3J0IGNvbnN0IEFzbkFueUNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlIGluc3RhbmNlb2YgYXNuMWpzLk51bGwgPyBudWxsIDogdmFsdWUudmFsdWVCZWZvcmVEZWNvZGVWaWV3LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5OdWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NoZW1hID0gYXNuMWpzLmZyb21CRVIodmFsdWUpO1xuICAgICAgICBpZiAoc2NoZW1hLnJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNjaGVtYS5yZXN1bHQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY2hlbWEucmVzdWx0O1xuICAgIH0sXG59O1xuZXhwb3J0IGNvbnN0IEFzbkludGVnZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoID49IDRcbiAgICAgICAgPyB2YWx1ZS52YWx1ZUJsb2NrLnRvU3RyaW5nKClcbiAgICAgICAgOiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlRGVjLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuSW50ZWdlcih7IHZhbHVlOiArdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkVudW1lcmF0ZWRDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlRGVjLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuRW51bWVyYXRlZCh7IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkludGVnZXIoeyB2YWx1ZUhleDogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkludGVnZXJCaWdJbnRDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS50b0JpZ0ludCgpLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IGFzbjFqcy5JbnRlZ2VyLmZyb21CaWdJbnQodmFsdWUpLFxufTtcbmV4cG9ydCBjb25zdCBBc25CaXRTdHJpbmdDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkJpdFN0cmluZyh7IHZhbHVlSGV4OiB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuT2JqZWN0SWRlbnRpZmllckNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudG9TdHJpbmcoKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLk9iamVjdElkZW50aWZpZXIoeyB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuQm9vbGVhbkNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWUsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5Cb29sZWFuKHsgdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbk9jdGV0U3RyaW5nQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleFZpZXcsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5PY3RldFN0cmluZyh7IHZhbHVlSGV4OiB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuQ29uc3RydWN0ZWRPY3RldFN0cmluZ0NvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IG5ldyBPY3RldFN0cmluZyh2YWx1ZS5nZXRWYWx1ZSgpKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiB2YWx1ZS50b0FTTigpLFxufTtcbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihBc24xVHlwZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZSxcbiAgICAgICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IEFzbjFUeXBlKHsgdmFsdWUgfSksXG4gICAgfTtcbn1cbmV4cG9ydCBjb25zdCBBc25VdGY4U3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5VdGY4U3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25CbXBTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLkJtcFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVW5pdmVyc2FsU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5Vbml2ZXJzYWxTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbk51bWVyaWNTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLk51bWVyaWNTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblByaW50YWJsZVN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuUHJpbnRhYmxlU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25UZWxldGV4U3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5UZWxldGV4U3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25WaWRlb3RleFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVmlkZW90ZXhTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbklBNVN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuSUE1U3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25HcmFwaGljU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5HcmFwaGljU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25WaXNpYmxlU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5WaXNpYmxlU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25HZW5lcmFsU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5HZW5lcmFsU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25DaGFyYWN0ZXJTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLkNoYXJhY3RlclN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVVRDVGltZUNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnRvRGF0ZSgpLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuVVRDVGltZSh7IHZhbHVlRGF0ZTogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkdlbmVyYWxpemVkVGltZUNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnRvRGF0ZSgpLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuR2VuZXJhbGl6ZWRUaW1lKHsgdmFsdWVEYXRlOiB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuTnVsbENvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAoKSA9PiBudWxsLFxuICAgIHRvQVNOOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMWpzLk51bGwoKTtcbiAgICB9LFxufTtcbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0Q29udmVydGVyKHR5cGUpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuQW55OlxuICAgICAgICAgICAgcmV0dXJuIEFzbkFueUNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuQml0U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkJpdFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuQm1wU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkJtcFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuQm9vbGVhbjpcbiAgICAgICAgICAgIHJldHVybiBBc25Cb29sZWFuQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5DaGFyYWN0ZXJTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuQ2hhcmFjdGVyU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5FbnVtZXJhdGVkOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkVudW1lcmF0ZWRDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkdlbmVyYWxTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuR2VuZXJhbFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuR2VuZXJhbGl6ZWRUaW1lOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkdlbmVyYWxpemVkVGltZUNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuR3JhcGhpY1N0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25HcmFwaGljU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5JQTVTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuSUE1U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5JbnRlZ2VyOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkludGVnZXJDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLk51bGw6XG4gICAgICAgICAgICByZXR1cm4gQXNuTnVsbENvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuTnVtZXJpY1N0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25OdW1lcmljU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5PYmplY3RJZGVudGlmaWVyOlxuICAgICAgICAgICAgcmV0dXJuIEFzbk9iamVjdElkZW50aWZpZXJDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbk9jdGV0U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5QcmludGFibGVTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuUHJpbnRhYmxlU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5UZWxldGV4U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblRlbGV0ZXhTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlVUQ1RpbWU6XG4gICAgICAgICAgICByZXR1cm4gQXNuVVRDVGltZUNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVW5pdmVyc2FsU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblVuaXZlcnNhbFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVXRmOFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25VdGY4U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5WaWRlb3RleFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25WaWRlb3RleFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVmlzaWJsZVN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25WaXNpYmxlU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBpc0NvbnZlcnRpYmxlKHRhcmdldCkge1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcImZ1bmN0aW9uXCIgJiYgdGFyZ2V0LnByb3RvdHlwZSkge1xuICAgICAgICBpZiAodGFyZ2V0LnByb3RvdHlwZS50b0FTTiAmJiB0YXJnZXQucHJvdG90eXBlLmZyb21BU04pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzQ29udmVydGlibGUodGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAhISh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldCA9PT0gXCJvYmplY3RcIiAmJiBcInRvQVNOXCIgaW4gdGFyZ2V0ICYmIFwiZnJvbUFTTlwiIGluIHRhcmdldCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVHlwZU9mQXJyYXkodGFyZ2V0KSB7XG4gICAgdmFyIF9hO1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgICAgICAgaWYgKCgoX2EgPSBwcm90byA9PT0gbnVsbCB8fCBwcm90byA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvdG8ucHJvdG90eXBlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29uc3RydWN0b3IpID09PSBBcnJheSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzVHlwZU9mQXJyYXkocHJvdG8pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheUVxdWFsKGJ5dGVzMSwgYnl0ZXMyKSB7XG4gICAgaWYgKCEoYnl0ZXMxICYmIGJ5dGVzMikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYnl0ZXMxLmJ5dGVMZW5ndGggIT09IGJ5dGVzMi5ieXRlTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYjEgPSBuZXcgVWludDhBcnJheShieXRlczEpO1xuICAgIGNvbnN0IGIyID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzMS5ieXRlTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGIxW2ldICE9PSBiMltpXSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBBc25Qcm9wVHlwZXMsIEFzblR5cGVUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgeyBpc0NvbnZlcnRpYmxlIH0gZnJvbSBcIi4vaGVscGVyXCI7XG5leHBvcnQgY2xhc3MgQXNuU2NoZW1hU3RvcmFnZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBuZXcgV2Vha01hcCgpO1xuICAgIH1cbiAgICBoYXModGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmhhcyh0YXJnZXQpO1xuICAgIH1cbiAgICBnZXQodGFyZ2V0LCBjaGVja1NjaGVtYSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHRhcmdldCk7XG4gICAgICAgIGlmICghc2NoZW1hKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgc2NoZW1hIGZvciAnJHt0YXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWV9JyB0YXJnZXRgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tTY2hlbWEgJiYgIXNjaGVtYS5zY2hlbWEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NoZW1hICcke3RhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZX0nIGRvZXNuJ3QgY29udGFpbiBBU04uMSBzY2hlbWEuIENhbGwgJ0FzblNjaGVtYVN0b3JhZ2UuY2FjaGUnLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfVxuICAgIGNhY2hlKHRhcmdldCkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmdldCh0YXJnZXQpO1xuICAgICAgICBpZiAoIXNjaGVtYS5zY2hlbWEpIHtcbiAgICAgICAgICAgIHNjaGVtYS5zY2hlbWEgPSB0aGlzLmNyZWF0ZSh0YXJnZXQsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNyZWF0ZURlZmF1bHQodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHtcbiAgICAgICAgICAgIHR5cGU6IEFzblR5cGVUeXBlcy5TZXF1ZW5jZSxcbiAgICAgICAgICAgIGl0ZW1zOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGFyZW50U2NoZW1hID0gdGhpcy5maW5kUGFyZW50U2NoZW1hKHRhcmdldCk7XG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCBwYXJlbnRTY2hlbWEpO1xuICAgICAgICAgICAgc2NoZW1hLml0ZW1zID0gT2JqZWN0LmFzc2lnbih7fSwgc2NoZW1hLml0ZW1zLCBwYXJlbnRTY2hlbWEuaXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfVxuICAgIGNyZWF0ZSh0YXJnZXQsIHVzZU5hbWVzKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHRhcmdldCkgfHwgdGhpcy5jcmVhdGVEZWZhdWx0KHRhcmdldCk7XG4gICAgICAgIGNvbnN0IGFzbjFWYWx1ZSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBzY2hlbWEuaXRlbXNba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB1c2VOYW1lcyA/IGtleSA6IFwiXCI7XG4gICAgICAgICAgICBsZXQgYXNuMUl0ZW07XG4gICAgICAgICAgICBpZiAodHlwZW9mIChpdGVtLnR5cGUpID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgQXNuMVR5cGVOYW1lID0gQXNuUHJvcFR5cGVzW2l0ZW0udHlwZV07XG4gICAgICAgICAgICAgICAgY29uc3QgQXNuMVR5cGUgPSBhc24xanNbQXNuMVR5cGVOYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoIUFzbjFUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBBU04xIGNsYXNzIGJ5IG5hbWUgJyR7QXNuMVR5cGVOYW1lfSdgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgQXNuMVR5cGUoeyBuYW1lIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNDb252ZXJ0aWJsZShpdGVtLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgaXRlbS50eXBlKCk7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBpbnN0YW5jZS50b1NjaGVtYShuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0ub3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2NoZW1hID0gdGhpcy5nZXQoaXRlbS50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbVNjaGVtYS50eXBlID09PSBBc25UeXBlVHlwZXMuQ2hvaWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IGFzbjFqcy5BbnkoeyBuYW1lIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSB0aGlzLmNyZWF0ZShpdGVtLnR5cGUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgYXNuMUl0ZW0ubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgYXNuMWpzLkFueSh7IG5hbWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcHRpb25hbCA9ICEhaXRlbS5vcHRpb25hbCB8fCBpdGVtLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbS5uYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBpdGVtLnJlcGVhdGVkID09PSBcInNldFwiXG4gICAgICAgICAgICAgICAgICAgID8gYXNuMWpzLlNldFxuICAgICAgICAgICAgICAgICAgICA6IGFzbjFqcy5TZXF1ZW5jZTtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGFzbjFqcy5SZXBlYXRlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXNuMUl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLmNvbnRleHQgIT09IG51bGwgJiYgaXRlbS5jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pbXBsaWNpdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0udHlwZSA9PT0gXCJudW1iZXJcIiB8fCBpc0NvbnZlcnRpYmxlKGl0ZW0udHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IGl0ZW0ucmVwZWF0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFzbjFqcy5Db25zdHJ1Y3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYXNuMWpzLlByaW1pdGl2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBpdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGUoaXRlbS50eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzUmVwZWF0ZWQgPSAhIWl0ZW0ucmVwZWF0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSAhaXNSZXBlYXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZXQoaXRlbS50eXBlLCB0cnVlKS5zY2hlbWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzbjFJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBcInZhbHVlQmxvY2tcIiBpbiB2YWx1ZSA/IHZhbHVlLnZhbHVlQmxvY2sudmFsdWUgOiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICFpc1JlcGVhdGVkID8gbmFtZSA6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBpdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBpdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFthc24xSXRlbV0sXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbS5vcHRpb25hbCA9IG9wdGlvbmFsO1xuICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKGFzbjFJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5TZXF1ZW5jZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5TZXF1ZW5jZSh7IHZhbHVlOiBhc24xVmFsdWUsIG5hbWU6IFwiXCIgfSk7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5TZXQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuU2V0KHsgdmFsdWU6IGFzbjFWYWx1ZSwgbmFtZTogXCJcIiB9KTtcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLkNob2ljZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5DaG9pY2UoeyB2YWx1ZTogYXNuMVZhbHVlLCBuYW1lOiBcIlwiIH0pO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEFTTjEgdHlwZSBpbiB1c2VgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXQodGFyZ2V0LCBzY2hlbWEpIHtcbiAgICAgICAgdGhpcy5pdGVtcy5zZXQodGFyZ2V0LCBzY2hlbWEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCk7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHBhcmVudCk7XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hIHx8IHRoaXMuZmluZFBhcmVudFNjaGVtYShwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBBc25TY2hlbWFTdG9yYWdlIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5leHBvcnQgY29uc3Qgc2NoZW1hU3RvcmFnZSA9IG5ldyBBc25TY2hlbWFTdG9yYWdlKCk7XG4iLCAiaW1wb3J0ICogYXMgY29udmVydGVycyBmcm9tIFwiLi9jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyBBc25UeXBlVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuaW1wb3J0IHsgc2NoZW1hU3RvcmFnZSB9IGZyb20gXCIuL3N0b3JhZ2VcIjtcbmV4cG9ydCBjb25zdCBBc25UeXBlID0gKG9wdGlvbnMpID0+ICh0YXJnZXQpID0+IHtcbiAgICBsZXQgc2NoZW1hO1xuICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0KSkge1xuICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmNyZWF0ZURlZmF1bHQodGFyZ2V0KTtcbiAgICAgICAgc2NoZW1hU3RvcmFnZS5zZXQodGFyZ2V0LCBzY2hlbWEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0KTtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIG9wdGlvbnMpO1xufTtcbmV4cG9ydCBjb25zdCBBc25DaG9pY2VUeXBlID0gKCkgPT4gQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSk7XG5leHBvcnQgY29uc3QgQXNuU2V0VHlwZSA9IChvcHRpb25zKSA9PiBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLlNldCwgLi4ub3B0aW9ucyB9KTtcbmV4cG9ydCBjb25zdCBBc25TZXF1ZW5jZVR5cGUgPSAob3B0aW9ucykgPT4gQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5TZXF1ZW5jZSwgLi4ub3B0aW9ucyB9KTtcbmV4cG9ydCBjb25zdCBBc25Qcm9wID0gKG9wdGlvbnMpID0+ICh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgbGV0IHNjaGVtYTtcbiAgICBpZiAoIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldC5jb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5jcmVhdGVEZWZhdWx0KHRhcmdldC5jb25zdHJ1Y3Rvcik7XG4gICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldC5jb25zdHJ1Y3Rvciwgc2NoZW1hKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldC5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICAgIGNvbnN0IGNvcHlPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyk7XG4gICAgaWYgKHR5cGVvZiBjb3B5T3B0aW9ucy50eXBlID09PSBcIm51bWJlclwiICYmICFjb3B5T3B0aW9ucy5jb252ZXJ0ZXIpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdENvbnZlcnRlciA9IGNvbnZlcnRlcnMuZGVmYXVsdENvbnZlcnRlcihvcHRpb25zLnR5cGUpO1xuICAgICAgICBpZiAoIWRlZmF1bHRDb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBkZWZhdWx0IGNvbnZlcnRlciBmb3IgcHJvcGVydHkgJyR7cHJvcGVydHlLZXl9JyBvZiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvcHlPcHRpb25zLmNvbnZlcnRlciA9IGRlZmF1bHRDb252ZXJ0ZXI7XG4gICAgfVxuICAgIHNjaGVtYS5pdGVtc1twcm9wZXJ0eUtleV0gPSBjb3B5T3B0aW9ucztcbn07XG4iLCAiZXhwb3J0IGNsYXNzIEFzblNjaGVtYVZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5zY2hlbWFzID0gW107XG4gICAgfVxufVxuIiwgImV4cG9ydCAqIGZyb20gXCIuL3NjaGVtYV92YWxpZGF0aW9uXCI7XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEFzblByb3BUeXBlcywgQXNuVHlwZVR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCAqIGFzIGNvbnZlcnRlcnMgZnJvbSBcIi4vY29udmVydGVyc1wiO1xuaW1wb3J0IHsgQXNuU2NoZW1hVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBpc0NvbnZlcnRpYmxlLCBpc1R5cGVPZkFycmF5IH0gZnJvbSBcIi4vaGVscGVyXCI7XG5pbXBvcnQgeyBzY2hlbWFTdG9yYWdlIH0gZnJvbSBcIi4vc3RvcmFnZVwiO1xuZXhwb3J0IGNsYXNzIEFzblBhcnNlciB7XG4gICAgc3RhdGljIHBhcnNlKGRhdGEsIHRhcmdldCkge1xuICAgICAgICBjb25zdCBhc24xUGFyc2VkID0gYXNuMWpzLmZyb21CRVIoZGF0YSk7XG4gICAgICAgIGlmIChhc24xUGFyc2VkLnJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFzbjFQYXJzZWQucmVzdWx0LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSB0aGlzLmZyb21BU04oYXNuMVBhcnNlZC5yZXN1bHQsIHRhcmdldCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tQVNOKGFzbjFTY2hlbWEsIHRhcmdldCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBuZXcgdGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmZyb21BU04oYXNuMVNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXQpO1xuICAgICAgICAgICAgc2NoZW1hU3RvcmFnZS5jYWNoZSh0YXJnZXQpO1xuICAgICAgICAgICAgbGV0IHRhcmdldFNjaGVtYSA9IHNjaGVtYS5zY2hlbWE7XG4gICAgICAgICAgICBpZiAoYXNuMVNjaGVtYS5jb25zdHJ1Y3RvciA9PT0gYXNuMWpzLkNvbnN0cnVjdGVkICYmIHNjaGVtYS50eXBlICE9PSBBc25UeXBlVHlwZXMuQ2hvaWNlKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0U2NoZW1hID0gbmV3IGFzbjFqcy5Db25zdHJ1Y3RlZCh7XG4gICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBhc24xU2NoZW1hLmlkQmxvY2sudGFnTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc2NoZW1hLnNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYS5pdGVtcykge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYXNuMVNjaGVtYVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFzbjFDb21wYXJlZFNjaGVtYSA9IGFzbjFqcy5jb21wYXJlU2NoZW1hKHt9LCBhc24xU2NoZW1hLCB0YXJnZXRTY2hlbWEpO1xuICAgICAgICAgICAgaWYgKCFhc24xQ29tcGFyZWRTY2hlbWEudmVyaWZpZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNuU2NoZW1hVmFsaWRhdGlvbkVycm9yKGBEYXRhIGRvZXMgbm90IG1hdGNoIHRvICR7dGFyZ2V0Lm5hbWV9IEFTTjEgc2NoZW1hLiAke2FzbjFDb21wYXJlZFNjaGVtYS5yZXN1bHQuZXJyb3J9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXMgPSBuZXcgdGFyZ2V0KCk7XG4gICAgICAgICAgICBpZiAoaXNUeXBlT2ZBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoXCJ2YWx1ZVwiIGluIGFzbjFTY2hlbWEudmFsdWVCbG9jayAmJiBBcnJheS5pc0FycmF5KGFzbjFTY2hlbWEudmFsdWVCbG9jay52YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBpdGVtcyBmcm9tIHRoZSBBU04uMSBwYXJzZWQgdmFsdWUuIEFTTi4xIG9iamVjdCBpcyBub3QgY29uc3RydWN0ZWQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1UeXBlID0gc2NoZW1hLml0ZW1UeXBlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbVR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVyID0gY29udmVydGVycy5kZWZhdWx0Q29udmVydGVyKGl0ZW1UeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBkZWZhdWx0IGNvbnZlcnRlciBmb3IgYXJyYXkgaXRlbSBvZiAke3RhcmdldC5uYW1lfSBBU04xIHNjaGVtYWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuZnJvbShhc24xU2NoZW1hLnZhbHVlQmxvY2sudmFsdWUsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIuZnJvbUFTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmZyb20oYXNuMVNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLCAoZWxlbWVudCkgPT4gdGhpcy5mcm9tQVNOKGVsZW1lbnQsIGl0ZW1UeXBlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuMVNjaGVtYVZhbHVlID0gYXNuMUNvbXBhcmVkU2NoZW1hLnJlc3VsdFtrZXldO1xuICAgICAgICAgICAgICAgIGlmICghYXNuMVNjaGVtYVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFJdGVtID0gc2NoZW1hLml0ZW1zW2tleV07XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hSXRlbVR5cGUgPSBzY2hlbWFJdGVtLnR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFJdGVtVHlwZSA9PT0gXCJudW1iZXJcIiB8fCBpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW1UeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZXIgPSAoX2EgPSBzY2hlbWFJdGVtLmNvbnZlcnRlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKGlzQ29udmVydGlibGUoc2NoZW1hSXRlbVR5cGUpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBzY2hlbWFJdGVtVHlwZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnZlcnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udmVydGVyIGlzIGVtcHR5XCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5pbXBsaWNpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IHNjaGVtYUl0ZW0ucmVwZWF0ZWQgPT09IFwic2VxdWVuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFzbjFqcy5TZXF1ZW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzbjFqcy5TZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IG5ldyBDb250YWluZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtLnZhbHVlQmxvY2sgPSBhc24xU2NoZW1hVmFsdWUudmFsdWVCbG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtQXNuID0gYXNuMWpzLmZyb21CRVIobmV3SXRlbS50b0JFUihmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdJdGVtQXNuLm9mZnNldCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGNoaWxkIGl0ZW0uICR7bmV3SXRlbUFzbi5yZXN1bHQuZXJyb3J9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKFwidmFsdWVcIiBpbiBuZXdJdGVtQXNuLnJlc3VsdC52YWx1ZUJsb2NrICYmIEFycmF5LmlzQXJyYXkobmV3SXRlbUFzbi5yZXN1bHQudmFsdWVCbG9jay52YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgaXRlbXMgZnJvbSB0aGUgQVNOLjEgcGFyc2VkIHZhbHVlLiBBU04uMSBvYmplY3QgaXMgbm90IGNvbnN0cnVjdGVkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBuZXdJdGVtQXNuLnJlc3VsdC52YWx1ZUJsb2NrLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gQXJyYXkuZnJvbSh2YWx1ZSwgKGVsZW1lbnQpID0+IGNvbnZlcnRlci5mcm9tQVNOKGVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gQXJyYXkuZnJvbShhc24xU2NoZW1hVmFsdWUsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIuZnJvbUFTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBhc24xU2NoZW1hVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5pbXBsaWNpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW1UeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtID0gbmV3IHNjaGVtYUl0ZW1UeXBlKCkudG9TY2hlbWEoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBc24xVHlwZU5hbWUgPSBBc25Qcm9wVHlwZXNbc2NoZW1hSXRlbVR5cGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBc24xVHlwZSA9IGFzbjFqc1tBc24xVHlwZU5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFzbjFUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgJyR7QXNuMVR5cGVOYW1lfScgY2xhc3MgZnJvbSBhc24xanMgbW9kdWxlYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbSA9IG5ldyBBc24xVHlwZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtLnZhbHVlQmxvY2sgPSB2YWx1ZS52YWx1ZUJsb2NrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXNuMWpzLmZyb21CRVIobmV3SXRlbS50b0JFUihmYWxzZSkpLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gY29udmVydGVyLmZyb21BU04odmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFzbjFTY2hlbWFWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IGxpc3Qgb2YgaXRlbXMgZnJvbSB0aGUgQVNOLjEgcGFyc2VkIHZhbHVlLiBBU04uMSB2YWx1ZSBzaG91bGQgYmUgaXRlcmFibGUuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSBBcnJheS5mcm9tKGFzbjFTY2hlbWFWYWx1ZSwgKGVsZW1lbnQpID0+IHRoaXMuZnJvbUFTTihlbGVtZW50LCBzY2hlbWFJdGVtVHlwZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSB0aGlzLmZyb21BU04oYXNuMVNjaGVtYVZhbHVlLCBzY2hlbWFJdGVtVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXNuU2NoZW1hVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyb3Iuc2NoZW1hcy5wdXNoKHRhcmdldC5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgKiBhcyBjb252ZXJ0ZXJzIGZyb20gXCIuL2NvbnZlcnRlcnNcIjtcbmltcG9ydCB7IEFzblByb3BUeXBlcywgQXNuVHlwZVR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7IGlzQ29udmVydGlibGUsIGlzQXJyYXlFcXVhbCB9IGZyb20gXCIuL2hlbHBlclwiO1xuaW1wb3J0IHsgc2NoZW1hU3RvcmFnZSB9IGZyb20gXCIuL3N0b3JhZ2VcIjtcbmV4cG9ydCBjbGFzcyBBc25TZXJpYWxpemVyIHtcbiAgICBzdGF0aWMgc2VyaWFsaXplKG9iaikge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgYXNuMWpzLkJhc2VCbG9jaykge1xuICAgICAgICAgICAgcmV0dXJuIG9iai50b0JFUihmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9BU04ob2JqKS50b0JFUihmYWxzZSk7XG4gICAgfVxuICAgIHN0YXRpYyB0b0FTTihvYmopIHtcbiAgICAgICAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmIGlzQ29udmVydGlibGUob2JqKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iai50b0FTTigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKG9iaiAmJiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAxIHNob3VsZCBiZSB0eXBlIG9mIE9iamVjdC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gb2JqLmNvbnN0cnVjdG9yO1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXQpO1xuICAgICAgICBzY2hlbWFTdG9yYWdlLmNhY2hlKHRhcmdldCk7XG4gICAgICAgIGxldCBhc24xVmFsdWUgPSBbXTtcbiAgICAgICAgaWYgKHNjaGVtYS5pdGVtVHlwZSkge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyIDEgc2hvdWxkIGJlIHR5cGUgb2YgQXJyYXkuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuaXRlbVR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZXIgPSBjb252ZXJ0ZXJzLmRlZmF1bHRDb252ZXJ0ZXIoc2NoZW1hLml0ZW1UeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnZlcnRlcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZGVmYXVsdCBjb252ZXJ0ZXIgZm9yIGFycmF5IGl0ZW0gb2YgJHt0YXJnZXQubmFtZX0gQVNOMSBzY2hlbWFgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXNuMVZhbHVlID0gb2JqLm1hcCgobykgPT4gY29udmVydGVyLnRvQVNOKG8pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzbjFWYWx1ZSA9IG9iai5tYXAoKG8pID0+IHRoaXMudG9Bc25JdGVtKHsgdHlwZTogc2NoZW1hLml0ZW1UeXBlIH0sIFwiW11cIiwgdGFyZ2V0LCBvKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFJdGVtID0gc2NoZW1hLml0ZW1zW2tleV07XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqUHJvcCA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgIGlmIChvYmpQcm9wID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgfHwgc2NoZW1hSXRlbS5kZWZhdWx0VmFsdWUgPT09IG9ialByb3BcbiAgICAgICAgICAgICAgICAgICAgfHwgKHR5cGVvZiBzY2hlbWFJdGVtLmRlZmF1bHRWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb2JqUHJvcCA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXNBcnJheUVxdWFsKHRoaXMuc2VyaWFsaXplKHNjaGVtYUl0ZW0uZGVmYXVsdFZhbHVlKSwgdGhpcy5zZXJpYWxpemUob2JqUHJvcCkpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuMUl0ZW0gPSBBc25TZXJpYWxpemVyLnRvQXNuSXRlbShzY2hlbWFJdGVtLCBrZXksIHRhcmdldCwgb2JqUHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFJdGVtLmNvbnRleHQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0uaW1wbGljaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2NoZW1hSXRlbS5yZXBlYXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICh0eXBlb2Ygc2NoZW1hSXRlbS50eXBlID09PSBcIm51bWJlclwiIHx8IGlzQ29udmVydGlibGUoc2NoZW1hSXRlbS50eXBlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlSGV4ID0gYXNuMUl0ZW0gaW5zdGFuY2VvZiBhc24xanMuTnVsbCA/IGFzbjFJdGVtLnZhbHVlQmVmb3JlRGVjb2RlVmlldyA6IGFzbjFJdGVtLnZhbHVlQmxvY2sudG9CRVIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLlByaW1pdGl2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsOiBzY2hlbWFJdGVtLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogc2NoZW1hSXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWw6IHNjaGVtYUl0ZW0ub3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBzY2hlbWFJdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhc24xSXRlbS52YWx1ZUJsb2NrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsOiBzY2hlbWFJdGVtLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogc2NoZW1hSXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFthc24xSXRlbV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUgPSBhc24xVmFsdWUuY29uY2F0KGFzbjFJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKGFzbjFJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFzblNjaGVtYTtcbiAgICAgICAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuU2VxdWVuY2U6XG4gICAgICAgICAgICAgICAgYXNuU2NoZW1hID0gbmV3IGFzbjFqcy5TZXF1ZW5jZSh7IHZhbHVlOiBhc24xVmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5TZXQ6XG4gICAgICAgICAgICAgICAgYXNuU2NoZW1hID0gbmV3IGFzbjFqcy5TZXQoeyB2YWx1ZTogYXNuMVZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuQ2hvaWNlOlxuICAgICAgICAgICAgICAgIGlmICghYXNuMVZhbHVlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NoZW1hICcke3RhcmdldC5uYW1lfScgaGFzIHdyb25nIGRhdGEuIENob2ljZSBjYW5ub3QgYmUgZW1wdHkuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzblNjaGVtYSA9IGFzbjFWYWx1ZVswXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXNuU2NoZW1hO1xuICAgIH1cbiAgICBzdGF0aWMgdG9Bc25JdGVtKHNjaGVtYUl0ZW0sIGtleSwgdGFyZ2V0LCBvYmpQcm9wKSB7XG4gICAgICAgIGxldCBhc24xSXRlbTtcbiAgICAgICAgaWYgKHR5cGVvZiAoc2NoZW1hSXRlbS50eXBlKSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgY29uc3QgY29udmVydGVyID0gc2NoZW1hSXRlbS5jb252ZXJ0ZXI7XG4gICAgICAgICAgICBpZiAoIWNvbnZlcnRlcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvcGVydHkgJyR7a2V5fScgZG9lc24ndCBoYXZlIGNvbnZlcnRlciBmb3IgdHlwZSAke0FzblByb3BUeXBlc1tzY2hlbWFJdGVtLnR5cGVdfSBpbiBzY2hlbWEgJyR7dGFyZ2V0Lm5hbWV9J2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqUHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAnb2JqUHJvcCcgc2hvdWxkIGJlIHR5cGUgb2YgQXJyYXkuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IEFycmF5LmZyb20ob2JqUHJvcCwgKGVsZW1lbnQpID0+IGNvbnZlcnRlci50b0FTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyID0gc2NoZW1hSXRlbS5yZXBlYXRlZCA9PT0gXCJzZXF1ZW5jZVwiXG4gICAgICAgICAgICAgICAgICAgID8gYXNuMWpzLlNlcXVlbmNlXG4gICAgICAgICAgICAgICAgICAgIDogYXNuMWpzLlNldDtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IGNvbnZlcnRlci50b0FTTihvYmpQcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9ialByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ29ialByb3AnIHNob3VsZCBiZSB0eXBlIG9mIEFycmF5LlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKG9ialByb3AsIChlbGVtZW50KSA9PiB0aGlzLnRvQVNOKGVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBzY2hlbWFJdGVtLnJlcGVhdGVkID09PSBcInNlcXVlbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgPyBhc24xanMuU2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgOiBhc24xanMuU2V0O1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IENvbnRhaW5lcih7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gdGhpcy50b0FTTihvYmpQcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXNuMUl0ZW07XG4gICAgfVxufVxuIiwgImV4cG9ydCBjbGFzcyBBc25BcnJheSBleHRlbmRzIEFycmF5IHtcbiAgICBjb25zdHJ1Y3RvcihpdGVtcyA9IFtdKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbXMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHN1cGVyKGl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB9IGZyb20gXCJwdnRzdXRpbHNcIjtcbmltcG9ydCB7IEFzblBhcnNlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuaW1wb3J0IHsgQXNuU2VyaWFsaXplciB9IGZyb20gXCIuL3NlcmlhbGl6ZXJcIjtcbmV4cG9ydCBjbGFzcyBBc25Db252ZXJ0IHtcbiAgICBzdGF0aWMgc2VyaWFsaXplKG9iaikge1xuICAgICAgICByZXR1cm4gQXNuU2VyaWFsaXplci5zZXJpYWxpemUob2JqKTtcbiAgICB9XG4gICAgc3RhdGljIHBhcnNlKGRhdGEsIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gQXNuUGFyc2VyLnBhcnNlKGRhdGEsIHRhcmdldCk7XG4gICAgfVxuICAgIHN0YXRpYyB0b1N0cmluZyhkYXRhKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShkYXRhKVxuICAgICAgICAgICAgPyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKVxuICAgICAgICAgICAgOiBBc25Db252ZXJ0LnNlcmlhbGl6ZShkYXRhKTtcbiAgICAgICAgY29uc3QgYXNuID0gYXNuMWpzLmZyb21CRVIoYnVmKTtcbiAgICAgICAgaWYgKGFzbi5vZmZzZXQgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkZWNvZGUgQVNOLjEgZGF0YS4gJHthc24ucmVzdWx0LmVycm9yfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc24ucmVzdWx0LnRvU3RyaW5nKCk7XG4gICAgfVxufVxuIiwgImV4cG9ydCAqIGZyb20gXCIuL2NvbnZlcnRlcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzL2luZGV4XCI7XG5leHBvcnQgeyBBc25Qcm9wLCBBc25UeXBlLCBBc25DaG9pY2VUeXBlLCBBc25TZXF1ZW5jZVR5cGUsIEFzblNldFR5cGUgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgeyBBc25UeXBlVHlwZXMsIEFzblByb3BUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5leHBvcnQgeyBBc25QYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmV4cG9ydCB7IEFzblNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9zZXJpYWxpemVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29iamVjdHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbnZlcnRcIjtcbiIsICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgfVxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgdFtwXSA9IHNbcF07XG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgfVxuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XG4gIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxuICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xuICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcbiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XG4gIHZhciBfLCBkb25lID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XG4gICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcbiAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xuICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcbiAgICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gIGRvbmUgPSB0cnVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XG4gIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xuICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxuICAgICAgICAgIHJba10gPSBhW2pdO1xuICByZXR1cm4gcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XG4gIHZhciBpLCBwO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xuICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxuICByZXR1cm4gY29va2VkO1xufTtcblxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufTtcblxudmFyIG93bktleXMgPSBmdW5jdGlvbihvKSB7XG4gIG93bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgIHZhciBhciA9IFtdO1xuICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgcmV0dXJuIGFyO1xuICB9O1xuICByZXR1cm4gb3duS2V5cyhvKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcbiAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xuICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcbiAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudiwgdmFsdWUsIGFzeW5jKSB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XG4gICAgdmFyIGRpc3Bvc2UsIGlubmVyO1xuICAgIGlmIChhc3luYykge1xuICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG4gICAgfVxuICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcbiAgICAgIGlmICghU3ltYm9sLmRpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgICAgaWYgKGFzeW5jKSBpbm5lciA9IGRpc3Bvc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcbiAgICBpZiAoaW5uZXIpIGRpc3Bvc2UgPSBmdW5jdGlvbigpIHsgdHJ5IHsgaW5uZXIuY2FsbCh0aGlzKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7IH0gfTtcbiAgICBlbnYuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZSwgZGlzcG9zZTogZGlzcG9zZSwgYXN5bmM6IGFzeW5jIH0pO1xuICB9XG4gIGVsc2UgaWYgKGFzeW5jKSB7XG4gICAgZW52LnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGlzcG9zZVJlc291cmNlcyhlbnYpIHtcbiAgZnVuY3Rpb24gZmFpbChlKSB7XG4gICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xuICAgIGVudi5oYXNFcnJvciA9IHRydWU7XG4gIH1cbiAgdmFyIHIsIHMgPSAwO1xuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHdoaWxlIChyID0gZW52LnN0YWNrLnBvcCgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXIuYXN5bmMgJiYgcyA9PT0gMSkgcmV0dXJuIHMgPSAwLCBlbnYuc3RhY2sucHVzaChyKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0KTtcbiAgICAgICAgaWYgKHIuZGlzcG9zZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSByLmRpc3Bvc2UuY2FsbChyLnZhbHVlKTtcbiAgICAgICAgICBpZiAoci5hc3luYykgcmV0dXJuIHMgfD0gMiwgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgcyB8PSAxO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZmFpbChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMgPT09IDEpIHJldHVybiBlbnYuaGFzRXJyb3IgPyBQcm9taXNlLnJlamVjdChlbnYuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xuICB9XG4gIHJldHVybiBuZXh0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbihwYXRoLCBwcmVzZXJ2ZUpzeCkge1xuICBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIgJiYgL15cXC5cXC4/XFwvLy50ZXN0KHBhdGgpKSB7XG4gICAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC4odHN4KSR8KCg/OlxcLmQpPykoKD86XFwuW14uL10rPyk/KVxcLihbY21dPyl0cyQvaSwgZnVuY3Rpb24gKG0sIHRzeCwgZCwgZXh0LCBjbSkge1xuICAgICAgICAgIHJldHVybiB0c3ggPyBwcmVzZXJ2ZUpzeCA/IFwiLmpzeFwiIDogXCIuanNcIiA6IGQgJiYgKCFleHQgfHwgIWNtKSA/IG0gOiAoZCArIGV4dCArIFwiLlwiICsgY20udG9Mb3dlckNhc2UoKSArIFwianNcIik7XG4gICAgICB9KTtcbiAgfVxuICByZXR1cm4gcGF0aDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fZXNEZWNvcmF0ZSxcbiAgX19ydW5Jbml0aWFsaXplcnMsXG4gIF9fcHJvcEtleSxcbiAgX19zZXRGdW5jdGlvbk5hbWUsXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxuICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbixcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAsIFBlY3VsaWFyIFZlbnR1cmVzLCBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICovXG5cbmNsYXNzIEpzb25FcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGlubmVyRXJyb3IpIHtcclxuICAgICAgICBzdXBlcihpbm5lckVycm9yXHJcbiAgICAgICAgICAgID8gYCR7bWVzc2FnZX0uIFNlZSB0aGUgaW5uZXIgZXhjZXB0aW9uIGZvciBtb3JlIGRldGFpbHMuYFxyXG4gICAgICAgICAgICA6IG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICAgICAgdGhpcy5pbm5lckVycm9yID0gaW5uZXJFcnJvcjtcclxuICAgIH1cclxufVxuXG5jbGFzcyBUcmFuc2Zvcm1FcnJvciBleHRlbmRzIEpzb25FcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihzY2hlbWEsIG1lc3NhZ2UsIGlubmVyRXJyb3IpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlLCBpbm5lckVycm9yKTtcclxuICAgICAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBQYXJzZXJFcnJvciBleHRlbmRzIFRyYW5zZm9ybUVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwgbWVzc2FnZSwgaW5uZXJFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKHNjaGVtYSwgYEpTT04gZG9lc24ndCBtYXRjaCB0byAnJHtzY2hlbWEudGFyZ2V0Lm5hbWV9JyBzY2hlbWEuICR7bWVzc2FnZX1gLCBpbm5lckVycm9yKTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBKc29uRXJyb3Ige1xyXG59XG5cbmNsYXNzIFNlcmlhbGl6ZXJFcnJvciBleHRlbmRzIEpzb25FcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihzY2hlbWFOYW1lLCBtZXNzYWdlLCBpbm5lckVycm9yKSB7XHJcbiAgICAgICAgc3VwZXIoYENhbm5vdCBzZXJpYWxpemUgYnkgJyR7c2NoZW1hTmFtZX0nIHNjaGVtYS4gJHttZXNzYWdlfWAsIGlubmVyRXJyb3IpO1xyXG4gICAgICAgIHRoaXMuc2NoZW1hTmFtZSA9IHNjaGVtYU5hbWU7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgS2V5RXJyb3IgZXh0ZW5kcyBQYXJzZXJFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihzY2hlbWEsIGtleXMsIGVycm9ycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIoc2NoZW1hLCBcIlNvbWUga2V5cyBkb2Vzbid0IG1hdGNoIHRvIHNjaGVtYVwiKTtcclxuICAgICAgICB0aGlzLmtleXMgPSBrZXlzO1xyXG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xyXG4gICAgfVxyXG59XG5cbnZhciBKc29uUHJvcFR5cGVzO1xyXG4oZnVuY3Rpb24gKEpzb25Qcm9wVHlwZXMpIHtcclxuICAgIEpzb25Qcm9wVHlwZXNbSnNvblByb3BUeXBlc1tcIkFueVwiXSA9IDBdID0gXCJBbnlcIjtcclxuICAgIEpzb25Qcm9wVHlwZXNbSnNvblByb3BUeXBlc1tcIkJvb2xlYW5cIl0gPSAxXSA9IFwiQm9vbGVhblwiO1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiTnVtYmVyXCJdID0gMl0gPSBcIk51bWJlclwiO1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiU3RyaW5nXCJdID0gM10gPSBcIlN0cmluZ1wiO1xyXG59KShKc29uUHJvcFR5cGVzIHx8IChKc29uUHJvcFR5cGVzID0ge30pKTtcblxuZnVuY3Rpb24gY2hlY2tUeXBlKHZhbHVlLCB0eXBlKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIEpzb25Qcm9wVHlwZXMuQm9vbGVhbjpcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCI7XHJcbiAgICAgICAgY2FzZSBKc29uUHJvcFR5cGVzLk51bWJlcjpcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIjtcclxuICAgICAgICBjYXNlIEpzb25Qcm9wVHlwZXMuU3RyaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuZnVuY3Rpb24gdGhyb3dJZlR5cGVJc1dyb25nKHZhbHVlLCB0eXBlKSB7XHJcbiAgICBpZiAoIWNoZWNrVHlwZSh2YWx1ZSwgdHlwZSkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBWYWx1ZSBtdXN0IGJlICR7SnNvblByb3BUeXBlc1t0eXBlXX1gKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpc0NvbnZlcnRpYmxlKHRhcmdldCkge1xyXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQucHJvdG90eXBlKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldC5wcm90b3R5cGUudG9KU09OICYmIHRhcmdldC5wcm90b3R5cGUuZnJvbUpTT04pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNDb252ZXJ0aWJsZSh0YXJnZXQucHJvdG90eXBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gISEodGFyZ2V0ICYmIHRhcmdldC50b0pTT04gJiYgdGFyZ2V0LmZyb21KU09OKTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBKc29uU2NoZW1hU3RvcmFnZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gbmV3IE1hcCgpO1xyXG4gICAgfVxyXG4gICAgaGFzKHRhcmdldCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmhhcyh0YXJnZXQpIHx8ICEhdGhpcy5maW5kUGFyZW50U2NoZW1hKHRhcmdldCk7XHJcbiAgICB9XHJcbiAgICBnZXQodGFyZ2V0KSB7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5pdGVtcy5nZXQodGFyZ2V0KSB8fCB0aGlzLmZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KTtcclxuICAgICAgICBpZiAoIXNjaGVtYSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHNjaGVtYSBmb3IgY3VycmVudCB0YXJnZXRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzY2hlbWE7XHJcbiAgICB9XHJcbiAgICBjcmVhdGUodGFyZ2V0KSB7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hID0geyBuYW1lczoge30gfTtcclxuICAgICAgICBjb25zdCBwYXJlbnRTY2hlbWEgPSB0aGlzLmZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KTtcclxuICAgICAgICBpZiAocGFyZW50U2NoZW1hKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCBwYXJlbnRTY2hlbWEpO1xyXG4gICAgICAgICAgICBzY2hlbWEubmFtZXMgPSB7fTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIHBhcmVudFNjaGVtYS5uYW1lcykge1xyXG4gICAgICAgICAgICAgICAgc2NoZW1hLm5hbWVzW25hbWVdID0gT2JqZWN0LmFzc2lnbih7fSwgcGFyZW50U2NoZW1hLm5hbWVzW25hbWVdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBzY2hlbWEudGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgICAgIHJldHVybiBzY2hlbWE7XHJcbiAgICB9XHJcbiAgICBzZXQodGFyZ2V0LCBzY2hlbWEpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLnNldCh0YXJnZXQsIHNjaGVtYSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBmaW5kUGFyZW50U2NoZW1hKHRhcmdldCkge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRhcmdldC5fX3Byb3RvX187XHJcbiAgICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldChwYXJlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hIHx8IHRoaXMuZmluZFBhcmVudFNjaGVtYShwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxuXG5jb25zdCBERUZBVUxUX1NDSEVNQSA9IFwiZGVmYXVsdFwiO1xyXG5jb25zdCBzY2hlbWFTdG9yYWdlID0gbmV3IEpzb25TY2hlbWFTdG9yYWdlKCk7XG5cbmNsYXNzIFBhdHRlcm5WYWxpZGF0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm4pIHtcclxuICAgICAgICB0aGlzLnBhdHRlcm4gPSBuZXcgUmVnRXhwKHBhdHRlcm4pO1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCh0aGlzLnBhdHRlcm4uc291cmNlLCB0aGlzLnBhdHRlcm4uZmxhZ3MpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcIkluY29taW5nIHZhbHVlIG11c3QgYmUgc3RyaW5nXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXBhdHRlcm4uZXhlYyh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgZG9lc24ndCBtYXRjaCB0byBwYXR0ZXJuICcke3BhdHRlcm4udG9TdHJpbmcoKX0nYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEluY2x1c2l2ZVZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IobWluID0gTnVtYmVyLk1JTl9WQUxVRSwgbWF4ID0gTnVtYmVyLk1BWF9WQUxVRSkge1xyXG4gICAgICAgIHRoaXMubWluID0gbWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIEpzb25Qcm9wVHlwZXMuTnVtYmVyKTtcclxuICAgICAgICBpZiAoISh0aGlzLm1pbiA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSB0aGlzLm1heCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbWluID0gdGhpcy5taW4gPT09IE51bWJlci5NSU5fVkFMVUUgPyBcIk1JTlwiIDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4ID09PSBOdW1iZXIuTUFYX1ZBTFVFID8gXCJNQVhcIiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBkb2Vzbid0IG1hdGNoIHRvIGRpYXBhc29uIFske21pbn0sJHttYXh9XWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5jbGFzcyBFeGNsdXNpdmVWYWxpZGF0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKG1pbiA9IE51bWJlci5NSU5fVkFMVUUsIG1heCA9IE51bWJlci5NQVhfVkFMVUUpIHtcclxuICAgICAgICB0aGlzLm1pbiA9IG1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG1heDtcclxuICAgIH1cclxuICAgIHZhbGlkYXRlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhyb3dJZlR5cGVJc1dyb25nKHZhbHVlLCBKc29uUHJvcFR5cGVzLk51bWJlcik7XHJcbiAgICAgICAgaWYgKCEodGhpcy5taW4gPCB2YWx1ZSAmJiB2YWx1ZSA8IHRoaXMubWF4KSkge1xyXG4gICAgICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbiA9PT0gTnVtYmVyLk1JTl9WQUxVRSA/IFwiTUlOXCIgOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXggPT09IE51bWJlci5NQVhfVkFMVUUgPyBcIk1BWFwiIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIGRvZXNuJ3QgbWF0Y2ggdG8gZGlhcGFzb24gKCR7bWlufSwke21heH0pYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIExlbmd0aFZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IobGVuZ3RoLCBtaW5MZW5ndGgsIG1heExlbmd0aCkge1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xyXG4gICAgICAgIHRoaXMubWluTGVuZ3RoID0gbWluTGVuZ3RoO1xyXG4gICAgICAgIHRoaXMubWF4TGVuZ3RoID0gbWF4TGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSB0aGlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgbGVuZ3RoIG11c3QgYmUgZXhhY3RseSAke3RoaXMubGVuZ3RofS5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1pbkxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPCB0aGlzLm1pbkxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgbGVuZ3RoIG11c3QgYmUgbW9yZSB0aGFuICR7dGhpcy5taW5MZW5ndGh9LmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuICR7dGhpcy5tYXhMZW5ndGh9LmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEVudW1lcmF0aW9uVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihlbnVtZXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMuZW51bWVyYXRpb24gPSBlbnVtZXJhdGlvbjtcclxuICAgIH1cclxuICAgIHZhbGlkYXRlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhyb3dJZlR5cGVJc1dyb25nKHZhbHVlLCBKc29uUHJvcFR5cGVzLlN0cmluZyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVudW1lcmF0aW9uLmluY2x1ZGVzKHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBtdXN0IGJlIG9uZSBvZiAke3RoaXMuZW51bWVyYXRpb24ubWFwKCh2KSA9PiBgJyR7dn0nYCkuam9pbihcIiwgXCIpfWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5jbGFzcyBKc29uVHJhbnNmb3JtIHtcclxuICAgIHN0YXRpYyBjaGVja1ZhbHVlcyhkYXRhLCBzY2hlbWFJdGVtKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbZGF0YV07XHJcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIHNjaGVtYUl0ZW0udmFsaWRhdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uIGluc3RhbmNlb2YgTGVuZ3RoVmFsaWRhdGlvbiAmJiBzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbi52YWxpZGF0ZShkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb24udmFsaWRhdGUodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGNoZWNrVHlwZXModmFsdWUsIHNjaGVtYUl0ZW0pIHtcclxuICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlZhbHVlIG11c3QgYmUgQXJyYXlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hSXRlbS50eXBlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvd0lmVHlwZUlzV3Jvbmcodiwgc2NoZW1hSXRlbS50eXBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXRpYyBnZXRTY2hlbWFCeU5hbWUoc2NoZW1hLCBuYW1lID0gREVGQVVMVF9TQ0hFTUEpIHtcclxuICAgICAgICByZXR1cm4geyAuLi5zY2hlbWEubmFtZXNbREVGQVVMVF9TQ0hFTUFdLCAuLi5zY2hlbWEubmFtZXNbbmFtZV0gfTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBKc29uU2VyaWFsaXplciBleHRlbmRzIEpzb25UcmFuc2Zvcm0ge1xyXG4gICAgc3RhdGljIHNlcmlhbGl6ZShvYmosIG9wdGlvbnMsIHJlcGxhY2VyLCBzcGFjZSkge1xyXG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTihvYmosIG9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShqc29uLCByZXBsYWNlciwgc3BhY2UpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHRvSlNPTihvYmosIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGxldCByZXM7XHJcbiAgICAgICAgbGV0IHRhcmdldFNjaGVtYSA9IG9wdGlvbnMudGFyZ2V0U2NoZW1hO1xyXG4gICAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBvcHRpb25zLnNjaGVtYU5hbWUgfHwgREVGQVVMVF9TQ0hFTUE7XHJcbiAgICAgICAgaWYgKGlzQ29udmVydGlibGUob2JqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqLnRvSlNPTigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICAgICAgICAgIHJlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygb2JqKSB7XHJcbiAgICAgICAgICAgICAgICByZXMucHVzaCh0aGlzLnRvSlNPTihpdGVtLCBvcHRpb25zKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0U2NoZW1hICYmICFzY2hlbWFTdG9yYWdlLmhhcyh0YXJnZXRTY2hlbWEpKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnNvbkVycm9yKFwiQ2Fubm90IGdldCBzY2hlbWEgZm9yIGB0YXJnZXRTY2hlbWFgIHBhcmFtXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhcmdldFNjaGVtYSA9ICh0YXJnZXRTY2hlbWEgfHwgb2JqLmNvbnN0cnVjdG9yKTtcclxuICAgICAgICAgICAgaWYgKHNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldFNjaGVtYSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldFNjaGVtYSk7XHJcbiAgICAgICAgICAgICAgICByZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVkU2NoZW1hID0gdGhpcy5nZXRTY2hlbWFCeU5hbWUoc2NoZW1hLCBzY2hlbWFOYW1lKTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5hbWVkU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5hbWVkU2NoZW1hW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iakl0ZW0gPSBvYmpba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGl0ZW0ub3B0aW9uYWwgJiYgb2JqSXRlbSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGl0ZW0uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgb2JqSXRlbSA9PT0gaXRlbS5kZWZhdWx0VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0ub3B0aW9uYWwgJiYgb2JqSXRlbSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXplckVycm9yKHRhcmdldFNjaGVtYS5uYW1lLCBgUHJvcGVydHkgJyR7a2V5fScgaXMgcmVxdWlyZWQuYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtLnR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvbnZlcnRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gb2JqSXRlbS5tYXAoKGVsKSA9PiBpdGVtLmNvbnZlcnRlci50b0pTT04oZWwsIG9iaikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpdGVtLmNvbnZlcnRlci50b0pTT04ob2JqSXRlbSwgb2JqKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG9iakl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5yZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gb2JqSXRlbS5tYXAoKGVsKSA9PiB0aGlzLnRvSlNPTihlbCwgeyBzY2hlbWFOYW1lIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy50b0pTT04ob2JqSXRlbSwgeyBzY2hlbWFOYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tUeXBlcyh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tWYWx1ZXModmFsdWUsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNbaXRlbS5uYW1lIHx8IGtleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTZXJpYWxpemVyRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXplckVycm9yKHNjaGVtYS50YXJnZXQubmFtZSwgYFByb3BlcnR5ICcke2tleX0nIGlzIHdyb25nLiAke2UubWVzc2FnZX1gLCBlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSB0aGlzLnRvSlNPTihvYmpba2V5XSwgeyBzY2hlbWFOYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXMgPSBvYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgSnNvblBhcnNlciBleHRlbmRzIEpzb25UcmFuc2Zvcm0ge1xyXG4gICAgc3RhdGljIHBhcnNlKGRhdGEsIG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyb21KU09OKG9iaiwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbUpTT04odGFyZ2V0LCBvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0U2NoZW1hID0gb3B0aW9ucy50YXJnZXRTY2hlbWE7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IG9wdGlvbnMuc2NoZW1hTmFtZSB8fCBERUZBVUxUX1NDSEVNQTtcclxuICAgICAgICBjb25zdCBvYmogPSBuZXcgdGFyZ2V0U2NoZW1hKCk7XHJcbiAgICAgICAgaWYgKGlzQ29udmVydGlibGUob2JqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqLmZyb21KU09OKHRhcmdldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldFNjaGVtYSk7XHJcbiAgICAgICAgY29uc3QgbmFtZWRTY2hlbWEgPSB0aGlzLmdldFNjaGVtYUJ5TmFtZShzY2hlbWEsIHNjaGVtYU5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGtleUVycm9ycyA9IHt9O1xyXG4gICAgICAgIGlmIChvcHRpb25zLnN0cmljdFByb3BlcnR5ICYmICFBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcclxuICAgICAgICAgICAgSnNvblBhcnNlci5jaGVja1N0cmljdFByb3BlcnR5KHRhcmdldCwgbmFtZWRTY2hlbWEsIHNjaGVtYSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5hbWVkU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmFtZWRTY2hlbWFba2V5XTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBpdGVtLm5hbWUgfHwga2V5O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0YXJnZXRbbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAoaXRlbS5vcHRpb25hbCB8fCBpdGVtLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtLm9wdGlvbmFsICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXJyb3Ioc2NoZW1hLCBgUHJvcGVydHkgJyR7bmFtZX0nIGlzIHJlcXVpcmVkLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja1R5cGVzKHZhbHVlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tWYWx1ZXModmFsdWUsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoaXRlbS50eXBlKSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvbnZlcnRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5yZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZS5tYXAoKGVsKSA9PiBpdGVtLmNvbnZlcnRlci5mcm9tSlNPTihlbCwgb2JqKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IGl0ZW0uY29udmVydGVyLmZyb21KU09OKHZhbHVlLCBvYmopO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFNjaGVtYTogaXRlbS50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZS5tYXAoKGVsKSA9PiB0aGlzLmZyb21KU09OKGVsLCBuZXdPcHRpb25zKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHRoaXMuZnJvbUpTT04odmFsdWUsIG5ld09wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIFBhcnNlckVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgUGFyc2VyRXJyb3Ioc2NoZW1hLCBgUHJvcGVydHkgJyR7a2V5fScgaXMgd3JvbmcuICR7ZS5tZXNzYWdlfWAsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RyaWN0QWxsS2V5cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleUVycm9yc1trZXldID0gZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGtleUVycm9ycyk7XHJcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBLZXlFcnJvcihzY2hlbWEsIGtleXMsIGtleUVycm9ycyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY2hlY2tTdHJpY3RQcm9wZXJ0eSh0YXJnZXQsIG5hbWVkU2NoZW1hLCBzY2hlbWEpIHtcclxuICAgICAgICBjb25zdCBqc29uUHJvcHMgPSBPYmplY3Qua2V5cyh0YXJnZXQpO1xyXG4gICAgICAgIGNvbnN0IHNjaGVtYVByb3BzID0gT2JqZWN0LmtleXMobmFtZWRTY2hlbWEpO1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBqc29uUHJvcHMpIHtcclxuICAgICAgICAgICAgaWYgKHNjaGVtYVByb3BzLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgS2V5RXJyb3Ioc2NoZW1hLCBrZXlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gZ2V0VmFsaWRhdGlvbnMoaXRlbSkge1xyXG4gICAgY29uc3QgdmFsaWRhdGlvbnMgPSBbXTtcclxuICAgIGlmIChpdGVtLnBhdHRlcm4pIHtcclxuICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKG5ldyBQYXR0ZXJuVmFsaWRhdGlvbihpdGVtLnBhdHRlcm4pKTtcclxuICAgIH1cclxuICAgIGlmIChpdGVtLnR5cGUgPT09IEpzb25Qcm9wVHlwZXMuTnVtYmVyIHx8IGl0ZW0udHlwZSA9PT0gSnNvblByb3BUeXBlcy5BbnkpIHtcclxuICAgICAgICBpZiAoaXRlbS5taW5JbmNsdXNpdmUgIT09IHVuZGVmaW5lZCB8fCBpdGVtLm1heEluY2x1c2l2ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IEluY2x1c2l2ZVZhbGlkYXRpb24oaXRlbS5taW5JbmNsdXNpdmUsIGl0ZW0ubWF4SW5jbHVzaXZlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLm1pbkV4Y2x1c2l2ZSAhPT0gdW5kZWZpbmVkIHx8IGl0ZW0ubWF4RXhjbHVzaXZlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbnMucHVzaChuZXcgRXhjbHVzaXZlVmFsaWRhdGlvbihpdGVtLm1pbkV4Y2x1c2l2ZSwgaXRlbS5tYXhFeGNsdXNpdmUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0uZW51bWVyYXRpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKG5ldyBFbnVtZXJhdGlvblZhbGlkYXRpb24oaXRlbS5lbnVtZXJhdGlvbikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChpdGVtLnR5cGUgPT09IEpzb25Qcm9wVHlwZXMuU3RyaW5nIHx8IGl0ZW0ucmVwZWF0ZWQgfHwgaXRlbS50eXBlID09PSBKc29uUHJvcFR5cGVzLkFueSkge1xyXG4gICAgICAgIGlmIChpdGVtLmxlbmd0aCAhPT0gdW5kZWZpbmVkIHx8IGl0ZW0ubWluTGVuZ3RoICE9PSB1bmRlZmluZWQgfHwgaXRlbS5tYXhMZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKG5ldyBMZW5ndGhWYWxpZGF0aW9uKGl0ZW0ubGVuZ3RoLCBpdGVtLm1pbkxlbmd0aCwgaXRlbS5tYXhMZW5ndGgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsaWRhdGlvbnM7XHJcbn1cclxuY29uc3QgSnNvblByb3AgPSAob3B0aW9ucyA9IHt9KSA9PiAodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xyXG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYENhbm5vdCBzZXQgdHlwZSBmb3IgJHtwcm9wZXJ0eUtleX0gcHJvcGVydHkgb2YgJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0gc2NoZW1hYDtcclxuICAgIGxldCBzY2hlbWE7XHJcbiAgICBpZiAoIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldC5jb25zdHJ1Y3RvcikpIHtcclxuICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmNyZWF0ZSh0YXJnZXQuY29uc3RydWN0b3IpO1xyXG4gICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldC5jb25zdHJ1Y3Rvciwgc2NoZW1hKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldC5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgaWYgKHNjaGVtYS50YXJnZXQgIT09IHRhcmdldC5jb25zdHJ1Y3Rvcikge1xyXG4gICAgICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmNyZWF0ZSh0YXJnZXQuY29uc3RydWN0b3IpO1xyXG4gICAgICAgICAgICBzY2hlbWFTdG9yYWdlLnNldCh0YXJnZXQuY29uc3RydWN0b3IsIHNjaGVtYSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZGVmYXVsdFNjaGVtYSA9IHtcclxuICAgICAgICB0eXBlOiBKc29uUHJvcFR5cGVzLkFueSxcclxuICAgICAgICB2YWxpZGF0aW9uczogW10sXHJcbiAgICB9O1xyXG4gICAgY29uc3QgY29weU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRTY2hlbWEsIG9wdGlvbnMpO1xyXG4gICAgY29weU9wdGlvbnMudmFsaWRhdGlvbnMgPSBnZXRWYWxpZGF0aW9ucyhjb3B5T3B0aW9ucyk7XHJcbiAgICBpZiAodHlwZW9mIGNvcHlPcHRpb25zLnR5cGUgIT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICBpZiAoIXNjaGVtYVN0b3JhZ2UuaGFzKGNvcHlPcHRpb25zLnR5cGUpICYmICFpc0NvbnZlcnRpYmxlKGNvcHlPcHRpb25zLnR5cGUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvck1lc3NhZ2V9LiBBc3NpZ25pbmcgdHlwZSBkb2Vzbid0IGhhdmUgc2NoZW1hLmApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBzY2hlbWFOYW1lcztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuc2NoZW1hKSkge1xyXG4gICAgICAgIHNjaGVtYU5hbWVzID0gb3B0aW9ucy5zY2hlbWE7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBzY2hlbWFOYW1lcyA9IFtvcHRpb25zLnNjaGVtYSB8fCBERUZBVUxUX1NDSEVNQV07XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHNjaGVtYU5hbWUgb2Ygc2NoZW1hTmFtZXMpIHtcclxuICAgICAgICBpZiAoIXNjaGVtYS5uYW1lc1tzY2hlbWFOYW1lXSkge1xyXG4gICAgICAgICAgICBzY2hlbWEubmFtZXNbc2NoZW1hTmFtZV0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbmFtZWRTY2hlbWEgPSBzY2hlbWEubmFtZXNbc2NoZW1hTmFtZV07XHJcbiAgICAgICAgbmFtZWRTY2hlbWFbcHJvcGVydHlLZXldID0gY29weU9wdGlvbnM7XHJcbiAgICB9XHJcbn07XG5cbmV4cG9ydCB7IEpzb25FcnJvciwgSnNvblBhcnNlciwgSnNvblByb3AsIEpzb25Qcm9wVHlwZXMsIEpzb25TZXJpYWxpemVyLCBLZXlFcnJvciwgUGFyc2VyRXJyb3IsIFNlcmlhbGl6ZXJFcnJvciwgVHJhbnNmb3JtRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9O1xuIiwgIi8qIVxuIENvcHlyaWdodCAoYykgUGVjdWxpYXIgVmVudHVyZXMsIExMQ1xuKi9cblxuaW1wb3J0IHsgQ29udmVydCwgQnVmZmVyU291cmNlQ29udmVydGVyLCBjb21iaW5lIH0gZnJvbSAncHZ0c3V0aWxzJztcbmV4cG9ydCB7IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB9IGZyb20gJ3B2dHN1dGlscyc7XG5pbXBvcnQgeyBBc25Qcm9wLCBBc25Qcm9wVHlwZXMsIEFzblR5cGUsIEFzblR5cGVUeXBlcywgQXNuSW50ZWdlckNvbnZlcnRlciwgQXNuU2VyaWFsaXplciwgQXNuQ29udmVydCB9IGZyb20gJ0BwZWN1bGlhci9hc24xLXNjaGVtYSc7XG5pbXBvcnQgeyBfX2RlY29yYXRlIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgSnNvblByb3AsIEpzb25Qcm9wVHlwZXMgfSBmcm9tICdAcGVjdWxpYXIvanNvbi1zY2hlbWEnO1xuaW1wb3J0ICogYXMgYXNuMSBmcm9tICdhc24xanMnO1xuXG5jbGFzcyBDcnlwdG9FcnJvciBleHRlbmRzIEVycm9yIHtcbn1cblxuY2xhc3MgQWxnb3JpdGhtRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG59XG5cbmNsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG4gICAgY29uc3RydWN0b3IobWV0aG9kTmFtZSkge1xuICAgICAgICBzdXBlcihgVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAke21ldGhvZE5hbWUgPyBgJHttZXRob2ROYW1lfWAgOiBcIlwifWApO1xuICAgIH1cbn1cblxuY2xhc3MgT3BlcmF0aW9uRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG59XG5cbmNsYXNzIFJlcXVpcmVkUHJvcGVydHlFcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wTmFtZSkge1xuICAgICAgICBzdXBlcihgJHtwcm9wTmFtZX06IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlgKTtcbiAgICB9XG59XG5cbmNsYXNzIFBlbUNvbnZlcnRlciB7XG4gICAgc3RhdGljIHRvQXJyYXlCdWZmZXIocGVtKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IHBlbVxuICAgICAgICAgICAgLnJlcGxhY2UoLy17NX0oQkVHSU58RU5EKSAuKi17NX0vZywgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiXFxyXCIsIFwiXCIpXG4gICAgICAgICAgICAucmVwbGFjZShcIlxcblwiLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIENvbnZlcnQuRnJvbUJhc2U2NChiYXNlNjQpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9VaW50OEFycmF5KHBlbSkge1xuICAgICAgICBjb25zdCBieXRlcyA9IHRoaXMudG9BcnJheUJ1ZmZlcihwZW0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbUJ1ZmZlclNvdXJjZShidWZmZXIsIHRhZykge1xuICAgICAgICBjb25zdCBiYXNlNjQgPSBDb252ZXJ0LlRvQmFzZTY0KGJ1ZmZlcik7XG4gICAgICAgIGxldCBzbGljZWQ7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBjb25zdCByb3dzID0gW107XG4gICAgICAgIHdoaWxlIChvZmZzZXQgPCBiYXNlNjQubGVuZ3RoKSB7XG4gICAgICAgICAgICBzbGljZWQgPSBiYXNlNjQuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyA2NCk7XG4gICAgICAgICAgICBpZiAoc2xpY2VkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJvd3MucHVzaChzbGljZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvZmZzZXQgKz0gNjQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBwZXJDYXNlVGFnID0gdGFnLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBgLS0tLS1CRUdJTiAke3VwcGVyQ2FzZVRhZ30tLS0tLVxcbiR7cm93cy5qb2luKFwiXFxuXCIpfVxcbi0tLS0tRU5EICR7dXBwZXJDYXNlVGFnfS0tLS0tYDtcbiAgICB9XG4gICAgc3RhdGljIGlzUEVNKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIC8tLS0tLUJFR0lOIC4rLS0tLS1bQS1aYS16MC05Ky8rPVxcc1xcbl0rLS0tLS1FTkQgListLS0tLS9pLnRlc3QoZGF0YSk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRUYWdOYW1lKHBlbSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNQRU0ocGVtKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFkIHBhcmFtZXRlci4gSW5jb21pbmcgZGF0YSBpcyBub3QgcmlnaHQgUEVNXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IC8tLS0tLUJFR0lOICguKyktLS0tLS8uZXhlYyhwZW0pO1xuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGdldCB0YWcgZnJvbSBQRU1cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1sxXTtcbiAgICB9XG4gICAgc3RhdGljIGhhc1RhZ05hbWUocGVtLCB0YWdOYW1lKSB7XG4gICAgICAgIGNvbnN0IHRhZyA9IHRoaXMuZ2V0VGFnTmFtZShwZW0pO1xuICAgICAgICByZXR1cm4gdGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSB0YWcudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQ2VydGlmaWNhdGUocGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc1RhZ05hbWUocGVtLCBcImNlcnRpZmljYXRlXCIpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNDZXJ0aWZpY2F0ZVJlcXVlc3QocGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc1RhZ05hbWUocGVtLCBcImNlcnRpZmljYXRlIHJlcXVlc3RcIik7XG4gICAgfVxuICAgIHN0YXRpYyBpc0NSTChwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwieDUwOSBjcmxcIik7XG4gICAgfVxuICAgIHN0YXRpYyBpc1B1YmxpY0tleShwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwicHVibGljIGtleVwiKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzSldLKGRhdGEpIHtcbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgXCJrdHlcIiBpbiBkYXRhO1xufVxuXG5jbGFzcyBQcm92aWRlckNyeXB0byB7XG4gICAgYXN5bmMgZGlnZXN0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0RpZ2VzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25EaWdlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRGlnZXN0KGFsZ29yaXRobSwgX2RhdGEpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoX2FsZ29yaXRobSwgX2RhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJkaWdlc3RcIik7XG4gICAgfVxuICAgIGFzeW5jIGdlbmVyYXRlS2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0dlbmVyYXRlS2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkdlbmVyYXRlS2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5KGFsZ29yaXRobSwgX2V4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICBpZiAoIShrZXlVc2FnZXMgJiYga2V5VXNhZ2VzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVzYWdlcyBjYW5ub3QgYmUgZW1wdHkgd2hlbiBjcmVhdGluZyBhIGtleS5gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWxsb3dlZFVzYWdlcztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51c2FnZXMpKSB7XG4gICAgICAgICAgICBhbGxvd2VkVXNhZ2VzID0gdGhpcy51c2FnZXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhbGxvd2VkVXNhZ2VzID0gdGhpcy51c2FnZXMucHJpdmF0ZUtleS5jb25jYXQodGhpcy51c2FnZXMucHVibGljS2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrS2V5VXNhZ2VzKGtleVVzYWdlcywgYWxsb3dlZFVzYWdlcyk7XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KF9hbGdvcml0aG0sIF9leHRyYWN0YWJsZSwgX2tleVVzYWdlcywgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJnZW5lcmF0ZUtleVwiKTtcbiAgICB9XG4gICAgYXN5bmMgc2lnbiguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tTaWduLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vblNpZ24uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrU2lnbihhbGdvcml0aG0sIGtleSwgX2RhdGEsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXksIFwic2lnblwiKTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKF9hbGdvcml0aG0sIF9rZXksIF9kYXRhLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcInNpZ25cIik7XG4gICAgfVxuICAgIGFzeW5jIHZlcmlmeSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tWZXJpZnkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uVmVyaWZ5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja1ZlcmlmeShhbGdvcml0aG0sIGtleSwgX3NpZ25hdHVyZSwgX2RhdGEsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXksIFwidmVyaWZ5XCIpO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShfYWxnb3JpdGhtLCBfa2V5LCBfc2lnbmF0dXJlLCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJ2ZXJpZnlcIik7XG4gICAgfVxuICAgIGFzeW5jIGVuY3J5cHQoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRW5jcnlwdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25FbmNyeXB0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0VuY3J5cHQoYWxnb3JpdGhtLCBrZXksIF9kYXRhLCBvcHRpb25zID0ge30sIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXksIG9wdGlvbnMua2V5VXNhZ2UgPyBcImVuY3J5cHRcIiA6IHZvaWQgMCk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChfYWxnb3JpdGhtLCBfa2V5LCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJlbmNyeXB0XCIpO1xuICAgIH1cbiAgICBhc3luYyBkZWNyeXB0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0RlY3J5cHQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uRGVjcnlwdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEZWNyeXB0KGFsZ29yaXRobSwga2V5LCBfZGF0YSwgb3B0aW9ucyA9IHt9LCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5LCBvcHRpb25zLmtleVVzYWdlID8gXCJkZWNyeXB0XCIgOiB2b2lkIDApO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoX2FsZ29yaXRobSwgX2tleSwgX2RhdGEsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZGVjcnlwdFwiKTtcbiAgICB9XG4gICAgYXN5bmMgZGVyaXZlQml0cyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tEZXJpdmVCaXRzLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkRlcml2ZUJpdHMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCwgb3B0aW9ucyA9IHt9LCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoYmFzZUtleSwgb3B0aW9ucy5rZXlVc2FnZSA/IFwiZGVyaXZlQml0c1wiIDogdm9pZCAwKTtcbiAgICAgICAgaWYgKGxlbmd0aCAlIDggIT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcImxlbmd0aDogSXMgbm90IG11bHRpcGxlIG9mIDhcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKF9hbGdvcml0aG0sIF9iYXNlS2V5LCBfbGVuZ3RoLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImRlcml2ZUJpdHNcIik7XG4gICAgfVxuICAgIGFzeW5jIGV4cG9ydEtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tFeHBvcnRLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uRXhwb3J0S2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0V4cG9ydEtleShmb3JtYXQsIGtleSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0tleUZvcm1hdChmb3JtYXQpO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICgha2V5LmV4dHJhY3RhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ3J5cHRvRXJyb3IoXCJrZXk6IElzIG5vdCBleHRyYWN0YWJsZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShfZm9ybWF0LCBfa2V5LCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImV4cG9ydEtleVwiKTtcbiAgICB9XG4gICAgYXN5bmMgaW1wb3J0S2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0ltcG9ydEtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25JbXBvcnRLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBfZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0tleUZvcm1hdChmb3JtYXQpO1xuICAgICAgICB0aGlzLmNoZWNrS2V5RGF0YShmb3JtYXQsIGtleURhdGEpO1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrSW1wb3J0UGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudXNhZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0tleVVzYWdlcyhrZXlVc2FnZXMsIHRoaXMudXNhZ2VzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShfZm9ybWF0LCBfa2V5RGF0YSwgX2FsZ29yaXRobSwgX2V4dHJhY3RhYmxlLCBfa2V5VXNhZ2VzLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImltcG9ydEtleVwiKTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSkge1xuICAgICAgICBpZiAoYWxnb3JpdGhtLm5hbWUudG9Mb3dlckNhc2UoKSAhPT0gdGhpcy5uYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBbGdvcml0aG1FcnJvcihcIlVucmVjb2duaXplZCBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKF9hbGdvcml0aG0pIHtcbiAgICB9XG4gICAgY2hlY2tEZXJpdmVkS2V5UGFyYW1zKF9hbGdvcml0aG0pIHtcbiAgICB9XG4gICAgY2hlY2tLZXlVc2FnZXModXNhZ2VzLCBhbGxvd2VkKSB7XG4gICAgICAgIGZvciAoY29uc3QgdXNhZ2Ugb2YgdXNhZ2VzKSB7XG4gICAgICAgICAgICBpZiAoYWxsb3dlZC5pbmRleE9mKHVzYWdlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNyZWF0ZSBhIGtleSB1c2luZyB0aGUgc3BlY2lmaWVkIGtleSB1c2FnZXNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShrZXkuYWxnb3JpdGhtKTtcbiAgICAgICAgaWYgKGtleVVzYWdlICYmIGtleS51c2FnZXMuaW5kZXhPZihrZXlVc2FnZSkgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ3J5cHRvRXJyb3IoYGtleSBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIG9wZXJhdGlvbmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrUmVxdWlyZWRQcm9wZXJ0eShkYXRhLCBwcm9wTmFtZSkge1xuICAgICAgICBpZiAoIShwcm9wTmFtZSBpbiBkYXRhKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlcXVpcmVkUHJvcGVydHlFcnJvcihwcm9wTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobSwgaGFzaEFsZ29yaXRobXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGhhc2hBbGdvcml0aG1zKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS50b0xvd2VyQ2FzZSgpID09PSBhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihgaGFzaDogTXVzdCBiZSBvbmUgb2YgJHtoYXNoQWxnb3JpdGhtcy5qb2luKFwiLCBcIil9YCk7XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0UGFyYW1zKF9hbGdvcml0aG0pIHtcbiAgICB9XG4gICAgY2hlY2tLZXlGb3JtYXQoZm9ybWF0KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJmb3JtYXQ6IElzIGludmFsaWQgdmFsdWUuIE11c3QgYmUgJ2p3aycsICdyYXcnLCAnc3BraScsIG9yICdwa2NzOCdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tLZXlEYXRhKGZvcm1hdCwga2V5RGF0YSkge1xuICAgICAgICBpZiAoIWtleURhdGEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXlEYXRhOiBDYW5ub3QgYmUgZW1wdHkgb24gZW1wdHkgb24ga2V5IGltcG9ydGluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImp3a1wiKSB7XG4gICAgICAgICAgICBpZiAoIWlzSldLKGtleURhdGEpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleURhdGE6IElzIG5vdCBKc29uV2ViVG9rZW5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIUJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShrZXlEYXRhKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleURhdGE6IElzIG5vdCBBcnJheUJ1ZmZlclZpZXcgb3IgQXJyYXlCdWZmZXJcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJlcGFyZURhdGEoZGF0YSkge1xuICAgICAgICByZXR1cm4gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBBZXNQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBvZiB0eXBlIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMTI4OlxuICAgICAgICAgICAgY2FzZSAxOTI6XG4gICAgICAgICAgICBjYXNlIDI1NjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogTXVzdCBiZSAxMjgsIDE5Miwgb3IgMjU2XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrRGVyaXZlZEtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSk7XG4gICAgfVxufVxuXG5jbGFzcyBBZXNDYmNQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtQ0JDXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIml2XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0uaXYgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLml2KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdjogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLml2LmJ5dGVMZW5ndGggIT09IDE2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IE11c3QgaGF2ZSBsZW5ndGggMTYgYnl0ZXNcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0NtYWNQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtQ01BQ1wiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcInNpZ25cIiwgXCJ2ZXJpZnlcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcImxlbmd0aDogTXVzdCBiZSBtb3JlIHRoYW4gMFwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzQ3RyUHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUNUUlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJjb3VudGVyXCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0uY291bnRlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0uY291bnRlcikpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY291bnRlcjogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmNvdW50ZXIuYnl0ZUxlbmd0aCAhPT0gMTYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdjogTXVzdCBoYXZlIGxlbmd0aCAxNiBieXRlc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcImxlbmd0aDogTXVzdCBiZSBtb3JlIHRoYW4gMFwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzRWNiUHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUVDQlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG59XG5cbmNsYXNzIEFlc0djbVByb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1HQ01cIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJlbmNyeXB0XCIsIFwiZGVjcnlwdFwiLCBcIndyYXBLZXlcIiwgXCJ1bndyYXBLZXlcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJpdlwiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLml2IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5pdikpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5pdi5ieXRlTGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwiaXY6IE11c3QgaGF2ZSBsZW5ndGggbW9yZSB0aGFuIDAgYW5kIGxlc3MgdGhhbiAyXjY0IC0gMVwiKTtcbiAgICAgICAgfVxuICAgICAgICAoX2EgPSBhbGdvcml0aG0udGFnTGVuZ3RoKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoYWxnb3JpdGhtLnRhZ0xlbmd0aCA9IDEyOCk7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLnRhZ0xlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICBjYXNlIDk2OlxuICAgICAgICAgICAgY2FzZSAxMDQ6XG4gICAgICAgICAgICBjYXNlIDExMjpcbiAgICAgICAgICAgIGNhc2UgMTIwOlxuICAgICAgICAgICAgY2FzZSAxMjg6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcInRhZ0xlbmd0aDogTXVzdCBiZSBvbmUgb2YgMzIsIDY0LCA5NiwgMTA0LCAxMTIsIDEyMCBvciAxMjhcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0t3UHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUtXXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG59XG5cbmNsYXNzIERlc1Byb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIGlmICh0aGlzLml2U2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIml2XCIpO1xuICAgICAgICAgICAgaWYgKCEoYWxnb3JpdGhtLml2IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5pdikpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsZ29yaXRobS5pdi5ieXRlTGVuZ3RoICE9PSB0aGlzLml2U2l6ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGl2OiBNdXN0IGhhdmUgbGVuZ3RoICR7dGhpcy5pdlNpemV9IGJ5dGVzYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImxlbmd0aFwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhbGdvcml0aG0ubGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBJcyBub3Qgb2YgdHlwZSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5sZW5ndGggIT09IHRoaXMua2V5U2l6ZUJpdHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihgYWxnb3JpdGhtLmxlbmd0aDogTXVzdCBiZSAke3RoaXMua2V5U2l6ZUJpdHN9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tEZXJpdmVkS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYVByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJwdWJsaWNFeHBvbmVudFwiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50ICYmIGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicHVibGljRXhwb25lbnQ6IE1pc3Npbmcgb3Igbm90IGEgVWludDhBcnJheVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdWJsaWNFeHBvbmVudCA9IENvbnZlcnQuVG9CYXNlNjQoYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KTtcbiAgICAgICAgaWYgKCEocHVibGljRXhwb25lbnQgPT09IFwiQXc9PVwiIHx8IHB1YmxpY0V4cG9uZW50ID09PSBcIkFRQUJcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWNFeHBvbmVudDogTXVzdCBiZSBbM10gb3IgWzEsMCwxXVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibW9kdWx1c0xlbmd0aFwiKTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoICUgOFxuICAgICAgICAgICAgfHwgYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPCAyNTZcbiAgICAgICAgICAgIHx8IGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoID4gMTYzODQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgbW9kdWx1cyBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDggYml0cyBhbmQgPj0gMjU2IGFuZCA8PSAxNjM4NFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydFBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYVNzYVByb3ZpZGVyIGV4dGVuZHMgUnNhUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJTQVNTQS1QS0NTMS12MV81XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHNzUHJvdmlkZXIgZXh0ZW5kcyBSc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUlNBLVBTU1wiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcInNpZ25cIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcInZlcmlmeVwiXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJzYWx0TGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5zYWx0TGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdExlbmd0aDogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uc2FsdExlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwic2FsdExlbmd0aDogTXVzdCBiZSBwb3NpdGl2ZSBudW1iZXJcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFJzYU9hZXBQcm92aWRlciBleHRlbmRzIFJzYVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSU0EtT0FFUFwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcImRlY3J5cHRcIiwgXCJ1bndyYXBLZXlcIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcImVuY3J5cHRcIiwgXCJ3cmFwS2V5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5sYWJlbFxuICAgICAgICAgICAgJiYgIShhbGdvcml0aG0ubGFiZWwgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLmxhYmVsKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsYWJlbDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgRWxsaXB0aWNQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibmFtZWRDdXJ2ZVwiKTtcbiAgICAgICAgdGhpcy5jaGVja05hbWVkQ3VydmUoYWxnb3JpdGhtLm5hbWVkQ3VydmUpO1xuICAgIH1cbiAgICBjaGVja05hbWVkQ3VydmUobmFtZWRDdXJ2ZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5uYW1lZEN1cnZlcykge1xuICAgICAgICAgICAgaWYgKGl0ZW0udG9Mb3dlckNhc2UoKSA9PT0gbmFtZWRDdXJ2ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihgbmFtZWRDdXJ2ZTogTXVzdCBiZSBvbmUgb2YgJHt0aGlzLm5hbWVkQ3VydmVzLmpvaW4oXCIsIFwiKX1gKTtcbiAgICB9XG59XG5cbmNsYXNzIEVjZHNhUHJvdmlkZXIgZXh0ZW5kcyBFbGxpcHRpY1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFQ0RTQVwiO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gW1wiUC0yNTZcIiwgXCJQLTM4NFwiLCBcIlAtNTIxXCIsIFwiSy0yNTZcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgIH1cbn1cblxuY29uc3QgS0VZX1RZUEVTID0gW1wic2VjcmV0XCIsIFwicHJpdmF0ZVwiLCBcInB1YmxpY1wiXTtcbmNsYXNzIENyeXB0b0tleSB7XG4gICAgc3RhdGljIGNyZWF0ZShhbGdvcml0aG0sIHR5cGUsIGV4dHJhY3RhYmxlLCB1c2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IHRoaXMoKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAga2V5LnR5cGUgPSB0eXBlO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IHVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGlzS2V5VHlwZShkYXRhKSB7XG4gICAgICAgIHJldHVybiBLRVlfVFlQRVMuaW5kZXhPZihkYXRhKSAhPT0gLTE7XG4gICAgfVxuICAgIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICAgICAgcmV0dXJuIFwiQ3J5cHRvS2V5XCI7XG4gICAgfVxufVxuXG5jbGFzcyBFY2RoUHJvdmlkZXIgZXh0ZW5kcyBFbGxpcHRpY1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFQ0RIXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wiZGVyaXZlQml0c1wiLCBcImRlcml2ZUtleVwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW10sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBbXCJQLTI1NlwiLCBcIlAtMzg0XCIsIFwiUC01MjFcIiwgXCJLLTI1NlwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJwdWJsaWNcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5wdWJsaWMgaW5zdGFuY2VvZiBDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicHVibGljOiBJcyBub3QgYSBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5wdWJsaWMudHlwZSAhPT0gXCJwdWJsaWNcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwicHVibGljOiBJcyBub3QgYSBwdWJsaWMga2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0ucHVibGljLmFsZ29yaXRobS5uYW1lICE9PSB0aGlzLm5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihgcHVibGljOiBJcyBub3QgJHt0aGlzLm5hbWV9IGtleWApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBFY2RoRXNQcm92aWRlciBleHRlbmRzIEVjZGhQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiRUNESC1FU1wiO1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gW1wiWDI1NTE5XCIsIFwiWDQ0OFwiXTtcbiAgICB9XG59XG5cbmNsYXNzIEVkRHNhUHJvdmlkZXIgZXh0ZW5kcyBFbGxpcHRpY1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFZERTQVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcInNpZ25cIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcInZlcmlmeVwiXSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IFtcIkVkMjU1MTlcIiwgXCJFZDQ0OFwiXTtcbiAgICB9XG59XG5cbmxldCBPYmplY3RJZGVudGlmaWVyID0gY2xhc3MgT2JqZWN0SWRlbnRpZmllciB7XG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59O1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PYmplY3RJZGVudGlmaWVyIH0pXG5dLCBPYmplY3RJZGVudGlmaWVyLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuT2JqZWN0SWRlbnRpZmllciA9IF9fZGVjb3JhdGUoW1xuICAgIEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pXG5dLCBPYmplY3RJZGVudGlmaWVyKTtcblxuY2xhc3MgQWxnb3JpdGhtSWRlbnRpZmllciB7XG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgcGFyYW1zKTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHtcbiAgICAgICAgdHlwZTogQXNuUHJvcFR5cGVzLk9iamVjdElkZW50aWZpZXIsXG4gICAgfSlcbl0sIEFsZ29yaXRobUlkZW50aWZpZXIucHJvdG90eXBlLCBcImFsZ29yaXRobVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7XG4gICAgICAgIHR5cGU6IEFzblByb3BUeXBlcy5BbnksXG4gICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgIH0pXG5dLCBBbGdvcml0aG1JZGVudGlmaWVyLnByb3RvdHlwZSwgXCJwYXJhbWV0ZXJzXCIsIHZvaWQgMCk7XG5cbmNsYXNzIFByaXZhdGVLZXlJbmZvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gMDtcbiAgICAgICAgdGhpcy5wcml2YXRlS2V5QWxnb3JpdGhtID0gbmV3IEFsZ29yaXRobUlkZW50aWZpZXIoKTtcbiAgICAgICAgdGhpcy5wcml2YXRlS2V5ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciB9KVxuXSwgUHJpdmF0ZUtleUluZm8ucHJvdG90eXBlLCBcInZlcnNpb25cIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBbGdvcml0aG1JZGVudGlmaWVyIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwicHJpdmF0ZUtleUFsZ29yaXRobVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PY3RldFN0cmluZyB9KVxuXSwgUHJpdmF0ZUtleUluZm8ucHJvdG90eXBlLCBcInByaXZhdGVLZXlcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuQW55LCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgUHJpdmF0ZUtleUluZm8ucHJvdG90eXBlLCBcImF0dHJpYnV0ZXNcIiwgdm9pZCAwKTtcblxuY2xhc3MgUHVibGljS2V5SW5mbyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucHVibGljS2V5QWxnb3JpdGhtID0gbmV3IEFsZ29yaXRobUlkZW50aWZpZXIoKTtcbiAgICAgICAgdGhpcy5wdWJsaWNLZXkgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFsZ29yaXRobUlkZW50aWZpZXIgfSlcbl0sIFB1YmxpY0tleUluZm8ucHJvdG90eXBlLCBcInB1YmxpY0tleUFsZ29yaXRobVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5CaXRTdHJpbmcgfSlcbl0sIFB1YmxpY0tleUluZm8ucHJvdG90eXBlLCBcInB1YmxpY0tleVwiLCB2b2lkIDApO1xuXG5jb25zdCBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUpTT046ICh2YWx1ZSkgPT4gQ29udmVydC5Gcm9tQmFzZTY0VXJsKHZhbHVlKSxcbiAgICB0b0pTT046ICh2YWx1ZSkgPT4gQ29udmVydC5Ub0Jhc2U2NFVybChuZXcgVWludDhBcnJheSh2YWx1ZSkpLFxufTtcblxuY29uc3QgQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZUhleCA9IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgICAgIHJldHVybiAhKG5ldyBVaW50OEFycmF5KHZhbHVlSGV4KVswXSlcbiAgICAgICAgICAgID8gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleC5zbGljZSgxKVxuICAgICAgICAgICAgOiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4O1xuICAgIH0sXG4gICAgdG9BU046ICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZUhleCA9IG5ldyBVaW50OEFycmF5KHZhbHVlKVswXSA+IDEyN1xuICAgICAgICAgICAgPyBjb21iaW5lKG5ldyBVaW50OEFycmF5KFswXSkuYnVmZmVyLCB2YWx1ZSlcbiAgICAgICAgICAgIDogdmFsdWU7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMS5JbnRlZ2VyKHsgdmFsdWVIZXggfSk7XG4gICAgfSxcbn07XG5cbnZhciBpbmRleCQzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyLFxuICBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlclxufSk7XG5cbmNsYXNzIFJzYVByaXZhdGVLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZlcnNpb24gPSAwO1xuICAgICAgICB0aGlzLm1vZHVsdXMgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHVibGljRXhwb25lbnQgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHJpdmF0ZUV4cG9uZW50ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLnByaW1lMSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5wcmltZTIgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMuZXhwb25lbnQxID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLmV4cG9uZW50MiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5jb2VmZmljaWVudCA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwidmVyc2lvblwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiblwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwibW9kdWx1c1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZVwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHVibGljRXhwb25lbnRcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImRcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcInByaXZhdGVFeHBvbmVudFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwicFwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHJpbWUxXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJxXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwcmltZTJcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImRwXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJleHBvbmVudDFcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImRxXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJleHBvbmVudDJcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcInFpXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJjb2VmZmljaWVudFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5BbnksIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJvdGhlclByaW1lSW5mb3NcIiwgdm9pZCAwKTtcblxuY2xhc3MgUnNhUHVibGljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tb2R1bHVzID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLnB1YmxpY0V4cG9uZW50ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcIm5cIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVB1YmxpY0tleS5wcm90b3R5cGUsIFwibW9kdWx1c1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZVwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHVibGljS2V5LnByb3RvdHlwZSwgXCJwdWJsaWNFeHBvbmVudFwiLCB2b2lkIDApO1xuXG5sZXQgRWNQdWJsaWNLZXkgPSBjbGFzcyBFY1B1YmxpY0tleSB7XG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlKTtcbiAgICAgICAgaWYgKGJ5dGVzWzBdICE9PSAweDA0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ3J5cHRvRXJyb3IoXCJXcm9uZyBFQ1BvaW50LiBDdXJyZW50IHZlcnNpb24gc3VwcG9ydHMgb25seSBVbmNvbXByZXNzZWQgKDB4MDQpIHBvaW50XCIpO1xuICAgICAgICB9XG4gICAgICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZS5zbGljZSgxKSk7XG4gICAgICAgIGNvbnN0IHNpemUgPSBieXRlcy5sZW5ndGggLyAyO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSAwO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAgeDogQ29udmVydC5Ub0Jhc2U2NFVybChieXRlcy5idWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzaXplKSksXG4gICAgICAgICAgICB5OiBDb252ZXJ0LlRvQmFzZTY0VXJsKGJ5dGVzLmJ1ZmZlci5zbGljZShvZmZzZXQgKyBzaXplLCBvZmZzZXQgKyBzaXplICsgc2l6ZSkpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIShcInhcIiBpbiBqc29uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwieDogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShcInlcIiBpbiBqc29uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwieTogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4ID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24ueCk7XG4gICAgICAgIGNvbnN0IHkgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi55KTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb21iaW5lKG5ldyBVaW50OEFycmF5KFsweDA0XSkuYnVmZmVyLCB4LCB5KTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBVaW50OEFycmF5KHZhbHVlKS5idWZmZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBFY1B1YmxpY0tleS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbkVjUHVibGljS2V5ID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIEVjUHVibGljS2V5KTtcblxuY2xhc3MgRWNQcml2YXRlS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gMTtcbiAgICAgICAgdGhpcy5wcml2YXRlS2V5ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghKFwiZFwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkOiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJpdmF0ZUtleSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLmQpO1xuICAgICAgICBpZiAoXCJ4XCIgaW4ganNvbikge1xuICAgICAgICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IEVjUHVibGljS2V5KCk7XG4gICAgICAgICAgICBwdWJsaWNLZXkuZnJvbUpTT04oanNvbik7XG4gICAgICAgICAgICBjb25zdCBhc24gPSBBc25TZXJpYWxpemVyLnRvQVNOKHB1YmxpY0tleSk7XG4gICAgICAgICAgICBpZiAoXCJ2YWx1ZUhleFwiIGluIGFzbi52YWx1ZUJsb2NrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdWJsaWNLZXkgPSBhc24udmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBqd2sgPSB7fTtcbiAgICAgICAgandrLmQgPSBDb252ZXJ0LlRvQmFzZTY0VXJsKHRoaXMucHJpdmF0ZUtleSk7XG4gICAgICAgIGlmICh0aGlzLnB1YmxpY0tleSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqd2ssIG5ldyBFY1B1YmxpY0tleSh0aGlzLnB1YmxpY0tleSkudG9KU09OKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqd2s7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJDb252ZXJ0ZXIgfSlcbl0sIEVjUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwidmVyc2lvblwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PY3RldFN0cmluZyB9KVxuXSwgRWNQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwcml2YXRlS2V5XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgY29udGV4dDogMCwgdHlwZTogQXNuUHJvcFR5cGVzLkFueSwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIEVjUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicGFyYW1ldGVyc1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IGNvbnRleHQ6IDEsIHR5cGU6IEFzblByb3BUeXBlcy5CaXRTdHJpbmcsIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBFY1ByaXZhdGVLZXkucHJvdG90eXBlLCBcInB1YmxpY0tleVwiLCB2b2lkIDApO1xuXG5jb25zdCBBc25JbnRlZ2VyV2l0aG91dFBhZGRpbmdDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUudmFsdWVCbG9jay52YWx1ZUhleCk7XG4gICAgICAgIHJldHVybiAoYnl0ZXNbMF0gPT09IDApXG4gICAgICAgICAgICA/IGJ5dGVzLmJ1ZmZlci5zbGljZSgxKVxuICAgICAgICAgICAgOiBieXRlcy5idWZmZXI7XG4gICAgfSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpO1xuICAgICAgICBpZiAoYnl0ZXNbMF0gPiAxMjcpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMubGVuZ3RoICsgMSk7XG4gICAgICAgICAgICBuZXdWYWx1ZS5zZXQoYnl0ZXMsIDEpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xLkludGVnZXIoeyB2YWx1ZUhleDogbmV3VmFsdWUuYnVmZmVyIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgYXNuMS5JbnRlZ2VyKHsgdmFsdWVIZXg6IHZhbHVlIH0pO1xuICAgIH0sXG59O1xuXG52YXIgaW5kZXgkMiA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBBc25JbnRlZ2VyV2l0aG91dFBhZGRpbmdDb252ZXJ0ZXI6IEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlclxufSk7XG5cbmNsYXNzIEVjVXRpbHMge1xuICAgIHN0YXRpYyBkZWNvZGVQb2ludChkYXRhLCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3QgdmlldyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoZGF0YSk7XG4gICAgICAgIGlmICgodmlldy5sZW5ndGggPT09IDApIHx8ICh2aWV3WzBdICE9PSA0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT25seSB1bmNvbXByZXNzZWQgcG9pbnQgZm9ybWF0IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuID0gKHZpZXcubGVuZ3RoIC0gMSkgLyAyO1xuICAgICAgICBpZiAobiAhPT0gKE1hdGguY2VpbChwb2ludFNpemUgLyA4KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBvaW50IGRvZXMgbm90IG1hdGNoIGZpZWxkIHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeGIgPSB2aWV3LnNsaWNlKDEsIG4gKyAxKTtcbiAgICAgICAgY29uc3QgeWIgPSB2aWV3LnNsaWNlKG4gKyAxLCBuICsgMSArIG4pO1xuICAgICAgICByZXR1cm4geyB4OiB4YiwgeTogeWIgfTtcbiAgICB9XG4gICAgc3RhdGljIGVuY29kZVBvaW50KHBvaW50LCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IE1hdGguY2VpbChwb2ludFNpemUgLyA4KTtcbiAgICAgICAgaWYgKHBvaW50LnguYnl0ZUxlbmd0aCAhPT0gc2l6ZSB8fCBwb2ludC55LmJ5dGVMZW5ndGggIT09IHNpemUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlgsWSBjb29yZGluYXRlcyBkb24ndCBtYXRjaCBwb2ludCBzaXplIGNyaXRlcmlhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHggPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBvaW50LngpO1xuICAgICAgICBjb25zdCB5ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShwb2ludC55KTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSAqIDIgKyAxKTtcbiAgICAgICAgcmVzWzBdID0gNDtcbiAgICAgICAgcmVzLnNldCh4LCAxKTtcbiAgICAgICAgcmVzLnNldCh5LCBzaXplICsgMSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRTaXplKHBvaW50U2l6ZSkge1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHBvaW50U2l6ZSAvIDgpO1xuICAgIH1cbiAgICBzdGF0aWMgZW5jb2RlU2lnbmF0dXJlKHNpZ25hdHVyZSwgcG9pbnRTaXplKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLmdldFNpemUocG9pbnRTaXplKTtcbiAgICAgICAgY29uc3QgciA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoc2lnbmF0dXJlLnIpO1xuICAgICAgICBjb25zdCBzID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShzaWduYXR1cmUucyk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHNpemUgKiAyKTtcbiAgICAgICAgcmVzLnNldCh0aGlzLnBhZFN0YXJ0KHIsIHNpemUpKTtcbiAgICAgICAgcmVzLnNldCh0aGlzLnBhZFN0YXJ0KHMsIHNpemUpLCBzaXplKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGRlY29kZVNpZ25hdHVyZShkYXRhLCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuZ2V0U2l6ZShwb2ludFNpemUpO1xuICAgICAgICBjb25zdCB2aWV3ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShkYXRhKTtcbiAgICAgICAgaWYgKHZpZXcubGVuZ3RoICE9PSAoc2l6ZSAqIDIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNvcnJlY3Qgc2l6ZSBvZiB0aGUgc2lnbmF0dXJlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIgPSB2aWV3LnNsaWNlKDAsIHNpemUpO1xuICAgICAgICBjb25zdCBzID0gdmlldy5zbGljZShzaXplKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHRoaXMudHJpbVN0YXJ0KHIpLFxuICAgICAgICAgICAgczogdGhpcy50cmltU3RhcnQocyksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyB0cmltU3RhcnQoZGF0YSkge1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIHdoaWxlICgoaSA8IGRhdGEubGVuZ3RoIC0gMSkgJiYgKGRhdGFbaV0gPT09IDApKSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhLnNsaWNlKGksIGRhdGEubGVuZ3RoKTtcbiAgICB9XG4gICAgc3RhdGljIHBhZFN0YXJ0KGRhdGEsIHNpemUpIHtcbiAgICAgICAgaWYgKHNpemUgPT09IGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShzaXplKTtcbiAgICAgICAgcmVzLnNldChkYXRhLCBzaXplIC0gZGF0YS5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cblxuY2xhc3MgRWNEc2FTaWduYXR1cmUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnIgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucyA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21XZWJDcnlwdG9TaWduYXR1cmUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgcG9pbnRTaXplID0gdmFsdWUuYnl0ZUxlbmd0aCAvIDI7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gRWNVdGlscy5kZWNvZGVTaWduYXR1cmUodmFsdWUsIHBvaW50U2l6ZSAqIDgpO1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZSA9IG5ldyBFY0RzYVNpZ25hdHVyZSgpO1xuICAgICAgICBlY1NpZ25hdHVyZS5yID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIocG9pbnQucik7XG4gICAgICAgIGVjU2lnbmF0dXJlLnMgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihwb2ludC5zKTtcbiAgICAgICAgcmV0dXJuIGVjU2lnbmF0dXJlO1xuICAgIH1cbiAgICB0b1dlYkNyeXB0b1NpZ25hdHVyZShwb2ludFNpemUpIHtcbiAgICAgICAgaWYgKCFwb2ludFNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heFBvaW50TGVuZ3RoID0gTWF0aC5tYXgodGhpcy5yLmJ5dGVMZW5ndGgsIHRoaXMucy5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgIGlmIChtYXhQb2ludExlbmd0aCA8PSAzMikge1xuICAgICAgICAgICAgICAgIHBvaW50U2l6ZSA9IDI1NjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1heFBvaW50TGVuZ3RoIDw9IDQ4KSB7XG4gICAgICAgICAgICAgICAgcG9pbnRTaXplID0gMzg0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcG9pbnRTaXplID0gNTIxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IEVjVXRpbHMuZW5jb2RlU2lnbmF0dXJlKHRoaXMsIHBvaW50U2l6ZSk7XG4gICAgICAgIHJldHVybiBzaWduYXR1cmUuYnVmZmVyO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyV2l0aG91dFBhZGRpbmdDb252ZXJ0ZXIgfSlcbl0sIEVjRHNhU2lnbmF0dXJlLnByb3RvdHlwZSwgXCJyXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlcldpdGhvdXRQYWRkaW5nQ29udmVydGVyIH0pXG5dLCBFY0RzYVNpZ25hdHVyZS5wcm90b3R5cGUsIFwic1wiLCB2b2lkIDApO1xuXG5jbGFzcyBPbmVBc3ltbWV0cmljS2V5IGV4dGVuZHMgUHJpdmF0ZUtleUluZm8ge1xufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IGNvbnRleHQ6IDEsIGltcGxpY2l0OiB0cnVlLCB0eXBlOiBBc25Qcm9wVHlwZXMuQml0U3RyaW5nLCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgT25lQXN5bW1ldHJpY0tleS5wcm90b3R5cGUsIFwicHVibGljS2V5XCIsIHZvaWQgMCk7XG5cbmxldCBFZFByaXZhdGVLZXkgPSBjbGFzcyBFZFByaXZhdGVLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkOiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi5kKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QgandrID0ge1xuICAgICAgICAgICAgZDogQ29udmVydC5Ub0Jhc2U2NFVybCh0aGlzLnZhbHVlKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGp3aztcbiAgICB9XG59O1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PY3RldFN0cmluZyB9KVxuXSwgRWRQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuRWRQcml2YXRlS2V5ID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIEVkUHJpdmF0ZUtleSk7XG5cbmxldCBFZFB1YmxpY0tleSA9IGNsYXNzIEVkUHVibGljS2V5IHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICB4OiBDb252ZXJ0LlRvQmFzZTY0VXJsKHRoaXMudmFsdWUpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIShcInhcIiBpbiBqc29uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwieDogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24ueCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZyB9KVxuXSwgRWRQdWJsaWNLZXkucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5FZFB1YmxpY0tleSA9IF9fZGVjb3JhdGUoW1xuICAgIEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pXG5dLCBFZFB1YmxpY0tleSk7XG5cbmxldCBDdXJ2ZVByaXZhdGVLZXkgPSBjbGFzcyBDdXJ2ZVByaXZhdGVLZXkge1xufTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmcgfSksXG4gICAgSnNvblByb3AoeyB0eXBlOiBKc29uUHJvcFR5cGVzLlN0cmluZywgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIEN1cnZlUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwiZFwiLCB2b2lkIDApO1xuQ3VydmVQcml2YXRlS2V5ID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIEN1cnZlUHJpdmF0ZUtleSk7XG5cbmNvbnN0IGlkU2VjcDI1NnIxID0gXCIxLjIuODQwLjEwMDQ1LjMuMS43XCI7XG5jb25zdCBpZEVsbGlwdGljQ3VydmUgPSBcIjEuMy4xMzIuMFwiO1xuY29uc3QgaWRTZWNwMzg0cjEgPSBgJHtpZEVsbGlwdGljQ3VydmV9LjM0YDtcbmNvbnN0IGlkU2VjcDUyMXIxID0gYCR7aWRFbGxpcHRpY0N1cnZlfS4zNWA7XG5jb25zdCBpZFNlY3AyNTZrMSA9IGAke2lkRWxsaXB0aWNDdXJ2ZX0uMTBgO1xuY29uc3QgaWRWZXJzaW9uT25lID0gXCIxLjMuMzYuMy4zLjIuOC4xLjFcIjtcbmNvbnN0IGlkQnJhaW5wb29sUDE2MHIxID0gYCR7aWRWZXJzaW9uT25lfS4xYDtcbmNvbnN0IGlkQnJhaW5wb29sUDE2MHQxID0gYCR7aWRWZXJzaW9uT25lfS4yYDtcbmNvbnN0IGlkQnJhaW5wb29sUDE5MnIxID0gYCR7aWRWZXJzaW9uT25lfS4zYDtcbmNvbnN0IGlkQnJhaW5wb29sUDE5MnQxID0gYCR7aWRWZXJzaW9uT25lfS40YDtcbmNvbnN0IGlkQnJhaW5wb29sUDIyNHIxID0gYCR7aWRWZXJzaW9uT25lfS41YDtcbmNvbnN0IGlkQnJhaW5wb29sUDIyNHQxID0gYCR7aWRWZXJzaW9uT25lfS42YDtcbmNvbnN0IGlkQnJhaW5wb29sUDI1NnIxID0gYCR7aWRWZXJzaW9uT25lfS43YDtcbmNvbnN0IGlkQnJhaW5wb29sUDI1NnQxID0gYCR7aWRWZXJzaW9uT25lfS44YDtcbmNvbnN0IGlkQnJhaW5wb29sUDMyMHIxID0gYCR7aWRWZXJzaW9uT25lfS45YDtcbmNvbnN0IGlkQnJhaW5wb29sUDMyMHQxID0gYCR7aWRWZXJzaW9uT25lfS4xMGA7XG5jb25zdCBpZEJyYWlucG9vbFAzODRyMSA9IGAke2lkVmVyc2lvbk9uZX0uMTFgO1xuY29uc3QgaWRCcmFpbnBvb2xQMzg0dDEgPSBgJHtpZFZlcnNpb25PbmV9LjEyYDtcbmNvbnN0IGlkQnJhaW5wb29sUDUxMnIxID0gYCR7aWRWZXJzaW9uT25lfS4xM2A7XG5jb25zdCBpZEJyYWlucG9vbFA1MTJ0MSA9IGAke2lkVmVyc2lvbk9uZX0uMTRgO1xuY29uc3QgaWRYMjU1MTkgPSBcIjEuMy4xMDEuMTEwXCI7XG5jb25zdCBpZFg0NDggPSBcIjEuMy4xMDEuMTExXCI7XG5jb25zdCBpZEVkMjU1MTkgPSBcIjEuMy4xMDEuMTEyXCI7XG5jb25zdCBpZEVkNDQ4ID0gXCIxLjMuMTAxLjExM1wiO1xuXG52YXIgaW5kZXgkMSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBBbGdvcml0aG1JZGVudGlmaWVyOiBBbGdvcml0aG1JZGVudGlmaWVyLFxuICBnZXQgQ3VydmVQcml2YXRlS2V5ICgpIHsgcmV0dXJuIEN1cnZlUHJpdmF0ZUtleTsgfSxcbiAgRWNEc2FTaWduYXR1cmU6IEVjRHNhU2lnbmF0dXJlLFxuICBFY1ByaXZhdGVLZXk6IEVjUHJpdmF0ZUtleSxcbiAgZ2V0IEVjUHVibGljS2V5ICgpIHsgcmV0dXJuIEVjUHVibGljS2V5OyB9LFxuICBnZXQgRWRQcml2YXRlS2V5ICgpIHsgcmV0dXJuIEVkUHJpdmF0ZUtleTsgfSxcbiAgZ2V0IEVkUHVibGljS2V5ICgpIHsgcmV0dXJuIEVkUHVibGljS2V5OyB9LFxuICBnZXQgT2JqZWN0SWRlbnRpZmllciAoKSB7IHJldHVybiBPYmplY3RJZGVudGlmaWVyOyB9LFxuICBPbmVBc3ltbWV0cmljS2V5OiBPbmVBc3ltbWV0cmljS2V5LFxuICBQcml2YXRlS2V5SW5mbzogUHJpdmF0ZUtleUluZm8sXG4gIFB1YmxpY0tleUluZm86IFB1YmxpY0tleUluZm8sXG4gIFJzYVByaXZhdGVLZXk6IFJzYVByaXZhdGVLZXksXG4gIFJzYVB1YmxpY0tleTogUnNhUHVibGljS2V5LFxuICBjb252ZXJ0ZXJzOiBpbmRleCQyLFxuICBpZEJyYWlucG9vbFAxNjByMTogaWRCcmFpbnBvb2xQMTYwcjEsXG4gIGlkQnJhaW5wb29sUDE2MHQxOiBpZEJyYWlucG9vbFAxNjB0MSxcbiAgaWRCcmFpbnBvb2xQMTkycjE6IGlkQnJhaW5wb29sUDE5MnIxLFxuICBpZEJyYWlucG9vbFAxOTJ0MTogaWRCcmFpbnBvb2xQMTkydDEsXG4gIGlkQnJhaW5wb29sUDIyNHIxOiBpZEJyYWlucG9vbFAyMjRyMSxcbiAgaWRCcmFpbnBvb2xQMjI0dDE6IGlkQnJhaW5wb29sUDIyNHQxLFxuICBpZEJyYWlucG9vbFAyNTZyMTogaWRCcmFpbnBvb2xQMjU2cjEsXG4gIGlkQnJhaW5wb29sUDI1NnQxOiBpZEJyYWlucG9vbFAyNTZ0MSxcbiAgaWRCcmFpbnBvb2xQMzIwcjE6IGlkQnJhaW5wb29sUDMyMHIxLFxuICBpZEJyYWlucG9vbFAzMjB0MTogaWRCcmFpbnBvb2xQMzIwdDEsXG4gIGlkQnJhaW5wb29sUDM4NHIxOiBpZEJyYWlucG9vbFAzODRyMSxcbiAgaWRCcmFpbnBvb2xQMzg0dDE6IGlkQnJhaW5wb29sUDM4NHQxLFxuICBpZEJyYWlucG9vbFA1MTJyMTogaWRCcmFpbnBvb2xQNTEycjEsXG4gIGlkQnJhaW5wb29sUDUxMnQxOiBpZEJyYWlucG9vbFA1MTJ0MSxcbiAgaWRFZDI1NTE5OiBpZEVkMjU1MTksXG4gIGlkRWQ0NDg6IGlkRWQ0NDgsXG4gIGlkRWxsaXB0aWNDdXJ2ZTogaWRFbGxpcHRpY0N1cnZlLFxuICBpZFNlY3AyNTZrMTogaWRTZWNwMjU2azEsXG4gIGlkU2VjcDI1NnIxOiBpZFNlY3AyNTZyMSxcbiAgaWRTZWNwMzg0cjE6IGlkU2VjcDM4NHIxLFxuICBpZFNlY3A1MjFyMTogaWRTZWNwNTIxcjEsXG4gIGlkVmVyc2lvbk9uZTogaWRWZXJzaW9uT25lLFxuICBpZFgyNTUxOTogaWRYMjU1MTksXG4gIGlkWDQ0ODogaWRYNDQ4XG59KTtcblxuY2xhc3MgRWNDdXJ2ZXMge1xuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG4gICAgc3RhdGljIHJlZ2lzdGVyKGl0ZW0pIHtcbiAgICAgICAgY29uc3Qgb2lkID0gbmV3IE9iamVjdElkZW50aWZpZXIoKTtcbiAgICAgICAgb2lkLnZhbHVlID0gaXRlbS5pZDtcbiAgICAgICAgY29uc3QgcmF3ID0gQXNuQ29udmVydC5zZXJpYWxpemUob2lkKTtcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICByYXcsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWVzLnB1c2goaXRlbS5uYW1lKTtcbiAgICB9XG4gICAgc3RhdGljIGZpbmQobmFtZU9ySWQpIHtcbiAgICAgICAgbmFtZU9ySWQgPSBuYW1lT3JJZC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtcykge1xuICAgICAgICAgICAgaWYgKGl0ZW0ubmFtZS50b1VwcGVyQ2FzZSgpID09PSBuYW1lT3JJZCB8fCBpdGVtLmlkLnRvVXBwZXJDYXNlKCkgPT09IG5hbWVPcklkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQobmFtZU9ySWQpIHtcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5maW5kKG5hbWVPcklkKTtcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgRUMgbmFtZWQgY3VydmUgJyR7bmFtZU9ySWR9J2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuRWNDdXJ2ZXMuaXRlbXMgPSBbXTtcbkVjQ3VydmVzLm5hbWVzID0gW107XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiUC0yNTZcIiwgaWQ6IGlkU2VjcDI1NnIxLCBzaXplOiAyNTYgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiUC0zODRcIiwgaWQ6IGlkU2VjcDM4NHIxLCBzaXplOiAzODQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiUC01MjFcIiwgaWQ6IGlkU2VjcDUyMXIxLCBzaXplOiA1MjEgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiSy0yNTZcIiwgaWQ6IGlkU2VjcDI1NmsxLCBzaXplOiAyNTYgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDE2MHIxXCIsIGlkOiBpZEJyYWlucG9vbFAxNjByMSwgc2l6ZTogMTYwIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAxNjB0MVwiLCBpZDogaWRCcmFpbnBvb2xQMTYwdDEsIHNpemU6IDE2MCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMTkycjFcIiwgaWQ6IGlkQnJhaW5wb29sUDE5MnIxLCBzaXplOiAxOTIgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDE5MnQxXCIsIGlkOiBpZEJyYWlucG9vbFAxOTJ0MSwgc2l6ZTogMTkyIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAyMjRyMVwiLCBpZDogaWRCcmFpbnBvb2xQMjI0cjEsIHNpemU6IDIyNCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMjI0dDFcIiwgaWQ6IGlkQnJhaW5wb29sUDIyNHQxLCBzaXplOiAyMjQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDI1NnIxXCIsIGlkOiBpZEJyYWlucG9vbFAyNTZyMSwgc2l6ZTogMjU2IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAyNTZ0MVwiLCBpZDogaWRCcmFpbnBvb2xQMjU2dDEsIHNpemU6IDI1NiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMzIwcjFcIiwgaWQ6IGlkQnJhaW5wb29sUDMyMHIxLCBzaXplOiAzMjAgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDMyMHQxXCIsIGlkOiBpZEJyYWlucG9vbFAzMjB0MSwgc2l6ZTogMzIwIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAzODRyMVwiLCBpZDogaWRCcmFpbnBvb2xQMzg0cjEsIHNpemU6IDM4NCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMzg0dDFcIiwgaWQ6IGlkQnJhaW5wb29sUDM4NHQxLCBzaXplOiAzODQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDUxMnIxXCIsIGlkOiBpZEJyYWlucG9vbFA1MTJyMSwgc2l6ZTogNTEyIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFA1MTJ0MVwiLCBpZDogaWRCcmFpbnBvb2xQNTEydDEsIHNpemU6IDUxMiB9KTtcblxuY2xhc3MgWDI1NTE5UHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiWDI1NTE5XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wiZGVyaXZlS2V5XCIsIFwiZGVyaXZlQml0c1wiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW10sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwicHVibGljXCIpO1xuICAgIH1cbn1cblxuY2xhc3MgRWQyNTUxOVByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVkMjU1MTlcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJzaWduXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJ2ZXJpZnlcIl0sXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBIbWFjUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiSE1BQ1wiO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wic2lnblwiLCBcInZlcmlmeVwiXTtcbiAgICB9XG4gICAgZ2V0RGVmYXVsdExlbmd0aChhbGdOYW1lKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMjU2XCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTM4NFwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQS01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gNTEyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYWxnb3JpdGhtIG5hbWUgJyR7YWxnTmFtZX0nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgaWYgKFwibGVuZ3RoXCIgaW4gYWxnb3JpdGhtKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBJcyBub3QgYSBOdW1iZXJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImxlbmd0aDogTnVtYmVyIGlzIG91dCBvZiByYW5nZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydFBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICB9XG59XG5cbmNsYXNzIFBia2RmMlByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlBCS0RGMlwiO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZGVyaXZlQml0c1wiLCBcImRlcml2ZUtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJzYWx0XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0uc2FsdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0uc2FsdCkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaXRlcmF0aW9uc1wiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhbGdvcml0aG0uaXRlcmF0aW9ucyAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml0ZXJhdGlvbnM6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLml0ZXJhdGlvbnMgPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXRlcmF0aW9uczogSXMgbGVzcyB0aGFuIDFcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpO1xuICAgICAgICBpZiAoZXh0cmFjdGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcImV4dHJhY3RhYmxlOiBNdXN0IGJlICdmYWxzZSdcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEhrZGZQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJIS0RGXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJkZXJpdmVLZXlcIiwgXCJkZXJpdmVCaXRzXCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInNhbHRcIik7XG4gICAgICAgIGlmICghQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGFsZ29yaXRobS5zYWx0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInNhbHQ6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImluZm9cIik7XG4gICAgICAgIGlmICghQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGFsZ29yaXRobS5pbmZvKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInNhbHQ6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpO1xuICAgICAgICBpZiAoZXh0cmFjdGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcImV4dHJhY3RhYmxlOiBNdXN0IGJlICdmYWxzZSdcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgICAgIHRoaXMuZGVmYXVsdExlbmd0aCA9IDA7XG4gICAgfVxuICAgIGRpZ2VzdCguLi5hcmdzKSB7XG4gICAgICAgIGFyZ3NbMF0gPSB7IGxlbmd0aDogdGhpcy5kZWZhdWx0TGVuZ3RoLCAuLi5hcmdzWzBdIH07XG4gICAgICAgIHJldHVybiBzdXBlci5kaWdlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICBzdXBlci5jaGVja0RpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBhbGdvcml0aG0ubGVuZ3RoIHx8IDA7XG4gICAgICAgIGlmICh0eXBlb2YgbGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBJcyBub3QgYSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5lZ2F0aXZlXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZTEyOFByb3ZpZGVyIGV4dGVuZHMgU2hha2VQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwic2hha2UxMjhcIjtcbiAgICAgICAgdGhpcy5kZWZhdWx0TGVuZ3RoID0gMTY7XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZTI1NlByb3ZpZGVyIGV4dGVuZHMgU2hha2VQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwic2hha2UyNTZcIjtcbiAgICAgICAgdGhpcy5kZWZhdWx0TGVuZ3RoID0gMzI7XG4gICAgfVxufVxuXG5jbGFzcyBDcnlwdG8ge1xuICAgIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICAgICAgcmV0dXJuIFwiQ3J5cHRvXCI7XG4gICAgfVxuICAgIHJhbmRvbVVVSUQoKSB7XG4gICAgICAgIGNvbnN0IGIgPSB0aGlzLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxNikpO1xuICAgICAgICBiWzZdID0gKGJbNl0gJiAweDBmKSB8IDB4NDA7XG4gICAgICAgIGJbOF0gPSAoYls4XSAmIDB4M2YpIHwgMHg4MDtcbiAgICAgICAgY29uc3QgdXVpZCA9IENvbnZlcnQuVG9IZXgoYikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGAke3V1aWQuc3Vic3RyaW5nKDAsIDgpfS0ke3V1aWQuc3Vic3RyaW5nKDgsIDEyKX0tJHt1dWlkLnN1YnN0cmluZygxMiwgMTYpfS0ke3V1aWQuc3Vic3RyaW5nKDE2LCAyMCl9LSR7dXVpZC5zdWJzdHJpbmcoMjApfWA7XG4gICAgfVxufVxuXG5jbGFzcyBQcm92aWRlclN0b3JhZ2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLml0ZW1zID0ge307XG4gICAgfVxuICAgIGdldChhbGdvcml0aG1OYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zW2FsZ29yaXRobU5hbWUudG9Mb3dlckNhc2UoKV0gfHwgbnVsbDtcbiAgICB9XG4gICAgc2V0KHByb3ZpZGVyKSB7XG4gICAgICAgIHRoaXMuaXRlbXNbcHJvdmlkZXIubmFtZS50b0xvd2VyQ2FzZSgpXSA9IHByb3ZpZGVyO1xuICAgIH1cbiAgICByZW1vdmVBdChhbGdvcml0aG1OYW1lKSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXQoYWxnb3JpdGhtTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5pdGVtc1thbGdvcml0aG1OYW1lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvdmlkZXI7XG4gICAgfVxuICAgIGhhcyhuYW1lKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ2V0KG5hbWUpO1xuICAgIH1cbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5pdGVtcykubGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgYWxnb3JpdGhtcygpIHtcbiAgICAgICAgY29uc3QgYWxnb3JpdGhtcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuaXRlbXNba2V5XTtcbiAgICAgICAgICAgIGFsZ29yaXRobXMucHVzaChwcm92aWRlci5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxnb3JpdGhtcy5zb3J0KCk7XG4gICAgfVxufVxuXG5jb25zdCBrZXlGb3JtYXRNYXAgPSB7XG4gICAgXCJqd2tcIjogW1wicHJpdmF0ZVwiLCBcInB1YmxpY1wiLCBcInNlY3JldFwiXSxcbiAgICBcInBrY3M4XCI6IFtcInByaXZhdGVcIl0sXG4gICAgXCJzcGtpXCI6IFtcInB1YmxpY1wiXSxcbiAgICBcInJhd1wiOiBbXCJzZWNyZXRcIiwgXCJwdWJsaWNcIl1cbn07XG5jb25zdCBzb3VyY2VCdWZmZXJLZXlGb3JtYXRzID0gW1wicGtjczhcIiwgXCJzcGtpXCIsIFwicmF3XCJdO1xuY2xhc3MgU3VidGxlQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMgPSBuZXcgUHJvdmlkZXJTdG9yYWdlKCk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0hhc2hlZEFsZ29yaXRobShkYXRhKSB7XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAmJiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgJiYgXCJuYW1lXCIgaW4gZGF0YVxuICAgICAgICAgICAgJiYgXCJoYXNoXCIgaW4gZGF0YVxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgIH1cbiAgICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgIHJldHVybiBcIlN1YnRsZUNyeXB0b1wiO1xuICAgIH1cbiAgICBhc3luYyBkaWdlc3QoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMiwgXCJkaWdlc3RcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGRhdGEsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5kaWdlc3QocHJlcGFyZWRBbGdvcml0aG0sIHByZXBhcmVkRGF0YSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZ2VuZXJhdGVLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMywgXCJnZW5lcmF0ZUtleVwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZ2VuZXJhdGVLZXkoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBzaWduKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwic2lnblwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwga2V5LCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5zaWduKHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwga2V5LCBwcmVwYXJlZERhdGEsIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIHZlcmlmeSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCA0LCBcInZlcmlmeVwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZFNpZ25hdHVyZSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIudmVyaWZ5KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwga2V5LCBwcmVwYXJlZFNpZ25hdHVyZSwgcHJlcGFyZWREYXRhLCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBlbmNyeXB0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwiZW5jcnlwdFwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwga2V5LCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5lbmNyeXB0KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwga2V5LCBwcmVwYXJlZERhdGEsIHsga2V5VXNhZ2U6IHRydWUgfSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZGVjcnlwdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcImRlY3J5cHRcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGtleSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZGVjcnlwdCh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGtleSwgcHJlcGFyZWREYXRhLCB7IGtleVVzYWdlOiB0cnVlIH0sIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGRlcml2ZUJpdHMoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMywgXCJkZXJpdmVCaXRzXCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBiYXNlS2V5LCBsZW5ndGgsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGJhc2VLZXkpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmRlcml2ZUJpdHMoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBiYXNlS2V5LCBsZW5ndGgsIHsga2V5VXNhZ2U6IHRydWUgfSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZGVyaXZlS2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDUsIFwiZGVyaXZlS2V5XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBiYXNlS2V5LCBkZXJpdmVkS2V5VHlwZSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGVyaXZlZEtleVR5cGUgPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oZGVyaXZlZEtleVR5cGUpO1xuICAgICAgICBjb25zdCBpbXBvcnRQcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWREZXJpdmVkS2V5VHlwZS5uYW1lKTtcbiAgICAgICAgaW1wb3J0UHJvdmlkZXIuY2hlY2tEZXJpdmVkS2V5UGFyYW1zKHByZXBhcmVkRGVyaXZlZEtleVR5cGUpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIHByb3ZpZGVyLmNoZWNrQ3J5cHRvS2V5KGJhc2VLZXksIFwiZGVyaXZlS2V5XCIpO1xuICAgICAgICBjb25zdCBkZXJpdmVkQml0cyA9IGF3YWl0IHByb3ZpZGVyLmRlcml2ZUJpdHMoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBiYXNlS2V5LCBkZXJpdmVkS2V5VHlwZS5sZW5ndGggfHwgNTEyLCB7IGtleVVzYWdlOiBmYWxzZSB9LCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRLZXkoXCJyYXdcIiwgZGVyaXZlZEJpdHMsIGRlcml2ZWRLZXlUeXBlLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXMpO1xuICAgIH1cbiAgICBhc3luYyBleHBvcnRLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMiwgXCJleHBvcnRLZXlcIik7XG4gICAgICAgIGNvbnN0IFtmb3JtYXQsIGtleSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCFrZXlGb3JtYXRNYXBbZm9ybWF0XSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQga2V5Rm9ybWF0IGFyZ3VtZW50XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgha2V5Rm9ybWF0TWFwW2Zvcm1hdF0uaW5jbHVkZXMoa2V5LnR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFwiVGhlIGtleSBpcyBub3Qgb2YgdGhlIGV4cGVjdGVkIHR5cGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKGtleS5hbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmV4cG9ydEtleShmb3JtYXQsIGtleSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgaW1wb3J0S2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDUsIFwiaW1wb3J0S2V5XCIpO1xuICAgICAgICBjb25zdCBbZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiandrXCIpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5RGF0YSAhPT0gXCJvYmplY3RcIiB8fCAha2V5RGF0YS5rdHkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiS2V5IGRhdGEgbXVzdCBiZSBhbiBvYmplY3QgZm9yIEpXSyBpbXBvcnRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc291cmNlQnVmZmVyS2V5Rm9ybWF0cy5pbmNsdWRlcyhmb3JtYXQpKSB7XG4gICAgICAgICAgICBpZiAoIUJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShrZXlEYXRhKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJLZXkgZGF0YSBtdXN0IGJlIGEgQnVmZmVyU291cmNlIGZvciBub24tSldLIGZvcm1hdHNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIHByb3ZpZGVkIHZhbHVlIGlzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3IG9yIEpzb25XZWJLZXkpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvdmlkZXIuaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXMpO1xuICAgIH1cbiAgICBhc3luYyB3cmFwS2V5KGZvcm1hdCwga2V5LCB3cmFwcGluZ0tleSwgd3JhcEFsZ29yaXRobSwgLi4uYXJncykge1xuICAgICAgICBsZXQga2V5RGF0YSA9IGF3YWl0IHRoaXMuZXhwb3J0S2V5KGZvcm1hdCwga2V5LCAuLi5hcmdzKTtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJqd2tcIikge1xuICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGtleURhdGEpO1xuICAgICAgICAgICAga2V5RGF0YSA9IENvbnZlcnQuRnJvbVV0ZjhTdHJpbmcoanNvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0od3JhcEFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGtleURhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIHJldHVybiBwcm92aWRlci5lbmNyeXB0KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgd3JhcHBpbmdLZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogZmFsc2UgfSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIHVud3JhcEtleShmb3JtYXQsIHdyYXBwZWRLZXksIHVud3JhcHBpbmdLZXksIHVud3JhcEFsZ29yaXRobSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKHVud3JhcEFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHdyYXBwZWRLZXkpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGxldCBrZXlEYXRhID0gYXdhaXQgcHJvdmlkZXIuZGVjcnlwdCh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIHVud3JhcHBpbmdLZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogZmFsc2UgfSwgLi4uYXJncyk7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiandrXCIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAga2V5RGF0YSA9IEpTT04ucGFyc2UoQ29udmVydC5Ub1V0ZjhTdHJpbmcoa2V5RGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoXCJ3cmFwcGVkS2V5OiBJcyBub3QgYSBKU09OXCIpO1xuICAgICAgICAgICAgICAgIGVycm9yLmludGVybmFsID0gZTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB1bndyYXBwZWRLZXlBbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBjaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIHNpemUsIG1ldGhvZE5hbWUpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgc2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgJyR7bWV0aG9kTmFtZX0nIG9uICdTdWJ0bGVDcnlwdG8nOiAke3NpemV9IGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgJHthcmdzLmxlbmd0aH0gcHJlc2VudGApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGFsZ29yaXRobSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFN1YnRsZUNyeXB0by5pc0hhc2hlZEFsZ29yaXRobShhbGdvcml0aG0pKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHsgLi4uYWxnb3JpdGhtIH07XG4gICAgICAgICAgICBwcmVwYXJlZEFsZ29yaXRobS5oYXNoID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoKTtcbiAgICAgICAgICAgIHJldHVybiBwcmVwYXJlZEFsZ29yaXRobTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5hbGdvcml0aG0gfTtcbiAgICB9XG4gICAgZ2V0UHJvdmlkZXIobmFtZSkge1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMucHJvdmlkZXJzLmdldChuYW1lKTtcbiAgICAgICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFsZ29yaXRobUVycm9yKFwiVW5yZWNvZ25pemVkIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgS2V5IGlzIG5vdCBvZiB0eXBlICdDcnlwdG9LZXknYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbnZhciBpbmRleCA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBjb252ZXJ0ZXJzOiBpbmRleCQzXG59KTtcblxuY29uc3QgUkVRVUlSRURfRklFTERTID0gW1wiY3J2XCIsIFwiZVwiLCBcImtcIiwgXCJrdHlcIiwgXCJuXCIsIFwieFwiLCBcInlcIl07XG5jbGFzcyBKd2tVdGlscyB7XG4gICAgc3RhdGljIGFzeW5jIHRodW1icHJpbnQoaGFzaCwgandrLCBjcnlwdG8pIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZm9ybWF0KGp3aywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmRpZ2VzdChoYXNoLCBDb252ZXJ0LkZyb21CaW5hcnkoSlNPTi5zdHJpbmdpZnkoZGF0YSkpKTtcbiAgICB9XG4gICAgc3RhdGljIGZvcm1hdChqd2ssIHJlbW92ZSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCByZXMgPSBPYmplY3QuZW50cmllcyhqd2spO1xuICAgICAgICBpZiAocmVtb3ZlKSB7XG4gICAgICAgICAgICByZXMgPSByZXMuZmlsdGVyKG8gPT4gUkVRVUlSRURfRklFTERTLmluY2x1ZGVzKG9bMF0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSByZXMuc29ydCgoW2tleUFdLCBba2V5Ql0pID0+IGtleUEgPiBrZXlCID8gMSA6IGtleUEgPCBrZXlCID8gLTEgOiAwKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhyZXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgQWVzQ2JjUHJvdmlkZXIsIEFlc0NtYWNQcm92aWRlciwgQWVzQ3RyUHJvdmlkZXIsIEFlc0VjYlByb3ZpZGVyLCBBZXNHY21Qcm92aWRlciwgQWVzS3dQcm92aWRlciwgQWVzUHJvdmlkZXIsIEFsZ29yaXRobUVycm9yLCBDcnlwdG8sIENyeXB0b0Vycm9yLCBDcnlwdG9LZXksIERlc1Byb3ZpZGVyLCBFY0N1cnZlcywgRWNVdGlscywgRWNkaEVzUHJvdmlkZXIsIEVjZGhQcm92aWRlciwgRWNkc2FQcm92aWRlciwgRWQyNTUxOVByb3ZpZGVyLCBFZERzYVByb3ZpZGVyLCBFbGxpcHRpY1Byb3ZpZGVyLCBIa2RmUHJvdmlkZXIsIEhtYWNQcm92aWRlciwgSndrVXRpbHMsIE9wZXJhdGlvbkVycm9yLCBQYmtkZjJQcm92aWRlciwgUGVtQ29udmVydGVyLCBQcm92aWRlckNyeXB0bywgUHJvdmlkZXJTdG9yYWdlLCBSZXF1aXJlZFByb3BlcnR5RXJyb3IsIFJzYU9hZXBQcm92aWRlciwgUnNhUHJvdmlkZXIsIFJzYVBzc1Byb3ZpZGVyLCBSc2FTc2FQcm92aWRlciwgU2hha2UxMjhQcm92aWRlciwgU2hha2UyNTZQcm92aWRlciwgU2hha2VQcm92aWRlciwgU3VidGxlQ3J5cHRvLCBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yLCBYMjU1MTlQcm92aWRlciwgaW5kZXgkMSBhcyBhc24xLCBpc0pXSywgaW5kZXggYXMganNvbiB9O1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwgIi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5leHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCAiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGN1c3RvbUluc3BlY3RTeW1ib2wgPVxuICAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sWydmb3InXSA9PT0gJ2Z1bmN0aW9uJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA/IFN5bWJvbFsnZm9yJ10oJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA6IG51bGxcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG52YXIgS19NQVhfTEVOR1RIID0gMHg3ZmZmZmZmZlxuZXhwb3J0cy5rTWF4TGVuZ3RoID0gS19NQVhfTEVOR1RIXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFByaW50IHdhcm5pbmcgYW5kIHJlY29tbWVuZCB1c2luZyBgYnVmZmVyYCB2NC54IHdoaWNoIGhhcyBhbiBPYmplY3RcbiAqICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIFdlIHJlcG9ydCB0aGF0IHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGlmIHRoZSBhcmUgbm90IHN1YmNsYXNzYWJsZVxuICogdXNpbmcgX19wcm90b19fLiBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YFxuICogKFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4KS4gSUUgMTAgbGFja3Mgc3VwcG9ydFxuICogZm9yIF9fcHJvdG9fXyBhbmQgaGFzIGEgYnVnZ3kgdHlwZWQgYXJyYXkgaW1wbGVtZW50YXRpb24uXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gdHlwZWRBcnJheVN1cHBvcnQoKVxuXG5pZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgJ1RoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSAnICtcbiAgICAnYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4nXG4gIClcbn1cblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICAvLyBDYW4gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWQ/XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgdmFyIHByb3RvID0geyBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH0gfVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgVWludDhBcnJheS5wcm90b3R5cGUpXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFyciwgcHJvdG8pXG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDJcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAncGFyZW50Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ1ZmZlclxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ29mZnNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7XG4gIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIGxlbmd0aCArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlci5wcm90b3R5cGUpXG4gIHJldHVybiBidWZcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZShhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20oYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG5mdW5jdGlvbiBmcm9tICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlWaWV3KHZhbHVlKVxuICB9XG5cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICAgIClcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlKHZhbHVlLCBBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgQXJyYXlCdWZmZXIpKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAoaXNJbnN0YW5jZSh2YWx1ZSwgU2hhcmVkQXJyYXlCdWZmZXIpIHx8XG4gICAgICAodmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIFNoYXJlZEFycmF5QnVmZmVyKSkpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJ1xuICAgIClcbiAgfVxuXG4gIHZhciB2YWx1ZU9mID0gdmFsdWUudmFsdWVPZiAmJiB2YWx1ZS52YWx1ZU9mKClcbiAgaWYgKHZhbHVlT2YgIT0gbnVsbCAmJiB2YWx1ZU9mICE9PSB2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZU9mLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICB2YXIgYiA9IGZyb21PYmplY3QodmFsdWUpXG4gIGlmIChiKSByZXR1cm4gYlxuXG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oXG4gICAgICB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKCdzdHJpbmcnKSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoXG4gICAgKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICApXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gTm90ZTogQ2hhbmdlIHByb3RvdHlwZSAqYWZ0ZXIqIEJ1ZmZlci5mcm9tIGlzIGRlZmluZWQgdG8gd29ya2Fyb3VuZCBDaHJvbWUgYnVnOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC8xNDhcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIucHJvdG90eXBlLCBVaW50OEFycmF5LnByb3RvdHlwZSlcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIsIFVpbnQ4QXJyYXkpXG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBzaXplICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlIChzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gYnVmLndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlIChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheVZpZXcgKGFycmF5Vmlldykge1xuICBpZiAoaXNJbnN0YW5jZShhcnJheVZpZXcsIFVpbnQ4QXJyYXkpKSB7XG4gICAgdmFyIGNvcHkgPSBuZXcgVWludDhBcnJheShhcnJheVZpZXcpXG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcihjb3B5LmJ1ZmZlciwgY29weS5ieXRlT2Zmc2V0LCBjb3B5LmJ5dGVMZW5ndGgpXG4gIH1cbiAgcmV0dXJuIGZyb21BcnJheUxpa2UoYXJyYXlWaWV3KVxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wib2Zmc2V0XCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJsZW5ndGhcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgdmFyIGJ1ZlxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyLnByb3RvdHlwZSlcblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoMClcbiAgICB9XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKVxuICB9XG5cbiAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJlxuICAgIGIgIT09IEJ1ZmZlci5wcm90b3R5cGUgLy8gc28gQnVmZmVyLmlzQnVmZmVyKEJ1ZmZlci5wcm90b3R5cGUpIHdpbGwgYmUgZmFsc2Vcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmIChpc0luc3RhbmNlKGEsIFVpbnQ4QXJyYXkpKSBhID0gQnVmZmVyLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aClcbiAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpIGIgPSBCdWZmZXIuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJidWYxXCIsIFwiYnVmMlwiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5J1xuICAgIClcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmIChpc0luc3RhbmNlKGJ1ZiwgVWludDhBcnJheSkpIHtcbiAgICAgIGlmIChwb3MgKyBidWYubGVuZ3RoID4gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICBCdWZmZXIuZnJvbShidWYpLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgYnVmLFxuICAgICAgICAgIHBvc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIH1cbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBpc0luc3RhbmNlKHN0cmluZywgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHN0cmluZ1xuICAgIClcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBtdXN0TWF0Y2ggPSAoYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdID09PSB0cnVlKVxuICBpZiAoIW11c3RNYXRjaCAmJiBsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHtcbiAgICAgICAgICByZXR1cm4gbXVzdE1hdGNoID8gLTEgOiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICB9XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcmNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIChhbmQgdGhlIGBpcy1idWZmZXJgIG5wbSBwYWNrYWdlKVxuLy8gdG8gZGV0ZWN0IGEgQnVmZmVyIGluc3RhbmNlLiBJdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgYGluc3RhbmNlb2YgQnVmZmVyYFxuLy8gcmVsaWFibHkgaW4gYSBicm93c2VyaWZ5IGNvbnRleHQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBkaWZmZXJlbnRcbi8vIGNvcGllcyBvZiB0aGUgJ2J1ZmZlcicgcGFja2FnZSBpbiB1c2UuIFRoaXMgbWV0aG9kIHdvcmtzIGV2ZW4gZm9yIEJ1ZmZlclxuLy8gaW5zdGFuY2VzIHRoYXQgd2VyZSBjcmVhdGVkIGZyb20gYW5vdGhlciBjb3B5IG9mIHRoZSBgYnVmZmVyYCBwYWNrYWdlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTU0XG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nID0gQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZ1xuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLnJlcGxhY2UoLyguezJ9KS9nLCAnJDEgJykudHJpbSgpXG4gIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cbmlmIChjdXN0b21JbnNwZWN0U3ltYm9sKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGVbY3VzdG9tSW5zcGVjdFN5bWJvbF0gPSBCdWZmZXIucHJvdG90eXBlLmluc3BlY3Rcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkge1xuICAgIHRhcmdldCA9IEJ1ZmZlci5mcm9tKHRhcmdldCwgdGFyZ2V0Lm9mZnNldCwgdGFyZ2V0LmJ5dGVMZW5ndGgpXG4gIH1cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB0YXJnZXQpXG4gICAgKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAobnVtYmVySXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmICh0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbdmFsXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKVxuICAgICAgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKVxuICAgICAgICAgID8gM1xuICAgICAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpXG4gICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gaGV4U2xpY2VMb29rdXBUYWJsZVtidWZbaV1dXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIC8vIElmIGJ5dGVzLmxlbmd0aCBpcyBvZGQsIHRoZSBsYXN0IDggYml0cyBtdXN0IGJlIGlnbm9yZWQgKHNhbWUgYXMgbm9kZS5qcylcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGggLSAxOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIChieXRlc1tpICsgMV0gKiAyNTYpKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXdCdWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50QkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDE2TEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyQkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludEJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MTZMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDE2QkUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MzJCRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyJylcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBVc2UgYnVpbHQtaW4gd2hlbiBhdmFpbGFibGUsIG1pc3NpbmcgZnJvbSBJRTExXG4gICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmICgoZW5jb2RpbmcgPT09ICd1dGY4JyAmJiBjb2RlIDwgMTI4KSB8fFxuICAgICAgICAgIGVuY29kaW5nID09PSAnbGF0aW4xJykge1xuICAgICAgICAvLyBGYXN0IHBhdGg6IElmIGB2YWxgIGZpdHMgaW50byBhIHNpbmdsZSBieXRlLCB1c2UgdGhhdCBudW1lcmljIHZhbHVlLlxuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgdmFsID0gTnVtYmVyKHZhbClcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInICsgdmFsICtcbiAgICAgICAgJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpXG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgdGFrZXMgZXF1YWwgc2lnbnMgYXMgZW5kIG9mIHRoZSBCYXNlNjQgZW5jb2RpbmdcbiAgc3RyID0gc3RyLnNwbGl0KCc9JylbMF1cbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuLy8gQXJyYXlCdWZmZXIgb3IgVWludDhBcnJheSBvYmplY3RzIGZyb20gb3RoZXIgY29udGV4dHMgKGkuZS4gaWZyYW1lcykgZG8gbm90IHBhc3Ncbi8vIHRoZSBgaW5zdGFuY2VvZmAgY2hlY2sgYnV0IHRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgb2YgdGhhdCB0eXBlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTY2XG5mdW5jdGlvbiBpc0luc3RhbmNlIChvYmosIHR5cGUpIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIHR5cGUgfHxcbiAgICAob2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWUgIT0gbnVsbCAmJlxuICAgICAgb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09IHR5cGUubmFtZSlcbn1cbmZ1bmN0aW9uIG51bWJlcklzTmFOIChvYmopIHtcbiAgLy8gRm9yIElFMTEgc3VwcG9ydFxuICByZXR1cm4gb2JqICE9PSBvYmogLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cblxuLy8gQ3JlYXRlIGxvb2t1cCB0YWJsZSBmb3IgYHRvU3RyaW5nKCdoZXgnKWBcbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzIxOVxudmFyIGhleFNsaWNlTG9va3VwVGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgYWxwaGFiZXQgPSAnMDEyMzQ1Njc4OWFiY2RlZidcbiAgdmFyIHRhYmxlID0gbmV3IEFycmF5KDI1NilcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgdmFyIGkxNiA9IGkgKiAxNlxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgdGFibGVbaTE2ICsgal0gPSBhbHBoYWJldFtpXSArIGFscGhhYmV0W2pdXG4gICAgfVxuICB9XG4gIHJldHVybiB0YWJsZVxufSkoKVxuIiwgIi8qIVxuIENvcHlyaWdodCAoYykgUGVjdWxpYXIgVmVudHVyZXMsIExMQ1xuKi9cblxuaW1wb3J0ICogYXMgY29yZSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgYXMgQnVmZmVyU291cmNlQ29udmVydGVyJDEgfSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5leHBvcnQgeyBDcnlwdG9LZXkgfSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5pbXBvcnQgeyBCdWZmZXIgYXMgQnVmZmVyJDEgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0ICogYXMgcHJvY2VzcyBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB7IF9fZGVjb3JhdGUgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBKc29uUHJvcCwgSnNvblByb3BUeXBlcywgSnNvblNlcmlhbGl6ZXIsIEpzb25QYXJzZXIgfSBmcm9tICdAcGVjdWxpYXIvanNvbi1zY2hlbWEnO1xuaW1wb3J0IHsgQ29udmVydCwgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSAncHZ0c3V0aWxzJztcbmltcG9ydCB7IEFzblBhcnNlciwgQXNuU2VyaWFsaXplciwgQXNuQ29udmVydCB9IGZyb20gJ0BwZWN1bGlhci9hc24xLXNjaGVtYSc7XG5cbmNvbnN0IEpzb25CYXNlNjRVcmxDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUpTT046ICh2YWx1ZSkgPT4gQnVmZmVyJDEuZnJvbShDb252ZXJ0LkZyb21CYXNlNjRVcmwodmFsdWUpKSxcbiAgICB0b0pTT046ICh2YWx1ZSkgPT4gQ29udmVydC5Ub0Jhc2U2NFVybCh2YWx1ZSksXG59O1xuXG5jbGFzcyBDcnlwdG9LZXkgZXh0ZW5kcyBjb3JlLkNyeXB0b0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlciQxLmFsbG9jKDApO1xuICAgICAgICB0aGlzLmFsZ29yaXRobSA9IHsgbmFtZTogXCJcIiB9O1xuICAgICAgICB0aGlzLmV4dHJhY3RhYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudHlwZSA9IFwic2VjcmV0XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgICAgIHRoaXMua3R5ID0gXCJvY3RcIjtcbiAgICAgICAgdGhpcy5hbGcgPSBcIlwiO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJleHRcIiwgdHlwZTogSnNvblByb3BUeXBlcy5Cb29sZWFuLCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJleHRyYWN0YWJsZVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImtleV9vcHNcIiwgdHlwZTogSnNvblByb3BUeXBlcy5TdHJpbmcsIHJlcGVhdGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJ1c2FnZXNcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgdHlwZTogSnNvblByb3BUeXBlcy5TdHJpbmcgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwia3R5XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IHR5cGU6IEpzb25Qcm9wVHlwZXMuU3RyaW5nLCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJhbGdcIiwgdm9pZCAwKTtcblxuY2xhc3MgU3ltbWV0cmljS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5rdHkgPSBcIm9jdFwiO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInNlY3JldFwiO1xuICAgIH1cbn1cblxuY2xhc3MgQXN5bW1ldHJpY0tleSBleHRlbmRzIENyeXB0b0tleSB7XG59XG5cbmNsYXNzIEFlc0NyeXB0b0tleSBleHRlbmRzIFN5bW1ldHJpY0tleSB7XG4gICAgZ2V0IGFsZygpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9Q0JDYDtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ1RSXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9Q1RSYDtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtR0NNXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9R0NNYDtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtS1dcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEEke3RoaXMuYWxnb3JpdGhtLmxlbmd0aH1LV2A7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNNQUNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEEke3RoaXMuYWxnb3JpdGhtLmxlbmd0aH1DTUFDYDtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtRUNCXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9RUNCYDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQWxnb3JpdGhtRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGdvcml0aG0gbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXQgYWxnKHZhbHVlKSB7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImtcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQ29udmVydGVyIH0pXG5dLCBBZXNDcnlwdG9LZXkucHJvdG90eXBlLCBcImRhdGFcIiwgdm9pZCAwKTtcblxuY2xhc3MgQWVzQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBBZXNDcnlwdG9LZXkoKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIGtleS5kYXRhID0gY3J5cHRvLnJhbmRvbUJ5dGVzKGFsZ29yaXRobS5sZW5ndGggPj4gMyk7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBleHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5OiBJcyBub3QgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgbGV0IGtleTtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IEFlc0NyeXB0b0tleSB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBuZXcgQWVzQ3J5cHRvS2V5KCk7XG4gICAgICAgICAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkuYWxnb3JpdGhtLmxlbmd0aCA9IGtleS5kYXRhLmxlbmd0aCA8PCAzO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgc3dpdGNoIChrZXkuYWxnb3JpdGhtLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAxMjg6XG4gICAgICAgICAgICBjYXNlIDE5MjpcbiAgICAgICAgICAgIGNhc2UgMjU2OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImtleURhdGE6IElzIHdyb25nIGtleSBsZW5ndGhcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHRBZXNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DVFJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzQ1RSKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtR0NNXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0dDTShhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUtXXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0tXKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtRUNCXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0VDQihhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBpZiAoIShrZXkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJrZXk6IElzIG5vdCBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRBZXNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DVFJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzQ1RSKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtR0NNXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFlc0dDTShhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUtXXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFlc0tXKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtRUNCXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFlc0VDQihhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIkMS5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlciQxLmNvbmNhdChbZGVjLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHRBZXNDVFIoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tY3RyYCwga2V5LmRhdGEsIEJ1ZmZlciQxLmZyb20oYWxnb3JpdGhtLmNvdW50ZXIpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlciQxLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHRBZXNDVFIoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWN0cmAsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uY291bnRlcikpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIkMS5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0QWVzR0NNKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWdjbWAsIGtleS5kYXRhLCBCdWZmZXIkMS5mcm9tKGFsZ29yaXRobS5pdiksIHtcbiAgICAgICAgICAgIGF1dGhUYWdMZW5ndGg6IChhbGdvcml0aG0udGFnTGVuZ3RoIHx8IDEyOCkgPj4gMyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChhbGdvcml0aG0uYWRkaXRpb25hbERhdGEpIHtcbiAgICAgICAgICAgIGNpcGhlci5zZXRBQUQoQnVmZmVyJDEuZnJvbShhbGdvcml0aG0uYWRkaXRpb25hbERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZW5jID0gY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZW5jID0gQnVmZmVyJDEuY29uY2F0KFtlbmMsIGNpcGhlci5maW5hbCgpLCBjaXBoZXIuZ2V0QXV0aFRhZygpXSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0dDTShhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCB0YWdMZW5ndGggPSAoYWxnb3JpdGhtLnRhZ0xlbmd0aCB8fCAxMjgpID4+IDM7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1nY21gLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSwge1xuICAgICAgICAgICAgYXV0aFRhZ0xlbmd0aDogdGFnTGVuZ3RoLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5jID0gZGF0YS5zbGljZSgwLCBkYXRhLmxlbmd0aCAtIHRhZ0xlbmd0aCk7XG4gICAgICAgIGNvbnN0IHRhZyA9IGRhdGEuc2xpY2UoZGF0YS5sZW5ndGggLSB0YWdMZW5ndGgpO1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSB7XG4gICAgICAgICAgICBkZWNpcGhlci5zZXRBQUQoQnVmZmVyJDEuZnJvbShhbGdvcml0aG0uYWRkaXRpb25hbERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBkZWNpcGhlci5zZXRBdXRoVGFnKHRhZyk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZW5jKTtcbiAgICAgICAgZGVjID0gQnVmZmVyJDEuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0tXKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgaWQtYWVzJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0td3JhcGAsIGtleS5kYXRhLCB0aGlzLkFFU19LV19JVik7XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIkMS5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0tXKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGlkLWFlcyR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LXdyYXBgLCBrZXkuZGF0YSwgdGhpcy5BRVNfS1dfSVYpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIkMS5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0QWVzRUNCKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWVjYmAsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheSgwKSk7XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIkMS5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzRUNCKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1lY2JgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoMCkpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIkMS5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxufVxuQWVzQ3J5cHRvLkFFU19LV19JViA9IEJ1ZmZlciQxLmZyb20oXCJBNkE2QTZBNkE2QTZBNkE2XCIsIFwiaGV4XCIpO1xuXG5jb25zdCBrZXlTdG9yYWdlID0gbmV3IFdlYWtNYXAoKTtcbmZ1bmN0aW9uIGdldENyeXB0b0tleShrZXkpIHtcbiAgICBjb25zdCByZXMgPSBrZXlTdG9yYWdlLmdldChrZXkpO1xuICAgIGlmICghcmVzKSB7XG4gICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiQ2Fubm90IGdldCBDcnlwdG9LZXkgZnJvbSBzZWN1cmUgc3RvcmFnZVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIHNldENyeXB0b0tleSh2YWx1ZSkge1xuICAgIGNvbnN0IGtleSA9IGNvcmUuQ3J5cHRvS2V5LmNyZWF0ZSh2YWx1ZS5hbGdvcml0aG0sIHZhbHVlLnR5cGUsIHZhbHVlLmV4dHJhY3RhYmxlLCB2YWx1ZS51c2FnZXMpO1xuICAgIE9iamVjdC5mcmVlemUoa2V5KTtcbiAgICBrZXlTdG9yYWdlLnNldChrZXksIHZhbHVlKTtcbiAgICByZXR1cm4ga2V5O1xufVxuXG5jbGFzcyBBZXNDYmNQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzQ2JjUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGFsZ29yaXRobS5sZW5ndGgsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jb25zdCB6ZXJvID0gQnVmZmVyJDEuZnJvbShbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0pO1xuY29uc3QgcmIgPSBCdWZmZXIkMS5mcm9tKFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzVdKTtcbmNvbnN0IGJsb2NrU2l6ZSA9IDE2O1xuZnVuY3Rpb24gYml0U2hpZnRMZWZ0KGJ1ZmZlcikge1xuICAgIGNvbnN0IHNoaWZ0ZWQgPSBCdWZmZXIkMS5hbGxvYyhidWZmZXIubGVuZ3RoKTtcbiAgICBjb25zdCBsYXN0ID0gYnVmZmVyLmxlbmd0aCAtIDE7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxhc3Q7IGluZGV4KyspIHtcbiAgICAgICAgc2hpZnRlZFtpbmRleF0gPSBidWZmZXJbaW5kZXhdIDw8IDE7XG4gICAgICAgIGlmIChidWZmZXJbaW5kZXggKyAxXSAmIDB4ODApIHtcbiAgICAgICAgICAgIHNoaWZ0ZWRbaW5kZXhdICs9IDB4MDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2hpZnRlZFtsYXN0XSA9IGJ1ZmZlcltsYXN0XSA8PCAxO1xuICAgIHJldHVybiBzaGlmdGVkO1xufVxuZnVuY3Rpb24geG9yKGEsIGIpIHtcbiAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpO1xuICAgIGNvbnN0IG91dHB1dCA9IEJ1ZmZlciQxLmFsbG9jKGxlbmd0aCk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBvdXRwdXRbaW5kZXhdID0gYVtpbmRleF0gXiBiW2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cbmZ1bmN0aW9uIGFlcyhrZXksIG1lc3NhZ2UpIHtcbiAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYGFlcyR7a2V5Lmxlbmd0aCA8PCAzfWAsIGtleSwgemVybyk7XG4gICAgY29uc3QgcmVzdWx0ID0gY2lwaGVyLnVwZGF0ZShtZXNzYWdlKTtcbiAgICBjaXBoZXIuZmluYWwoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0TWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGJsb2NrSW5kZXgpIHtcbiAgICBjb25zdCBibG9jayA9IEJ1ZmZlciQxLmFsbG9jKGJsb2NrU2l6ZSk7XG4gICAgY29uc3Qgc3RhcnQgPSBibG9ja0luZGV4ICogYmxvY2tTaXplO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgYmxvY2tTaXplO1xuICAgIG1lc3NhZ2UuY29weShibG9jaywgMCwgc3RhcnQsIGVuZCk7XG4gICAgcmV0dXJuIGJsb2NrO1xufVxuZnVuY3Rpb24gZ2V0UGFkZGVkTWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGJsb2NrSW5kZXgpIHtcbiAgICBjb25zdCBibG9jayA9IEJ1ZmZlciQxLmFsbG9jKGJsb2NrU2l6ZSk7XG4gICAgY29uc3Qgc3RhcnQgPSBibG9ja0luZGV4ICogYmxvY2tTaXplO1xuICAgIGNvbnN0IGVuZCA9IG1lc3NhZ2UubGVuZ3RoO1xuICAgIGJsb2NrLmZpbGwoMCk7XG4gICAgbWVzc2FnZS5jb3B5KGJsb2NrLCAwLCBzdGFydCwgZW5kKTtcbiAgICBibG9ja1tlbmQgLSBzdGFydF0gPSAweDgwO1xuICAgIHJldHVybiBibG9jaztcbn1cbmZ1bmN0aW9uIGdlbmVyYXRlU3Via2V5cyhrZXkpIHtcbiAgICBjb25zdCBsID0gYWVzKGtleSwgemVybyk7XG4gICAgbGV0IHN1YmtleTEgPSBiaXRTaGlmdExlZnQobCk7XG4gICAgaWYgKGxbMF0gJiAweDgwKSB7XG4gICAgICAgIHN1YmtleTEgPSB4b3Ioc3Via2V5MSwgcmIpO1xuICAgIH1cbiAgICBsZXQgc3Via2V5MiA9IGJpdFNoaWZ0TGVmdChzdWJrZXkxKTtcbiAgICBpZiAoc3Via2V5MVswXSAmIDB4ODApIHtcbiAgICAgICAgc3Via2V5MiA9IHhvcihzdWJrZXkyLCByYik7XG4gICAgfVxuICAgIHJldHVybiB7IHN1YmtleTEsIHN1YmtleTIgfTtcbn1cbmZ1bmN0aW9uIGFlc0NtYWMoa2V5LCBtZXNzYWdlKSB7XG4gICAgY29uc3Qgc3Via2V5cyA9IGdlbmVyYXRlU3Via2V5cyhrZXkpO1xuICAgIGxldCBibG9ja0NvdW50ID0gTWF0aC5jZWlsKG1lc3NhZ2UubGVuZ3RoIC8gYmxvY2tTaXplKTtcbiAgICBsZXQgbGFzdEJsb2NrQ29tcGxldGVGbGFnO1xuICAgIGxldCBsYXN0QmxvY2s7XG4gICAgaWYgKGJsb2NrQ291bnQgPT09IDApIHtcbiAgICAgICAgYmxvY2tDb3VudCA9IDE7XG4gICAgICAgIGxhc3RCbG9ja0NvbXBsZXRlRmxhZyA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGFzdEJsb2NrQ29tcGxldGVGbGFnID0gKG1lc3NhZ2UubGVuZ3RoICUgYmxvY2tTaXplID09PSAwKTtcbiAgICB9XG4gICAgY29uc3QgbGFzdEJsb2NrSW5kZXggPSBibG9ja0NvdW50IC0gMTtcbiAgICBpZiAobGFzdEJsb2NrQ29tcGxldGVGbGFnKSB7XG4gICAgICAgIGxhc3RCbG9jayA9IHhvcihnZXRNZXNzYWdlQmxvY2sobWVzc2FnZSwgbGFzdEJsb2NrSW5kZXgpLCBzdWJrZXlzLnN1YmtleTEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGFzdEJsb2NrID0geG9yKGdldFBhZGRlZE1lc3NhZ2VCbG9jayhtZXNzYWdlLCBsYXN0QmxvY2tJbmRleCksIHN1YmtleXMuc3Via2V5Mik7XG4gICAgfVxuICAgIGxldCB4ID0gemVybztcbiAgICBsZXQgeTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGFzdEJsb2NrSW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgeSA9IHhvcih4LCBnZXRNZXNzYWdlQmxvY2sobWVzc2FnZSwgaW5kZXgpKTtcbiAgICAgICAgeCA9IGFlcyhrZXksIHkpO1xuICAgIH1cbiAgICB5ID0geG9yKGxhc3RCbG9jaywgeCk7XG4gICAgcmV0dXJuIGFlcyhrZXksIHkpO1xufVxuY2xhc3MgQWVzQ21hY1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNDbWFjUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGFsZ29yaXRobS5sZW5ndGgsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhZXNDbWFjKGdldENyeXB0b0tleShrZXkpLmRhdGEsIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5idWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlMiA9IGF3YWl0IHRoaXMuc2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSk7XG4gICAgICAgIHJldHVybiBCdWZmZXIkMS5mcm9tKHNpZ25hdHVyZSkuY29tcGFyZShCdWZmZXIkMS5mcm9tKHNpZ25hdHVyZTIpKSA9PT0gMDtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNDdHJQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzQ3RyUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGFsZ29yaXRobS5sZW5ndGgsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNHY21Qcm92aWRlciBleHRlbmRzIGNvcmUuQWVzR2NtUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGFsZ29yaXRobS5sZW5ndGgsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNLd1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNLd1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogYWxnb3JpdGhtLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzRWNiUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0VjYlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgRGVzQ3J5cHRvS2V5IGV4dGVuZHMgU3ltbWV0cmljS2V5IHtcbiAgICBnZXQgYWxnKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYERFUy1DQkNgO1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1FREUzLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgM0RFUy1DQkNgO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5BbGdvcml0aG1FcnJvcihcIlVuc3VwcG9ydGVkIGFsZ29yaXRobSBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCBhbGcodmFsdWUpIHtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwia1wiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxDb252ZXJ0ZXIgfSlcbl0sIERlc0NyeXB0b0tleS5wcm90b3R5cGUsIFwiZGF0YVwiLCB2b2lkIDApO1xuXG5jbGFzcyBEZXNDcnlwdG8ge1xuICAgIHN0YXRpYyBhc3luYyBnZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IERlc0NyeXB0b0tleSgpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAga2V5LmRhdGEgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoYWxnb3JpdGhtLmxlbmd0aCA+PiAzKTtcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShrZXkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBEZXNDcnlwdG9LZXkgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICAgICAga2V5ID0gbmV3IERlc0NyeXB0b0tleSgpO1xuICAgICAgICAgICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShrZXlEYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICAgICAga2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtRURFMy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBpZiAoIShrZXkgaW5zdGFuY2VvZiBEZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJrZXk6IElzIG5vdCBEZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHREZXNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1FREUzLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHREZXNFREUzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgZGVzLWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlciQxLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHREZXNDQkMoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihgZGVzLWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZGVjID0gQnVmZmVyJDEuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdERlc0VERTNDQkMoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGBkZXMtZWRlMy1jYmNgLCBrZXkuZGF0YSwgQnVmZmVyJDEuZnJvbShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlciQxLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHREZXNFREUzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGRlcy1lZGUzLWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZGVjID0gQnVmZmVyJDEuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbn1cblxuY2xhc3MgRGVzQ2JjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkRlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5rZXlTaXplQml0cyA9IDY0O1xuICAgICAgICB0aGlzLml2U2l6ZSA9IDg7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiREVTLUNCQ1wiO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmtleVNpemVCaXRzLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiB0aGlzLm5hbWUsIGxlbmd0aDogdGhpcy5rZXlTaXplQml0cyB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgaWYgKGtleS5kYXRhLmxlbmd0aCAhPT0gKHRoaXMua2V5U2l6ZUJpdHMgPj4gMykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogV3Jvbmcga2V5IHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIERlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIERlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgRGVzRWRlM0NiY1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5EZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMua2V5U2l6ZUJpdHMgPSAxOTI7XG4gICAgICAgIHRoaXMuaXZTaXplID0gODtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJERVMtRURFMy1DQkNcIjtcbiAgICB9XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRGVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogdGhpcy5rZXlTaXplQml0cyxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRGVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gRGVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRGVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogdGhpcy5uYW1lLCBsZW5ndGg6IHRoaXMua2V5U2l6ZUJpdHMgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIGlmIChrZXkuZGF0YS5sZW5ndGggIT09ICh0aGlzLmtleVNpemVCaXRzID4+IDMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImtleURhdGE6IFdyb25nIGtleSBzaXplXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBEZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBEZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldEp3a0FsZ29yaXRobShhbGdvcml0aG0pIHtcbiAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSBcIlJTQS1PQUVQXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IG1kU2l6ZSA9IC8oXFxkKykkLy5leGVjKGFsZ29yaXRobS5oYXNoLm5hbWUpWzFdO1xuICAgICAgICAgICAgcmV0dXJuIGBSU0EtT0FFUCR7bWRTaXplICE9PSBcIjFcIiA/IGAtJHttZFNpemV9YCA6IFwiXCJ9YDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiUlNBU1NBLVBLQ1MxLVYxXzVcIjpcbiAgICAgICAgICAgIHJldHVybiBgUlMkey8oXFxkKykkLy5leGVjKGFsZ29yaXRobS5oYXNoLm5hbWUpWzFdfWA7XG4gICAgICAgIGNhc2UgXCJSU0EtUFNTXCI6XG4gICAgICAgICAgICByZXR1cm4gYFBTJHsvKFxcZCspJC8uZXhlYyhhbGdvcml0aG0uaGFzaC5uYW1lKVsxXX1gO1xuICAgICAgICBjYXNlIFwiUlNBLVBLQ1MxXCI6XG4gICAgICAgICAgICByZXR1cm4gYFJTMWA7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQcml2YXRlS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHJpdmF0ZVwiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICByZXR1cm4gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLlJzYVByaXZhdGVLZXkpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiUlNBXCIsXG4gICAgICAgICAgICBhbGc6IGdldEp3a0FsZ29yaXRobSh0aGlzLmFsZ29yaXRobSksXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5Sc2FQcml2YXRlS2V5IH0pO1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IG51bGw7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHVibGljS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHVibGljXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnB1YmxpY0tleSwgY29yZS5hc24xLlJzYVB1YmxpY0tleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJSU0FcIixcbiAgICAgICAgICAgIGFsZzogZ2V0SndrQWxnb3JpdGhtKHRoaXMuYWxnb3JpdGhtKSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVB1YmxpY0tleSB9KTtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBudWxsO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBuZXcgUnNhUHJpdmF0ZUtleSgpO1xuICAgICAgICBwcml2YXRlS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHJpdmF0ZUtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBwcml2YXRlS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnByaXZhdGVLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IFJzYVB1YmxpY0tleSgpO1xuICAgICAgICBwdWJsaWNLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwdWJsaWNLZXkuZXh0cmFjdGFibGUgPSB0cnVlO1xuICAgICAgICBwdWJsaWNLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHVibGljS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0V4cG9uZW50ID0gQnVmZmVyJDEuY29uY2F0KFtcbiAgICAgICAgICAgIEJ1ZmZlciQxLmFsbG9jKDQgLSBhbGdvcml0aG0ucHVibGljRXhwb25lbnQuYnl0ZUxlbmd0aCwgMCksXG4gICAgICAgICAgICBCdWZmZXIkMS5mcm9tKGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCksXG4gICAgICAgIF0pLnJlYWRJbnQzMkJFKDApO1xuICAgICAgICBjb25zdCBrZXlzID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmMoXCJyc2FcIiwge1xuICAgICAgICAgICAgbW9kdWx1c0xlbmd0aDogYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgsXG4gICAgICAgICAgICBwdWJsaWNFeHBvbmVudCxcbiAgICAgICAgICAgIHB1YmxpY0tleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3BraVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByaXZhdGVLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcHJpdmF0ZUtleS5kYXRhID0ga2V5cy5wcml2YXRlS2V5O1xuICAgICAgICBwdWJsaWNLZXkuZGF0YSA9IGtleXMucHVibGljS2V5O1xuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGp3ayA9IGtleURhdGE7XG4gICAgICAgICAgICAgICAgaWYgKGp3ay5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5Sc2FQcml2YXRlS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5Sc2FQdWJsaWNLZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UobmV3IFVpbnQ4QXJyYXkoa2V5RGF0YSksIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wdWJsaWNLZXksIGNvcmUuYXNuMS5Sc2FQdWJsaWNLZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UobmV3IFVpbnQ4QXJyYXkoa2V5RGF0YSksIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLlJzYVByaXZhdGVLZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3BrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUlNBLVBTU1wiOlxuICAgICAgICAgICAgY2FzZSBcIlJTQVNTQS1QS0NTMS1WMV81XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnblJzYShhbGdvcml0aG0sIGtleSwgZGF0YSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgdmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUlNBLVBTU1wiOlxuICAgICAgICAgICAgY2FzZSBcIlJTQVNTQS1QS0NTMS1WMV81XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5U1NBKGFsZ29yaXRobSwga2V5LCBkYXRhLCBzaWduYXR1cmUpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUlNBLU9BRVBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0T0FFUChhbGdvcml0aG0sIGtleSwgZGF0YSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJSU0EtT0FFUFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRPQUVQKGFsZ29yaXRobSwga2V5LCBkYXRhKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBpbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gbnVsbDtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoYXNuS2V5KTtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IFJzYVByaXZhdGVLZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0ucHVibGljRXhwb25lbnQgPSBuZXcgVWludDhBcnJheShhc25LZXkucHVibGljRXhwb25lbnQpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPSBhc25LZXkubW9kdWx1cy5ieXRlTGVuZ3RoIDw8IDM7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gbnVsbDtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShhc25LZXkpO1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgUnNhUHVibGljS2V5KCk7XG4gICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50ID0gbmV3IFVpbnQ4QXJyYXkoYXNuS2V5LnB1YmxpY0V4cG9uZW50KTtcbiAgICAgICAga2V5LmFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoID0gYXNuS2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCA8PCAzO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGdldENyeXB0b0FsZ29yaXRobShhbGcpIHtcbiAgICAgICAgc3dpdGNoIChhbGcuaGFzaC5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEExXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEyNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTM4NFwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBNTEyXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBMy0yNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEzLTM4NFwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTMtNTEyXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtLmhhc2g6IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBzaWduUnNhKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IHRoaXMuZ2V0Q3J5cHRvQWxnb3JpdGhtKGtleS5hbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG8uY3JlYXRlU2lnbihjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSA9PT0gXCJSU0EtUFNTXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucGFkZGluZyA9IGNyeXB0by5jb25zdGFudHMuUlNBX1BLQ1MxX1BTU19QQURESU5HO1xuICAgICAgICAgICAgb3B0aW9ucy5zYWx0TGVuZ3RoID0gYWxnb3JpdGhtLnNhbHRMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmVyLnNpZ24ob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIHZlcmlmeVNTQShhbGdvcml0aG0sIGtleSwgZGF0YSwgc2lnbmF0dXJlKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IHRoaXMuZ2V0Q3J5cHRvQWxnb3JpdGhtKGtleS5hbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG8uY3JlYXRlVmVyaWZ5KGNyeXB0b0FsZyk7XG4gICAgICAgIHNpZ25lci51cGRhdGUoQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSA9PT0gXCJSU0EtUFNTXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucGFkZGluZyA9IGNyeXB0by5jb25zdGFudHMuUlNBX1BLQ1MxX1BTU19QQURESU5HO1xuICAgICAgICAgICAgb3B0aW9ucy5zYWx0TGVuZ3RoID0gYWxnb3JpdGhtLnNhbHRMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2sgPSBzaWduZXIudmVyaWZ5KG9wdGlvbnMsIHNpZ25hdHVyZSk7XG4gICAgICAgIHJldHVybiBvaztcbiAgICB9XG4gICAgc3RhdGljIGVuY3J5cHRPQUVQKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYCxcbiAgICAgICAgICAgIHBhZGRpbmc6IGNyeXB0by5jb25zdGFudHMuUlNBX1BLQ1MxX09BRVBfUEFERElORyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5sYWJlbCkgO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvLnB1YmxpY0VuY3J5cHQob3B0aW9ucywgZGF0YSkpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGRlY3J5cHRPQUVQKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGAtLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1gLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfT0FFUF9QQURESU5HLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmxhYmVsKSA7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShjcnlwdG8ucHJpdmF0ZURlY3J5cHQob3B0aW9ucywgZGF0YSkpLmJ1ZmZlcjtcbiAgICB9XG59XG5Sc2FDcnlwdG8ucHVibGljS2V5VXNhZ2VzID0gW1widmVyaWZ5XCIsIFwiZW5jcnlwdFwiLCBcIndyYXBLZXlcIl07XG5Sc2FDcnlwdG8ucHJpdmF0ZUtleVVzYWdlcyA9IFtcInNpZ25cIiwgXCJkZWNyeXB0XCIsIFwidW53cmFwS2V5XCJdO1xuXG5jbGFzcyBSc2FTc2FQcm92aWRlciBleHRlbmRzIGNvcmUuUnNhU3NhUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1xuICAgICAgICAgICAgXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiLFxuICAgICAgICAgICAgXCJzaGFrZTEyOFwiLCBcInNoYWtlMjU2XCIsXG4gICAgICAgICAgICBcIlNIQTMtMjU2XCIsIFwiU0hBMy0zODRcIiwgXCJTSEEzLTUxMlwiXG4gICAgICAgIF07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5zaWduKGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgUnNhUHNzUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlJzYVBzc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtcyA9IFtcbiAgICAgICAgICAgIFwiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIixcbiAgICAgICAgICAgIFwic2hha2UxMjhcIiwgXCJzaGFrZTI1NlwiLFxuICAgICAgICAgICAgXCJTSEEzLTI1NlwiLCBcIlNIQTMtMzg0XCIsIFwiU0hBMy01MTJcIlxuICAgICAgICBdO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgUnNhQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uc2lnbihhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by52ZXJpZnkoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgUnNhQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQcml2YXRlS2V5IHx8IGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHVibGljS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IFJTQSBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFNoYUNyeXB0byB7XG4gICAgc3RhdGljIHNpemUoYWxnb3JpdGhtKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0xXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE2MDtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMjU2XCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMjU2O1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0zODRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAzODQ7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTUxMlwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQTMtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDUxMjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0xXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMVwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEyNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMzg0XCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTUxMlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMjU2XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMy0yNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTMtMzg0XCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEzLTUxMlwiO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgZGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICBjb25zdCBoYXNoQWxnID0gdGhpcy5nZXRBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChoYXNoQWxnKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhhc2gpLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNsYXNzIFJzYU9hZXBQcm92aWRlciBleHRlbmRzIGNvcmUuUnNhT2FlcFByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgUnNhQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG4gICAgICAgIGNvbnN0IGtleVNpemUgPSBNYXRoLmNlaWwoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPj4gMyk7XG4gICAgICAgIGNvbnN0IGhhc2hTaXplID0gU2hhQ3J5cHRvLnNpemUoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gpID4+IDM7XG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBkYXRhVmlldy5ieXRlTGVuZ3RoO1xuICAgICAgICBjb25zdCBwc0xlbmd0aCA9IGtleVNpemUgLSBkYXRhTGVuZ3RoIC0gMiAqIGhhc2hTaXplIC0gMjtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPiBrZXlTaXplIC0gMiAqIGhhc2hTaXplIC0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YSB0b28gbGFyZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG5ldyBVaW50OEFycmF5KGtleVNpemUpO1xuICAgICAgICBjb25zdCBzZWVkID0gbWVzc2FnZS5zdWJhcnJheSgxLCBoYXNoU2l6ZSArIDEpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2sgPSBtZXNzYWdlLnN1YmFycmF5KGhhc2hTaXplICsgMSk7XG4gICAgICAgIGRhdGFCbG9jay5zZXQoZGF0YVZpZXcsIGhhc2hTaXplICsgcHNMZW5ndGggKyAxKTtcbiAgICAgICAgY29uc3QgbGFiZWxIYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKSlcbiAgICAgICAgICAgIC51cGRhdGUoY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGFsZ29yaXRobS5sYWJlbCB8fCBuZXcgVWludDhBcnJheSgwKSkpXG4gICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgIGRhdGFCbG9jay5zZXQobGFiZWxIYXNoLCAwKTtcbiAgICAgICAgZGF0YUJsb2NrW2hhc2hTaXplICsgcHNMZW5ndGhdID0gMTtcbiAgICAgICAgY3J5cHRvLnJhbmRvbUZpbGxTeW5jKHNlZWQpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2tNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBzZWVkLCBkYXRhQmxvY2subGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQmxvY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFCbG9ja1tpXSBePSBkYXRhQmxvY2tNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlZWRNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBkYXRhQmxvY2ssIHNlZWQubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzZWVkW2ldIF49IHNlZWRNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW50ZXJuYWxLZXkucGVtKSB7XG4gICAgICAgICAgICBpbnRlcm5hbEtleS5wZW0gPSBgLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG4ke2ludGVybmFsS2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwa2NzMCA9IGNyeXB0by5wdWJsaWNFbmNyeXB0KHtcbiAgICAgICAgICAgIGtleTogaW50ZXJuYWxLZXkucGVtLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfTk9fUEFERElORyxcbiAgICAgICAgfSwgQnVmZmVyJDEuZnJvbShtZXNzYWdlKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShwa2NzMCkuYnVmZmVyO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3Qga2V5U2l6ZSA9IE1hdGguY2VpbChpbnRlcm5hbEtleS5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA+PiAzKTtcbiAgICAgICAgY29uc3QgaGFzaFNpemUgPSBTaGFDcnlwdG8uc2l6ZShpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaCkgPj4gMztcbiAgICAgICAgY29uc3QgZGF0YUxlbmd0aCA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggIT09IGtleVNpemUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhZCBkYXRhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW50ZXJuYWxLZXkucGVtKSB7XG4gICAgICAgICAgICBpbnRlcm5hbEtleS5wZW0gPSBgLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXFxuJHtpbnRlcm5hbEtleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwa2NzMCA9IGNyeXB0by5wcml2YXRlRGVjcnlwdCh7XG4gICAgICAgICAgICBrZXk6IGludGVybmFsS2V5LnBlbSxcbiAgICAgICAgICAgIHBhZGRpbmc6IGNyeXB0by5jb25zdGFudHMuUlNBX05PX1BBRERJTkcsXG4gICAgICAgIH0sIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICBjb25zdCB6ID0gcGtjczBbMF07XG4gICAgICAgIGNvbnN0IHNlZWQgPSBwa2NzMC5zdWJhcnJheSgxLCBoYXNoU2l6ZSArIDEpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2sgPSBwa2NzMC5zdWJhcnJheShoYXNoU2l6ZSArIDEpO1xuICAgICAgICBpZiAoeiAhPT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVjcnlwdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VlZE1hc2sgPSB0aGlzLm1nZjEoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gsIGRhdGFCbG9jaywgc2VlZC5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHNlZWRbaV0gXj0gc2VlZE1hc2tbaV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YUJsb2NrTWFzayA9IHRoaXMubWdmMShpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaCwgc2VlZCwgZGF0YUJsb2NrLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YUJsb2NrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkYXRhQmxvY2tbaV0gXj0gZGF0YUJsb2NrTWFza1tpXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYWJlbEhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaC5uYW1lLnJlcGxhY2UoXCItXCIsIFwiXCIpKVxuICAgICAgICAgICAgLnVwZGF0ZShjb3JlLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYWxnb3JpdGhtLmxhYmVsIHx8IG5ldyBVaW50OEFycmF5KDApKSlcbiAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYXNoU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobGFiZWxIYXNoW2ldICE9PSBkYXRhQmxvY2tbaV0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyeXB0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcHNFbmQgPSBoYXNoU2l6ZTtcbiAgICAgICAgZm9yICg7IHBzRW5kIDwgZGF0YUJsb2NrLmxlbmd0aDsgcHNFbmQrKykge1xuICAgICAgICAgICAgY29uc3QgcHN6ID0gZGF0YUJsb2NrW3BzRW5kXTtcbiAgICAgICAgICAgIGlmIChwc3ogPT09IDEpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwc3ogIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyeXB0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHNFbmQgPT09IGRhdGFCbG9jay5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3J5cHRpb24gZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHBrY3MwID0gZGF0YUJsb2NrLnN1YmFycmF5KHBzRW5kICsgMSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShwa2NzMCkuYnVmZmVyO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgUnNhQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQcml2YXRlS2V5IHx8IGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHVibGljS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IFJTQSBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWdmMShhbGdvcml0aG0sIHNlZWQsIGxlbmd0aCA9IDApIHtcbiAgICAgICAgY29uc3QgaGFzaFNpemUgPSBTaGFDcnlwdG8uc2l6ZShhbGdvcml0aG0pID4+IDM7XG4gICAgICAgIGNvbnN0IG1hc2sgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgICAgICBjb25zdCBjb3VudGVyID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG4gICAgICAgIGNvbnN0IGNodW5rcyA9IE1hdGguY2VpbChsZW5ndGggLyBoYXNoU2l6ZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2h1bmtzOyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXJbMF0gPSBpID4+PiAyNDtcbiAgICAgICAgICAgIGNvdW50ZXJbMV0gPSAoaSA+Pj4gMTYpICYgMjU1O1xuICAgICAgICAgICAgY291bnRlclsyXSA9IChpID4+PiA4KSAmIDI1NTtcbiAgICAgICAgICAgIGNvdW50ZXJbM10gPSBpICYgMjU1O1xuICAgICAgICAgICAgY29uc3Qgc3VibWFzayA9IG1hc2suc3ViYXJyYXkoaSAqIGhhc2hTaXplKTtcbiAgICAgICAgICAgIGxldCBjaHVuayA9IGNyeXB0by5jcmVhdGVIYXNoKGFsZ29yaXRobS5uYW1lLnJlcGxhY2UoXCItXCIsIFwiXCIpKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoc2VlZClcbiAgICAgICAgICAgICAgICAudXBkYXRlKGNvdW50ZXIpXG4gICAgICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICAgICAgICAgICAgaWYgKGNodW5rLmxlbmd0aCA+IHN1Ym1hc2subGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2h1bmsgPSBjaHVuay5zdWJhcnJheSgwLCBzdWJtYXNrLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJtYXNrLnNldChjaHVuayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hc2s7XG4gICAgfVxufVxuXG5jbGFzcyBSc2FFc1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUlNBRVMtUEtDUzEtdjFfNVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1wiZW5jcnlwdFwiLCBcIndyYXBLZXlcIl0sXG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJkZWNyeXB0XCIsIFwidW53cmFwS2V5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgUnNhQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInB1YmxpY0V4cG9uZW50XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0ucHVibGljRXhwb25lbnQgJiYgYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50IGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWNFeHBvbmVudDogTWlzc2luZyBvciBub3QgYSBVaW50OEFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB1YmxpY0V4cG9uZW50ID0gQ29udmVydC5Ub0Jhc2U2NChhbGdvcml0aG0ucHVibGljRXhwb25lbnQpO1xuICAgICAgICBpZiAoIShwdWJsaWNFeHBvbmVudCA9PT0gXCJBdz09XCIgfHwgcHVibGljRXhwb25lbnQgPT09IFwiQVFBQlwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInB1YmxpY0V4cG9uZW50OiBNdXN0IGJlIFszXSBvciBbMSwwLDFdXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJtb2R1bHVzTGVuZ3RoXCIpO1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDEwMjQ6XG4gICAgICAgICAgICBjYXNlIDIwNDg6XG4gICAgICAgICAgICBjYXNlIDQwOTY6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJtb2R1bHVzTGVuZ3RoOiBNdXN0IGJlIDEwMjQsIDIwNDgsIG9yIDQwOTZcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnRvQ3J5cHRvT3B0aW9ucyhrZXkpO1xuICAgICAgICBjb25zdCBlbmMgPSBjcnlwdG8ucHVibGljRW5jcnlwdChvcHRpb25zLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnRvQ3J5cHRvT3B0aW9ucyhrZXkpO1xuICAgICAgICBjb25zdCBkZWMgPSBjcnlwdG8ucHJpdmF0ZURlY3J5cHQob3B0aW9ucywgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0NyeXB0b09wdGlvbnMoa2V5KSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBrZXkudHlwZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiBgLS0tLS1CRUdJTiAke3R5cGV9IEtFWS0tLS0tXFxuJHtnZXRDcnlwdG9LZXkoa2V5KS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EICR7dHlwZX0gS0VZLS0tLS1gLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfUEFERElORyxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmNvbnN0IG5hbWVkT0lEcyA9IHtcbiAgICBcIjEuMi44NDAuMTAwNDUuMy4xLjdcIjogXCJQLTI1NlwiLFxuICAgIFwiUC0yNTZcIjogXCIxLjIuODQwLjEwMDQ1LjMuMS43XCIsXG4gICAgXCIxLjMuMTMyLjAuMzRcIjogXCJQLTM4NFwiLFxuICAgIFwiUC0zODRcIjogXCIxLjMuMTMyLjAuMzRcIixcbiAgICBcIjEuMy4xMzIuMC4zNVwiOiBcIlAtNTIxXCIsXG4gICAgXCJQLTUyMVwiOiBcIjEuMy4xMzIuMC4zNVwiLFxuICAgIFwiMS4zLjEzMi4wLjEwXCI6IFwiSy0yNTZcIixcbiAgICBcIkstMjU2XCI6IFwiMS4zLjEzMi4wLjEwXCIsXG4gICAgXCJicmFpbnBvb2xQMTYwcjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMVwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjFcIjogXCJicmFpbnBvb2xQMTYwcjFcIixcbiAgICBcImJyYWlucG9vbFAxNjB0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4yXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMlwiOiBcImJyYWlucG9vbFAxNjB0MVwiLFxuICAgIFwiYnJhaW5wb29sUDE5MnIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjNcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4zXCI6IFwiYnJhaW5wb29sUDE5MnIxXCIsXG4gICAgXCJicmFpbnBvb2xQMTkydDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuNFwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjRcIjogXCJicmFpbnBvb2xQMTkydDFcIixcbiAgICBcImJyYWlucG9vbFAyMjRyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS41XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuNVwiOiBcImJyYWlucG9vbFAyMjRyMVwiLFxuICAgIFwiYnJhaW5wb29sUDIyNHQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjZcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS42XCI6IFwiYnJhaW5wb29sUDIyNHQxXCIsXG4gICAgXCJicmFpbnBvb2xQMjU2cjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuN1wiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjdcIjogXCJicmFpbnBvb2xQMjU2cjFcIixcbiAgICBcImJyYWlucG9vbFAyNTZ0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS44XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuOFwiOiBcImJyYWlucG9vbFAyNTZ0MVwiLFxuICAgIFwiYnJhaW5wb29sUDMyMHIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjlcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS45XCI6IFwiYnJhaW5wb29sUDMyMHIxXCIsXG4gICAgXCJicmFpbnBvb2xQMzIwdDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTBcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMFwiOiBcImJyYWlucG9vbFAzMjB0MVwiLFxuICAgIFwiYnJhaW5wb29sUDM4NHIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjExXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTFcIjogXCJicmFpbnBvb2xQMzg0cjFcIixcbiAgICBcImJyYWlucG9vbFAzODR0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMlwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjEyXCI6IFwiYnJhaW5wb29sUDM4NHQxXCIsXG4gICAgXCJicmFpbnBvb2xQNTEycjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTNcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xM1wiOiBcImJyYWlucG9vbFA1MTJyMVwiLFxuICAgIFwiYnJhaW5wb29sUDUxMnQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjE0XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTRcIjogXCJicmFpbnBvb2xQNTEydDFcIixcbn07XG5mdW5jdGlvbiBnZXRPaWRCeU5hbWVkQ3VydmUkMShuYW1lZEN1cnZlKSB7XG4gICAgY29uc3Qgb2lkID0gbmFtZWRPSURzW25hbWVkQ3VydmVdO1xuICAgIGlmICghb2lkKSB7XG4gICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgY29udmVydCBXZWJDcnlwdG8gbmFtZWQgY3VydmUgJyR7bmFtZWRDdXJ2ZX0nIHRvIE9JRGApO1xuICAgIH1cbiAgICByZXR1cm4gb2lkO1xufVxuXG5jbGFzcyBFY1ByaXZhdGVLZXkgZXh0ZW5kcyBBc3ltbWV0cmljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwcml2YXRlXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuRWNQcml2YXRlS2V5KTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIkVDXCIsXG4gICAgICAgICAgICBjcnY6IHRoaXMuYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5jcnYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgZ2V0IG5hbWVkIGN1cnZlIGZyb20gSldLLiBQcm9wZXJ0eSAnY3J2JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUobmV3IGNvcmUuYXNuMS5PYmplY3RJZGVudGlmaWVyKGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKGpzb24uY3J2KSkpO1xuICAgICAgICBjb25zdCBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGpzb24sIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuRWNQcml2YXRlS2V5IH0pO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXkgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXkpO1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBFY1B1YmxpY0tleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBuZXcgY29yZS5hc24xLkVjUHVibGljS2V5KGtleUluZm8ucHVibGljS2V5KTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIkVDXCIsXG4gICAgICAgICAgICBjcnY6IHRoaXMuYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5jcnYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgZ2V0IG5hbWVkIGN1cnZlIGZyb20gSldLLiBQcm9wZXJ0eSAnY3J2JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1B1YmxpY0tleSB9KTtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIoZ2V0T2lkQnlOYW1lZEN1cnZlJDEoanNvbi5jcnYpKSk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5ID0gQXNuU2VyaWFsaXplci50b0FTTihrZXkpLnZhbHVlSGV4O1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBTaGExUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEtMVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTI1NlByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBLTI1NlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTM4NFByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBLTM4NFwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTUxMlByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBLTUxMlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTMyNTZQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQTMtMjU2XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMzM4NFByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBMy0zODRcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEzNTEyUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEzLTUxMlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIEVjQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBuZXcgRWNQcml2YXRlS2V5KCk7XG4gICAgICAgIHByaXZhdGVLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwcml2YXRlS2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIHByaXZhdGVLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHJpdmF0ZUtleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgRWNQdWJsaWNLZXkoKTtcbiAgICAgICAgcHVibGljS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHVibGljS2V5LmV4dHJhY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgcHVibGljS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnB1YmxpY0tleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBrZXlzID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmMoXCJlY1wiLCB7XG4gICAgICAgICAgICBuYW1lZEN1cnZlOiB0aGlzLmdldE9wZW5TU0xOYW1lZEN1cnZlKGFsZ29yaXRobS5uYW1lZEN1cnZlKSxcbiAgICAgICAgICAgIHB1YmxpY0tleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3BraVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByaXZhdGVLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcHJpdmF0ZUtleS5kYXRhID0ga2V5cy5wcml2YXRlS2V5O1xuICAgICAgICBwdWJsaWNLZXkuZGF0YSA9IGtleXMucHVibGljS2V5O1xuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgc2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShhbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IHNpZ25lciA9IGNyeXB0by5jcmVhdGVTaWduKGNyeXB0b0FsZyk7XG4gICAgICAgIHNpZ25lci51cGRhdGUoQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25lci5zaWduKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZSA9IEFzblBhcnNlci5wYXJzZShzaWduYXR1cmUsIGNvcmUuYXNuMS5FY0RzYVNpZ25hdHVyZSk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZVJhdyA9IGNvcmUuRWNVdGlscy5lbmNvZGVTaWduYXR1cmUoZWNTaWduYXR1cmUsIGNvcmUuRWNDdXJ2ZXMuZ2V0KGtleS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSkuc2l6ZSk7XG4gICAgICAgIHJldHVybiBzaWduYXR1cmVSYXcuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgdmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gU2hhQ3J5cHRvLmdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG8uY3JlYXRlVmVyaWZ5KGNyeXB0b0FsZyk7XG4gICAgICAgIHNpZ25lci51cGRhdGUoQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZSA9IG5ldyBjb3JlLmFzbjEuRWNEc2FTaWduYXR1cmUoKTtcbiAgICAgICAgY29uc3QgbmFtZWRDdXJ2ZSA9IGNvcmUuRWNDdXJ2ZXMuZ2V0KGtleS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZVBvaW50ID0gY29yZS5FY1V0aWxzLmRlY29kZVNpZ25hdHVyZShzaWduYXR1cmUsIG5hbWVkQ3VydmUuc2l6ZSk7XG4gICAgICAgIGVjU2lnbmF0dXJlLnIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmVQb2ludC5yKTtcbiAgICAgICAgZWNTaWduYXR1cmUucyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZVBvaW50LnMpO1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZVJhdyA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoZWNTaWduYXR1cmUpKTtcbiAgICAgICAgY29uc3Qgb2sgPSBzaWduZXIudmVyaWZ5KG9wdGlvbnMsIGVjU2lnbmF0dXJlUmF3KTtcbiAgICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSB0aGlzLmdldE9wZW5TU0xOYW1lZEN1cnZlKGJhc2VLZXkuYWxnb3JpdGhtLm5hbWVkQ3VydmUpO1xuICAgICAgICBjb25zdCBlY2RoID0gY3J5cHRvLmNyZWF0ZUVDREgoY3J5cHRvQWxnKTtcbiAgICAgICAgY29uc3QgYXNuUHJpdmF0ZUtleSA9IEFzblBhcnNlci5wYXJzZShiYXNlS2V5LmRhdGEsIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgIGNvbnN0IGFzbkVjUHJpdmF0ZUtleSA9IEFzblBhcnNlci5wYXJzZShhc25Qcml2YXRlS2V5LnByaXZhdGVLZXksIGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkpO1xuICAgICAgICBlY2RoLnNldFByaXZhdGVLZXkoQnVmZmVyJDEuZnJvbShhc25FY1ByaXZhdGVLZXkucHJpdmF0ZUtleSkpO1xuICAgICAgICBjb25zdCBhc25QdWJsaWNLZXkgPSBBc25QYXJzZXIucGFyc2UoYWxnb3JpdGhtLnB1YmxpYy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBlY2RoLmNvbXB1dGVTZWNyZXQoQnVmZmVyJDEuZnJvbShhc25QdWJsaWNLZXkucHVibGljS2V5KSk7XG4gICAgICAgIGlmIChsZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiaXRzKS5idWZmZXIuc2xpY2UoMCwgbGVuZ3RoID4+IDMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWJsaWNLZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKGtleS5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1YmxpY0tleUluZm8ucHVibGljS2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsIHBrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuRWNQcml2YXRlS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1B1YmxpY0tleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBuZXcgY29yZS5hc24xLkVjUHVibGljS2V5KGtleURhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IG5ldyBjb3JlLmFzbjEuRWNQdWJsaWNLZXkoa2V5SW5mby5wdWJsaWNLZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0S2V5UGFyYW1ldGVycyhrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzLCBhbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuRWNQcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydEtleVBhcmFtZXRlcnMoa2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMsIGFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCAncGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXNzZXJ0S2V5UGFyYW1ldGVycyhwYXJhbWV0ZXJzLCBuYW1lZEN1cnZlKSB7XG4gICAgICAgIGlmICghcGFyYW1ldGVycykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQ3J5cHRvRXJyb3IoXCJLZXkgaW5mbyBkb2Vzbid0IGhhdmUgcmVxdWlyZWQgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmFtZWRDdXJ2ZUlkZW50aWZpZXIgPSBcIlwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmFtZWRDdXJ2ZUlkZW50aWZpZXIgPSBBc25QYXJzZXIucGFyc2UocGFyYW1ldGVycywgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5DcnlwdG9FcnJvcihcIkNhbm5vdCByZWFkIGtleSBpbmZvIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKG5hbWVkQ3VydmUpICE9PSBuYW1lZEN1cnZlSWRlbnRpZmllcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQ3J5cHRvRXJyb3IoXCJLZXkgaW5mbyBwYXJhbWV0ZXIgZG9lc24ndCBtYXRjaCB0byBuYW1lZCBjdXJ2ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjEwMDQ1LjIuMVwiO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG5ldyBjb3JlLmFzbjEuT2JqZWN0SWRlbnRpZmllcihnZXRPaWRCeU5hbWVkQ3VydmUkMShhbGdvcml0aG0ubmFtZWRDdXJ2ZSkpKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoYXNuS2V5KTtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEVjUHJpdmF0ZUtleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG4gICAgICAgIGNvbnN0IG5hbWVkQ3VydmUgPSBnZXRPaWRCeU5hbWVkQ3VydmUkMShhbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIobmFtZWRDdXJ2ZSkpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IGFzbktleS52YWx1ZTtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEVjUHVibGljS2V5KCk7XG4gICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGdldE9wZW5TU0xOYW1lZEN1cnZlKGN1cnZlKSB7XG4gICAgICAgIHN3aXRjaCAoY3VydmUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlAtMjU2XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwicHJpbWUyNTZ2MVwiO1xuICAgICAgICAgICAgY2FzZSBcIkstMjU2XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2VjcDI1NmsxXCI7XG4gICAgICAgICAgICBjYXNlIFwiUC0zODRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzZWNwMzg0cjFcIjtcbiAgICAgICAgICAgIGNhc2UgXCJQLTUyMVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNlY3A1MjFyMVwiO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VydmU7XG4gICAgICAgIH1cbiAgICB9XG59XG5FY0NyeXB0by5wdWJsaWNLZXlVc2FnZXMgPSBbXCJ2ZXJpZnlcIl07XG5FY0NyeXB0by5wcml2YXRlS2V5VXNhZ2VzID0gW1wic2lnblwiLCBcImRlcml2ZUtleVwiLCBcImRlcml2ZUJpdHNcIl07XG5cbmNsYXNzIEVjZHNhUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkVjZHNhUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gY29yZS5FY0N1cnZlcy5uYW1lcztcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtcyA9IFtcbiAgICAgICAgICAgIFwiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIixcbiAgICAgICAgICAgIFwic2hha2UxMjhcIiwgXCJzaGFrZTI1NlwiLFxuICAgICAgICAgICAgXCJTSEEzLTI1NlwiLCBcIlNIQTMtMzg0XCIsIFwiU0hBMy01MTJcIlxuICAgICAgICBdO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEVjQ3J5cHRvLnNpZ24oYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBFY0NyeXB0by52ZXJpZnkoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gRWNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBFY0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgRWNQcml2YXRlS2V5IHx8IGludGVybmFsS2V5IGluc3RhbmNlb2YgRWNQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgRUMgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBFY2RoUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkVjZGhQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBjb3JlLkVjQ3VydmVzLm5hbWVzO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gRWNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBFY0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgRWNQcml2YXRlS2V5IHx8IGludGVybmFsS2V5IGluc3RhbmNlb2YgRWNQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgRUMgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBiaXRzID0gYXdhaXQgRWNDcnlwdG8uZGVyaXZlQml0cyh7IC4uLmFsZ29yaXRobSwgcHVibGljOiBnZXRDcnlwdG9LZXkoYWxnb3JpdGhtLnB1YmxpYykgfSwgZ2V0Q3J5cHRvS2V5KGJhc2VLZXkpLCBsZW5ndGgpO1xuICAgICAgICByZXR1cm4gYml0cztcbiAgICB9XG59XG5cbmNvbnN0IGVkT0lEcyA9IHtcbiAgICBbY29yZS5hc24xLmlkRWQ0NDhdOiBcIkVkNDQ4XCIsXG4gICAgXCJlZDQ0OFwiOiBjb3JlLmFzbjEuaWRFZDQ0OCxcbiAgICBbY29yZS5hc24xLmlkWDQ0OF06IFwiWDQ0OFwiLFxuICAgIFwieDQ0OFwiOiBjb3JlLmFzbjEuaWRYNDQ4LFxuICAgIFtjb3JlLmFzbjEuaWRFZDI1NTE5XTogXCJFZDI1NTE5XCIsXG4gICAgXCJlZDI1NTE5XCI6IGNvcmUuYXNuMS5pZEVkMjU1MTksXG4gICAgW2NvcmUuYXNuMS5pZFgyNTUxOV06IFwiWDI1NTE5XCIsXG4gICAgXCJ4MjU1MTlcIjogY29yZS5hc24xLmlkWDI1NTE5LFxufTtcbmZ1bmN0aW9uIGdldE9pZEJ5TmFtZWRDdXJ2ZShuYW1lZEN1cnZlKSB7XG4gICAgY29uc3Qgb2lkID0gZWRPSURzW25hbWVkQ3VydmUudG9Mb3dlckNhc2UoKV07XG4gICAgaWYgKCFvaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBjb252ZXJ0IFdlYkNyeXB0byBuYW1lZCBjdXJ2ZSAnJHtuYW1lZEN1cnZlfScgdG8gT0lEYCk7XG4gICAgfVxuICAgIHJldHVybiBvaWQ7XG59XG5cbmNsYXNzIEVkUHJpdmF0ZUtleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInByaXZhdGVcIjtcbiAgICB9XG4gICAgZ2V0S2V5KCkge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKHRoaXMuZGF0YSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiT0tQXCIsXG4gICAgICAgICAgICBjcnY6IHRoaXMuYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5jcnYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgZ2V0IG5hbWVkIGN1cnZlIGZyb20gSldLLiBQcm9wZXJ0eSAnY3J2JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBnZXRPaWRCeU5hbWVkQ3VydmUoanNvbi5jcnYpO1xuICAgICAgICBjb25zdCBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGpzb24sIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuQ3VydmVQcml2YXRlS2V5IH0pO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXkgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXkpO1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBFZFB1YmxpY0tleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBrZXlJbmZvLnB1YmxpY0tleTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIk9LUFwiLFxuICAgICAgICAgICAgY3J2OiB0aGlzLmFsZ29yaXRobS5uYW1lZEN1cnZlLFxuICAgICAgICAgICAga2V5X29wczogdGhpcy51c2FnZXMsXG4gICAgICAgICAgICBleHQ6IHRoaXMuZXh0cmFjdGFibGUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGpzb24sIHtcbiAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwoa2V5KVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIWpzb24uY3J2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGdldCBuYW1lZCBjdXJ2ZSBmcm9tIEpXSy4gUHJvcGVydHkgJ2NydicgaXMgcmVxdWlyZWRgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWpzb24ueCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgcHJvcGVydHkgZnJvbSBKV0suIFByb3BlcnR5ICd4JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gZ2V0T2lkQnlOYW1lZEN1cnZlKGpzb24uY3J2KTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi54KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuY2xhc3MgRWRDcnlwdG8ge1xuICAgIHN0YXRpYyBhc3luYyBnZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IG5ldyBFZFByaXZhdGVLZXkoKTtcbiAgICAgICAgcHJpdmF0ZUtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHByaXZhdGVLZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAgcHJpdmF0ZUtleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wcml2YXRlS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBFZFB1YmxpY0tleSgpO1xuICAgICAgICBwdWJsaWNLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwdWJsaWNLZXkuZXh0cmFjdGFibGUgPSB0cnVlO1xuICAgICAgICBwdWJsaWNLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHVibGljS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhbGdvcml0aG0ubmFtZWRDdXJ2ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBrZXlzID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmModHlwZSwge1xuICAgICAgICAgICAgcHVibGljS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJpdmF0ZUtleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwicGtjczhcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBwcml2YXRlS2V5LmRhdGEgPSBrZXlzLnByaXZhdGVLZXk7XG4gICAgICAgIHB1YmxpY0tleS5kYXRhID0ga2V5cy5wdWJsaWNLZXk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXksXG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBzaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5zaWduKG51bGwsIEJ1ZmZlciQxLmZyb20oZGF0YSksIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmUpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgdmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9rID0gY3J5cHRvLnZlcmlmeShudWxsLCBCdWZmZXIkMS5mcm9tKGRhdGEpLCBvcHRpb25zLCBCdWZmZXIkMS5mcm9tKHNpZ25hdHVyZSkpO1xuICAgICAgICByZXR1cm4gb2s7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoe1xuICAgICAgICAgICAga2V5OiBhbGdvcml0aG0ucHVibGljLmRhdGEsXG4gICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBjcnlwdG8uY3JlYXRlUHJpdmF0ZUtleSh7XG4gICAgICAgICAgICBrZXk6IGJhc2VLZXkuZGF0YSxcbiAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgIHR5cGU6IFwicGtjczhcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBjcnlwdG8uZGlmZmllSGVsbG1hbih7XG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJpdHMpLmJ1ZmZlci5zbGljZSgwLCBsZW5ndGggPj4gMyk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBleHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KTtcbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOlxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoa2V5LmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHB1YmxpY0tleUluZm8gPSBBc25QYXJzZXIucGFyc2Uoa2V5LmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVibGljS2V5SW5mby5wdWJsaWNLZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncmF3JywgcGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGp3ayA9IGtleURhdGE7XG4gICAgICAgICAgICAgICAgaWYgKGp3ay5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFqd2sueCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleURhdGE6IENhbm5vdCBnZXQgcmVxdWlyZWQgJ3gnIGZpbGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShDb252ZXJ0LkZyb21CYXNlNjRVcmwoandrLngpLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjoge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UobmV3IFVpbnQ4QXJyYXkoa2V5RGF0YSksIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoa2V5SW5mby5wdWJsaWNLZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UobmV3IFVpbnQ4QXJyYXkoa2V5RGF0YSksIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLkN1cnZlUHJpdmF0ZUtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncmF3JywgJ3BrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEVkUHJpdmF0ZUtleSgpO1xuICAgICAgICBrZXkuZnJvbUpTT04oe1xuICAgICAgICAgICAgY3J2OiBhbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGQ6IENvbnZlcnQuVG9CYXNlNjRVcmwoYXNuS2V5LmQpLFxuICAgICAgICB9KTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBFZFB1YmxpY0tleSgpO1xuICAgICAgICBrZXkuZnJvbUpTT04oe1xuICAgICAgICAgICAgY3J2OiBhbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwoYXNuS2V5KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG59XG5FZENyeXB0by5wdWJsaWNLZXlVc2FnZXMgPSBbXCJ2ZXJpZnlcIl07XG5FZENyeXB0by5wcml2YXRlS2V5VXNhZ2VzID0gW1wic2lnblwiLCBcImRlcml2ZUtleVwiLCBcImRlcml2ZUJpdHNcIl07XG5cbmNsYXNzIEVkRHNhUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkVkRHNhUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFZENyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBuYW1lZEN1cnZlOiBhbGdvcml0aG0ubmFtZWRDdXJ2ZS5yZXBsYWNlKC9eZWQvaSwgXCJFZFwiKSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBFZENyeXB0by5zaWduKGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRWRDcnlwdG8udmVyaWZ5KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEVkQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRWRDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbn1cblxuY2xhc3MgRWNkaEVzUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkVjZGhFc1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWRDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbmFtZWRDdXJ2ZTogYWxnb3JpdGhtLm5hbWVkQ3VydmUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBhd2FpdCBFZENyeXB0by5kZXJpdmVCaXRzKHsgLi4uYWxnb3JpdGhtLCBwdWJsaWM6IGdldENyeXB0b0tleShhbGdvcml0aG0ucHVibGljKSB9LCBnZXRDcnlwdG9LZXkoYmFzZUtleSksIGxlbmd0aCk7XG4gICAgICAgIHJldHVybiBiaXRzO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gRWRDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBFZENyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxufVxuXG5jbGFzcyBFZDI1NTE5Q3J5cHRvS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbiAgICBjb25zdHJ1Y3RvcihhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCB1c2FnZXMsIGRhdGEpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHRoaXMuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB1c2FnZXM7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEpO1xuICAgIH1cbiAgICB0b0pXSygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGt0eTogXCJPS1BcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY2xhc3MgRWQyNTUxOVByaXZhdGVLZXkgZXh0ZW5kcyBFZDI1NTE5Q3J5cHRvS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwcml2YXRlXCI7XG4gICAgfVxuICAgIHRvSldLKCkge1xuICAgICAgICBjb25zdCBwdWJKd2sgPSBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgIGtleTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgZm9ybWF0OiBcInBlbVwiLFxuICAgICAgICB9KS5leHBvcnQoeyBmb3JtYXQ6IFwiandrXCIgfSk7XG4gICAgICAgIGNvbnN0IHJhdyA9IGNvcmUuUGVtQ29udmVydGVyLnRvVWludDhBcnJheSh0aGlzLmRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IHBrY3M4ID0gQXNuQ29udmVydC5wYXJzZShyYXcsIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgIGNvbnN0IGQgPSBBc25Db252ZXJ0LnBhcnNlKHBrY3M4LnByaXZhdGVLZXksIGNvcmUuYXNuMS5FZFByaXZhdGVLZXkpLnZhbHVlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3VwZXIudG9KV0soKSxcbiAgICAgICAgICAgIC4uLnB1Ykp3ayxcbiAgICAgICAgICAgIGQ6IEJ1ZmZlci5mcm9tKG5ldyBVaW50OEFycmF5KGQpKS50b1N0cmluZyhcImJhc2U2NHVybFwiKSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmNsYXNzIEVkMjU1MTlQdWJsaWNLZXkgZXh0ZW5kcyBFZDI1NTE5Q3J5cHRvS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwdWJsaWNcIjtcbiAgICB9XG4gICAgdG9KV0soKSB7XG4gICAgICAgIGNvbnN0IGp3ayA9IGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBmb3JtYXQ6IFwicGVtXCIsXG4gICAgICAgIH0pLmV4cG9ydCh7IGZvcm1hdDogXCJqd2tcIiB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSldLKCksXG4gICAgICAgICAgICAuLi5qd2ssXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBFZDI1NTE5Q3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBrZXlzID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmModHlwZSwge1xuICAgICAgICAgICAgcHVibGljS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwicGVtXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJpdmF0ZUtleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcInBlbVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwicGtjczhcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBrZXlBbGcgPSB7XG4gICAgICAgICAgICBuYW1lOiB0eXBlID09PSBcImVkMjU1MTlcIiA/IFwiRWQyNTUxOVwiIDogXCJYMjU1MTlcIixcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleVVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnByaXZhdGVLZXlVc2FnZXMuaW5jbHVkZXModXNhZ2UpKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5VXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHVibGljS2V5VXNhZ2VzLmluY2x1ZGVzKHVzYWdlKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBuZXcgRWQyNTUxOVByaXZhdGVLZXkoa2V5QWxnLCBleHRyYWN0YWJsZSwgcHJpdmF0ZUtleVVzYWdlcywga2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogbmV3IEVkMjU1MTlQdWJsaWNLZXkoa2V5QWxnLCB0cnVlLCBwdWJsaWNLZXlVc2FnZXMsIGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gY3J5cHRvLnNpZ24obnVsbCwgQnVmZmVyLmZyb20oZGF0YSksIGtleS5kYXRhKTtcbiAgICAgICAgcmV0dXJuIGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoc2lnbmF0dXJlKTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBjcnlwdG8udmVyaWZ5KG51bGwsIEJ1ZmZlci5mcm9tKGRhdGEpLCBrZXkuZGF0YSwgc2lnbmF0dXJlKTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBrZXkudG9KV0soKTtcbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvcmUuUGVtQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoa2V5LmRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvcmUuUGVtQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoa2V5LmRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXkudG9KV0soKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGp3ay54KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncmF3JywgcGtjczgnIG9yICdzcGtpJ1wiKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgandrID0ga2V5RGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoandrLmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpdmF0ZURhdGEgPSBuZXcgY29yZS5hc24xLkVkUHJpdmF0ZUtleSgpO1xuICAgICAgICAgICAgICAgICAgICBwcml2YXRlRGF0YS52YWx1ZSA9IGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoQnVmZmVyLmZyb20oandrLmQsIFwiYmFzZTY0dXJsXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGtjczggPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgICAgICAgICAgICAgIHBrY3M4LnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gYWxnb3JpdGhtLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJlZDI1NTE5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29yZS5hc24xLmlkRWQyNTUxOVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjb3JlLmFzbjEuaWRYMjU1MTk7XG4gICAgICAgICAgICAgICAgICAgIHBrY3M4LnByaXZhdGVLZXkgPSBBc25Db252ZXJ0LnNlcmlhbGl6ZShwcml2YXRlRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhdyA9IEFzbkNvbnZlcnQuc2VyaWFsaXplKHBrY3M4KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVtID0gY29yZS5QZW1Db252ZXJ0ZXIuZnJvbUJ1ZmZlclNvdXJjZShyYXcsIFwiUFJJVkFURSBLRVlcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWQyNTUxOVByaXZhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBwZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChqd2sueCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwdWJLZXkgPSBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogXCJqd2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogandrLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVtID0gcHViS2V5LmV4cG9ydCh7IGZvcm1hdDogXCJwZW1cIiwgdHlwZTogXCJzcGtpXCIgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWQyNTUxOVB1YmxpY0tleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIHBlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImtleURhdGE6IENhbm5vdCBpbXBvcnQgSldLLiAnZCcgb3IgJ3gnIG11c3QgYmUgcHJlc2VudGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGVtID0gY29yZS5QZW1Db252ZXJ0ZXIuZnJvbUJ1ZmZlclNvdXJjZShrZXlEYXRhLCBcIlBSSVZBVEUgS0VZXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWQyNTUxOVByaXZhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBwZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBlbSA9IGNvcmUuUGVtQ29udmVydGVyLmZyb21CdWZmZXJTb3VyY2Uoa2V5RGF0YSwgXCJQVUJMSUMgS0VZXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWQyNTUxOVB1YmxpY0tleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIHBlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXcgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoe1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiandrXCIsXG4gICAgICAgICAgICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgICAgICAgICAgICAga3R5OiBcIk9LUFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3J2OiBhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImVkMjU1MTlcIiA/IFwiRWQyNTUxOVwiIDogXCJYMjU1MTlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwocmF3KSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwZW0gPSBrZXkuZXhwb3J0KHsgZm9ybWF0OiBcInBlbVwiLCB0eXBlOiBcInNwa2lcIiB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVkMjU1MTlQdWJsaWNLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBwZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCBwa2NzOCcgb3IgJ3Nwa2knXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkVkMjU1MTlDcnlwdG8ucHJpdmF0ZUtleVVzYWdlcyA9IFtcInNpZ25cIiwgXCJkZXJpdmVCaXRzXCIsIFwiZGVyaXZlS2V5XCJdO1xuRWQyNTUxOUNyeXB0by5wdWJsaWNLZXlVc2FnZXMgPSBbXCJ2ZXJpZnlcIl07XG5cbmNsYXNzIEVkMjU1MTlQcm92aWRlciBleHRlbmRzIGNvcmUuRWQyNTUxOVByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWQyNTUxOUNyeXB0by5nZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBFZDI1NTE5Q3J5cHRvLnNpZ24oYWxnb3JpdGhtLCBpbnRlcm5hbEtleSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgICAgICByZXR1cm4gc2lnbmF0dXJlO1xuICAgIH1cbiAgICBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIHJldHVybiBFZDI1NTE5Q3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGludGVybmFsS2V5LCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIHJldHVybiBFZDI1NTE5Q3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGludGVybmFsS2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBhd2FpdCBFZDI1NTE5Q3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoaW50ZXJuYWxLZXkpO1xuICAgIH1cbn1cblxuY2xhc3MgWDI1NTE5UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlgyNTUxOVByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWQyNTUxOUNyeXB0by5nZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBpbnRlcm5hbEJhc2VLZXkgPSBnZXRDcnlwdG9LZXkoYmFzZUtleSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsUHVibGljS2V5ID0gZ2V0Q3J5cHRvS2V5KGFsZ29yaXRobS5wdWJsaWMpO1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgIGtleTogaW50ZXJuYWxQdWJsaWNLZXkuZGF0YS50b1N0cmluZygpLFxuICAgICAgICAgICAgZm9ybWF0OiBcInBlbVwiLFxuICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gY3J5cHRvLmNyZWF0ZVByaXZhdGVLZXkoe1xuICAgICAgICAgICAga2V5OiBpbnRlcm5hbEJhc2VLZXkuZGF0YS50b1N0cmluZygpLFxuICAgICAgICAgICAgZm9ybWF0OiBcInBlbVwiLFxuICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYml0cyA9IGNyeXB0by5kaWZmaWVIZWxsbWFuKHtcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICAgIHByaXZhdGVLZXksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYml0cykuYnVmZmVyLnNsaWNlKDAsIGxlbmd0aCA+PiAzKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgcmV0dXJuIEVkMjU1MTlDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgaW50ZXJuYWxLZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBFZDI1NTE5Q3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBFZDI1NTE5Q3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgRWQyNTUxOUNyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgUGJrZGZDcnlwdG9LZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xufVxuXG5jbGFzcyBQYmtkZjJQcm92aWRlciBleHRlbmRzIGNvcmUuUGJrZGYyUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2FsdCA9IGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoYWxnb3JpdGhtLnNhbHQpO1xuICAgICAgICAgICAgY29uc3QgaGFzaCA9IGFsZ29yaXRobS5oYXNoLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIik7XG4gICAgICAgICAgICBjcnlwdG8ucGJrZGYyKGdldENyeXB0b0tleShiYXNlS2V5KS5kYXRhLCBCdWZmZXIkMS5mcm9tKHNhbHQpLCBhbGdvcml0aG0uaXRlcmF0aW9ucywgbGVuZ3RoID4+IDMsIGhhc2gsIChlcnIsIGRlcml2ZWRCaXRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFVpbnQ4QXJyYXkoZGVyaXZlZEJpdHMpLmJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBpZiAoZm9ybWF0ID09PSBcInJhd1wiKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBuZXcgUGJrZGZDcnlwdG9LZXkoKTtcbiAgICAgICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShrZXlEYXRhKTtcbiAgICAgICAgICAgIGtleS5hbGdvcml0aG0gPSB7IG5hbWU6IHRoaXMubmFtZSB9O1xuICAgICAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdyYXcnXCIpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIFBia2RmQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IFBCS0RGIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgSG1hY0NyeXB0b0tleSBleHRlbmRzIENyeXB0b0tleSB7XG4gICAgZ2V0IGFsZygpIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHRoaXMuYWxnb3JpdGhtLmhhc2gubmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gYEhTJHtoYXNoLnJlcGxhY2UoXCJTSEEtXCIsIFwiXCIpfWA7XG4gICAgfVxuICAgIHNldCBhbGcodmFsdWUpIHtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwia1wiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxDb252ZXJ0ZXIgfSlcbl0sIEhtYWNDcnlwdG9LZXkucHJvdG90eXBlLCBcImRhdGFcIiwgdm9pZCAwKTtcblxuY2xhc3MgSG1hY1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5IbWFjUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IChhbGdvcml0aG0ubGVuZ3RoIHx8IHRoaXMuZ2V0RGVmYXVsdExlbmd0aChhbGdvcml0aG0uaGFzaC5uYW1lKSkgPj4gMyA8PCAzO1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgSG1hY0NyeXB0b0tleSgpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0ge1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbGVuZ3RoLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9O1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAga2V5LmRhdGEgPSBjcnlwdG8ucmFuZG9tQnl0ZXMobGVuZ3RoID4+IDMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShrZXkuYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBobWFjID0gY3J5cHRvLmNyZWF0ZUhtYWMoY3J5cHRvQWxnLCBnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhtYWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShrZXkuYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBobWFjID0gY3J5cHRvLmNyZWF0ZUhtYWMoY3J5cHRvQWxnLCBnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIGhtYWMuY29tcGFyZShCdWZmZXIkMS5mcm9tKHNpZ25hdHVyZSkpID09PSAwO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogSG1hY0NyeXB0b0tleSB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBuZXcgSG1hY0NyeXB0b0tleSgpO1xuICAgICAgICAgICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShrZXlEYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICAgICAga2V5LmFsZ29yaXRobSA9IHtcbiAgICAgICAgICAgIGhhc2g6IHsgbmFtZTogYWxnb3JpdGhtLmhhc2gubmFtZSB9LFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBrZXkuZGF0YS5sZW5ndGggPDwgMyxcbiAgICAgICAgfTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgSG1hY0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBITUFDIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgSGtkZkNyeXB0b0tleSBleHRlbmRzIENyeXB0b0tleSB7XG59XG5cbmNsYXNzIEhrZGZQcm92aWRlciBleHRlbmRzIGNvcmUuSGtkZlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBpZiAoZm9ybWF0LnRvTG93ZXJDYXNlKCkgIT09IFwicmF3XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEhrZGZDcnlwdG9LZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKGtleURhdGEpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0geyBuYW1lOiB0aGlzLm5hbWUgfTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKHBhcmFtcywgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBwYXJhbXMuaGFzaC5uYW1lLnJlcGxhY2UoXCItXCIsIFwiXCIpO1xuICAgICAgICBjb25zdCBoYXNoTGVuZ3RoID0gY3J5cHRvLmNyZWF0ZUhhc2goaGFzaCkuZGlnZXN0KCkubGVuZ3RoO1xuICAgICAgICBjb25zdCBieXRlTGVuZ3RoID0gbGVuZ3RoIC8gODtcbiAgICAgICAgY29uc3QgaW5mbyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciQxLnRvVWludDhBcnJheShwYXJhbXMuaW5mbyk7XG4gICAgICAgIGNvbnN0IFBSSyA9IGNyeXB0by5jcmVhdGVIbWFjKGhhc2gsIEJ1ZmZlclNvdXJjZUNvbnZlcnRlciQxLnRvVWludDhBcnJheShwYXJhbXMuc2FsdCkpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlclNvdXJjZUNvbnZlcnRlciQxLnRvVWludDhBcnJheShnZXRDcnlwdG9LZXkoYmFzZUtleSkuZGF0YSkpXG4gICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgIGNvbnN0IGJsb2NrcyA9IFtCdWZmZXIkMS5hbGxvYygwKV07XG4gICAgICAgIGNvbnN0IGJsb2NrQ291bnQgPSBNYXRoLmNlaWwoYnl0ZUxlbmd0aCAvIGhhc2hMZW5ndGgpICsgMTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBibG9ja0NvdW50OyArK2kpIHtcbiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKGNyeXB0by5jcmVhdGVIbWFjKGhhc2gsIFBSSylcbiAgICAgICAgICAgICAgICAudXBkYXRlKEJ1ZmZlciQxLmNvbmNhdChbYmxvY2tzW2kgLSAxXSwgaW5mbywgQnVmZmVyJDEuZnJvbShbaV0pXSkpXG4gICAgICAgICAgICAgICAgLmRpZ2VzdCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQnVmZmVyJDEuY29uY2F0KGJsb2Nrcykuc2xpY2UoMCwgYnl0ZUxlbmd0aCk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgSGtkZkNyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBIS0RGIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2hha2VDcnlwdG8ge1xuICAgIHN0YXRpYyBkaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpLCB7IG91dHB1dExlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCB9KVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhhc2gpLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMTI4UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlNoYWtlMTI4UHJvdmlkZXIge1xuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hha2VDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZTI1NlByb3ZpZGVyIGV4dGVuZHMgY29yZS5TaGFrZTI1NlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYWtlQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU3VidGxlQ3J5cHRvIGV4dGVuZHMgY29yZS5TdWJ0bGVDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ3RyUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzR2NtUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ21hY1Byb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEFlc0t3UHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzRWNiUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IGNpcGhlcnMgPSBjcnlwdG8uZ2V0Q2lwaGVycygpO1xuICAgICAgICBpZiAoY2lwaGVycy5pbmNsdWRlcyhcImRlcy1jYmNcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRGVzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBEZXNFZGUzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhU3NhUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhUHNzUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhT2FlcFByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFJzYUVzUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRWNkc2FQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFY2RoUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMVByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTI1NlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTM4NFByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTUxMlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFBia2RmMlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEhtYWNQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBIa2RmUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IG5vZGVNYWpvclZlcnNpb24gPSAoX2EgPSAvXnYoXFxkKykvLmV4ZWMocHJvY2Vzcy52ZXJzaW9uKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzFdO1xuICAgICAgICBpZiAobm9kZU1ham9yVmVyc2lvbiAmJiBwYXJzZUludChub2RlTWFqb3JWZXJzaW9uLCAxMCkgPj0gMTIpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hha2UxMjhQcm92aWRlcigpKTtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hha2UyNTZQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzKCk7XG4gICAgICAgIGlmIChoYXNoZXMuaW5jbHVkZXMoXCJzaGEzLTI1NlwiKSkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGEzMjU2UHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc2hlcy5pbmNsdWRlcyhcInNoYTMtMzg0XCIpKSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTMzODRQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzaGVzLmluY2x1ZGVzKFwic2hhMy01MTJcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMzUxMlByb3ZpZGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlTWFqb3JWZXJzaW9uICYmIHBhcnNlSW50KG5vZGVNYWpvclZlcnNpb24sIDEwKSA+PSAxNCkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFZERzYVByb3ZpZGVyKCkpO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFY2RoRXNQcm92aWRlcigpKTtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRWQyNTUxOVByb3ZpZGVyKCkpO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBYMjU1MTlQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQ3J5cHRvIGV4dGVuZHMgY29yZS5DcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnN1YnRsZSA9IG5ldyBTdWJ0bGVDcnlwdG8oKTtcbiAgICB9XG4gICAgZ2V0UmFuZG9tVmFsdWVzKGFycmF5KSB7XG4gICAgICAgIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KGFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXRSYW5kb21WYWx1ZXMnIG9uICdDcnlwdG8nOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnQXJyYXlCdWZmZXJWaWV3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIkMS5mcm9tKGFycmF5LmJ1ZmZlciwgYXJyYXkuYnl0ZU9mZnNldCwgYXJyYXkuYnl0ZUxlbmd0aCk7XG4gICAgICAgIGNyeXB0by5yYW5kb21GaWxsU3luYyhidWZmZXIpO1xuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBDcnlwdG8gfTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW50ZXJuYWxTdGF0ZVN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBpbnRlcm5hbFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2ludGVybmFsXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IGludGVybmFsU3RhdGVTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9zdGF0ZVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW5zdGFuY2VTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pbnN0YW5jZVwiKTtcbiIsICJleHBvcnQgdmFyIHRvcCA9ICd0b3AnO1xuZXhwb3J0IHZhciBib3R0b20gPSAnYm90dG9tJztcbmV4cG9ydCB2YXIgcmlnaHQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBsZWZ0ID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBhdXRvID0gJ2F1dG8nO1xuZXhwb3J0IHZhciBiYXNlUGxhY2VtZW50cyA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuZXhwb3J0IHZhciBzdGFydCA9ICdzdGFydCc7XG5leHBvcnQgdmFyIGVuZCA9ICdlbmQnO1xuZXhwb3J0IHZhciBjbGlwcGluZ1BhcmVudHMgPSAnY2xpcHBpbmdQYXJlbnRzJztcbmV4cG9ydCB2YXIgdmlld3BvcnQgPSAndmlld3BvcnQnO1xuZXhwb3J0IHZhciBwb3BwZXIgPSAncG9wcGVyJztcbmV4cG9ydCB2YXIgcmVmZXJlbmNlID0gJ3JlZmVyZW5jZSc7XG5leHBvcnQgdmFyIHZhcmlhdGlvblBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovYmFzZVBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9bXS5jb25jYXQoYmFzZVBsYWNlbWVudHMsIFthdXRvXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50LCBwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pOyAvLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuXG5leHBvcnQgdmFyIGJlZm9yZVJlYWQgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgdmFyIHJlYWQgPSAncmVhZCc7XG5leHBvcnQgdmFyIGFmdGVyUmVhZCA9ICdhZnRlclJlYWQnOyAvLyBwdXJlLWxvZ2ljIG1vZGlmaWVyc1xuXG5leHBvcnQgdmFyIGJlZm9yZU1haW4gPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgdmFyIG1haW4gPSAnbWFpbic7XG5leHBvcnQgdmFyIGFmdGVyTWFpbiA9ICdhZnRlck1haW4nOyAvLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5cbmV4cG9ydCB2YXIgYmVmb3JlV3JpdGUgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IHZhciB3cml0ZSA9ICd3cml0ZSc7XG5leHBvcnQgdmFyIGFmdGVyV3JpdGUgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgdmFyIG1vZGlmaWVyUGhhc2VzID0gW2JlZm9yZVJlYWQsIHJlYWQsIGFmdGVyUmVhZCwgYmVmb3JlTWFpbiwgbWFpbiwgYWZ0ZXJNYWluLCBiZWZvcmVXcml0ZSwgd3JpdGUsIGFmdGVyV3JpdGVdOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlTmFtZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ID8gKGVsZW1lbnQubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChub2RlLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdyA6IHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5FbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5IVE1MRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNTaGFkb3dSb290KG5vZGUpIHtcbiAgLy8gSUUgMTEgaGFzIG5vIFNoYWRvd1Jvb3RcbiAgaWYgKHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLlNoYWRvd1Jvb3Q7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbn1cblxuZXhwb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfTsiLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gVGhpcyBtb2RpZmllciB0YWtlcyB0aGUgc3R5bGVzIHByZXBhcmVkIGJ5IHRoZSBgY29tcHV0ZVN0eWxlc2AgbW9kaWZpZXJcbi8vIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIEhUTUxFbGVtZW50cyBzdWNoIGFzIHBvcHBlciBhbmQgYXJyb3dcblxuZnVuY3Rpb24gYXBwbHlTdHlsZXMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlO1xuICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnN0eWxlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0byBleHRlbmQgdGhpcyBwcm9wZXJ0eSwgYnV0IGl0J3MgdGhlIG1vc3RcbiAgICAvLyBlZmZlY3RpdmUgd2F5IHRvIGFwcGx5IHN0eWxlcyB0byBhbiBIVE1MRWxlbWVudFxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuXG5cbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhdHRyaWJ1dGVzW25hbWVdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUgPT09IHRydWUgPyAnJyA6IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZTtcbiAgdmFyIGluaXRpYWxTdHlsZXMgPSB7XG4gICAgcG9wcGVyOiB7XG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHRvcDogJzAnLFxuICAgICAgbWFyZ2luOiAnMCdcbiAgICB9LFxuICAgIGFycm93OiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sXG4gICAgcmVmZXJlbmNlOiB7fVxuICB9O1xuICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLnBvcHBlci5zdHlsZSwgaW5pdGlhbFN0eWxlcy5wb3BwZXIpO1xuICBzdGF0ZS5zdHlsZXMgPSBpbml0aWFsU3R5bGVzO1xuXG4gIGlmIChzdGF0ZS5lbGVtZW50cy5hcnJvdykge1xuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMuYXJyb3cuc3R5bGUsIGluaXRpYWxTdHlsZXMuYXJyb3cpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTtcbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICAgIHZhciBzdHlsZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhzdGF0ZS5zdHlsZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBzdGF0ZS5zdHlsZXNbbmFtZV0gOiBpbml0aWFsU3R5bGVzW25hbWVdKTsgLy8gU2V0IGFsbCB2YWx1ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIHVuc2V0IHRoZW1cblxuICAgICAgdmFyIHN0eWxlID0gc3R5bGVQcm9wZXJ0aWVzLnJlZHVjZShmdW5jdGlvbiAoc3R5bGUsIHByb3BlcnR5KSB7XG4gICAgICAgIHN0eWxlW3Byb3BlcnR5XSA9ICcnO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9LCB7fSk7IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGFwcGx5U3R5bGVzLFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddXG59OyIsICJpbXBvcnQgeyBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59IiwgImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVBU3RyaW5nKCkge1xuICB2YXIgdWFEYXRhID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGE7XG5cbiAgaWYgKHVhRGF0YSAhPSBudWxsICYmIHVhRGF0YS5icmFuZHMgJiYgQXJyYXkuaXNBcnJheSh1YURhdGEuYnJhbmRzKSkge1xuICAgIHJldHVybiB1YURhdGEuYnJhbmRzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uYnJhbmQgKyBcIi9cIiArIGl0ZW0udmVyc2lvbjtcbiAgICB9KS5qb2luKCcgJyk7XG4gIH1cblxuICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbn0iLCAiaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTGF5b3V0Vmlld3BvcnQoKSB7XG4gIHJldHVybiAhL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChnZXRVQVN0cmluZygpKTtcbn0iLCAiaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gMTtcbiAgdmFyIHNjYWxlWSA9IDE7XG5cbiAgaWYgKGluY2x1ZGVTY2FsZSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgc2NhbGVYID0gZWxlbWVudC5vZmZzZXRXaWR0aCA+IDAgPyByb3VuZChjbGllbnRSZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMSA6IDE7XG4gICAgc2NhbGVZID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgPiAwID8gcm91bmQoY2xpZW50UmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMSA6IDE7XG4gIH1cblxuICB2YXIgX3JlZiA9IGlzRWxlbWVudChlbGVtZW50KSA/IGdldFdpbmRvdyhlbGVtZW50KSA6IHdpbmRvdyxcbiAgICAgIHZpc3VhbFZpZXdwb3J0ID0gX3JlZi52aXN1YWxWaWV3cG9ydDtcblxuICB2YXIgYWRkVmlzdWFsT2Zmc2V0cyA9ICFpc0xheW91dFZpZXdwb3J0KCkgJiYgaXNGaXhlZFN0cmF0ZWd5O1xuICB2YXIgeCA9IChjbGllbnRSZWN0LmxlZnQgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQgOiAwKSkgLyBzY2FsZVg7XG4gIHZhciB5ID0gKGNsaWVudFJlY3QudG9wICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3AgOiAwKSkgLyBzY2FsZVk7XG4gIHZhciB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZVg7XG4gIHZhciBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlWTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxuICAgIGxlZnQ6IHgsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7IC8vIFJldHVybnMgdGhlIGxheW91dCByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC4gTGF5b3V0XG4vLyBtZWFucyBpdCBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRyYW5zZm9ybXMuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExheW91dFJlY3QoZWxlbWVudCkge1xuICB2YXIgY2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KTsgLy8gVXNlIHRoZSBjbGllbnRSZWN0IHNpemVzIGlmIGl0J3Mgbm90IGJlZW4gdHJhbnNmb3JtZWQuXG4gIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTIyM1xuXG4gIHZhciB3aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC53aWR0aCAtIHdpZHRoKSA8PSAxKSB7XG4gICAgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoO1xuICB9XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3QuaGVpZ2h0IC0gaGVpZ2h0KSA8PSAxKSB7XG4gICAgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGVsZW1lbnQub2Zmc2V0TGVmdCxcbiAgICB5OiBlbGVtZW50Lm9mZnNldFRvcCxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn0iLCAiaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGFpbnMocGFyZW50LCBjaGlsZCkge1xuICB2YXIgcm9vdE5vZGUgPSBjaGlsZC5nZXRSb290Tm9kZSAmJiBjaGlsZC5nZXRSb290Tm9kZSgpOyAvLyBGaXJzdCwgYXR0ZW1wdCB3aXRoIGZhc3RlciBuYXRpdmUgbWV0aG9kXG5cbiAgaWYgKHBhcmVudC5jb250YWlucyhjaGlsZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyB0aGVuIGZhbGxiYWNrIHRvIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiB3aXRoIFNoYWRvdyBET00gc3VwcG9ydFxuICBlbHNlIGlmIChyb290Tm9kZSAmJiBpc1NoYWRvd1Jvb3Qocm9vdE5vZGUpKSB7XG4gICAgICB2YXIgbmV4dCA9IGNoaWxkO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChuZXh0ICYmIHBhcmVudC5pc1NhbWVOb2RlKG5leHQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddOiBuZWVkIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgdGhpcy4uLlxuXG5cbiAgICAgICAgbmV4dCA9IG5leHQucGFyZW50Tm9kZSB8fCBuZXh0Lmhvc3Q7XG4gICAgICB9IHdoaWxlIChuZXh0KTtcbiAgICB9IC8vIEdpdmUgdXAsIHRoZSByZXN1bHQgaXMgZmFsc2VcblxuXG4gIHJldHVybiBmYWxzZTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59IiwgImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNUYWJsZUVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gWyd0YWJsZScsICd0ZCcsICd0aCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpID49IDA7XG59IiwgImltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSB7XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgcmV0dXJuICgoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5vd25lckRvY3VtZW50IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIGVsZW1lbnQuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkuZG9jdW1lbnRFbGVtZW50O1xufSIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiAoLy8gdGhpcyBpcyBhIHF1aWNrZXIgKGJ1dCBsZXNzIHR5cGUgc2FmZSkgd2F5IHRvIHNhdmUgcXVpdGUgc29tZSBieXRlcyBmcm9tIHRoZSBidW5kbGVcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgZWxlbWVudC5hc3NpZ25lZFNsb3QgfHwgLy8gc3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGVcbiAgICBlbGVtZW50LnBhcmVudE5vZGUgfHwgKCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIGlzU2hhZG93Um9vdChlbGVtZW50KSA/IGVsZW1lbnQuaG9zdCA6IG51bGwpIHx8IC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogSFRNTEVsZW1lbnQgaXMgYSBOb2RlXG4gICAgZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIC8vIGZhbGxiYWNrXG5cbiAgKTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGlzVGFibGVFbGVtZW50IGZyb20gXCIuL2lzVGFibGVFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0VUFTdHJpbmcgZnJvbSBcIi4uL3V0aWxzL3VzZXJBZ2VudC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvODM3XG4gIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcbn0gLy8gYC5vZmZzZXRQYXJlbnRgIHJlcG9ydHMgYG51bGxgIGZvciBmaXhlZCBlbGVtZW50cywgd2hpbGUgYWJzb2x1dGUgZWxlbWVudHNcbi8vIHJldHVybiB0aGUgY29udGFpbmluZyBibG9ja1xuXG5cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIHZhciBpc0ZpcmVmb3ggPSAvZmlyZWZveC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG4gIHZhciBpc0lFID0gL1RyaWRlbnQvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuXG4gIGlmIChpc0lFICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAvLyBJbiBJRSA5LCAxMCBhbmQgMTEgZml4ZWQgZWxlbWVudHMgY29udGFpbmluZyBibG9jayBpcyBhbHdheXMgZXN0YWJsaXNoZWQgYnkgdGhlIHZpZXdwb3J0XG4gICAgdmFyIGVsZW1lbnRDc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuXG4gICAgaWYgKGVsZW1lbnRDc3MucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG5cbiAgaWYgKGlzU2hhZG93Um9vdChjdXJyZW50Tm9kZSkpIHtcbiAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmhvc3Q7XG4gIH1cblxuICB3aGlsZSAoaXNIVE1MRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgWydodG1sJywgJ2JvZHknXS5pbmRleE9mKGdldE5vZGVOYW1lKGN1cnJlbnROb2RlKSkgPCAwKSB7XG4gICAgdmFyIGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudE5vZGUpOyAvLyBUaGlzIGlzIG5vbi1leGhhdXN0aXZlIGJ1dCBjb3ZlcnMgdGhlIG1vc3QgY29tbW9uIENTUyBwcm9wZXJ0aWVzIHRoYXRcbiAgICAvLyBjcmVhdGUgYSBjb250YWluaW5nIGJsb2NrLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG5cbiAgICBpZiAoY3NzLnRyYW5zZm9ybSAhPT0gJ25vbmUnIHx8IGNzcy5wZXJzcGVjdGl2ZSAhPT0gJ25vbmUnIHx8IGNzcy5jb250YWluID09PSAncGFpbnQnIHx8IFsndHJhbnNmb3JtJywgJ3BlcnNwZWN0aXZlJ10uaW5kZXhPZihjc3Mud2lsbENoYW5nZSkgIT09IC0xIHx8IGlzRmlyZWZveCAmJiBjc3Mud2lsbENoYW5nZSA9PT0gJ2ZpbHRlcicgfHwgaXNGaXJlZm94ICYmIGNzcy5maWx0ZXIgJiYgY3NzLmZpbHRlciAhPT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn0gLy8gR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBwb3NpdGlvbmVkIGVsZW1lbnQuIEhhbmRsZXMgc29tZSBlZGdlIGNhc2VzLFxuLy8gc3VjaCBhcyB0YWJsZSBhbmNlc3RvcnMgYW5kIGNyb3NzIGJyb3dzZXIgYnVncy5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KTtcblxuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50KTtcbiAgfVxuXG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdodG1sJyB8fCBnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnYm9keScgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luZG93O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgPj0gMCA/ICd4JyA6ICd5Jztcbn0iLCAiaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpIHtcbiAgcmV0dXJuIG1hdGhNYXgobWluLCBtYXRoTWluKHZhbHVlLCBtYXgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW5NYXhDbGFtcChtaW4sIHZhbHVlLCBtYXgpIHtcbiAgdmFyIHYgPSB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KTtcbiAgcmV0dXJuIHYgPiBtYXggPyBtYXggOiB2O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRGcmVzaFNpZGVPYmplY3QoKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwXG4gIH07XG59IiwgImltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4vZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVBhZGRpbmdPYmplY3QocGFkZGluZ09iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ2V0RnJlc2hTaWRlT2JqZWN0KCksIHBhZGRpbmdPYmplY3QpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXAodmFsdWUsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChoYXNoTWFwLCBrZXkpIHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufSIsICJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4uL2RvbS11dGlscy9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4gfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuLi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4uL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qc1wiO1xuaW1wb3J0IHsgbGVmdCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB0b3AsIGJvdHRvbSB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB0b1BhZGRpbmdPYmplY3QgPSBmdW5jdGlvbiB0b1BhZGRpbmdPYmplY3QocGFkZGluZywgc3RhdGUpIHtcbiAgcGFkZGluZyA9IHR5cGVvZiBwYWRkaW5nID09PSAnZnVuY3Rpb24nID8gcGFkZGluZyhPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHBhZGRpbmc7XG4gIHJldHVybiBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xufTtcblxuZnVuY3Rpb24gYXJyb3coX3JlZikge1xuICB2YXIgX3N0YXRlJG1vZGlmaWVyc0RhdGEkO1xuXG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBheGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgaXNWZXJ0aWNhbCA9IFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwO1xuICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICBpZiAoIWFycm93RWxlbWVudCB8fCAhcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gdG9QYWRkaW5nT2JqZWN0KG9wdGlvbnMucGFkZGluZywgc3RhdGUpO1xuICB2YXIgYXJyb3dSZWN0ID0gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpO1xuICB2YXIgbWluUHJvcCA9IGF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gIHZhciBtYXhQcm9wID0gYXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gIHZhciBlbmREaWZmID0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2xlbl0gKyBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucG9wcGVyW2xlbl07XG4gIHZhciBzdGFydERpZmYgPSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQoYXJyb3dFbGVtZW50KTtcbiAgdmFyIGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudEhlaWdodCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50V2lkdGggfHwgMCA6IDA7XG4gIHZhciBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjsgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBwb3BwZXIgaWYgdGhlIGNlbnRlciBwb2ludCBpc1xuICAvLyBvdXRzaWRlIG9mIHRoZSBwb3BwZXIgYm91bmRzXG5cbiAgdmFyIG1pbiA9IHBhZGRpbmdPYmplY3RbbWluUHJvcF07XG4gIHZhciBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dSZWN0W2xlbl0gLSBwYWRkaW5nT2JqZWN0W21heFByb3BdO1xuICB2YXIgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd1JlY3RbbGVuXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcbiAgdmFyIG9mZnNldCA9IHdpdGhpbihtaW4sIGNlbnRlciwgbWF4KTsgLy8gUHJldmVudHMgYnJlYWtpbmcgc3ludGF4IGhpZ2hsaWdodGluZy4uLlxuXG4gIHZhciBheGlzUHJvcCA9IGF4aXM7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSAoX3N0YXRlJG1vZGlmaWVyc0RhdGEkID0ge30sIF9zdGF0ZSRtb2RpZmllcnNEYXRhJFtheGlzUHJvcF0gPSBvZmZzZXQsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJC5jZW50ZXJPZmZzZXQgPSBvZmZzZXQgLSBjZW50ZXIsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJCk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZWxlbWVudCA9IG9wdGlvbnMuZWxlbWVudCxcbiAgICAgIGFycm93RWxlbWVudCA9IF9vcHRpb25zJGVsZW1lbnQgPT09IHZvaWQgMCA/ICdbZGF0YS1wb3BwZXItYXJyb3ddJyA6IF9vcHRpb25zJGVsZW1lbnQ7XG5cbiAgaWYgKGFycm93RWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIENTUyBzZWxlY3RvclxuXG5cbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMucG9wcGVyLnF1ZXJ5U2VsZWN0b3IoYXJyb3dFbGVtZW50KTtcblxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb250YWlucyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIsIGFycm93RWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0ZS5lbGVtZW50cy5hcnJvdyA9IGFycm93RWxlbWVudDtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2Fycm93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGFycm93LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddXG59OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn0iLCAiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB1bnNldFNpZGVzID0ge1xuICB0b3A6ICdhdXRvJyxcbiAgcmlnaHQ6ICdhdXRvJyxcbiAgYm90dG9tOiAnYXV0bycsXG4gIGxlZnQ6ICdhdXRvJ1xufTsgLy8gUm91bmQgdGhlIG9mZnNldHMgdG8gdGhlIG5lYXJlc3Qgc3VpdGFibGUgc3VicGl4ZWwgYmFzZWQgb24gdGhlIERQUi5cbi8vIFpvb21pbmcgY2FuIGNoYW5nZSB0aGUgRFBSLCBidXQgaXQgc2VlbXMgdG8gcmVwb3J0IGEgdmFsdWUgdGhhdCB3aWxsXG4vLyBjbGVhbmx5IGRpdmlkZSB0aGUgdmFsdWVzIGludG8gdGhlIGFwcHJvcHJpYXRlIHN1YnBpeGVscy5cblxuZnVuY3Rpb24gcm91bmRPZmZzZXRzQnlEUFIoX3JlZiwgd2luKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAqIGRwcikgLyBkcHIgfHwgMCxcbiAgICB5OiByb3VuZCh5ICogZHByKSAvIGRwciB8fCAwXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1N0eWxlcyhfcmVmMikge1xuICB2YXIgX09iamVjdCRhc3NpZ24yO1xuXG4gIHZhciBwb3BwZXIgPSBfcmVmMi5wb3BwZXIsXG4gICAgICBwb3BwZXJSZWN0ID0gX3JlZjIucG9wcGVyUmVjdCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIHZhcmlhdGlvbiA9IF9yZWYyLnZhcmlhdGlvbixcbiAgICAgIG9mZnNldHMgPSBfcmVmMi5vZmZzZXRzLFxuICAgICAgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9yZWYyLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGFkYXB0aXZlID0gX3JlZjIuYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHMgPSBfcmVmMi5yb3VuZE9mZnNldHMsXG4gICAgICBpc0ZpeGVkID0gX3JlZjIuaXNGaXhlZDtcbiAgdmFyIF9vZmZzZXRzJHggPSBvZmZzZXRzLngsXG4gICAgICB4ID0gX29mZnNldHMkeCA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHgsXG4gICAgICBfb2Zmc2V0cyR5ID0gb2Zmc2V0cy55LFxuICAgICAgeSA9IF9vZmZzZXRzJHkgPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR5O1xuXG4gIHZhciBfcmVmMyA9IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjMueDtcbiAgeSA9IF9yZWYzLnk7XG4gIHZhciBoYXNYID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneCcpO1xuICB2YXIgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcbiAgdmFyIHNpZGVYID0gbGVmdDtcbiAgdmFyIHNpZGVZID0gdG9wO1xuICB2YXIgd2luID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICB2YXIgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIHZhciB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJyAmJiBwb3NpdGlvbiA9PT0gJ2Fic29sdXRlJykge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYXN0XTogZm9yY2UgdHlwZSByZWZpbmVtZW50LCB3ZSBjb21wYXJlIG9mZnNldFBhcmVudCB3aXRoIHdpbmRvdyBhYm92ZSwgYnV0IEZsb3cgZG9lc24ndCBkZXRlY3QgaXRcblxuXG4gICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50O1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gdG9wIHx8IChwbGFjZW1lbnQgPT09IGxlZnQgfHwgcGxhY2VtZW50ID09PSByaWdodCkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVZID0gYm90dG9tO1xuICAgICAgdmFyIG9mZnNldFkgPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC5oZWlnaHQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXTtcbiAgICAgIHkgLT0gb2Zmc2V0WSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCAocGxhY2VtZW50ID09PSB0b3AgfHwgcGxhY2VtZW50ID09PSBib3R0b20pICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0O1xuICAgICAgdmFyIG9mZnNldFggPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF07XG4gICAgICB4IC09IG9mZnNldFggLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICB2YXIgX3JlZjQgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUih7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0sIGdldFdpbmRvdyhwb3BwZXIpKSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjQueDtcbiAgeSA9IF9yZWY0Lnk7XG5cbiAgaWYgKGdwdUFjY2VsZXJhdGlvbikge1xuICAgIHZhciBfT2JqZWN0JGFzc2lnbjtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbiA9IHt9LCBfT2JqZWN0JGFzc2lnbltzaWRlWV0gPSBoYXNZID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduW3NpZGVYXSA9IGhhc1ggPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ24udHJhbnNmb3JtID0gKHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIDw9IDEgPyBcInRyYW5zbGF0ZShcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4KVwiIDogXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCAwKVwiLCBfT2JqZWN0JGFzc2lnbikpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduMiA9IHt9LCBfT2JqZWN0JGFzc2lnbjJbc2lkZVldID0gaGFzWSA/IHkgKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yW3NpZGVYXSA9IGhhc1ggPyB4ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMi50cmFuc2Zvcm0gPSAnJywgX09iamVjdCRhc3NpZ24yKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZXMoX3JlZjUpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjUuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjUub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZ3B1QWNjZWxlcmF0LFxuICAgICAgX29wdGlvbnMkYWRhcHRpdmUgPSBvcHRpb25zLmFkYXB0aXZlLFxuICAgICAgYWRhcHRpdmUgPSBfb3B0aW9ucyRhZGFwdGl2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFkYXB0aXZlLFxuICAgICAgX29wdGlvbnMkcm91bmRPZmZzZXRzID0gb3B0aW9ucy5yb3VuZE9mZnNldHMsXG4gICAgICByb3VuZE9mZnNldHMgPSBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyb3VuZE9mZnNldHM7XG4gIHZhciBjb21tb25TdHlsZXMgPSB7XG4gICAgcGxhY2VtZW50OiBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCksXG4gICAgdmFyaWF0aW9uOiBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KSxcbiAgICBwb3BwZXI6IHN0YXRlLmVsZW1lbnRzLnBvcHBlcixcbiAgICBwb3BwZXJSZWN0OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgZ3B1QWNjZWxlcmF0aW9uOiBncHVBY2NlbGVyYXRpb24sXG4gICAgaXNGaXhlZDogc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJ1xuICB9O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMucG9wcGVyLCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgYWRhcHRpdmU6IGFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3cgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5hcnJvdyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5hcnJvdywgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93LFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBhZGFwdGl2ZTogZmFsc2UsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCc6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2NvbXB1dGVTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgZm46IGNvbXB1dGVTdHlsZXMsXG4gIGRhdGE6IHt9XG59OyIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHBhc3NpdmUgPSB7XG4gIHBhc3NpdmU6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBpbnN0YW5jZSA9IF9yZWYuaW5zdGFuY2UsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkc2Nyb2xsID0gb3B0aW9ucy5zY3JvbGwsXG4gICAgICBzY3JvbGwgPSBfb3B0aW9ucyRzY3JvbGwgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRzY3JvbGwsXG4gICAgICBfb3B0aW9ucyRyZXNpemUgPSBvcHRpb25zLnJlc2l6ZSxcbiAgICAgIHJlc2l6ZSA9IF9vcHRpb25zJHJlc2l6ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJlc2l6ZTtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIpO1xuICB2YXIgc2Nyb2xsUGFyZW50cyA9IFtdLmNvbmNhdChzdGF0ZS5zY3JvbGxQYXJlbnRzLnJlZmVyZW5jZSwgc3RhdGUuc2Nyb2xsUGFyZW50cy5wb3BwZXIpO1xuXG4gIGlmIChzY3JvbGwpIHtcbiAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgc2Nyb2xsUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAocmVzaXplKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChzY3JvbGwpIHtcbiAgICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICAgIHNjcm9sbFBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc2l6ZSkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfVxuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZXZlbnRMaXN0ZW5lcnMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGZ1bmN0aW9uIGZuKCkge30sXG4gIGVmZmVjdDogZWZmZWN0LFxuICBkYXRhOiB7fVxufTsiLCAidmFyIGhhc2ggPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwgInZhciBoYXNoID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbChub2RlKSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3cobm9kZSk7XG4gIHZhciBzY3JvbGxMZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0O1xuICB2YXIgc2Nyb2xsVG9wID0gd2luLnBhZ2VZT2Zmc2V0O1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3BcbiAgfTtcbn0iLCAiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSB7XG4gIC8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbiAgLy8gaW5jb3JyZWN0IGZvciBSVEwuXG4gIC8vIFBvcHBlciAxIGlzIGJyb2tlbiBpbiB0aGlzIGNhc2UgYW5kIG5ldmVyIGhhZCBhIGJ1ZyByZXBvcnQgc28gbGV0J3MgYXNzdW1lXG4gIC8vIGl0J3Mgbm90IGFuIGlzc3VlLiBJIGRvbid0IHRoaW5rIGFueW9uZSBldmVyIHNwZWNpZmllcyB3aWR0aCBvbiA8aHRtbD5cbiAgLy8gYW55d2F5LlxuICAvLyBCcm93c2VycyB3aGVyZSB0aGUgbGVmdCBzY3JvbGxiYXIgZG9lc24ndCBjYXVzZSBhbiBpc3N1ZSByZXBvcnQgYDBgIGZvclxuICAvLyB0aGlzIChlLmcuIEVkZ2UgMjAxOSwgSUUxMSwgU2FmYXJpKVxuICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGdldFdpbmRvd1Njcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICB2YXIgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuXG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIHZhciBsYXlvdXRWaWV3cG9ydCA9IGlzTGF5b3V0Vmlld3BvcnQoKTtcblxuICAgIGlmIChsYXlvdXRWaWV3cG9ydCB8fCAhbGF5b3V0Vmlld3BvcnQgJiYgc3RyYXRlZ3kgPT09ICdmaXhlZCcpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSxcbiAgICB5OiB5XG4gIH07XG59IiwgImltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IHsgbWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgd2luU2Nyb2xsID0gZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpO1xuICB2YXIgYm9keSA9IChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keTtcbiAgdmFyIHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LnNjcm9sbFdpZHRoIDogMCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKTtcbiAgdmFyIGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkgPyBib2R5LnNjcm9sbEhlaWdodCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudEhlaWdodCA6IDApO1xuICB2YXIgeCA9IC13aW5TY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIHZhciB5ID0gLXdpblNjcm9sbC5zY3JvbGxUb3A7XG5cbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSB8fCBodG1sKS5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgeCArPSBtYXgoaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKSAtIHdpZHRoO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwgImltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzU2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gRmlyZWZveCB3YW50cyB1cyB0byBjaGVjayBgLXhgIGFuZCBgLXlgIHZhcmlhdGlvbnMgYXMgd2VsbFxuICB2YXIgX2dldENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvdyxcbiAgICAgIG92ZXJmbG93WCA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WCxcbiAgICAgIG92ZXJmbG93WSA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WTtcblxuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVuLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKTtcbn0iLCAiaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQobm9kZSkge1xuICBpZiAoWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5kZXhPZihnZXROb2RlTmFtZShub2RlKSkgPj0gMCkge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cblxuICBpZiAoaXNIVE1MRWxlbWVudChub2RlKSAmJiBpc1Njcm9sbFBhcmVudChub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIGdldFNjcm9sbFBhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKTtcbn0iLCAiaW1wb3J0IGdldFNjcm9sbFBhcmVudCBmcm9tIFwiLi9nZXRTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbi8qXG5naXZlbiBhIERPTSBlbGVtZW50LCByZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIHNjcm9sbCBwYXJlbnRzLCB1cCB0aGUgbGlzdCBvZiBhbmNlc29yc1xudW50aWwgd2UgZ2V0IHRvIHRoZSB0b3Agd2luZG93IG9iamVjdC4gVGhpcyBsaXN0IGlzIHdoYXQgd2UgYXR0YWNoIHNjcm9sbCBsaXN0ZW5lcnNcbnRvLCBiZWNhdXNlIGlmIGFueSBvZiB0aGVzZSBwYXJlbnQgZWxlbWVudHMgc2Nyb2xsLCB3ZSdsbCBuZWVkIHRvIHJlLWNhbGN1bGF0ZSB0aGVcbnJlZmVyZW5jZSBlbGVtZW50J3MgcG9zaXRpb24uXG4qL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0U2Nyb2xsUGFyZW50cyhlbGVtZW50LCBsaXN0KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuXG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoZWxlbWVudCk7XG4gIHZhciBpc0JvZHkgPSBzY3JvbGxQYXJlbnQgPT09ICgoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHkpO1xuICB2YXIgd2luID0gZ2V0V2luZG93KHNjcm9sbFBhcmVudCk7XG4gIHZhciB0YXJnZXQgPSBpc0JvZHkgPyBbd2luXS5jb25jYXQod2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBpc1Njcm9sbFBhcmVudChzY3JvbGxQYXJlbnQpID8gc2Nyb2xsUGFyZW50IDogW10pIDogc2Nyb2xsUGFyZW50O1xuICB2YXIgdXBkYXRlZExpc3QgPSBsaXN0LmNvbmNhdCh0YXJnZXQpO1xuICByZXR1cm4gaXNCb2R5ID8gdXBkYXRlZExpc3QgOiAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogaXNCb2R5IHRlbGxzIHVzIHRhcmdldCB3aWxsIGJlIGFuIEhUTUxFbGVtZW50IGhlcmVcbiAgdXBkYXRlZExpc3QuY29uY2F0KGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUodGFyZ2V0KSkpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJlY3QsIHtcbiAgICBsZWZ0OiByZWN0LngsXG4gICAgdG9wOiByZWN0LnksXG4gICAgcmlnaHQ6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiByZWN0LnkgKyByZWN0LmhlaWdodFxuICB9KTtcbn0iLCAiaW1wb3J0IHsgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSBcIi4vZ2V0Vmlld3BvcnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gXCIuL2dldERvY3VtZW50UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgZmFsc2UsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgcmVjdC50b3AgPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICByZWN0LmxlZnQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3Qud2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LmhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnggPSByZWN0LmxlZnQ7XG4gIHJlY3QueSA9IHJlY3QudG9wO1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnQgPyByZWN0VG9DbGllbnRSZWN0KGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkpIDogaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkgOiByZWN0VG9DbGllbnRSZWN0KGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpKTtcbn0gLy8gQSBcImNsaXBwaW5nIHBhcmVudFwiIGlzIGFuIG92ZXJmbG93YWJsZSBjb250YWluZXIgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpdGggYSBwb3NpdGlvbiBkaWZmZXJlbnQgZnJvbVxuLy8gYGluaXRpYWxgXG5cblxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xuICB2YXIgY2FuRXNjYXBlQ2xpcHBpbmcgPSBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSA+PSAwO1xuICB2YXIgY2xpcHBlckVsZW1lbnQgPSBjYW5Fc2NhcGVDbGlwcGluZyAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogZWxlbWVudDtcblxuICBpZiAoIWlzRWxlbWVudChjbGlwcGVyRWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE0MTRcblxuXG4gIHJldHVybiBjbGlwcGluZ1BhcmVudHMuZmlsdGVyKGZ1bmN0aW9uIChjbGlwcGluZ1BhcmVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpICYmIGNvbnRhaW5zKGNsaXBwaW5nUGFyZW50LCBjbGlwcGVyRWxlbWVudCkgJiYgZ2V0Tm9kZU5hbWUoY2xpcHBpbmdQYXJlbnQpICE9PSAnYm9keSc7XG4gIH0pO1xufSAvLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBwYXJlbnRzXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KGVsZW1lbnQsIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KSB7XG4gIHZhciBtYWluQ2xpcHBpbmdQYXJlbnRzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IFtdLmNvbmNhdChtYWluQ2xpcHBpbmdQYXJlbnRzLCBbcm9vdEJvdW5kYXJ5XSk7XG4gIHZhciBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuICB2YXIgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdQYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjUmVjdCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpKTtcbiAgY2xpcHBpbmdSZWN0LndpZHRoID0gY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC5oZWlnaHQgPSBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgY2xpcHBpbmdSZWN0LnggPSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LnkgPSBjbGlwcGluZ1JlY3QudG9wO1xuICByZXR1cm4gY2xpcHBpbmdSZWN0O1xufSIsICJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgc3RhcnQsIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZU9mZnNldHMoX3JlZikge1xuICB2YXIgcmVmZXJlbmNlID0gX3JlZi5yZWZlcmVuY2UsXG4gICAgICBlbGVtZW50ID0gX3JlZi5lbGVtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZi5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50ID8gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIHZhcmlhdGlvbiA9IHBsYWNlbWVudCA/IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIGNvbW1vblggPSByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCAvIDIgLSBlbGVtZW50LndpZHRoIC8gMjtcbiAgdmFyIGNvbW1vblkgPSByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQgLyAyIC0gZWxlbWVudC5oZWlnaHQgLyAyO1xuICB2YXIgb2Zmc2V0cztcblxuICBzd2l0Y2ggKGJhc2VQbGFjZW1lbnQpIHtcbiAgICBjYXNlIHRvcDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55IC0gZWxlbWVudC5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgYm90dG9tOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIHJpZ2h0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgbGVmdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZWxlbWVudC53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuXG4gIHZhciBtYWluQXhpcyA9IGJhc2VQbGFjZW1lbnQgPyBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCkgOiBudWxsO1xuXG4gIGlmIChtYWluQXhpcyAhPSBudWxsKSB7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICBzd2l0Y2ggKHZhcmlhdGlvbikge1xuICAgICAgY2FzZSBzdGFydDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSAtIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgZW5kOlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdICsgKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0cztcbn0iLCAiaW1wb3J0IGdldENsaXBwaW5nUmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBjbGlwcGluZ1BhcmVudHMsIHJlZmVyZW5jZSwgcG9wcGVyLCBib3R0b20sIHRvcCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi9leHBhbmRUb0hhc2hNYXAuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIF9vcHRpb25zJHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zJHBsYWNlbWVudCA9PT0gdm9pZCAwID8gc3RhdGUucGxhY2VtZW50IDogX29wdGlvbnMkcGxhY2VtZW50LFxuICAgICAgX29wdGlvbnMkc3RyYXRlZ3kgPSBfb3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIHN0cmF0ZWd5ID0gX29wdGlvbnMkc3RyYXRlZ3kgPT09IHZvaWQgMCA/IHN0YXRlLnN0cmF0ZWd5IDogX29wdGlvbnMkc3RyYXRlZ3ksXG4gICAgICBfb3B0aW9ucyRib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucyRib3VuZGFyeSA9PT0gdm9pZCAwID8gY2xpcHBpbmdQYXJlbnRzIDogX29wdGlvbnMkYm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRyb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucyRyb290Qm91bmRhcnkgPT09IHZvaWQgMCA/IHZpZXdwb3J0IDogX29wdGlvbnMkcm9vdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZWxlbWVudENvbnRlID0gX29wdGlvbnMuZWxlbWVudENvbnRleHQsXG4gICAgICBlbGVtZW50Q29udGV4dCA9IF9vcHRpb25zJGVsZW1lbnRDb250ZSA9PT0gdm9pZCAwID8gcG9wcGVyIDogX29wdGlvbnMkZWxlbWVudENvbnRlLFxuICAgICAgX29wdGlvbnMkYWx0Qm91bmRhcnkgPSBfb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMkYWx0Qm91bmRhcnkgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucyRwYWRkaW5nID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkcGFkZGluZztcbiAgdmFyIHBhZGRpbmdPYmplY3QgPSBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xuICB2YXIgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyByZWZlcmVuY2UgOiBwb3BwZXI7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW2FsdEJvdW5kYXJ5ID8gYWx0Q29udGV4dCA6IGVsZW1lbnRDb250ZXh0XTtcbiAgdmFyIGNsaXBwaW5nQ2xpZW50UmVjdCA9IGdldENsaXBwaW5nUmVjdChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCBnZXREb2N1bWVudEVsZW1lbnQoc3RhdGUuZWxlbWVudHMucG9wcGVyKSwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpO1xuICB2YXIgcmVmZXJlbmNlQ2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChzdGF0ZS5lbGVtZW50cy5yZWZlcmVuY2UpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHJlZmVyZW5jZUNsaWVudFJlY3QsXG4gICAgZWxlbWVudDogcG9wcGVyUmVjdCxcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KTtcbiAgdmFyIHBvcHBlckNsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KE9iamVjdC5hc3NpZ24oe30sIHBvcHBlclJlY3QsIHBvcHBlck9mZnNldHMpKTtcbiAgdmFyIGVsZW1lbnRDbGllbnRSZWN0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHBvcHBlckNsaWVudFJlY3QgOiByZWZlcmVuY2VDbGllbnRSZWN0OyAvLyBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyByZWN0XG4gIC8vIDAgb3IgbmVnYXRpdmUgPSB3aXRoaW4gdGhlIGNsaXBwaW5nIHJlY3RcblxuICB2YXIgb3ZlcmZsb3dPZmZzZXRzID0ge1xuICAgIHRvcDogY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wLFxuICAgIGJvdHRvbTogZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tLFxuICAgIGxlZnQ6IGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCxcbiAgICByaWdodDogZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0XG4gIH07XG4gIHZhciBvZmZzZXREYXRhID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQ7IC8vIE9mZnNldHMgY2FuIGJlIGFwcGxpZWQgb25seSB0byB0aGUgcG9wcGVyIGVsZW1lbnRcblxuICBpZiAoZWxlbWVudENvbnRleHQgPT09IHBvcHBlciAmJiBvZmZzZXREYXRhKSB7XG4gICAgdmFyIG9mZnNldCA9IG9mZnNldERhdGFbcGxhY2VtZW50XTtcbiAgICBPYmplY3Qua2V5cyhvdmVyZmxvd09mZnNldHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIG11bHRpcGx5ID0gW3JpZ2h0LCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gMSA6IC0xO1xuICAgICAgdmFyIGF4aXMgPSBbdG9wLCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gJ3knIDogJ3gnO1xuICAgICAgb3ZlcmZsb3dPZmZzZXRzW2tleV0gKz0gb2Zmc2V0W2F4aXNdICogbXVsdGlwbHk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gb3ZlcmZsb3dPZmZzZXRzO1xufSIsICJpbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgdmFyaWF0aW9uUGxhY2VtZW50cywgYmFzZVBsYWNlbWVudHMsIHBsYWNlbWVudHMgYXMgYWxsUGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPSBfb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPT09IHZvaWQgMCA/IGFsbFBsYWNlbWVudHMgOiBfb3B0aW9ucyRhbGxvd2VkQXV0b1A7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KTtcbiAgdmFyIHBsYWNlbWVudHMgPSB2YXJpYXRpb24gPyBmbGlwVmFyaWF0aW9ucyA/IHZhcmlhdGlvblBsYWNlbWVudHMgOiB2YXJpYXRpb25QbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSB2YXJpYXRpb247XG4gIH0pIDogYmFzZVBsYWNlbWVudHM7XG4gIHZhciBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWxsb3dlZEF1dG9QbGFjZW1lbnRzLmluZGV4T2YocGxhY2VtZW50KSA+PSAwO1xuICB9KTtcblxuICBpZiAoYWxsb3dlZFBsYWNlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdOiBGbG93IHNlZW1zIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCB0d28gYXJyYXkgdW5pb25zLi4uXG5cblxuICB2YXIgb3ZlcmZsb3dzID0gYWxsb3dlZFBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSlbZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvdmVyZmxvd3MpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dzW2FdIC0gb3ZlcmZsb3dzW2JdO1xuICB9KTtcbn0iLCAiaW1wb3J0IGdldE9wcG9zaXRlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBjb21wdXRlQXV0b1BsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IGJvdHRvbSwgdG9wLCBzdGFydCwgcmlnaHQsIGxlZnQsIGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmZ1bmN0aW9uIGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBpZiAoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdmFyIG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cblxuZnVuY3Rpb24gZmxpcChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyA9IG9wdGlvbnMuZmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZmxpcFZhcmlhdGlvID0gb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMkZmxpcFZhcmlhdGlvID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZmxpcFZhcmlhdGlvLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHM7XG4gIHZhciBwcmVmZXJyZWRQbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSBiYXNlUGxhY2VtZW50ID09PSBwcmVmZXJyZWRQbGFjZW1lbnQ7XG4gIHZhciBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcFZhcmlhdGlvbnMgPyBbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwcmVmZXJyZWRQbGFjZW1lbnQpKTtcbiAgdmFyIHBsYWNlbWVudHMgPSBbcHJlZmVycmVkUGxhY2VtZW50XS5jb25jYXQoZmFsbGJhY2tQbGFjZW1lbnRzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvID8gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnM6IGZsaXBWYXJpYXRpb25zLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzOiBhbGxvd2VkQXV0b1BsYWNlbWVudHNcbiAgICB9KSA6IHBsYWNlbWVudCk7XG4gIH0sIFtdKTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgY2hlY2tzTWFwID0gbmV3IE1hcCgpO1xuICB2YXIgbWFrZUZhbGxiYWNrQ2hlY2tzID0gdHJ1ZTtcbiAgdmFyIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHNbMF07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGFjZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBsYWNlbWVudCA9IHBsYWNlbWVudHNbaV07XG5cbiAgICB2YXIgX2Jhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG5cbiAgICB2YXIgaXNTdGFydFZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSBzdGFydDtcbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihfYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KTtcbiAgICB2YXIgbWFpblZhcmlhdGlvblNpZGUgPSBpc1ZlcnRpY2FsID8gaXNTdGFydFZhcmlhdGlvbiA/IHJpZ2h0IDogbGVmdCA6IGlzU3RhcnRWYXJpYXRpb24gPyBib3R0b20gOiB0b3A7XG5cbiAgICBpZiAocmVmZXJlbmNlUmVjdFtsZW5dID4gcG9wcGVyUmVjdFtsZW5dKSB7XG4gICAgICBtYWluVmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB9XG5cbiAgICB2YXIgYWx0VmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB2YXIgY2hlY2tzID0gW107XG5cbiAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbX2Jhc2VQbGFjZW1lbnRdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W21haW5WYXJpYXRpb25TaWRlXSA8PSAwLCBvdmVyZmxvd1thbHRWYXJpYXRpb25TaWRlXSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgcmV0dXJuIGNoZWNrO1xuICAgIH0pKSB7XG4gICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICBtYWtlRmFsbGJhY2tDaGVja3MgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNoZWNrc01hcC5zZXQocGxhY2VtZW50LCBjaGVja3MpO1xuICB9XG5cbiAgaWYgKG1ha2VGYWxsYmFja0NoZWNrcykge1xuICAgIC8vIGAyYCBtYXkgYmUgZGVzaXJlZCBpbiBzb21lIGNhc2VzIFx1MjAxMyByZXNlYXJjaCBsYXRlclxuICAgIHZhciBudW1iZXJPZkNoZWNrcyA9IGZsaXBWYXJpYXRpb25zID8gMyA6IDE7XG5cbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChfaSkge1xuICAgICAgdmFyIGZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzLmZpbmQoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgICAgICB2YXIgY2hlY2tzID0gY2hlY2tzTWFwLmdldChwbGFjZW1lbnQpO1xuXG4gICAgICAgIGlmIChjaGVja3MpIHtcbiAgICAgICAgICByZXR1cm4gY2hlY2tzLnNsaWNlKDAsIF9pKS5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChmaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IGZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pID0gbnVtYmVyT2ZDaGVja3M7IF9pID4gMDsgX2ktLSkge1xuICAgICAgdmFyIF9yZXQgPSBfbG9vcChfaSk7XG5cbiAgICAgIGlmIChfcmV0ID09PSBcImJyZWFrXCIpIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS5wbGFjZW1lbnQgIT09IGZpcnN0Rml0dGluZ1BsYWNlbWVudCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXAgPSB0cnVlO1xuICAgIHN0YXRlLnBsYWNlbWVudCA9IGZpcnN0Rml0dGluZ1BsYWNlbWVudDtcbiAgICBzdGF0ZS5yZXNldCA9IHRydWU7XG4gIH1cbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2ZsaXAnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogZmxpcCxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXSxcbiAgZGF0YToge1xuICAgIF9za2lwOiBmYWxzZVxuICB9XG59OyIsICJpbXBvcnQgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QsIHByZXZlbnRlZE9mZnNldHMpIHtcbiAgaWYgKHByZXZlbnRlZE9mZnNldHMgPT09IHZvaWQgMCkge1xuICAgIHByZXZlbnRlZE9mZnNldHMgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQgLSBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCArIHByZXZlbnRlZE9mZnNldHMueCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0ICsgcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoIC0gcHJldmVudGVkT2Zmc2V0cy54XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF0uc29tZShmdW5jdGlvbiAoc2lkZSkge1xuICAgIHJldHVybiBvdmVyZmxvd1tzaWRlXSA+PSAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGlkZShfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBwcmV2ZW50ZWRPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3c7XG4gIHZhciByZWZlcmVuY2VPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gIH0pO1xuICB2YXIgcG9wcGVyQWx0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gIH0pO1xuICB2YXIgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocmVmZXJlbmNlT3ZlcmZsb3csIHJlZmVyZW5jZVJlY3QpO1xuICB2YXIgcG9wcGVyRXNjYXBlT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHBvcHBlckFsdE92ZXJmbG93LCBwb3BwZXJSZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKTtcbiAgdmFyIGlzUmVmZXJlbmNlSGlkZGVuID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyk7XG4gIHZhciBoYXNQb3BwZXJFc2NhcGVkID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHBvcHBlckVzY2FwZU9mZnNldHMpO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0ge1xuICAgIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0czogcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzLFxuICAgIHBvcHBlckVzY2FwZU9mZnNldHM6IHBvcHBlckVzY2FwZU9mZnNldHMsXG4gICAgaXNSZWZlcmVuY2VIaWRkZW46IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgIGhhc1BvcHBlckVzY2FwZWQ6IGhhc1BvcHBlckVzY2FwZWRcbiAgfTtcbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1yZWZlcmVuY2UtaGlkZGVuJzogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgJ2RhdGEtcG9wcGVyLWVzY2FwZWQnOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnaGlkZScsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J10sXG4gIGZuOiBoaWRlXG59OyIsICJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgcGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHJlY3RzLCBvZmZzZXQpIHtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciBpbnZlcnREaXN0YW5jZSA9IFtsZWZ0LCB0b3BdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IC0xIDogMTtcblxuICB2YXIgX3JlZiA9IHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicgPyBvZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgcmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KSkgOiBvZmZzZXQsXG4gICAgICBza2lkZGluZyA9IF9yZWZbMF0sXG4gICAgICBkaXN0YW5jZSA9IF9yZWZbMV07XG5cbiAgc2tpZGRpbmcgPSBza2lkZGluZyB8fCAwO1xuICBkaXN0YW5jZSA9IChkaXN0YW5jZSB8fCAwKSAqIGludmVydERpc3RhbmNlO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyB7XG4gICAgeDogZGlzdGFuY2UsXG4gICAgeTogc2tpZGRpbmdcbiAgfSA6IHtcbiAgICB4OiBza2lkZGluZyxcbiAgICB5OiBkaXN0YW5jZVxuICB9O1xufVxuXG5mdW5jdGlvbiBvZmZzZXQoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmMi5uYW1lO1xuICB2YXIgX29wdGlvbnMkb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfb3B0aW9ucyRvZmZzZXQgPT09IHZvaWQgMCA/IFswLCAwXSA6IF9vcHRpb25zJG9mZnNldDtcbiAgdmFyIGRhdGEgPSBwbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgc3RhdGUucmVjdHMsIG9mZnNldCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICB2YXIgX2RhdGEkc3RhdGUkcGxhY2VtZW50ID0gZGF0YVtzdGF0ZS5wbGFjZW1lbnRdLFxuICAgICAgeCA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC54LFxuICAgICAgeSA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC55O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54ICs9IHg7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkgKz0geTtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnb2Zmc2V0JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICBmbjogb2Zmc2V0XG59OyIsICJpbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5cbmZ1bmN0aW9uIHBvcHBlck9mZnNldHMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgLy8gT2Zmc2V0cyBhcmUgdGhlIGFjdHVhbCBwb3NpdGlvbiB0aGUgcG9wcGVyIG5lZWRzIHRvIGhhdmUgdG8gYmVcbiAgLy8gcHJvcGVybHkgcG9zaXRpb25lZCBuZWFyIGl0cyByZWZlcmVuY2UgZWxlbWVudFxuICAvLyBUaGlzIGlzIHRoZSBtb3N0IGJhc2ljIHBsYWNlbWVudCwgYW5kIHdpbGwgYmUgYWRqdXN0ZWQgYnlcbiAgLy8gdGhlIG1vZGlmaWVycyBpbiB0aGUgbmV4dCBzdGVwXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiBzdGF0ZS5yZWN0cy5yZWZlcmVuY2UsXG4gICAgZWxlbWVudDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncG9wcGVyT2Zmc2V0cycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAncmVhZCcsXG4gIGZuOiBwb3BwZXJPZmZzZXRzLFxuICBkYXRhOiB7fVxufTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWx0QXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59IiwgImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4sIHdpdGhpbk1heENsYW1wIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWluIGFzIG1hdGhNaW4sIG1heCBhcyBtYXRoTWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZSxcbiAgICBhbHRBeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZVxuICB9IDogT2JqZWN0LmFzc2lnbih7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgYWx0QXhpczogMFxuICB9LCB0ZXRoZXJPZmZzZXRWYWx1ZSk7XG4gIHZhciBvZmZzZXRNb2RpZmllclN0YXRlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdIDogbnVsbDtcbiAgdmFyIGRhdGEgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKCFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkO1xuXG4gICAgdmFyIG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gICAgdmFyIGFsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgdmFyIG9mZnNldCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdO1xuICAgIHZhciBtaW4gPSBvZmZzZXQgKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IG9mZnNldCAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWluTGVuIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBhcnJvd09mZnNldFBhcmVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93ICYmIGdldE9mZnNldFBhcmVudChzdGF0ZS5lbGVtZW50cy5hcnJvdyk7XG4gICAgdmFyIGNsaWVudE9mZnNldCA9IGFycm93T2Zmc2V0UGFyZW50ID8gbWFpbkF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFRvcCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50TGVmdCB8fCAwIDogMDtcbiAgICB2YXIgb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW21haW5BeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJCA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IG9mZnNldCArIG1pbk9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWUgLSBjbGllbnRPZmZzZXQ7XG4gICAgdmFyIHRldGhlck1heCA9IG9mZnNldCArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG4gICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQgLSBvZmZzZXQ7XG4gIH1cblxuICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDI7XG5cbiAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICB2YXIgX2FsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gYm90dG9tIDogcmlnaHQ7XG5cbiAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICB2YXIgX2xlbiA9IGFsdEF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICB2YXIgaXNPcmlnaW5TaWRlID0gW3RvcCwgbGVmdF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICB2YXIgX29mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkMiA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbYWx0QXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIDogMDtcblxuICAgIHZhciBfdGV0aGVyTWluID0gaXNPcmlnaW5TaWRlID8gX21pbiA6IF9vZmZzZXQgLSByZWZlcmVuY2VSZWN0W19sZW5dIC0gcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXM7XG5cbiAgICB2YXIgX3RldGhlck1heCA9IGlzT3JpZ2luU2lkZSA/IF9vZmZzZXQgKyByZWZlcmVuY2VSZWN0W19sZW5dICsgcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXMgOiBfbWF4O1xuXG4gICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB0ZXRoZXIgJiYgaXNPcmlnaW5TaWRlID8gd2l0aGluTWF4Q2xhbXAoX3RldGhlck1pbiwgX29mZnNldCwgX3RldGhlck1heCkgOiB3aXRoaW4odGV0aGVyID8gX3RldGhlck1pbiA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IF90ZXRoZXJNYXggOiBfbWF4KTtcblxuICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCAiZXhwb3J0IHsgZGVmYXVsdCBhcyBhcHBseVN0eWxlcyB9IGZyb20gXCIuL2FwcGx5U3R5bGVzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFycm93IH0gZnJvbSBcIi4vYXJyb3cuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29tcHV0ZVN0eWxlcyB9IGZyb20gXCIuL2NvbXB1dGVTdHlsZXMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXZlbnRMaXN0ZW5lcnMgfSBmcm9tIFwiLi9ldmVudExpc3RlbmVycy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmbGlwIH0gZnJvbSBcIi4vZmxpcC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoaWRlIH0gZnJvbSBcIi4vaGlkZS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvZmZzZXQgfSBmcm9tIFwiLi9vZmZzZXQuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcG9wcGVyT2Zmc2V0cyB9IGZyb20gXCIuL3BvcHBlck9mZnNldHMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcHJldmVudE92ZXJmbG93IH0gZnJvbSBcIi4vcHJldmVudE92ZXJmbG93LmpzXCI7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEhUTUxFbGVtZW50U2Nyb2xsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICB9O1xufSIsICJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iLCAiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXROb2RlU2Nyb2xsIGZyb20gXCIuL2dldE5vZGVTY3JvbGwuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50U2NhbGVkKGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gcm91bmQocmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDE7XG4gIHZhciBzY2FsZVkgPSByb3VuZChyZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxO1xuICByZXR1cm4gc2NhbGVYICE9PSAxIHx8IHNjYWxlWSAhPT0gMTtcbn0gLy8gUmV0dXJucyB0aGUgY29tcG9zaXRlIHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LlxuLy8gQ29tcG9zaXRlIG1lYW5zIGl0IHRha2VzIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zIGFzIHdlbGwgYXMgbGF5b3V0LlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXBvc2l0ZVJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudCwgaXNGaXhlZCkge1xuICBpZiAoaXNGaXhlZCA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZCA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50SXNTY2FsZWQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNFbGVtZW50U2NhbGVkKG9mZnNldFBhcmVudCk7XG4gIHZhciBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudElzU2NhbGVkLCBpc0ZpeGVkKTtcbiAgdmFyIHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICB2YXIgb2Zmc2V0cyA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEwNzhcbiAgICBpc1Njcm9sbFBhcmVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgb2Zmc2V0cyA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUpO1xuICAgICAgb2Zmc2V0cy54ICs9IG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ICs9IG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54LFxuICAgIHk6IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59IiwgImltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcblxuZnVuY3Rpb24gb3JkZXIobW9kaWZpZXJzKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIG1hcC5zZXQobW9kaWZpZXIubmFtZSwgbW9kaWZpZXIpO1xuICB9KTsgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuXG4gIGZ1bmN0aW9uIHNvcnQobW9kaWZpZXIpIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcbiAgICB2YXIgcmVxdWlyZXMgPSBbXS5jb25jYXQobW9kaWZpZXIucmVxdWlyZXMgfHwgW10sIG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIHJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIHZhciBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkZXJNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIC8vIG9yZGVyIGJhc2VkIG9uIGRlcGVuZGVuY2llc1xuICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7IC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG5cbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwaGFzZSkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgcmV0dXJuIG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZTtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZm4pIHtcbiAgdmFyIHBlbmRpbmc7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICBwZW5kaW5nID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNvbHZlKGZuKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwZW5kaW5nO1xuICB9O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUJ5TmFtZShtb2RpZmllcnMpIHtcbiAgdmFyIG1lcmdlZCA9IG1vZGlmaWVycy5yZWR1Y2UoZnVuY3Rpb24gKG1lcmdlZCwgY3VycmVudCkge1xuICAgIHZhciBleGlzdGluZyA9IG1lcmdlZFtjdXJyZW50Lm5hbWVdO1xuICAgIG1lcmdlZFtjdXJyZW50Lm5hbWVdID0gZXhpc3RpbmcgPyBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZywgY3VycmVudCwge1xuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3Rpbmcub3B0aW9ucywgY3VycmVudC5vcHRpb25zKSxcbiAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLmRhdGEsIGN1cnJlbnQuZGF0YSlcbiAgICB9KSA6IGN1cnJlbnQ7XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfSwge30pOyAvLyBJRTExIGRvZXMgbm90IHN1cHBvcnQgT2JqZWN0LnZhbHVlc1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhtZXJnZWQpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG1lcmdlZFtrZXldO1xuICB9KTtcbn0iLCAiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tIFwiLi91dGlscy9vcmRlck1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL3V0aWxzL2RlYm91bmNlLmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiAnYWJzb2x1dGUnXG59O1xuXG5mdW5jdGlvbiBhcmVWYWxpZEVsZW1lbnRzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wcGVyR2VuZXJhdG9yKGdlbmVyYXRvck9wdGlvbnMpIHtcbiAgaWYgKGdlbmVyYXRvck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdlbmVyYXRvck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfZ2VuZXJhdG9yT3B0aW9ucyA9IGdlbmVyYXRvck9wdGlvbnMsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0TW9kaWZpZXJzLFxuICAgICAgZGVmYXVsdE1vZGlmaWVycyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9PT0gdm9pZCAwID8gW10gOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0T3B0aW9ucyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPT09IHZvaWQgMCA/IERFRkFVTFRfT1BUSU9OUyA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZjI7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBkZWZhdWx0T3B0aW9ucyksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXI6IHBvcHBlclxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fVxuICAgIH07XG4gICAgdmFyIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB2YXIgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5zdGFuY2UgPSB7XG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKHNldE9wdGlvbnNBY3Rpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2V0T3B0aW9uc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHNldE9wdGlvbnNBY3Rpb24oc3RhdGUub3B0aW9ucykgOiBzZXRPcHRpb25zQWN0aW9uO1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHN0YXRlLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgc3RhdGUub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHN0YXRlLnNjcm9sbFBhcmVudHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpXG4gICAgICAgIH07IC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG5cbiAgICAgICAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhtZXJnZUJ5TmFtZShbXS5jb25jYXQoZGVmYXVsdE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpKSk7IC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gbS5lbmFibGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSBcdTIwMTMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG5cblxuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJyksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlcilcbiAgICAgICAgfTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG5cbiAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7IC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RpZmllci5kYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIFx1MjAxMyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICAgICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYuZWZmZWN0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZWZmZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNsZWFudXBGbiA9IGVmZmVjdCh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIG5vb3BGbiA9IGZ1bmN0aW9uIG5vb3BGbigpIHt9O1xuXG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07IiwgImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwgImV4cG9ydCAqIGZyb20gXCIuL2VudW1zLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2RpZmllcnMvaW5kZXguanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93LCBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyQmFzZSB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciB9IGZyb20gXCIuL3BvcHBlci5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJMaXRlIH0gZnJvbSBcIi4vcG9wcGVyLWxpdGUuanNcIjsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBCYXNlIH07XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmcm9tIHdoaWNoIHRoZSBtb3N0IGNsYXNzZXMgYXJlIGRlcml2ZWQuXG4gKlxuICogVGhpcyBjbGFzcyBoYXMgYmVzaWRlcyBhIGB0b1N0cmluZ2Agd2hpY2ggcmV0dXJucyB0aGUganNvbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0XG4gKiBhbHNvIGEgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcy5cbiAqXG4gKiBUaGVyZWZvcmUsIHRoZSBjbGFzcyBoYXMgYSBzdGF0aWMgbWV0aG9kIGAgW1N5bWJvbC5oYXNJbnN0YW5jZV0odGhhdClgIHdoaWNoIHJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0XG4gKiBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MuXG4gKlxuICogQHNlZSBbaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3ltYm9sL2hhc0luc3RhbmNlXShkZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3ltYm9sL2hhc0luc3RhbmNlKVxuICpcbiAqIERlcml2ZWQgY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IGEgc3RhdGljIGdldHRlciBgaW5zdGFuY2VTeW1ib2xgIHdoaWNoIHJldHVybnMgYSB1bmlxdWUgc3ltYm9sLlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcbiAqICAgIHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9iYXNlXCIpO1xuICogfVxuICogYGBgXG4gKlxuICogVGhlIGNsYXNzIHdhcyBmb3JtZXJseSBjYWxsZWQgT2JqZWN0LlxuICpcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBiYXNlIGNsYXNzIGZvciB0aGUgbW9zdCBjbGFzc2VzIGluIHRoZSBtb25zdGVyIGxpYnJhcnlcbiAqL1xuY2xhc3MgQmFzZSBleHRlbmRzIE9iamVjdCB7XG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL2Jhc2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEBwYXJhbSB0aGF0XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdKHRoYXQpIHtcblx0XHRpZiAoXG5cdFx0XHR0aGF0ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdHRoYXQgPT09IG51bGwgfHxcblx0XHRcdCh0eXBlb2YgdGhhdCAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdGhhdCAhPT0gXCJmdW5jdGlvblwiKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRoYXRDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGF0KTtcblx0XHRpZiAoXG5cdFx0XHR0aGF0Q2xhc3MgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0dGhhdENsYXNzID09PSBudWxsIHx8XG5cdFx0XHQodHlwZW9mIHRoYXRDbGFzcyAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdGhhdENsYXNzICE9PSBcImZ1bmN0aW9uXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKGNoZWNrSW5zdGFuY2VTeW1ib2wuYXBwbHkodGhpcywgW3RoYXRDbGFzc10pID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyB0aGlzIGNhbGwgdGhlIHN0YXRpYyBtZXRob2Qgb2YgdGhlIHN1cGVyIGNsYXNzLCBpZiB0aGVyZSBpcyBvbmVcblx0XHRyZXR1cm4gc3VwZXJbU3ltYm9sLmhhc0luc3RhbmNlXSh0aGF0KTtcblx0fVxufVxuXG4vKipcbiAqIHRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBjbGFzcyBoYXMgYSBzdGF0aWMgZ2V0dGVyIGBpbnN0YW5jZVN5bWJvbGAgYW5kIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIGdldHRlciBpcyBlcXVhbCB0byB0aGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9ialxuICogQHJldHVybiB7Ym9vbGVhbnxhbnl8Ym9vbGVhbn1cbiAqIEBzaW5jZSAyLjEuMFxuICovXG5mdW5jdGlvbiBjaGVja0luc3RhbmNlU3ltYm9sKG9iaikge1xuXHRpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShpbnN0YW5jZVN5bWJvbCkgPT09IGZhbHNlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Y29uc3QgcHJvdG8gPSBvYmo/LmNvbnN0cnVjdG9yO1xuXHRpZiAoXG5cdFx0cHJvdG8gPT09IHVuZGVmaW5lZCB8fFxuXHRcdHByb3RvID09PSBudWxsIHx8XG5cdFx0KHR5cGVvZiBwcm90byAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcHJvdG8gIT09IFwiZnVuY3Rpb25cIilcblx0KSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKHByb3RvLmhhc093blByb3BlcnR5KGluc3RhbmNlU3ltYm9sKSAhPT0gdHJ1ZSkge1xuXHRcdHJldHVybiBjaGVja0luc3RhbmNlU3ltYm9sLmFwcGx5KHRoaXMsIFtvYmouX19wcm90b19fXSk7XG5cdH1cblxuXHRjb25zdCBzeW1ib2wgPSBwcm90b1tpbnN0YW5jZVN5bWJvbF07XG5cdGlmIChzeW1ib2wgPT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChvYmouX19wcm90b19fKSB7XG5cdFx0XHRyZXR1cm4gY2hlY2tJbnN0YW5jZVN5bWJvbChvYmouX19wcm90b19fKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChzeW1ib2wgPT09IHRoaXNbaW5zdGFuY2VTeW1ib2xdKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gY2hlY2tJbnN0YW5jZVN5bWJvbC5hcHBseSh0aGlzLCBbb2JqLl9fcHJvdG9fX10pO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgU3RhY2sgfTtcblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgUXVldWUoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIFN0YWNrIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvc3RhY2tcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzRW1wdHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPT09IDA7XG5cdH1cblxuXHQvKipcblx0ICogbG9va3MgYXQgdGhlIG9iamVjdCBhdCB0aGUgdG9wIG9mIHRoaXMgc3RhY2sgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRoZSBzdGFjay5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBlZWsoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmRhdGE/Llt0aGlzLmRhdGEubGVuZ3RoIC0gMV07XG5cdH1cblxuXHQvKipcblx0ICogcHVzaGVzIGFuIGl0ZW0gb250byB0aGUgdG9wIG9mIHRoaXMgc3RhY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UXVldWV9XG5cdCAqL1xuXHRwdXNoKHZhbHVlKSB7XG5cdFx0dGhpcy5kYXRhLnB1c2godmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgZW50cmllc1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZXMgdGhlIG9iamVjdCBhdCB0aGUgdG9wIG9mIHRoaXMgc3RhY2sgYW5kIHJldHVybnNcblx0ICogdGhhdCBvYmplY3QgYXMgdGhlIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24uIGlzIHRoZSBzdGFjayBlbXB0eVxuXHQgKiB0aGUgcmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZC5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBvcCgpIHtcblx0XHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmRhdGEucG9wKCk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge1xuXHRpc0FycmF5LFxuXHRpc0ludGVnZXIsXG5cdGlzT2JqZWN0LFxuXHRpc1ByaW1pdGl2ZSxcblx0aXNTdHJpbmcsXG59IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSBcIi4uL3R5cGVzL3N0YWNrLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVJbnRlZ2VyLFxuXHR2YWxpZGF0ZUJvb2xlYW4sXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IFBhdGhmaW5kZXIsIERFTElNSVRFUiwgV0lMRENBUkQgfTtcblxuLyoqXG4gKiBwYXRoIHNlcGFyYXRvclxuICpcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBERUxJTUlURVIgPSBcIi5cIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgV0lMRENBUkQgPSBcIipcIjtcblxuLyoqXG4gKiBQYXRoZmluZGVyIGlzIGEgY2xhc3MgdG8gZmluZCBhIHBhdGggdG8gYW4gb2JqZWN0LlxuICpcbiAqIFdpdGggdGhlIGhlbHAgb2YgdGhlIHBhdGhmaW5kZXIsIHZhbHVlcyBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbiBmcm9tIGFuIG9iamVjdCBjb25zdHJ1Y3QuXG4gKlxuICogYGBgXG4gKiBuZXcgUGF0aGZpbmRlcih7XG4gKiBhOiB7XG4gKiAgICAgYjoge1xuICogICAgICAgICBmOiBbXG4gKiAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgZzogZmFsc2UsXG4gKiAgICAgICAgICAgICB9XG4gKiAgICAgICAgIF0sXG4gKiAgICAgfVxuICogfVxuICogfSkuZ2V0VmlhKFwiYS5iLmYuMC5nXCIpOyAvLyBcdTIxQTYgZmFsc2VcbiAqIGBgYFxuICpcbiAqIGlmIGEgdmFsdWUgaXMgbm90IHByZXNlbnQgb3IgaGFzIHRoZSB3cm9uZyB0eXBlLCBhIGNvcnJlc3BvbmRpbmcgZXhjZXB0aW9uIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIG5ldyBQYXRoZmluZGVyKHt9KS5nZXRWaWEoXCJhLmIuZi4wLmdcIik7IC8vIFx1MjFBNiBFcnJvclxuICogYGBgXG4gKlxuICogVGhlIGBQYXRoZmluZGVyLmV4aXN0cygpYCBtZXRob2QgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBhY2Nlc3MgdG8gdGhlIHBhdGggaXMgcG9zc2libGUuXG4gKlxuICogYGBgXG4gKiBuZXcgUGF0aGZpbmRlcih7fSkuZXhpc3RzKFwiYS5iLmYuMC5nXCIpOyAvLyBcdTIxQTYgZmFsc2VcbiAqIGBgYFxuICpcbiAqIHBhdGhmaW5kZXIgY2FuIGFsc28gYmUgdXNlZCB0byBidWlsZCBvYmplY3Qgc3RydWN0dXJlcy4gdG8gZG8gdGhpcywgdGhlIGBQYXRoZmluZGVyLnNldFZpYSgpYCBtZXRob2QgbXVzdCBiZSB1c2VkLlxuICpcbiAqIGBgYFxuICogb2JqID0ge307XG4gKiBuZXcgUGF0aGZpbmRlcihvYmopLnNldFZpYSgnYS5iLjAuYycsIHRydWUpOyAvLyBcdTIxQTYge2E6e2I6W3tjOnRydWV9XX19XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL3BhdGhmaW5kZXIvZXhhbXBsZS0xLyBFeGFtcGxlIDFcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvcGF0aGZpbmRlci9leGFtcGxlLTIvIEV4YW1wbGUgMlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgUGF0aGZpbmRlciBpcyBhIGNsYXNzIHRvIGZpbmQgYSBwYXRoIHRvIGFuIG9iamVjdC5cbiAqL1xuY2xhc3MgUGF0aGZpbmRlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY29uc3RydWN0b3IuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgLSBUaGUgb2JqZWN0IHBhcmFtZXRlciBmb3IgdGhlIGNvbnN0cnVjdG9yLlxuXHQgKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBwcm92aWRlZCBvYmplY3QgcGFyYW1ldGVyIGlzIGEgc2ltcGxlIHR5cGUuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvYmplY3QpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGlzUHJpbWl0aXZlKG9iamVjdCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBwYXJhbWV0ZXIgbXVzdCBub3QgYmUgYSBzaW1wbGUgdHlwZVwiKTtcblx0XHR9XG5cblx0XHR0aGlzLm9iamVjdCA9IG9iamVjdDtcblx0XHR0aGlzLndpbGRDYXJkID0gV0lMRENBUkQ7XG5cdH1cblxuXHQvKipcblx0ICogc2V0IHdpbGRjYXJkXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB3aWxkY2FyZFxuXHQgKiBAcmV0dXJuIHtQYXRoZmluZGVyfVxuXHQgKiBAc2luY2UgMS43LjBcblx0ICovXG5cdHNldFdpbGRDYXJkKHdpbGRjYXJkKSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcod2lsZGNhcmQpO1xuXHRcdHRoaXMud2lsZENhcmQgPSB3aWxkY2FyZDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuXHQgKiBAc2luY2UgMS40LjBcblx0ICogQHJldHVybiB7Kn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG5cdCAqL1xuXHRnZXRWaWEocGF0aCkge1xuXHRcdHJldHVybiBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCB0aGlzLm9iamVjdCwgcGF0aCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQYXRoZmluZGVyfVxuXHQgKiBAc2luY2UgMS40LjBcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcblx0ICovXG5cdHNldFZpYShwYXRoLCB2YWx1ZSkge1xuXHRcdHNldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHRoaXMub2JqZWN0LCBwYXRoLCB2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlIFZpYSBQYXRoXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG5cdCAqIEByZXR1cm4ge1BhdGhmaW5kZXJ9XG5cdCAqIEBzaW5jZSAxLjYuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuXHQgKi9cblx0ZGVsZXRlVmlhKHBhdGgpIHtcblx0XHRkZWxldGVWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCB0aGlzLm9iamVjdCwgcGF0aCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcblx0ICogQHJldHVybiB7Ym9vbH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHNpbmNlIDEuNC4wXG5cdCAqL1xuXHRleGlzdHMocGF0aCkge1xuXHRcdHRyeSB7XG5cdFx0XHRnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCB0aGlzLm9iamVjdCwgcGF0aCwgdHJ1ZSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdFxuICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2hlY2tcbiAqIEByZXR1cm4ge01hcH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXRlcmF0ZShzdWJqZWN0LCBwYXRoLCBjaGVjaykge1xuXHRpZiAoY2hlY2sgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNoZWNrID0gZmFsc2U7XG5cdH1cblx0dmFsaWRhdGVCb29sZWFuKGNoZWNrKTtcblxuXHRjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG5cblx0aWYgKGlzQXJyYXkocGF0aCkpIHtcblx0XHRwYXRoID0gcGF0aC5qb2luKERFTElNSVRFUik7XG5cdH1cblxuXHRpZiAoaXNPYmplY3Qoc3ViamVjdCkgfHwgaXNBcnJheShzdWJqZWN0KSkge1xuXHRcdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHN1YmplY3QpKSB7XG5cdFx0XHRyZXN1bHQuc2V0KGtleSwgZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdmFsdWUsIHBhdGgsIGNoZWNrKSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGtleSA9IHBhdGguc3BsaXQoREVMSU1JVEVSKS5zaGlmdCgpO1xuXHRcdHJlc3VsdC5zZXQoa2V5LCBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBzdWJqZWN0LCBwYXRoLCBjaGVjaykpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN1YmplY3RcbiAqIEBwYXJhbSBwYXRoXG4gKiBAcGFyYW0gY2hlY2tcbiAqIEByZXR1cm4ge1Z8KnxNYXB9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVWaWFQYXRoKHN1YmplY3QsIHBhdGgsIGNoZWNrKSB7XG5cdGlmIChjaGVjayA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y2hlY2sgPSBmYWxzZTtcblx0fVxuXHR2YWxpZGF0ZUJvb2xlYW4oY2hlY2spO1xuXG5cdGlmICghKGlzQXJyYXkocGF0aCkgfHwgaXNTdHJpbmcocGF0aCkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJ0eXBlIGVycm9yOiBhIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBpbiBnZXRWYWx1ZVZpYVBhdGhcIixcblx0XHQpO1xuXHR9XG5cblx0bGV0IHBhcnRzO1xuXHRpZiAoaXNTdHJpbmcocGF0aCkpIHtcblx0XHRpZiAocGF0aCA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuIHN1YmplY3Q7XG5cdFx0fVxuXG5cdFx0cGFydHMgPSBwYXRoLnNwbGl0KERFTElNSVRFUik7XG5cdH1cblxuXHRsZXQgY3VycmVudCA9IHBhcnRzLnNoaWZ0KCk7XG5cblx0aWYgKGN1cnJlbnQgPT09IHRoaXMud2lsZENhcmQpIHtcblx0XHRyZXR1cm4gaXRlcmF0ZS5jYWxsKHRoaXMsIHN1YmplY3QsIHBhcnRzLmpvaW4oREVMSU1JVEVSKSwgY2hlY2spO1xuXHR9XG5cblx0aWYgKGlzT2JqZWN0KHN1YmplY3QpIHx8IGlzQXJyYXkoc3ViamVjdCkpIHtcblx0XHRsZXQgYW5jaG9yO1xuXHRcdGlmIChzdWJqZWN0IGluc3RhbmNlb2YgTWFwIHx8IHN1YmplY3QgaW5zdGFuY2VvZiBXZWFrTWFwKSB7XG5cdFx0XHRhbmNob3IgPSBzdWJqZWN0LmdldChjdXJyZW50KTtcblx0XHR9IGVsc2UgaWYgKHN1YmplY3QgaW5zdGFuY2VvZiBTZXQgfHwgc3ViamVjdCBpbnN0YW5jZW9mIFdlYWtTZXQpIHtcblx0XHRcdGN1cnJlbnQgPSBwYXJzZUludChjdXJyZW50KTtcblx0XHRcdHZhbGlkYXRlSW50ZWdlcihjdXJyZW50KTtcblx0XHRcdGFuY2hvciA9IFsuLi5zdWJqZWN0XT8uW2N1cnJlbnRdO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIFdlYWtSZWYgPT09IFwiZnVuY3Rpb25cIiAmJiBzdWJqZWN0IGluc3RhbmNlb2YgV2Vha1JlZikge1xuXHRcdFx0dGhyb3cgRXJyb3IoXCJ1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlIChXZWFrUmVmKVwiKTtcblx0XHR9IGVsc2UgaWYgKGlzQXJyYXkoc3ViamVjdCkpIHtcblx0XHRcdGN1cnJlbnQgPSBwYXJzZUludChjdXJyZW50KTtcblx0XHRcdHZhbGlkYXRlSW50ZWdlcihjdXJyZW50KTtcblx0XHRcdGFuY2hvciA9IHN1YmplY3Q/LltjdXJyZW50XTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YW5jaG9yID0gc3ViamVjdD8uW2N1cnJlbnRdO1xuXHRcdH1cblxuXHRcdGlmIChpc09iamVjdChhbmNob3IpIHx8IGlzQXJyYXkoYW5jaG9yKSkge1xuXHRcdFx0cmV0dXJuIGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIGFuY2hvciwgcGFydHMuam9pbihERUxJTUlURVIpLCBjaGVjayk7XG5cdFx0fVxuXG5cdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdHRocm93IEVycm9yKGB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZCAoJHtwYXJ0cy5qb2luKERFTElNSVRFUil9KWApO1xuXHRcdH1cblxuXHRcdGlmIChjaGVjayA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG5cdFx0XHRcdE9iamVjdC5nZXRQcm90b3R5cGVPZihzdWJqZWN0KSxcblx0XHRcdFx0Y3VycmVudCxcblx0XHRcdCk7XG5cblx0XHRcdGlmICghc3ViamVjdC5oYXNPd25Qcm9wZXJ0eShjdXJyZW50KSAmJiBkZXNjcmlwdG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgRXJyb3IoXCJ1bmtub3duIHZhbHVlIFwiICsgY3VycmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFuY2hvcjtcblx0fVxuXG5cdHRocm93IFR5cGVFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZSAke3R5cGVvZiBzdWJqZWN0fSBmb3IgcGF0aCAke3BhdGh9YCk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZXRWYWx1ZVZpYVBhdGgoc3ViamVjdCwgcGF0aCwgdmFsdWUpIHtcblx0aWYgKCEoaXNBcnJheShwYXRoKSB8fCBpc1N0cmluZyhwYXRoKSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIGVycm9yOiBhIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBhbiBhcnJheVwiKTtcblx0fVxuXG5cdGxldCBwYXJ0cztcblx0aWYgKGlzQXJyYXkocGF0aCkpIHtcblx0XHRpZiAocGF0aC5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRwYXJ0cyA9IHBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0cGFydHMgPSBwYXRoLnNwbGl0KERFTElNSVRFUik7XG5cdH1cblxuXHRsZXQgbGFzdCA9IHBhcnRzLnBvcCgpO1xuXHRjb25zdCBzdWJwYXRoID0gcGFydHMuam9pbihERUxJTUlURVIpO1xuXG5cdGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cdGxldCBjdXJyZW50ID0gc3VicGF0aDtcblx0d2hpbGUgKHRydWUpIHtcblx0XHR0cnkge1xuXHRcdFx0Z2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgY3VycmVudCwgdHJ1ZSk7XG5cdFx0XHRicmVhaztcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0c3RhY2sucHVzaChjdXJyZW50KTtcblx0XHRwYXJ0cy5wb3AoKTtcblx0XHRjdXJyZW50ID0gcGFydHMuam9pbihERUxJTUlURVIpO1xuXG5cdFx0aWYgKGN1cnJlbnQgPT09IFwiXCIpIGJyZWFrO1xuXHR9XG5cblx0d2hpbGUgKCFzdGFjay5pc0VtcHR5KCkpIHtcblx0XHRjdXJyZW50ID0gc3RhY2sucG9wKCk7XG5cdFx0bGV0IG9iaiA9IHt9O1xuXG5cdFx0aWYgKCFzdGFjay5pc0VtcHR5KCkpIHtcblx0XHRcdGNvbnN0IG4gPSBzdGFjay5wZWVrKCkuc3BsaXQoREVMSU1JVEVSKS5wb3AoKTtcblx0XHRcdGlmIChpc0ludGVnZXIocGFyc2VJbnQobikpKSB7XG5cdFx0XHRcdG9iaiA9IFtdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHNldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHN1YmplY3QsIGN1cnJlbnQsIG9iaik7XG5cdH1cblxuXHRjb25zdCBhbmNob3IgPSBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBzdWJqZWN0LCBzdWJwYXRoKTtcblxuXHRpZiAoIShpc09iamVjdChzdWJqZWN0KSB8fCBpc0FycmF5KHN1YmplY3QpKSkge1xuXHRcdHRocm93IFR5cGVFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZTogJHt0eXBlb2Ygc3ViamVjdH0gaW4gc2V0VmFsdWVWaWFQYXRoYCk7XG5cdH1cblxuXHRpZiAoYW5jaG9yIGluc3RhbmNlb2YgTWFwIHx8IGFuY2hvciBpbnN0YW5jZW9mIFdlYWtNYXApIHtcblx0XHRhbmNob3Iuc2V0KGxhc3QsIHZhbHVlKTtcblx0fSBlbHNlIGlmIChhbmNob3IgaW5zdGFuY2VvZiBTZXQgfHwgYW5jaG9yIGluc3RhbmNlb2YgV2Vha1NldCkge1xuXHRcdGFuY2hvci5hcHBlbmQodmFsdWUpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBXZWFrUmVmID09PSBcImZ1bmN0aW9uXCIgJiYgYW5jaG9yIGluc3RhbmNlb2YgV2Vha1JlZikge1xuXHRcdHRocm93IEVycm9yKFwidW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZSBpbiBzZXRWYWx1ZVZpYVBhdGhcIik7XG5cdH0gZWxzZSBpZiAoaXNBcnJheShhbmNob3IpKSB7XG5cdFx0bGFzdCA9IHBhcnNlSW50KGxhc3QpO1xuXHRcdHZhbGlkYXRlSW50ZWdlcihsYXN0KTtcblx0XHRhc3NpZ25Qcm9wZXJ0eShhbmNob3IsIFwiXCIgKyBsYXN0LCB2YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0YXNzaWduUHJvcGVydHkoYW5jaG9yLCBsYXN0LCB2YWx1ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5mdW5jdGlvbiBhc3NpZ25Qcm9wZXJ0eShvYmplY3QsIGtleSwgdmFsdWUpIHtcblx0aWYgKCFvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdG9iamVjdFtrZXldID0gdmFsdWU7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRkZWxldGUgb2JqZWN0W2tleV07XG5cdH1cblxuXHRvYmplY3Rba2V5XSA9IHZhbHVlO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZVZhbHVlVmlhUGF0aChzdWJqZWN0LCBwYXRoKSB7XG5cdGlmICghKGlzQXJyYXkocGF0aCkgfHwgaXNTdHJpbmcocGF0aCkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJ0eXBlIGVycm9yOiBhIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBpbiBkZWxldGVWYWx1ZVZpYVBhdGhcIixcblx0XHQpO1xuXHR9XG5cblx0bGV0IHBhcnRzO1xuXHRpZiAoaXNBcnJheShwYXRoKSkge1xuXHRcdGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHBhcnRzID0gcGF0aDtcblx0fSBlbHNlIHtcblx0XHRwYXJ0cyA9IHBhdGguc3BsaXQoREVMSU1JVEVSKTtcblx0fVxuXG5cdGxldCBsYXN0ID0gcGFydHMucG9wKCk7XG5cdGNvbnN0IHN1YlBhdGggPSBwYXJ0cy5qb2luKERFTElNSVRFUik7XG5cblx0Y29uc3QgYW5jaG9yID0gZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgc3ViUGF0aCk7XG5cblx0aWYgKGFuY2hvciBpbnN0YW5jZW9mIE1hcCkge1xuXHRcdGFuY2hvci5kZWxldGUobGFzdCk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0YW5jaG9yIGluc3RhbmNlb2YgU2V0IHx8XG5cdFx0YW5jaG9yIGluc3RhbmNlb2YgV2Vha01hcCB8fFxuXHRcdGFuY2hvciBpbnN0YW5jZW9mIFdlYWtTZXQgfHxcblx0XHQodHlwZW9mIFdlYWtSZWYgPT09IFwiZnVuY3Rpb25cIiAmJiBhbmNob3IgaW5zdGFuY2VvZiBXZWFrUmVmKVxuXHQpIHtcblx0XHR0aHJvdyBFcnJvcihcInVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGUgaW4gZGVsZXRlVmFsdWVWaWFQYXRoXCIpO1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkoYW5jaG9yKSkge1xuXHRcdGxhc3QgPSBwYXJzZUludChsYXN0KTtcblx0XHR2YWxpZGF0ZUludGVnZXIobGFzdCk7XG5cdFx0ZGVsZXRlIGFuY2hvcltsYXN0XTtcblx0fSBlbHNlIHtcblx0XHRkZWxldGUgYW5jaG9yW2xhc3RdO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNJdGVyYWJsZSwgaXNTdHJpbmcgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcblxuZXhwb3J0IHsgVG9rZW5MaXN0IH07XG5cbi8qKlxuICogQSBgVG9rZW5MaXN0YCBhbGxvd3MgeW91IHRvIG1hbmFnZSB0b2tlbnMgKGluZGl2aWR1YWwgY2hhcmFjdGVyIHN0cmluZ3Mgc3VjaCBhcyBjc3MgY2xhc3NlcyBpbiBhbiBhdHRyaWJ1dGUgc3RyaW5nKS5cbiAqXG4gKiBUaGUgYFRva2VuTGlzdGAgb2ZmZXJzIHZhcmlvdXMgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgdmFsdWVzLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBhZGQsIHJlbW92ZSBvciByZXBsYWNlIGEgY2xhc3MgaW4gYSBDU1MgbGlzdC5cbiAqXG4gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIFtpdGVyYXRpb24gcHJvdG9jb2xdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0l0ZXJhdGlvbl9wcm90b2NvbHMpLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBUb2tlbkxpc3QgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfGl0ZXJhdGFibGV9IGluaXRcblx0ICovXG5cdGNvbnN0cnVjdG9yKGluaXQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudG9rZW5zID0gbmV3IFNldCgpO1xuXG5cdFx0aWYgKHR5cGVvZiBpbml0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0aGlzLmFkZChpbml0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSXRlcmF0b3IgcHJvdG9jb2xcblx0ICpcblx0ICogQHJldHVybiB7U3ltYm9sLml0ZXJhdG9yfVxuXHQgKi9cblx0Z2V0SXRlcmF0b3IoKSB7XG5cdFx0cmV0dXJuIHRoaXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEl0ZXJhdG9yXG5cdCAqXG5cdCAqIEByZXR1cm4ge3tuZXh0OiAoKGZ1bmN0aW9uKCk6ICh7dmFsdWU6ICosIGRvbmU6IGJvb2xlYW59KSl8Kil9fVxuXHQgKi9cblx0W1N5bWJvbC5pdGVyYXRvcl0oKSB7XG5cdFx0Ly8gVXNlIGEgbmV3IGluZGV4IGZvciBlYWNoIGl0ZXJhdG9yLiBUaGlzIG1ha2VzIG11bHRpcGxlXG5cdFx0Ly8gaXRlcmF0aW9ucyBvdmVyIHRoZSBpdGVyYWJsZSBzYWZlIGZvciBub24tdHJpdmlhbCBjYXNlcyxcblx0XHQvLyBzdWNoIGFzIHVzZSBvZiBicmVhayBvciBuZXN0ZWQgbG9vcGluZyBvdmVyIHRoZSBzYW1lIGl0ZXJhYmxlLlxuXHRcdGxldCBpbmRleCA9IDA7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcygpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG5leHQ6ICgpID0+IHtcblx0XHRcdFx0aWYgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRyZXR1cm4geyB2YWx1ZTogZW50cmllcz8uW2luZGV4KytdLCBkb25lOiBmYWxzZSB9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiB7IGRvbmU6IHRydWUgfTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiBpdCBjb250YWlucyB0b2tlbiwgb3RoZXJ3aXNlIGZhbHNlXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtMi5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGNvbnRhaW5zKHZhbHVlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUgPSB2YWx1ZS50cmltKCk7XG5cdFx0XHRsZXQgY291bnRlciA9IDA7XG5cdFx0XHR2YWx1ZS5zcGxpdChcIiBcIikuZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdFx0aWYgKHRoaXMudG9rZW5zLmhhcyh0b2tlbi50cmltKCkpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRjb3VudGVyKys7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBjb3VudGVyID4gMCA/IHRydWUgOiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHRcdGxldCBjb3VudGVyID0gMDtcblx0XHRcdGZvciAoY29uc3QgdG9rZW4gb2YgdmFsdWUpIHtcblx0XHRcdFx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHRcdFx0XHRpZiAodGhpcy50b2tlbnMuaGFzKHRva2VuLnRyaW0oKSkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGNvdW50ZXIrKztcblx0XHRcdH1cblx0XHRcdHJldHVybiBjb3VudGVyID4gMCA/IHRydWUgOiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHRva2Vuc1xuXHQgKlxuXHQgKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvdG9rZW5saXN0LTMubWpzXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfGl0ZXJhdGFibGV9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Rva2VuTGlzdH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB2YWx1ZVxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdHRoaXMudG9rZW5zLmFkZCh0b2tlbi50cmltKCkpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdFx0XHRcdHRoaXMudG9rZW5zLmFkZCh0b2tlbi50cmltKCkpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5zdXBwb3J0ZWQgdmFsdWVcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCB0b2tlbnNcblx0ICpcblx0ICogQHJldHVybiB7VG9rZW5MaXN0fVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy50b2tlbnMuY2xlYXIoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRva2VuXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtNC5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybiB7VG9rZW5MaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHZhbHVlXG5cdCAqL1xuXHRyZW1vdmUodmFsdWUpIHtcblx0XHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHR2YWx1ZS5zcGxpdChcIiBcIikuZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdFx0dGhpcy50b2tlbnMuZGVsZXRlKHRva2VuLnRyaW0oKSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKGlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHZhbHVlKSB7XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0XHRcdFx0dGhpcy50b2tlbnMuZGVsZXRlKHRva2VuLnRyaW0oKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ1bnN1cHBvcnRlZCB2YWx1ZVwiLCBcInR5cGVzL3Rva2VubGlzdC5tanNcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmVwbGFjZXMgYSB0b2tlbiB3aXRoIGEgbmV3IHRva2VuLlxuXHQgKlxuXHQgKiBpZiB0aGUgcGFzc2VkIHRva2VuIGV4aXN0cywgaXQgaXMgcmVwbGFjZWQgd2l0aCBuZXdUb2tlbiBhbmQgVG9rZW5MaXN0IGlzIHJldHVybmVkLlxuXHQgKiBpZiB0aGUgdG9rZW4gZG9lcyBub3QgZXhpc3QsIG5ld1Rva2VuIGlzIG5vdCBzZXQgYW5kIFRva2VuTGlzdCBpcyByZXR1cm5lZC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuZXdUb2tlblxuXHQgKiBAcmV0dXJuIHtUb2tlbkxpc3R9XG5cdCAqL1xuXHRyZXBsYWNlKHRva2VuLCBuZXdUb2tlbikge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0XHR2YWxpZGF0ZVN0cmluZyhuZXdUb2tlbik7XG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKHRva2VuKSkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYSA9IEFycmF5LmZyb20odGhpcy50b2tlbnMpO1xuXHRcdGNvbnN0IGkgPSBhLmluZGV4T2YodG9rZW4pO1xuXHRcdGlmIChpID09PSAtMSkgcmV0dXJuIHRoaXM7XG5cblx0XHRhLnNwbGljZShpLCAxLCBuZXdUb2tlbik7XG5cdFx0dGhpcy50b2tlbnMgPSBuZXcgU2V0KCk7XG5cdFx0dGhpcy5hZGQoYSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRva2VuIGZyb20gc3RyaW5nLiBJZiB0b2tlbiBkb2Vzbid0IGV4aXN0IGl0J3MgYWRkZWQuXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtNS5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB2YWx1ZVxuXHQgKi9cblx0dG9nZ2xlKHZhbHVlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdHRvZ2dsZVZhbHVlLmNhbGwodGhpcywgdG9rZW4pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR0b2dnbGVWYWx1ZS5jYWxsKHRoaXMsIHRva2VuKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInVuc3VwcG9ydGVkIHZhbHVlXCIsIFwidHlwZXMvdG9rZW5saXN0Lm1qc1wiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIGFuIGFycmF5IHdpdGggYWxsIHRva2Vuc1xuXHQgKlxuXHQgKiBAcmV0dXJuIHthcnJheX1cblx0ICovXG5cdGVudHJpZXMoKSB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20odGhpcy50b2tlbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIGV4ZWN1dGVzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiB3aXRoIGVhY2ggdmFsdWUgb2YgdGhlIHNldFxuXHQgKlxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcmV0dXJuIHtUb2tlbkxpc3R9XG5cdCAqL1xuXHRmb3JFYWNoKGNhbGxiYWNrKSB7XG5cdFx0dmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayk7XG5cdFx0dGhpcy50b2tlbnMuZm9yRWFjaChjYWxsYmFjayk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmV0dXJucyB0aGUgaW5kaXZpZHVhbCB0b2tlbnMgc2VwYXJhdGVkIGJ5IGEgYmxhbmsgY2hhcmFjdGVyXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLmVudHJpZXMoKS5qb2luKFwiIFwiKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdG9rZW5cbiAqIEByZXR1cm4ge3RvZ2dsZVZhbHVlfVxuICogQHRocm93cyB7RXJyb3J9IG11c3QgYmUgY2FsbGVkIHdpdGggVG9rZW5MaXN0LmNhbGxcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlVmFsdWUodG9rZW4pIHtcblx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIFRva2VuTGlzdCkpXG5cdFx0dGhyb3cgRXJyb3IoXCJtdXN0IGJlIGNhbGxlZCB3aXRoIFRva2VuTGlzdC5jYWxsXCIpO1xuXHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdHRva2VuID0gdG9rZW4udHJpbSgpO1xuXHRpZiAodGhpcy5jb250YWlucyh0b2tlbikpIHtcblx0XHR0aGlzLnJlbW92ZSh0b2tlbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0dGhpcy5hZGQodG9rZW4pO1xuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQge1xuXHRERUZBVUxUX1RIRU1FLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfT1BUSU9OUyxcblx0QVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IsXG5cdEFUVFJJQlVURV9USEVNRV9QUkVGSVgsXG5cdEFUVFJJQlVURV9USEVNRV9OQU1FLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJUyxcblx0QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJULFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9SRU1PVkUsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkQsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkRfVFlQRSxcblx0QVRUUklCVVRFX1RFTVBMQVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX1JPTEUsXG5cdEFUVFJJQlVURV9ESVNBQkxFRCxcblx0QVRUUklCVVRFX1ZBTFVFLFxuXHRBVFRSSUJVVEVfT0JKRUNUTElOSyxcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0VEFHX1NDUklQVCxcblx0VEFHX1NUWUxFLFxuXHRUQUdfTElOSyxcblx0QVRUUklCVVRFX0lELFxuXHRBVFRSSUJVVEVfQ0xBU1MsXG5cdEFUVFJJQlVURV9USVRMRSxcblx0QVRUUklCVVRFX1NSQyxcblx0QVRUUklCVVRFX0hSRUYsXG5cdEFUVFJJQlVURV9UWVBFLFxuXHRBVFRSSUJVVEVfTk9OQ0UsXG5cdEFUVFJJQlVURV9UUkFOU0xBVEUsXG5cdEFUVFJJQlVURV9UQUJJTkRFWCxcblx0QVRUUklCVVRFX1NQRUxMQ0hFQ0ssXG5cdEFUVFJJQlVURV9TTE9ULFxuXHRBVFRSSUJVVEVfUEFSVCxcblx0QVRUUklCVVRFX0xBTkcsXG5cdEFUVFJJQlVURV9JVEVNVFlQRSxcblx0QVRUUklCVVRFX0lURU1TQ09QRSxcblx0QVRUUklCVVRFX0lURU1SRUYsXG5cdEFUVFJJQlVURV9JVEVNSUQsXG5cdEFUVFJJQlVURV9JVEVNUFJPUCxcblx0QVRUUklCVVRFX0lTLFxuXHRBVFRSSUJVVEVfSU5QVVRNT0RFLFxuXHRBVFRSSUJVVEVfQUNDRVNTS0VZLFxuXHRBVFRSSUJVVEVfQVVUT0NBUElUQUxJWkUsXG5cdEFUVFJJQlVURV9BVVRPRk9DVVMsXG5cdEFUVFJJQlVURV9DT05URU5URURJVEFCTEUsXG5cdEFUVFJJQlVURV9ESVIsXG5cdEFUVFJJQlVURV9EUkFHR0FCTEUsXG5cdEFUVFJJQlVURV9FTlRFUktFWUhJTlQsXG5cdEFUVFJJQlVURV9FWFBPUlRQQVJUUyxcblx0QVRUUklCVVRFX0hJRERFTixcblx0QVRUUklCVVRFX0ZPUk1fQklORCxcblx0QVRUUklCVVRFX0ZPUk1fQklORF9UWVBFLFxuXHRvYmplY3RVcGRhdGVyTGlua1N5bWJvbCxcblx0Y3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sLFxuXHRpbml0Q29udHJvbENhbGxiYWNrTmFtZSxcblx0QVRUUklCVVRFX1NDUklQVF9IT1NULFxuXHRBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSyxcbn07XG5cbi8qKlxuICogZGVmYXVsdCB0aGVtZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgREVGQVVMVF9USEVNRSA9IFwibW9uc3RlclwiO1xuXG4vKipcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfUFJFRklYID0gXCJkYXRhLW1vbnN0ZXItXCI7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHBhc3Mgb3B0aW9ucyB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX09QVElPTlMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfW9wdGlvbnNgO1xuXG4vKipcbiAqIFRoaXMgaXMgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHBhc3MgdGhlIHNjcmlwdCBob3N0IHRvIGEgY29udHJvbFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNDguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX1NDUklQVF9IT1NUID0gYCR7QVRUUklCVVRFX1BSRUZJWH1zY3JpcHQtaG9zdGA7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHBhc3Mgb3B0aW9ucyB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMwLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SID0gYCR7QVRUUklCVVRFX1BSRUZJWH1vcHRpb25zLXNlbGVjdG9yYDtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcGFzcyB0aGUgY2FsbGJhY2sgdG8gYSBjb250cm9sXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40OC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSyA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW5pdC1jYWxsYmFja2A7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY2FsbGJhY2sgdG8gcGFzcyB0aGUgY2FsbGJhY2sgdG8gYSBjb250cm9sXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40OC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBpbml0Q29udHJvbENhbGxiYWNrTmFtZSA9IGBpbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RIRU1FX1BSRUZJWCA9IGAke0FUVFJJQlVURV9QUkVGSVh9dGhlbWUtYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfVEhFTUVfTkFNRSA9IGAke0FUVFJJQlVURV9USEVNRV9QUkVGSVh9bmFtZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWF0dHJpYnV0ZXNgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI3LjFcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXNlbGVjdC10aGlzYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9cmVwbGFjZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVCA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW5zZXJ0YDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW5zZXJ0LXJlZmVyZW5jZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX1JFTU9WRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9cmVtb3ZlYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfQklORCA9IGAke0FUVFJJQlVURV9QUkVGSVh9YmluZGA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNzMuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9CSU5EID0gYCR7QVRUUklCVVRFX1BSRUZJWH1mb3JtLWJpbmRgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjczLjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0ZPUk1fQklORF9UWVBFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1mb3JtLWJpbmQtdHlwZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0JJTkRfVFlQRSA9IGAke0FUVFJJQlVURV9VUERBVEVSX0JJTkR9LXR5cGVgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI3LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RFTVBMQVRFX1BSRUZJWCA9IGAke0FUVFJJQlVURV9QUkVGSVh9dGVtcGxhdGUtcHJlZml4YDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ST0xFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yb2xlYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9WQUxVRSA9IFwidmFsdWVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX09CSkVDVExJTksgPSBgJHtBVFRSSUJVVEVfUFJFRklYfW9iamVjdGxpbmtgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0VSUk9STUVTU0FHRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9ZXJyb3JgO1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3Qgb2JqZWN0VXBkYXRlckxpbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAb2JqZWN0LXVwZGF0ZXItbGlua1wiLFxuKTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rXCIsXG4pO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgVEFHX1NDUklQVCA9IFwic2NyaXB0XCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBUQUdfU1RZTEUgPSBcInN0eWxlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBUQUdfTElOSyA9IFwibGlua1wiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuXG5jb25zdCBBVFRSSUJVVEVfSUQgPSBcImlkXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5cbmNvbnN0IEFUVFJJQlVURV9DTEFTUyA9IFwiY2xhc3NcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9USVRMRSA9IFwidGl0bGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9TUkMgPSBcInNyY1wiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9IUkVGID0gXCJocmVmXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVFlQRSA9IFwidHlwZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX05PTkNFID0gXCJub25jZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RSQU5TTEFURSA9IFwidHJhbnNsYXRlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVEFCSU5ERVggPSBcInRhYmluZGV4XCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfU1BFTExDSEVDSyA9IFwic3BlbGxjaGVja1wiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1NMT1QgPSBcInNsb3RcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9QQVJUID0gXCJwYXJ0XCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfTEFORyA9IFwibGFuZ1wiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lURU1UWVBFID0gXCJpdGVtdHlwZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lURU1TQ09QRSA9IFwiaXRlbXNjb3BlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVJFRiA9IFwiaXRlbXJlZlwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lURU1JRCA9IFwiaXRlbWlkXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVBST1AgPSBcIml0ZW1wcm9wXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVMgPSBcImlzXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSU5QVVRNT0RFID0gXCJpbnB1dG1vZGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9BQ0NFU1NLRVkgPSBcImFjY2Vzc2tleVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0FVVE9DQVBJVEFMSVpFID0gXCJhdXRvY2FwaXRhbGl6ZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0FVVE9GT0NVUyA9IFwiYXV0b2ZvY3VzXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfQ09OVEVOVEVESVRBQkxFID0gXCJjb250ZW50ZWRpdGFibGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ESVIgPSBcImRpclwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0RSQUdHQUJMRSA9IFwiZHJhZ2dhYmxlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRU5URVJLRVlISU5UID0gXCJlbnRlcmtleWhpbnRcIjtcbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRVhQT1JUUEFSVFMgPSBcImV4cG9ydHBhcnRzXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0hJRERFTiA9IFwiaGlkZGVuXCI7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgVG9rZW5MaXN0IH0gZnJvbSBcIi4uL3R5cGVzL3Rva2VubGlzdC5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlU3RyaW5nLFxuXHR2YWxpZGF0ZVN5bWJvbCxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX09CSkVDVExJTksgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7XG5cdGZpbmRDbG9zZXN0T2JqZWN0TGluayxcblx0YWRkVG9PYmplY3RMaW5rLFxuXHRyZW1vdmVPYmplY3RMaW5rLFxuXHRoYXNPYmplY3RMaW5rLFxuXHRnZXRMaW5rZWRPYmplY3RzLFxuXHR0b2dnbGVBdHRyaWJ1dGVUb2tlbixcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuLFxuXHRjb250YWluc0F0dHJpYnV0ZVRva2VuLFxuXHRyZXBsYWNlQXR0cmlidXRlVG9rZW4sXG5cdGNsZWFyQXR0cmlidXRlVG9rZW5zLFxuXHRmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlLFxuXHRmaW5kQ2xvc2VzdEJ5Q2xhc3MsXG59O1xuXG4vKipcbiAqIEdldCB0aGUgY2xvc2VzdCBvYmplY3QgbGluayBvZiBhIG5vZGVcbiAqXG4gKiBpZiBhIG5vZGUgaXMgc3BlY2lmaWVkIHdpdGhvdXQgYSBvYmplY3QgbGluaywgYSByZWN1cnNpdmUgc2VhcmNoIHVwd2FyZHMgaXMgcGVyZm9ybWVkIHVudGlsIHRoZSBjb3JyZXNwb25kaW5nXG4gKiBvYmplY3QgbGluayBpcyBmb3VuZCwgb3IgdW5kZWZpbmVkIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fHVuZGVmaW5lZH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGZpbmRDbG9zZXN0T2JqZWN0TGluayhlbGVtZW50KSB7XG5cdHJldHVybiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGVsZW1lbnQsIEFUVFJJQlVURV9PQkpFQ1RMSU5LKTtcbn1cblxuLyoqXG4gKiBBZGRzIGEgY2xhc3MgYXR0cmlidXRlIHRvIGFuIGVsZW1lbnQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0gZWxlbWVudFxuICogQHBhcmFtIHN5bWJvbFxuICogQHBhcmFtIG9iamVjdFxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gYWRkVG9PYmplY3RMaW5rKGVsZW1lbnQsIHN5bWJvbCwgb2JqZWN0KSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0ZWxlbWVudFtzeW1ib2xdID0gbmV3IFNldCgpO1xuXHR9XG5cblx0YWRkQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgQVRUUklCVVRFX09CSkVDVExJTkssIHN5bWJvbC50b1N0cmluZygpKTtcblx0ZWxlbWVudFtzeW1ib2xdLmFkZChvYmplY3QpO1xuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFuIG9iamVjdCBmcm9tIGFuIGVsZW1lbnRcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U3ltYm9sfSBzeW1ib2xcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZU9iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBBVFRSSUJVVEVfT0JKRUNUTElOSywgc3ltYm9sLnRvU3RyaW5nKCkpO1xuXHRkZWxldGUgZWxlbWVudFtzeW1ib2xdO1xuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZWxlbWVudCBoYXMgYW4gb2JqZWN0IGxpbmtcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U3ltYm9sfSBzeW1ib2xcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oXG5cdFx0ZWxlbWVudCxcblx0XHRBVFRSSUJVVEVfT0JKRUNUTElOSyxcblx0XHRzeW1ib2wudG9TdHJpbmcoKSxcblx0KTtcbn1cblxuLyoqXG4gKiBUaGUgT2JqZWN0TGluayBjYW4gYmUgdXNlZCB0byBhdHRhY2ggb2JqZWN0cyB0byBIVE1MRWxlbWVudHMuIFRoZSBlbGVtZW50cyBhcmUga2VwdCBpbiBhIHNldCB1bmRlciBhIHVuaXF1ZVxuICogc3ltYm9sIGFuZCBjYW4gYmUgcmVhZCB2aWEgYW4gaXRlcmF0b3Ige0BzZWUge0BsaW5rIGdldExpbmtlZE9iamVjdHN9fS5cbiAqXG4gKiBJbiBhZGRpdGlvbiwgZWxlbWVudHMgd2l0aCBhbiBvYmplY3RMaW5rIHJlY2VpdmUgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9iamVjdGxpbmtgLlxuICpcbiAqIFdpdGggdGhlIG1ldGhvZCAge0BzZWUge0BsaW5rIGFkZFRvT2JqZWN0TGlua319IHRoZSBvYmplY3RzIGNhbiBiZSBhZGRlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U3ltYm9sfSBzeW1ib2xcbiAqIEByZXR1cm4ge0l0ZXJhdG9yfVxuICogQHRocm93cyB7RXJyb3J9IHRoZXJlIGlzIG5vIG9iamVjdCBsaW5rIGZvciBzeW1ib2xcbiAqL1xuZnVuY3Rpb24gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCBzeW1ib2wpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3ltYm9sKHN5bWJvbCk7XG5cblx0aWYgKGVsZW1lbnQ/LltzeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYHRoZXJlIGlzIG5vIG9iamVjdCBsaW5rIGZvciAke3N5bWJvbC50b1N0cmluZygpfWApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnQ/LltzeW1ib2xdW1N5bWJvbC5pdGVyYXRvcl0oKTtcbn1cblxuLyoqXG4gKiBXaXRoIHRoaXMgbWV0aG9kIHRva2VucyBpbiBhbiBhdHRyaWJ1dGUgY2FuIGJlIHN3aXRjaGVkIG9uIG9yIG9mZi4gRm9yIGV4YW1wbGUsIGNsYXNzZXMgY2FuIGJlIHN3aXRjaGVkIG9uIGFuZCBvZmYgaW4gdGhlIGVsZW1lbnRzIGNsYXNzIGF0dHJpYnV0ZS5cbiAqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdG9rZW4pIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHRva2VuKTtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdGtleSxcblx0XHRuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLnRvZ2dsZSh0b2tlbikudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBhZGQgYSB0b2tlbiB0byBhbiBhdHRyaWJ1dGUuIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gYWRkQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB0b2tlbikge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdG9rZW4pO1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0a2V5LFxuXHRcdG5ldyBUb2tlbkxpc3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSkuYWRkKHRva2VuKS50b1N0cmluZygpLFxuXHQpO1xuXG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmVtb3ZlIHRva2VucyBmcm9tIGFuIGF0dHJpYnV0ZS5cbiAqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdG9rZW4pIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdGtleSxcblx0XHRuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLnJlbW92ZSh0b2tlbikudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBhdHRyaWJ1dGUgaGFzIGEgdG9rZW4uXG4gKlxuICogVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB0b2tlbikge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiBuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLmNvbnRhaW5zKHRva2VuKTtcbn1cblxuLyoqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBmcm9tXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICovXG5mdW5jdGlvbiByZXBsYWNlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCBmcm9tLCB0bykge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcoZnJvbSk7XG5cdHZhbGlkYXRlU3RyaW5nKHRvKTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdGtleSxcblx0XHRuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLnJlcGxhY2UoZnJvbSwgdG8pLnRvU3RyaW5nKCksXG5cdCk7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY2xlYXJBdHRyaWJ1dGVUb2tlbnMoZWxlbWVudCwga2V5KSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBcIlwiKTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzLCBzdGFydGluZyBmcm9tIGFuIGBIVE1MRWxlbWVtZW50YCwgZm9yIHRoZSBuZXh0IGVsZW1lbnQgdGhhdCBoYXMgYSBjZXJ0YWluIGF0dHJpYnV0ZS5cbiAqXG4gKiBgYGBodG1sXG4gKiA8ZGl2IGRhdGEtbXktYXR0cmlidXRlPVwiMlwiIGlkPVwiMlwiPlxuICogICAgIDxkaXYgaWQ9XCIxXCI+PC9kaXY+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIC8vIGlmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCAodW5kZWZpbmVkKSwgdGhlbiBvbmx5IHRoZSBhdHRyaWJ1dGUgaXMgY2hlY2tlZC5cbiAqIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzEnKSwnZGF0YS1teS1hdHRyaWJ1dGUnKTsgLy8gXHUyMUE2IG5vZGUgd2l0aCBpZCAyXG4gKiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcyJyksJ2RhdGEtbXktYXR0cmlidXRlJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICpcbiAqIC8vIGlmIGEgdmFsdWUgaXMgc3BlY2lmaWVkLCBmb3IgZXhhbXBsZSBhbiBlbXB0eSBzdHJpbmcsIHRoZW4gdGhlIG5hbWUgYW5kIHRoZSB2YWx1ZSBhcmUgY2hlY2tlZC5cbiAqIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzEnKSwnZGF0YS1teS1hdHRyaWJ1dGUnLCAnJyk7ICAvLyBcdTIxQTYgdW5kZWZpbmVkXG4gKiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ2RhdGEtbXktYXR0cmlidXRlJywgJzInKTsgLy8gXHUyMUE2IG5vZGUgd2l0aCBpZCAyXG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9XG4gKiBAc3VtbWFyeSBmaW5kIGNsb3Nlc3Qgbm9kZVxuICovXG5mdW5jdGlvbiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxFbGVtZW50XCIpKTtcblxuXHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cblx0XHRpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSA9PT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0fVxuXG5cdGxldCBzZWxlY3RvciA9IHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSBzZWxlY3RvciArPSBgPSR7dmFsaWRhdGVTdHJpbmcodmFsdWUpfWA7XG5cdGNvbnN0IHJlc3VsdCA9IGVsZW1lbnQuY2xvc2VzdChgWyR7c2VsZWN0b3J9XWApO1xuXHRpZiAocmVzdWx0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcywgc3RhcnRpbmcgZnJvbSBhbiBgSFRNTEVsZW1lbnRgLCBmb3IgdGhlIG5leHQgZWxlbWVudCB0aGF0IGhhcyBhIGNlcnRhaW4gYXR0cmlidXRlLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgY2xhc3M9XCJteWNsYXNzXCIgaWQ9XCIyXCI+XG4gKiAgICAgPGRpdiBpZD1cIjFcIj48L2Rpdj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gaWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkICh1bmRlZmluZWQpLCB0aGVuIG9ubHkgdGhlIGF0dHJpYnV0ZSBpcyBjaGVja2VkLlxuICogZmluZENsb3Nlc3RCeUNsYXNzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ215Y2xhc3MnKTsgLy8gXHUyMUE2IG5vZGUgd2l0aCBpZCAyXG4gKiBmaW5kQ2xvc2VzdEJ5Q2xhc3MoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzInKSwnbXljbGFzcycpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqIGBgYFxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge2ZpbmRDbG9zZXN0QnlDbGFzc30gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvZG9tL2F0dHJpYnV0ZXMubWpzJztcbiAqIGZpbmRDbG9zZXN0QnlDbGFzcygpO1xuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI3LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9XG4gKiBAc3VtbWFyeSBmaW5kIGNsb3Nlc3Qgbm9kZVxuICovXG5mdW5jdGlvbiBmaW5kQ2xvc2VzdEJ5Q2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgZ2V0R2xvYmFsRnVuY3Rpb24oXCJIVE1MRWxlbWVudFwiKSk7XG5cblx0aWYgKGVsZW1lbnQ/LmNsYXNzTGlzdD8uY29udGFpbnModmFsaWRhdGVTdHJpbmcoY2xhc3NOYW1lKSkpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGNvbnN0IHJlc3VsdCA9IGVsZW1lbnQuY2xvc2VzdChgLiR7Y2xhc3NOYW1lfWApO1xuXHRpZiAocmVzdWx0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7XG5cdGdldERvY3VtZW50LFxuXHRnZXRXaW5kb3csXG5cdGdldERvY3VtZW50RnJhZ21lbnRGcm9tU3RyaW5nLFxuXHRmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMsXG5cdGdldENvbnRhaW5pbmdEb2N1bWVudCxcblx0Z2V0UmVnaXN0ZXJlZEN1c3RvbUVsZW1lbnRzLFxuXHRmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMsXG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGZldGNoZXMgdGhlIGRvY3VtZW50IG9iamVjdFxuICpcbiAqIEluIG5vZGVqcyB0aGlzIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIHBlcmZvcm1lZCB3aXRoIFtqc2RvbV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvanNkb20pLlxuICpcbiAqIGBgYFxuICogaW1wb3J0IHtKU0RPTX0gZnJvbSBcImpzZG9tXCJcbiAqIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcIm9iamVjdFwiKSB7XG4gKiAgICBjb25zdCB7d2luZG93fSA9IG5ldyBKU0RPTSgnJywge1xuICogICAgICAgIHVybDogJ2h0dHA6Ly9leGFtcGxlLmNvbS8nLFxuICogICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlXG4gKiAgICB9KTtcbiAqXG4gKiAgICBbXG4gKiAgICAgICAgJ3NlbGYnLFxuICogICAgICAgICdkb2N1bWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50JyxcbiAqICAgICAgICAnTm9kZScsXG4gKiAgICAgICAgJ0VsZW1lbnQnLFxuICogICAgICAgICdIVE1MRWxlbWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICogICAgICAgICdET01QYXJzZXInLFxuICogICAgICAgICdYTUxTZXJpYWxpemVyJyxcbiAqICAgICAgICAnTm9kZUZpbHRlcicsXG4gKiAgICAgICAgJ0lucHV0RXZlbnQnLFxuICogICAgICAgICdDdXN0b21FdmVudCdcbiAqICAgIF0uZm9yRWFjaChrZXkgPT4gKGdldEdsb2JhbCgpW2tleV0gPSB3aW5kb3dba2V5XSkpO1xuICogfVxuICogYGBgXG4gKlxuICogQHJldHVybiB7b2JqZWN0fVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFxuICovXG5mdW5jdGlvbiBnZXREb2N1bWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXRHbG9iYWwoKT8uW1wiZG9jdW1lbnRcIl07XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwib2JqZWN0XCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3Qgc3VwcG9ydGVkIGVudmlyb25tZW50XCIpO1xuXHR9XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGZldGNoZXMgdGhlIHdpbmRvdyBvYmplY3RcbiAqXG4gKiBJbiBub2RlanMgdGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBiZSBwZXJmb3JtZWQgd2l0aCBbanNkb21dKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2pzZG9tKS5cbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7SlNET019IGZyb20gXCJqc2RvbVwiXG4gKiBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJvYmplY3RcIikge1xuICogICAgY29uc3Qge3dpbmRvd30gPSBuZXcgSlNET00oJycsIHtcbiAqICAgICAgICB1cmw6ICdodHRwOi8vZXhhbXBsZS5jb20vJyxcbiAqICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZVxuICogICAgfSk7XG4gKlxuICogICAgZ2V0R2xvYmFsKClbJ3dpbmRvdyddPXdpbmRvdztcbiAqXG4gKiAgICBbXG4gKiAgICAgICAgJ3NlbGYnLFxuICogICAgICAgICdkb2N1bWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50JyxcbiAqICAgICAgICAnTm9kZScsXG4gKiAgICAgICAgJ0VsZW1lbnQnLFxuICogICAgICAgICdIVE1MRWxlbWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICogICAgICAgICdET01QYXJzZXInLFxuICogICAgICAgICdYTUxTZXJpYWxpemVyJyxcbiAqICAgICAgICAnTm9kZUZpbHRlcicsXG4gKiAgICAgICAgJ0lucHV0RXZlbnQnLFxuICogICAgICAgICdDdXN0b21FdmVudCdcbiAqICAgIF0uZm9yRWFjaChrZXkgPT4gKGdldEdsb2JhbCgpW2tleV0gPSB3aW5kb3dba2V5XSkpO1xuICogfVxuICogYGBgXG4gKlxuICogQHJldHVybiB7b2JqZWN0fVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFxuICovXG5mdW5jdGlvbiBnZXRXaW5kb3coKSB7XG5cdGNvbnN0IHdpbmRvdyA9IGdldEdsb2JhbCgpPy5bXCJ3aW5kb3dcIl07XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFwiKTtcblx0fVxuXG5cdHJldHVybiB3aW5kb3c7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgZmV0Y2hlcyB0aGUgZG9jdW1lbnQgb2JqZWN0XG4gKlxuICogSW4gbm9kZWpzIHRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgcGVyZm9ybWVkIHdpdGggW2pzZG9tXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9qc2RvbSkuXG4gKlxuICogYGBgXG4gKiBpbXBvcnQge0pTRE9NfSBmcm9tIFwianNkb21cIlxuICogaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwib2JqZWN0XCIpIHtcbiAqICAgIGNvbnN0IHt3aW5kb3d9ID0gbmV3IEpTRE9NKCcnLCB7XG4gKiAgICAgICAgdXJsOiAnaHR0cDovL2V4YW1wbGUuY29tLycsXG4gKiAgICAgICAgcHJldGVuZFRvQmVWaXN1YWw6IHRydWVcbiAqICAgIH0pO1xuICpcbiAqICAgIFtcbiAqICAgICAgICAnc2VsZicsXG4gKiAgICAgICAgJ2RvY3VtZW50JyxcbiAqICAgICAgICAnRG9jdW1lbnQnLFxuICogICAgICAgICdOb2RlJyxcbiAqICAgICAgICAnRWxlbWVudCcsXG4gKiAgICAgICAgJ0hUTUxFbGVtZW50JyxcbiAqICAgICAgICAnRG9jdW1lbnRGcmFnbWVudCcsXG4gKiAgICAgICAgJ0RPTVBhcnNlcicsXG4gKiAgICAgICAgJ1hNTFNlcmlhbGl6ZXInLFxuICogICAgICAgICdOb2RlRmlsdGVyJyxcbiAqICAgICAgICAnSW5wdXRFdmVudCcsXG4gKiAgICAgICAgJ0N1c3RvbUV2ZW50J1xuICogICAgXS5mb3JFYWNoKGtleSA9PiAoZ2V0R2xvYmFsKClba2V5XSA9IHdpbmRvd1trZXldKSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJuIHtEb2N1bWVudEZyYWdtZW50fVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmcoaHRtbCkge1xuXHR2YWxpZGF0ZVN0cmluZyhodG1sKTtcblxuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cdGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuXHR0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sO1xuXG5cdHJldHVybiB0ZW1wbGF0ZS5jb250ZW50O1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHNlYXJjaGVzIHVwd2FyZHMgZnJvbSBhIGdpdmVuIGVsZW1lbnQgdG8gZmluZCBhbiBhbmNlc3RvciBlbGVtZW50XG4gKiB3aXRoIGEgc3BlY2lmaWVkIElELCBjb25zaWRlcmluZyBib3RoIG5vcm1hbCBET00gYW5kIHNoYWRvdyBET00uXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudHxTaGFkb3dSb290fSBlbGVtZW50IC0gVGhlIHN0YXJ0aW5nIGVsZW1lbnQgb3Igc2hhZG93IHJvb3QgdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0SWQgLSBUaGUgSUQgb2YgdGhlIHRhcmdldCBlbGVtZW50IHRvIGZpbmQuXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHxudWxsfSAtIFRoZSBhbmNlc3RvciBlbGVtZW50IHdpdGggdGhlIHNwZWNpZmllZCBJRCwgb3IgbnVsbCBpZiBub3QgZm91bmQuXG4gKiBAc2luY2UgMy4yOS4wXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhlbGVtZW50LCB0YXJnZXRJZCkge1xuXHRpZiAoIWVsZW1lbnQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgaGFzIHRoZSB0YXJnZXQgSURcblx0aWYgKGVsZW1lbnQuaWQgPT09IHRhcmdldElkKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHQvLyBTZWFyY2ggd2l0aGluIHRoZSBjdXJyZW50IGVsZW1lbnQncyBzaGFkb3cgcm9vdCwgaWYgaXQgZXhpc3RzXG5cdGlmIChlbGVtZW50LnNoYWRvd1Jvb3QpIHtcblx0XHRjb25zdCB0YXJnZXQgPSBlbGVtZW50LnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQpO1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyB0aGUgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBzZWFyY2ggd2l0aGluIHRoZSBtYWluIGRvY3VtZW50XG5cdGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZWxlbWVudCA9PT0gZG9jdW1lbnQpIHtcblx0XHRjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXRJZCk7XG5cdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0cmV0dXJuIHRhcmdldDtcblx0XHR9XG5cdH1cblxuXHQvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIGluc2lkZSBhIHNoYWRvdyByb290LCBzZWFyY2ggaXRzIGhvc3QncyBhbmNlc3RvcnNcblx0Y29uc3Qgcm9vdE5vZGUgPSBlbGVtZW50LmdldFJvb3ROb2RlKCk7XG5cdGlmIChyb290Tm9kZSAmJiByb290Tm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcblx0XHRyZXR1cm4gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKHJvb3ROb2RlLmhvc3QsIHRhcmdldElkKTtcblx0fVxuXG5cdC8vIE90aGVyd2lzZSwgc2VhcmNoIHRoZSBjdXJyZW50IGVsZW1lbnQncyBwYXJlbnRcblx0cmV0dXJuIGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhlbGVtZW50LnBhcmVudEVsZW1lbnQsIHRhcmdldElkKTtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzZWFyY2hlcyB1cHdhcmRzIGZyb20gYSBnaXZlbiBlbGVtZW50IHRvIGZpbmQgYW4gYW5jZXN0b3IgZWxlbWVudFxuICogd2l0aCBhIHNwZWNpZmllZCBzZWxlY3RvciwgY29uc2lkZXJpbmcgYm90aCBub3JtYWwgRE9NIGFuZCBzaGFkb3cgRE9NLlxuICogVGhpcyBtZXRob2QgaXMgdXNlZnVsIGZvciBmaW5kaW5nIGEgcGFyZW50IGVsZW1lbnQgd2l0aCBhIHNwZWNpZmljIGNsYXNzLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U2hhZG93Um9vdH0gZWxlbWVudCAtIFRoZSBzdGFydGluZyBlbGVtZW50IG9yIHNoYWRvdyByb290IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gVGhlIHNlbGVjdG9yIG9mIHRoZSB0YXJnZXQgZWxlbWVudCB0byBmaW5kLlxuICogQHJldHVybiB7SFRNTEVsZW1lbnR8bnVsbH0gLSBUaGUgYW5jZXN0b3IgZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgc2VsZWN0b3IsIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuICogQHNpbmNlIDMuNTUuMFxuICovXG5mdW5jdGlvbiBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMoZWxlbWVudCwgc2VsZWN0b3IpIHtcblx0aWYgKCFlbGVtZW50IHx8ICFzZWxlY3Rvcikge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU2VhcmNoIHdpdGhpbiB0aGUgY3VycmVudCBlbGVtZW50J3Mgc2hhZG93IHJvb3QsIGlmIGl0IGV4aXN0c1xuXHRpZiAoZWxlbWVudC5zaGFkb3dSb290KSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZWxlbWVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuXHRcdGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBpbnNpZGUgYSBzaGFkb3cgcm9vdCwgc2VhcmNoIGl0cyBob3N0J3MgYW5jZXN0b3JzXG5cdGNvbnN0IHJvb3ROb2RlID0gZWxlbWVudC5nZXRSb290Tm9kZSgpO1xuXHRpZiAocm9vdE5vZGUgJiYgcm9vdE5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG5cdFx0cmV0dXJuIGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyhyb290Tm9kZS5ob3N0LCBzZWxlY3Rvcik7XG5cdH1cblxuXHQvLyBPdGhlcndpc2UsIHNlYXJjaCB0aGUgY3VycmVudCBlbGVtZW50J3MgcGFyZW50XG5cdHJldHVybiBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMoZWxlbWVudC5wYXJlbnRFbGVtZW50LCBzZWxlY3Rvcik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fG51bGx9XG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlU2hhZG93Um9vdHMoZWxlbWVudCkge1xuXHRsZXQgY3VycmVudFJvb3QgPSBlbGVtZW50LnNoYWRvd1Jvb3Q7XG5cdGxldCBjdXJyZW50UGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXG5cdHdoaWxlIChcblx0XHRjdXJyZW50UGFyZW50ICYmXG5cdFx0Y3VycmVudFBhcmVudC5ub2RlVHlwZSAhPT0gTm9kZS5ET0NVTUVOVF9OT0RFICYmXG5cdFx0Y3VycmVudFBhcmVudC5ub2RlVHlwZSAhPT0gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFXG5cdCkge1xuXHRcdGlmIChjdXJyZW50Um9vdCAmJiBjdXJyZW50Um9vdC5wYXJlbnROb2RlKSB7XG5cdFx0XHRjdXJyZW50UGFyZW50ID0gY3VycmVudFJvb3QucGFyZW50Tm9kZTtcblx0XHRcdGN1cnJlbnRSb290ID0gY3VycmVudFBhcmVudC5zaGFkb3dSb290O1xuXHRcdH0gZWxzZSBpZiAoY3VycmVudFBhcmVudC5wYXJlbnROb2RlKSB7XG5cdFx0XHRjdXJyZW50UGFyZW50ID0gY3VycmVudFBhcmVudC5wYXJlbnROb2RlO1xuXHRcdFx0Y3VycmVudFJvb3QgPSBudWxsO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRjdXJyZW50Um9vdCAmJlxuXHRcdFx0Y3VycmVudFJvb3QuaG9zdCAmJlxuXHRcdFx0Y3VycmVudFJvb3QuaG9zdC5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFXG5cdFx0KSB7XG5cdFx0XHRjdXJyZW50UGFyZW50ID0gY3VycmVudFJvb3QuaG9zdDtcblx0XHRcdGN1cnJlbnRSb290ID0gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VycmVudFBhcmVudCA9IG51bGw7XG5cdFx0XHRjdXJyZW50Um9vdCA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGN1cnJlbnRQYXJlbnQ7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgc2VhcmNoZXMgdXB3YXJkcyBmcm9tIGEgZ2l2ZW4gZWxlbWVudCB0byBmaW5kIGFuIGFuY2VzdG9yIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHsqfVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgYXJndW1lbnQuIEV4cGVjdGVkIGFuIEhUTUxFbGVtZW50LlxuICogQHNpbmNlIDMuMzYuMFxuICovXG5mdW5jdGlvbiBnZXRDb250YWluaW5nRG9jdW1lbnQoZWxlbWVudCkge1xuXHRpZiAoXG5cdFx0IWVsZW1lbnQgfHxcblx0XHQhKFxuXHRcdFx0ZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8XG5cdFx0XHRlbGVtZW50IGluc3RhbmNlb2YgZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkhUTUxFbGVtZW50XG5cdFx0KVxuXHQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50LiBFeHBlY3RlZCBhbiBIVE1MRWxlbWVudC5cIik7XG5cdH1cblxuXHRyZXR1cm4gdHJhdmVyc2VTaGFkb3dSb290cyhlbGVtZW50KSB8fCBudWxsO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCByZWdpc3RlcmVkIGN1c3RvbSBlbGVtZW50cyBpbiB0aGUgY3VycmVudCBkb2N1bWVudC5cbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqIEBzaW5jZSA0LjAuMFxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRDdXN0b21FbGVtZW50cygpIHtcblx0Y29uc3QgY3VzdG9tRWxlbWVudFRhZ3MgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpKVxuXHRcdC5tYXAoKHRhZykgPT4gdGFnLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlcblx0XHQuZmlsdGVyKCh0YWdOYW1lKSA9PiB0YWdOYW1lLmluY2x1ZGVzKFwiLVwiKSAmJiBjdXN0b21FbGVtZW50cy5nZXQodGFnTmFtZSkpO1xuXG5cdHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoY3VzdG9tRWxlbWVudFRhZ3MpKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNPYmplY3QsIGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdHlwZU9mIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVvZi5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBjbG9uZSB9O1xuXG4vKipcbiAqIFdpdGggdGhpcyBmdW5jdGlvbiwgb2JqZWN0cyBjYW4gYmUgY2xvbmVkLlxuICogVGhlIGVudGlyZSBvYmplY3QgdHJlZSBpcyBydW4gdGhyb3VnaC5cbiAqXG4gKiBQcm94eSwgRWxlbWVudCwgSFRNTERvY3VtZW50IGFuZCBEb2N1bWVudEZyYWdtZW50IGluc3RhbmNlcyBhcmUgbm90IGNsb25lZC5cbiAqIEdsb2JhbCBvYmplY3RzIHN1Y2ggYXMgd2luZG93cyBhcmUgYWxzbyBub3QgY2xvbmVkLFxuICpcbiAqIElmIGFuIG9iamVjdCBoYXMgYSBtZXRob2QgYGdldENsb25lKClgLCB0aGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgY2xvbmUuXG4gKlxuICogQHBhcmFtIHsqfSBvYmogb2JqZWN0IHRvIGJlIGNsb25lZFxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHVuYWJsZSB0byBjbG9uZSBvYmohIGl0cyB0eXBlIGlzbid0IHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gY2xvbmUob2JqKSB7XG5cdC8vIHR5cGVvZiBudWxsIHJlc3VsdHMgaW4gJ29iamVjdCcuICBodHRwczovLzJhbGl0eS5jb20vMjAxMy8xMC90eXBlb2YtbnVsbC5odG1sXG5cdGlmIChudWxsID09PSBvYmopIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSB0d28gc2ltcGxlIHR5cGVzLCBudWxsIGFuZCB1bmRlZmluZWRcblx0aWYgKGlzUHJpbWl0aXZlKG9iaikpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSB0d28gc2ltcGxlIHR5cGVzLCBudWxsIGFuZCB1bmRlZmluZWRcblx0aWYgKGlzRnVuY3Rpb24ob2JqKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyBIYW5kbGUgQXJyYXlcblx0aWYgKGlzQXJyYXkob2JqKSkge1xuXHRcdGNvbnN0IGNvcHkgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMCwgbGVuID0gb2JqLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRjb3B5W2ldID0gY2xvbmUob2JqW2ldKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29weTtcblx0fVxuXG5cdGlmIChpc09iamVjdChvYmopKSB7XG5cdFx0Ly8gSGFuZGxlIERhdGVcblx0XHRpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0Y29uc3QgY29weSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRjb3B5LnNldFRpbWUob2JqLmdldFRpbWUoKSk7XG5cdFx0XHRyZXR1cm4gY29weTtcblx0XHR9XG5cblx0XHQvKiogRG8gbm90IGNsb25lIERPTSBub2RlcyAqL1xuXHRcdGlmICh0eXBlb2YgRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogaW5zdGFuY2VvZiBFbGVtZW50KSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgSFRNTERvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiBpbnN0YW5jZW9mIEhUTUxEb2N1bWVudClcblx0XHRcdHJldHVybiBvYmo7XG5cdFx0aWYgKFxuXHRcdFx0dHlwZW9mIERvY3VtZW50RnJhZ21lbnQgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdG9iaiBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcblx0XHQpXG5cdFx0XHRyZXR1cm4gb2JqO1xuXG5cdFx0LyoqIERvIG5vdCBjbG9uZSBnbG9iYWwgb2JqZWN0cyAqL1xuXHRcdGlmIChvYmogPT09IGdldEdsb2JhbCgpKSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgZ2xvYmFsQ29udGV4dCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IGdsb2JhbENvbnRleHQpXG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiA9PT0gd2luZG93KSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSBkb2N1bWVudCkgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IG5hdmlnYXRvcikgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIEpTT04gIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSBKU09OKSByZXR1cm4gb2JqO1xuXG5cdFx0Ly8gSGFuZGxlIFByb3h5LU9iamVjdFxuXHRcdHRyeSB7XG5cdFx0XHQvLyB0cnkvY2F0Y2ggYmVjYXVzZSBwb3NzaWJsZTogVHlwZUVycm9yOiBGdW5jdGlvbiBoYXMgbm9uLW9iamVjdCBwcm90b3R5cGUgJ3VuZGVmaW5lZCcgaW4gaW5zdGFuY2VvZiBjaGVja1xuXHRcdFx0aWYgKG9iaiBpbnN0YW5jZW9mIFByb3h5KSB7XG5cdFx0XHRcdHJldHVybiBvYmo7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdHJldHVybiBjbG9uZU9iamVjdChvYmopO1xuXHR9XG5cblx0dGhyb3cgbmV3IEVycm9yKFwidW5hYmxlIHRvIGNsb25lIG9iaiEgaXRzIHR5cGUgaXNuJ3Qgc3VwcG9ydGVkLlwiKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9ialxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2xvbmVPYmplY3Qob2JqKSB7XG5cdHZhbGlkYXRlT2JqZWN0KG9iaik7XG5cblx0Y29uc3QgZmt0ID0gb2JqPy5bXCJjb25zdHJ1Y3RvclwiXTtcblxuXHQvKiogT2JqZWN0IGhhcyBjbG9uZSBtZXRob2QgKi9cblx0aWYgKHR5cGVPZihma3QpID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRjb25zdCBwcm90b3R5cGUgPSBma3Q/LnByb3RvdHlwZTtcblx0XHRpZiAodHlwZW9mIHByb3RvdHlwZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRwcm90b3R5cGUuaGFzT3duUHJvcGVydHkoXCJnZXRDbG9uZVwiKSAmJlxuXHRcdFx0XHR0eXBlT2Yob2JqLmdldENsb25lKSA9PT0gXCJmdW5jdGlvblwiXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIG9iai5nZXRDbG9uZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGxldCBjb3B5ID0ge307XG5cdGlmIChcblx0XHR0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yLmNhbGwgPT09IFwiZnVuY3Rpb25cIlxuXHQpIHtcblx0XHRjb3B5ID0gbmV3IG9iai5jb25zdHJ1Y3RvcigpO1xuXHR9XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG5cdFx0aWYgKCFvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGlzUHJpbWl0aXZlKG9ialtrZXldKSkge1xuXHRcdFx0Y29weVtrZXldID0gb2JqW2tleV07XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb3B5W2tleV0gPSBjbG9uZShvYmpba2V5XSk7XG5cdH1cblxuXHRyZXR1cm4gY29weTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5cbmV4cG9ydCB7IExvY2FsZSwgcGFyc2VMb2NhbGUgfTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwcm9wZXJ0aWVzU3ltYm9sID0gU3ltYm9sKFwicHJvcGVydGllc1wiKTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBsb2NhbGVTdHJpbmdTeW1ib2wgPSBTeW1ib2woXCJsb2NhbGVTdHJpbmdcIik7XG5cbi8qKlxuICogVGhlIExvY2FsZSBjbGFzcyBpcyBhIGJhc2UgY2xhc3MgZm9yIHRoZSBsYW5ndWFnZSBjbGFzc2VzLlxuICpcbiAqIFJGQ1xuICpcbiAqIGBgYFxuICogQSBMYW5ndWFnZS1UYWcgY29uc2lzdHMgb2Y6XG4gKiBsYW5ndGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBnZW5lcmF0ZWQgdGFnXG4gKiAgICAgICAgICAgLW9yLSBwcml2YXRlLXVzZSAgICAgICAgOyBhIHByaXZhdGUgdXNlIHRhZ1xuICpcbiAqIGxhbmd0YWcgICAgICAgPSAobGFuZ3VhZ2VcbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgc2NyaXB0XVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiByZWdpb25dXG4gKiAgICAgICAgICAgICAgICAgICAgKihcIi1cIiB2YXJpYW50KVxuICogICAgICAgICAgICAgICAgICAgICooXCItXCIgZXh0ZW5zaW9uKVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiBwcml2YXRldXNlXSlcbiAqXG4gKiBsYW5ndWFnZSAgICAgID0gXCJlblwiLCBcImFsZVwiLCBvciBhIHJlZ2lzdGVyZWQgdmFsdWVcbiAqXG4gKiBzY3JpcHQgICAgICAgID0gXCJMYXRuXCIsIFwiQ3lybFwiLCBcIkhhbnRcIiBJU08gMTU5MjQgY29kZXNcbiAqXG4gKiByZWdpb24gICAgICAgID0gXCJVU1wiLCBcIkNTXCIsIFwiRlJcIiBJU08gMzE2NiBjb2Rlc1xuICogICAgICAgICAgICAgICAgIFwiNDE5XCIsIFwiMDE5XCIsICBvciBVTiBNLjQ5IGNvZGVzXG4gKlxuICogdmFyaWFudCAgICAgICA9IFwicm96YWpcIiwgXCJuZWRpc1wiLCBcIjE5OTZcIiwgbXVsdGlwbGUgc3VidGFncyBjYW4gYmUgdXNlZCBpbiBhIHRhZ1xuICpcbiAqIGV4dGVuc2lvbiAgICAgPSBzaW5nbGUgbGV0dGVyIGZvbGxvd2VkIGJ5IGFkZGl0aW9uYWwgc3VidGFnczsgbW9yZSB0aGFuIG9uZSBleHRlbnNpb25cbiAqICAgICAgICAgICAgICAgICBtYXkgYmUgdXNlZCBpbiBhIGxhbmd1YWdlIHRhZ1xuICpcbiAqIHByaXZhdGUtdXNlICAgPSBcIngtXCIgZm9sbG93ZWQgYnkgYWRkaXRpb25hbCBzdWJ0YWdzLCBhcyBtYW55IGFzIGFyZSByZXF1aXJlZFxuICogICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGVzZSBjYW4gc3RhcnQgYSB0YWcgb3IgYXBwZWFyIGF0IHRoZSBlbmQgKGJ1dCBub3RcbiAqICAgICAgICAgICAgICAgICBpbiB0aGUgbWlkZGxlKVxuICogYGBgXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZcbiAqL1xuY2xhc3MgTG9jYWxlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2Vcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtyZWdpb25dXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbc2NyaXB0XVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3ZhcmlhbnRzXVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW2V4dGxhbmddXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbcHJpdmF0ZVVzZV1cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGxvY2FsZVxuXHQgKi9cblx0Y29uc3RydWN0b3IobGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW3Byb3BlcnRpZXNTeW1ib2xdID0ge1xuXHRcdFx0bGFuZ3VhZ2U6IGxhbmd1YWdlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhsYW5ndWFnZSksXG5cdFx0XHRzY3JpcHQ6IHNjcmlwdCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdmFsaWRhdGVTdHJpbmcoc2NyaXB0KSxcblx0XHRcdHJlZ2lvbjogcmVnaW9uID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhyZWdpb24pLFxuXHRcdFx0dmFyaWFudHM6IHZhcmlhbnRzID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyh2YXJpYW50cyksXG5cdFx0XHRleHRsYW5nOiBleHRsYW5nID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhleHRsYW5nKSxcblx0XHRcdHByaXZhdGVVc2U6XG5cdFx0XHRcdHByaXZhdGVVc2UgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbGlkYXRlU3RyaW5nKHByaXZhdGVVc2UpLFxuXHRcdH07XG5cblx0XHRjb25zdCBzID0gW107XG5cdFx0aWYgKGxhbmd1YWdlICE9PSB1bmRlZmluZWQpIHMucHVzaChsYW5ndWFnZSk7XG5cdFx0aWYgKHNjcmlwdCAhPT0gdW5kZWZpbmVkKSBzLnB1c2goc2NyaXB0KTtcblx0XHRpZiAocmVnaW9uICE9PSB1bmRlZmluZWQpIHMucHVzaChyZWdpb24pO1xuXHRcdGlmICh2YXJpYW50cyAhPT0gdW5kZWZpbmVkKSBzLnB1c2godmFyaWFudHMpO1xuXHRcdGlmIChleHRsYW5nICE9PSB1bmRlZmluZWQpIHMucHVzaChleHRsYW5nKTtcblx0XHRpZiAocHJpdmF0ZVVzZSAhPT0gdW5kZWZpbmVkKSBzLnB1c2gocHJpdmF0ZVVzZSk7XG5cblx0XHRpZiAocy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGxvY2FsZVwiKTtcblx0XHR9XG5cblx0XHR0aGlzW2xvY2FsZVN0cmluZ1N5bWJvbF0gPSBzLmpvaW4oXCItXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi9sb2NhbGVAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldCBsb2NhbGVTdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXNbbG9jYWxlU3RyaW5nU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IGxhbmd1YWdlKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLmxhbmd1YWdlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgcmVnaW9uKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLnJlZ2lvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IHNjcmlwdCgpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5zY3JpcHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCB2YXJpYW50cygpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS52YXJpYW50cztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IGV4dGxhbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0uZXh0bGFuZztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IHByaXZhdGVVc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0ucHJpdmF0ZVZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiBgJHt0aGlzLmxvY2FsZVN0cmluZ31gO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBzdHJ1Y3R1cmUgaGFzIHRoZSBmb2xsb3dpbmc6IGxhbmd1YWdlLCBzY3JpcHQsIHJlZ2lvbiwgdmFyaWFudHMsIGV4dGxhbmcsIHByaXZhdGVVc2Vcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5JMThuLkxvY2FsZU1hcH1cblx0ICovXG5cdGdldE1hcCgpIHtcblx0XHRyZXR1cm4gY2xvbmUodGhpc1twcm9wZXJ0aWVzU3ltYm9sXSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMb2NhbGVNYXBcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYW5ndWFnZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNjcmlwdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlZ2lvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhcmlhbnRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZXh0bGFuZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHByaXZhdGVVc2VcbiAqL1xuXG4vKipcbiAqIFBhcnNlIGxvY2FsIGFjY29yZGluZyB0byByZmM0NjQ2IHN0YW5kYXJkXG4gKlxuICogTGltaXRhdGlvbnM6IFRoZSByZWdleCBjYW5ub3QgaGFuZGxlIG11bHRpcGxlIHZhcmlhbnRzIG9yIHByaXZhdGUuXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoaXMgZnVuY3Rpb24gaW5kaXZpZHVhbGx5OlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7Y3JlYXRlTG9jYWxlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9pMThuL2xvY2FsZS5tanMnO1xuICogY3JlYXRlTG9jYWxlKClcbiAqIGBgYFxuICpcbiAqIFJGQ1xuICpcbiAqIGBgYFxuICogICBUaGUgc3ludGF4IG9mIHRoZSBsYW5ndWFnZSB0YWcgaW4gQUJORiBbUkZDNDIzNF0gaXM6XG4gKlxuICogICBMYW5ndWFnZS1UYWcgID0gbGFuZ3RhZ1xuICogICAgICAgICAgICAgICAgIC8gcHJpdmF0ZXVzZSAgICAgICAgICAgICA7IHByaXZhdGUgdXNlIHRhZ1xuICogICAgICAgICAgICAgICAgIC8gZ3JhbmRmYXRoZXJlZCAgICAgICAgICA7IGdyYW5kZmF0aGVyZWQgcmVnaXN0cmF0aW9uc1xuICpcbiAqICAgbGFuZ3RhZyAgICAgICA9IChsYW5ndWFnZVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiBzY3JpcHRdXG4gKiAgICAgICAgICAgICAgICAgICAgW1wiLVwiIHJlZ2lvbl1cbiAqICAgICAgICAgICAgICAgICAgICAqKFwiLVwiIHZhcmlhbnQpXG4gKiAgICAgICAgICAgICAgICAgICAgKihcIi1cIiBleHRlbnNpb24pXG4gKiAgICAgICAgICAgICAgICAgICAgW1wiLVwiIHByaXZhdGV1c2VdKVxuICpcbiAqICAgbGFuZ3VhZ2UgICAgICA9ICgyKjNBTFBIQSBbIGV4dGxhbmcgXSkgOyBzaG9ydGVzdCBJU08gNjM5IGNvZGVcbiAqICAgICAgICAgICAgICAgICAvIDRBTFBIQSAgICAgICAgICAgICAgICAgOyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZVxuICogICAgICAgICAgICAgICAgIC8gNSo4QUxQSEEgICAgICAgICAgICAgICA7IHJlZ2lzdGVyZWQgbGFuZ3VhZ2Ugc3VidGFnXG4gKlxuICogICBleHRsYW5nICAgICAgID0gKjMoXCItXCIgM0FMUEhBKSAgICAgICAgIDsgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcbiAqXG4gKiAgIHNjcmlwdCAgICAgICAgPSA0QUxQSEEgICAgICAgICAgICAgICAgIDsgSVNPIDE1OTI0IGNvZGVcbiAqXG4gKiAgIHJlZ2lvbiAgICAgICAgPSAyQUxQSEEgICAgICAgICAgICAgICAgIDsgSVNPIDMxNjYgY29kZVxuICogICAgICAgICAgICAgICAgIC8gM0RJR0lUICAgICAgICAgICAgICAgICA7IFVOIE0uNDkgY29kZVxuICpcbiAqICAgdmFyaWFudCAgICAgICA9IDUqOGFscGhhbnVtICAgICAgICAgICAgOyByZWdpc3RlcmVkIHZhcmlhbnRzXG4gKiAgICAgICAgICAgICAgICAgLyAoRElHSVQgM2FscGhhbnVtKVxuICpcbiAqICAgZXh0ZW5zaW9uICAgICA9IHNpbmdsZXRvbiAxKihcIi1cIiAoMio4YWxwaGFudW0pKVxuICpcbiAqICAgc2luZ2xldG9uICAgICA9ICV4NDEtNTcgLyAleDU5LTVBIC8gJXg2MS03NyAvICV4NzktN0EgLyBESUdJVFxuICogICAgICAgICAgICAgICAgIDsgXCJhXCItXCJ3XCIgLyBcInlcIi1cInpcIiAvIFwiQVwiLVwiV1wiIC8gXCJZXCItXCJaXCIgLyBcIjBcIi1cIjlcIlxuICogICAgICAgICAgICAgICAgIDsgU2luZ2xlIGxldHRlcnM6IHgvWCBpcyByZXNlcnZlZCBmb3IgcHJpdmF0ZSB1c2VcbiAqXG4gKiAgIHByaXZhdGV1c2UgICAgPSAoXCJ4XCIvXCJYXCIpIDEqKFwiLVwiICgxKjhhbHBoYW51bSkpXG4gKlxuICogICBncmFuZGZhdGhlcmVkID0gMSozQUxQSEEgMSoyKFwiLVwiICgyKjhhbHBoYW51bSkpXG4gKiAgICAgICAgICAgICAgICAgICA7IGdyYW5kZmF0aGVyZWQgcmVnaXN0cmF0aW9uXG4gKiAgICAgICAgICAgICAgICAgICA7IE5vdGU6IGkgaXMgdGhlIG9ubHkgc2luZ2xldG9uXG4gKiAgICAgICAgICAgICAgICAgICA7IHRoYXQgc3RhcnRzIGEgZ3JhbmRmYXRoZXJlZCB0YWdcbiAqXG4gKiAgIGFscGhhbnVtICAgICAgPSAoQUxQSEEgLyBESUdJVCkgICAgICAgOyBsZXR0ZXJzIGFuZCBudW1iZXJzXG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICBGaWd1cmUgMTogTGFuZ3VhZ2UgVGFnIEFCTkZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbGVcbiAqIEByZXR1cm4ge0xvY2FsZX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgbG9jYWxlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTG9jYWxlKGxvY2FsZSkge1xuXHRsb2NhbGUgPSB2YWxpZGF0ZVN0cmluZyhsb2NhbGUpLnJlcGxhY2UoL18vZywgXCItXCIpO1xuXG5cdGxldCBsYW5ndWFnZTtcblx0bGV0IHJlZ2lvbjtcblx0bGV0IHZhcmlhbnRzO1xuXHRsZXQgcGFydHM7XG5cdGxldCBzY3JpcHQ7XG5cdGxldCBleHRsYW5nO1xuXHRjb25zdCByZWdleFJlZ3VsYXIgPVxuXHRcdFwiKGFydC1sb2piYW58Y2VsLWdhdWxpc2h8bm8tYm9rfG5vLW55bnx6aC1ndW95dXx6aC1oYWtrYXx6aC1taW58emgtbWluLW5hbnx6aC14aWFuZylcIjtcblx0Y29uc3QgcmVnZXhJcnJlZ3VsYXIgPVxuXHRcdFwiKGVuLUdCLW9lZHxpLWFtaXxpLWJubnxpLWRlZmF1bHR8aS1lbm9jaGlhbnxpLWhha3xpLWtsaW5nb258aS1sdXh8aS1taW5nb3xpLW5hdmFqb3xpLXB3bnxpLXRhb3xpLXRheXxpLXRzdXxzZ24tQkUtRlJ8c2duLUJFLU5MfHNnbi1DSC1ERSlcIjtcblx0Y29uc3QgcmVnZXhHcmFuZGZhdGhlcmVkID0gYCgke3JlZ2V4SXJyZWd1bGFyfXwke3JlZ2V4UmVndWxhcn0pYDtcblx0Y29uc3QgcmVnZXhQcml2YXRlVXNlID0gXCIoeCgtW0EtWmEtejAtOV17MSw4fSkrKVwiO1xuXHRjb25zdCByZWdleFNpbmdsZXRvbiA9IFwiWzAtOUEtV1ktWmEtd3ktel1cIjtcblx0Y29uc3QgcmVnZXhFeHRlbnNpb24gPSBgKCR7cmVnZXhTaW5nbGV0b259KC1bQS1aYS16MC05XXsyLDh9KSspYDtcblx0Y29uc3QgcmVnZXhWYXJpYW50ID0gXCIoW0EtWmEtejAtOV17NSw4fXxbMC05XVtBLVphLXowLTldezN9KVwiO1xuXHRjb25zdCByZWdleFJlZ2lvbiA9IFwiKFtBLVphLXpdezJ9fFswLTldezN9KVwiO1xuXHRjb25zdCByZWdleFNjcmlwdCA9IFwiKFtBLVphLXpdezR9KVwiO1xuXHRjb25zdCByZWdleEV4dGxhbmcgPSBcIihbQS1aYS16XXszfSgtW0EtWmEtel17M30pezAsMn0pXCI7XG5cdGNvbnN0IHJlZ2V4TGFuZ3VhZ2UgPSBgKChbQS1aYS16XXsyLDN9KC0ke3JlZ2V4RXh0bGFuZ30pPyl8W0EtWmEtel17NH18W0EtWmEtel17NSw4fSlgO1xuXHRjb25zdCByZWdleExhbmd0YWcgPSBgKCR7cmVnZXhMYW5ndWFnZX0oLSR7cmVnZXhTY3JpcHR9KT8oLSR7cmVnZXhSZWdpb259KT8oLSR7cmVnZXhWYXJpYW50fSkqKC0ke3JlZ2V4RXh0ZW5zaW9ufSkqKC0ke3JlZ2V4UHJpdmF0ZVVzZX0pPylgO1xuXHRjb25zdCByZWdleExhbmd1YWdlVGFnID0gYF4oJHtyZWdleEdyYW5kZmF0aGVyZWR9fCR7cmVnZXhMYW5ndGFnfXwke3JlZ2V4UHJpdmF0ZVVzZX0pJGA7XG5cdGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleExhbmd1YWdlVGFnKTtcblx0bGV0IG1hdGNoO1xuXG5cdGlmICgobWF0Y2ggPSByZWdleC5leGVjKGxvY2FsZSkpICE9PSBudWxsKSB7XG5cdFx0aWYgKG1hdGNoLmluZGV4ID09PSByZWdleC5sYXN0SW5kZXgpIHtcblx0XHRcdHJlZ2V4Lmxhc3RJbmRleCsrO1xuXHRcdH1cblx0fVxuXG5cdGlmIChtYXRjaCA9PT0gdW5kZWZpbmVkIHx8IG1hdGNoID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgbG9jYWxlXCIpO1xuXHR9XG5cblx0aWYgKG1hdGNoWzZdICE9PSB1bmRlZmluZWQpIHtcblx0XHRsYW5ndWFnZSA9IG1hdGNoWzZdO1xuXG5cdFx0cGFydHMgPSBsYW5ndWFnZS5zcGxpdChcIi1cIik7XG5cdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGxhbmd1YWdlID0gcGFydHNbMF07XG5cdFx0XHRleHRsYW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHR9XG5cblx0aWYgKG1hdGNoWzE0XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmVnaW9uID0gbWF0Y2hbMTRdO1xuXHR9XG5cblx0aWYgKG1hdGNoWzEyXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0c2NyaXB0ID0gbWF0Y2hbMTJdO1xuXHR9XG5cblx0aWYgKG1hdGNoWzE2XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFyaWFudHMgPSBtYXRjaFsxNl07XG5cdH1cblxuXHRyZXR1cm4gbmV3IExvY2FsZShsYW5ndWFnZSwgcmVnaW9uLCBzY3JpcHQsIHZhcmlhbnRzLCBleHRsYW5nKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBwYXJzZUxvY2FsZSB9IGZyb20gXCIuLi9pMThuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4vdXRpbC5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmV4cG9ydCB7IGdldExvY2FsZU9mRG9jdW1lbnQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgREVGQVVMVF9MQU5HVUFHRSA9IFwiZW5cIjtcblxuLyoqXG4gKiBXaXRoIHRoaXMgZnVuY3Rpb24geW91IGNhbiByZWFkIHRoZSBsYW5ndWFnZSB2ZXJzaW9uIHNldCBieSB0aGUgZG9jdW1lbnQuXG4gKiBGb3IgdGhpcyB0aGUgYXR0cmlidXRlIGBsYW5nYCBpbiB0aGUgaHRtbCB0YWcgaXMgcmVhZC4gSWYgbm8gYXR0cmlidXRlIGlzIHNldCwgYGVuYCBpcyB1c2VkIGFzIGRlZmF1bHQuXG4gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgbGFuZ3VhZ2UgdmVyc2lvbiBvZiB0aGUgYnJvd3NlciBpcyB1c2VkLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxodG1sIGxhbmc9XCJlblwiPlxuICogYGBgXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgYGdldExvY2FsZU9mRG9jdW1lbnQoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBsb2NhbGVcbiAqIEBzdW1tYXJ5IFRyaWVzIHRvIGRldGVybWluZSB0aGUgbG9jYWxlIHVzZWRcbiAqL1xuZnVuY3Rpb24gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGNvbnN0IGh0bWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKTtcblx0aWYgKGh0bWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBodG1sLmhhc0F0dHJpYnV0ZShcImxhbmdcIikpIHtcblx0XHRjb25zdCBsb2NhbGUgPSBodG1sLmdldEF0dHJpYnV0ZShcImxhbmdcIik7XG5cdFx0aWYgKGxvY2FsZSkge1xuXHRcdFx0cmV0dXJuIG5ldyBwYXJzZUxvY2FsZShsb2NhbGUpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG5hdmlnYXRvckxhbmd1YWdlID0gZ2V0TmF2aWdhdG9yTGFuZ3VhZ2UoKTtcblx0aWYgKG5hdmlnYXRvckxhbmd1YWdlKSB7XG5cdFx0cmV0dXJuIHBhcnNlTG9jYWxlKG5hdmlnYXRvckxhbmd1YWdlKTtcblx0fVxuXG5cdHJldHVybiBwYXJzZUxvY2FsZShERUZBVUxUX0xBTkdVQUdFKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZHwqfVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTmF2aWdhdG9yL2xhbmd1YWdlXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9OYXZpZ2F0b3IvbGFuZ3VhZ2VzXG4gKi9cbmNvbnN0IGdldE5hdmlnYXRvckxhbmd1YWdlID0gKCkgPT4ge1xuXHRjb25zdCBuYXZpZ2F0b3IgPSBnZXRHbG9iYWxPYmplY3QoXCJuYXZpZ2F0b3JcIik7XG5cdGlmIChuYXZpZ2F0b3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAobmF2aWdhdG9yLmhhc093blByb3BlcnR5KFwibGFuZ3VhZ2VcIikpIHtcblx0XHRjb25zdCBsYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZTtcblx0XHRpZiAodHlwZW9mIGxhbmd1YWdlID09PSBcInN0cmluZ1wiICYmIGxhbmd1YWdlLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBsYW5ndWFnZTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBsYW5ndWFnZXMgPSBuYXZpZ2F0b3I/Lmxhbmd1YWdlcztcblx0aWYgKEFycmF5LmlzQXJyYXkobGFuZ3VhZ2VzKSAmJiBsYW5ndWFnZXMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBsYW5ndWFnZXNbMF07XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IElEIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbnRlZ2VyPn1cbiAqL1xuY29uc3QgaW50ZXJuYWxDb3VudGVyID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIFdpdGggdGhlIGlkIGNsYXNzLCBzZXF1ZW5jZXMgb2YgaWRzIGNhbiBiZSBjcmVhdGVkLiBmb3IgdGhpcyBwdXJwb3NlLCBhbiBpbnRlcm5hbCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIHByZWZpeC5cbiAqIHRodXMsIHRoZSBmaXJzdCBpZCB3aXRoIHRoZSBwcmVmaXggYG15aWRgIHdpbGwgYmUgYG15aWQxYCBhbmQgdGhlIHNlY29uZCBpZCBgbXlpZDJgLlxuICogVGhlIGlkcyBhcmUgdGhlIHNhbWUgZm9yIGV2ZXJ5IGNhbGwsIGZvciBleGFtcGxlIG9uIGEgd2ViIHBhZ2UuXG4gKlxuICogU28gdGhlIGlkcyBjYW4gYWxzbyBiZSB1c2VkIGZvciBuYXZpZ2F0aW9uLiB5b3UgaGF2ZSB0byB0YWtlIGNhcmUgdGhhdCB0aGUgb3JkZXIgc3RheXMgdGhlIHNhbWUuXG4gKlxuICogQXMgb2YgdmVyc2lvbiAxLjYuMCB0aGVyZSBpcyB0aGUgbmV3IFJhbmRvbUlELiB0aGlzIElEIGNsYXNzIGlzIGNvbnRpbnVvdXMgZnJvbSBub3cgb24uXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBpZHNcbiAqL1xuY2xhc3MgSUQgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIGNyZWF0ZSBuZXcgaWQgd2l0aCBwcmVmaXhcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuXHQgKi9cblx0Y29uc3RydWN0b3IocHJlZml4KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cHJlZml4ID0gXCJpZFwiO1xuXHRcdH1cblxuXHRcdHZhbGlkYXRlU3RyaW5nKHByZWZpeCk7XG5cblx0XHRpZiAoIWludGVybmFsQ291bnRlci5oYXMocHJlZml4KSkge1xuXHRcdFx0aW50ZXJuYWxDb3VudGVyLnNldChwcmVmaXgsIDEpO1xuXHRcdH1cblxuXHRcdGxldCBjb3VudCA9IGludGVybmFsQ291bnRlci5nZXQocHJlZml4KTtcblx0XHR0aGlzLmlkID0gcHJlZml4ICsgY291bnQ7XG5cblx0XHRpbnRlcm5hbENvdW50ZXIuc2V0KHByZWZpeCwgKytjb3VudCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaWQ7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgQmFzZVdpdGhPcHRpb25zIH07XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyB3aXRoIG9wdGlvbnMgZnJvbSB3aGljaCBzb21lIG1vbnN0ZXIgY2xhc3NlcyBhcmUgZGVyaXZlZC5cbiAqXG4gKiBUaGlzIGNsYXNzIGlzIGFjdHVhbGx5IG9ubHkgdXNlZCBhcyBhIGJhc2UgY2xhc3MuXG4gKlxuICogQ2xhc3NlcyB0aGF0IHJlcXVpcmUgdGhlIHBvc3NpYmlsaXR5IG9mIG9wdGlvbnMgY2FuIGJlIGRlcml2ZWQgZGlyZWN0bHkgZnJvbSB0aGlzIGNsYXNzLlxuICogRGVyaXZlZCBjbGFzc2VzIGFsbW9zdCBhbHdheXMgb3ZlcnJpZGUgdGhlIGBkZWZhdWx0YCBnZXR0ZXIgd2l0aCB0aGVpciBvd24gdmFsdWVzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBkZXByZWNhdGVkIHNpbmNlIDMuMTUuMFxuICovXG5jbGFzcyBCYXNlV2l0aE9wdGlvbnMgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbnMgPSB7fTtcblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IGV4dGVuZCh7fSwgdGhpcy5kZWZhdWx0cywgdmFsaWRhdGVPYmplY3Qob3B0aW9ucykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZ2V0dGVyIHByb3ZpZGVzIHRoZSBvcHRpb25zLiBEZXJpdmVkIGNsYXNzZXMgb3ZlcndyaXRlXG5cdCAqIHRoaXMgZ2V0dGVyIHdpdGggdGhlaXIgb3duIHZhbHVlcy4gSXQgaXMgYSBnb29kIGthcm1hIHRvIGFsd2F5cyBpbmNsdWRlXG5cdCAqIHRoZSB2YWx1ZXMgZnJvbSB0aGUgcGFyZW50IGNsYXNzLlxuXHQgKlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIGdldCBkZWZhdWx0cygpIHtcblx0ICogICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHQgKiAgICAgICAgIG15a2V5OiB0cnVlXG5cdCAqICAgICB9KTtcblx0ICogfVxuXHQgKlxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7b2JqZWN0fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBuZXN0ZWQgb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHBhdGggYGEuYi5jYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKiBAc2luY2UgMS4xMC4wXG5cdCAqL1xuXHRnZXRPcHRpb24ocGF0aCwgZGVmYXVsdFZhbHVlKSB7XG5cdFx0bGV0IHZhbHVlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhbHVlID0gbmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0pLmdldFZpYShwYXRoKTtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0aGFzT2JqZWN0TGluayxcblx0Z2V0TGlua2VkT2JqZWN0cyxcblx0YWRkVG9PYmplY3RMaW5rLFxufSBmcm9tIFwiLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBnZXRMb2NhbGVPZkRvY3VtZW50IH0gZnJvbSBcIi4uL2RvbS9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1wiO1xuaW1wb3J0IHsgTG9jYWxlIH0gZnJvbSBcIi4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25zIH0gZnJvbSBcIi4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5leHBvcnQgeyBQcm92aWRlciwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCB9O1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjkuMFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgdHJhbnNsYXRpb25zTGlua1N5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAbGlua1wiLFxuKTtcblxuLyoqXG4gKiBBIHByb3ZpZGVyIG1ha2VzIGEgdHJhbnNsYXRpb24gb2JqZWN0IGF2YWlsYWJsZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZ9XG4gKi9cbmNsYXNzIFByb3ZpZGVyIGV4dGVuZHMgQmFzZVdpdGhPcHRpb25zIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi9wcm92aWRlckBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtMb2NhbGV8c3RyaW5nfSBsb2NhbGVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGdldFRyYW5zbGF0aW9ucyhsb2NhbGUpIHtcblx0XHRpZiAobG9jYWxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShuZXcgVHJhbnNsYXRpb25zKGxvY2FsZSkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtMb2NhbGV8c3RyaW5nfSBsb2NhbGVcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuXHQgKiBAcmV0dXJuIHtQcm92aWRlcn1cblx0ICovXG5cdGFzc2lnblRvRWxlbWVudChsb2NhbGUsIGVsZW1lbnQpIHtcblx0XHRpZiAobG9jYWxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHR9XG5cblx0XHRpZiAoIShsb2NhbGUgaW5zdGFuY2VvZiBMb2NhbGUpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJMb2NhbGUgaXMgbm90IGFuIGluc3RhbmNlIG9mIExvY2FsZVwiKTtcblx0XHR9XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHRlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIik7XG5cdFx0fVxuXG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRWxlbWVudCBpcyBub3QgYW4gSFRNTEVsZW1lbnRcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRpb25zKGxvY2FsZSkudGhlbigob2JqKSA9PiB7XG5cdFx0XHRsZXQgdHJhbnNsYXRpb25zID0gbnVsbDtcblx0XHRcdGlmIChoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wpKSB7XG5cdFx0XHRcdGNvbnN0IG9iamVjdHMgPSBnZXRMaW5rZWRPYmplY3RzKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IG8gb2Ygb2JqZWN0cykge1xuXHRcdFx0XHRcdGlmIChvIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSB7XG5cdFx0XHRcdFx0XHR0cmFuc2xhdGlvbnMgPSBvO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCEodHJhbnNsYXRpb25zIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIk9iamVjdCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVHJhbnNsYXRpb25zXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJhbnNsYXRpb25zLmFzc2lnblRyYW5zbGF0aW9ucyhvYmopO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkVG9PYmplY3RMaW5rKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wsIG9iaik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvYmo7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXRMaW5rZWRPYmplY3RzLCBoYXNPYmplY3RMaW5rIH0gZnJvbSBcIi4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX09CSkVDVExJTksgfSBmcm9tIFwiLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVJbnRlZ2VyLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVTdHJpbmcsXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IExvY2FsZSwgcGFyc2VMb2NhbGUgfSBmcm9tIFwiLi9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sIH0gZnJvbSBcIi4vcHJvdmlkZXIubWpzXCI7XG5cbmV4cG9ydCB7IFRyYW5zbGF0aW9ucywgZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMgfTtcblxuLyoqXG4gKiBXaXRoIHRoaXMgY2xhc3MgeW91IGNhbiBtYW5hZ2UgdHJhbnNsYXRpb25zIGFuZCBhY2Nlc3MgdGhlIGtleXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2kxOG4vdHJhbnNsYXRpb25zLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZcbiAqL1xuY2xhc3MgVHJhbnNsYXRpb25zIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihsb2NhbGUpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGxvY2FsZSBpbnN0YW5jZW9mIExvY2FsZSkge1xuXHRcdFx0dGhpcy5sb2NhbGUgPSBsb2NhbGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubG9jYWxlID0gcGFyc2VMb2NhbGUodmFsaWRhdGVTdHJpbmcobG9jYWxlKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9yYWdlID0gbmV3IE1hcCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi90cmFuc2xhdGlvbnNAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgYSB0ZXh0IHVzaW5nIHRoZSBzcGVjaWZpZWQga2V5LlxuXHQgKiBJZiBubyBzdWl0YWJsZSBrZXkgaXMgZm91bmQsIGBkZWZhdWx0VGV4dGAgaXMgdGFrZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBkZWZhdWx0VGV4dFxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBrZXkgbm90IGZvdW5kXG5cdCAqL1xuXHRnZXRUZXh0KGtleSwgZGVmYXVsdFRleHQpIHtcblx0XHRpZiAoIXRoaXMuc3RvcmFnZS5oYXMoa2V5KSkge1xuXHRcdFx0aWYgKGRlZmF1bHRUZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBrZXkgJHtrZXl9IG5vdCBmb3VuZGApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcoZGVmYXVsdFRleHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHIgPSB0aGlzLnN0b3JhZ2UuZ2V0KGtleSk7XG5cdFx0aWYgKGlzT2JqZWN0KHIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRQbHVyYWxSdWxlVGV4dChrZXksIFwib3RoZXJcIiwgZGVmYXVsdFRleHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnN0b3JhZ2UuZ2V0KGtleSk7XG5cdH1cblxuXHQvKipcblx0ICogQSBudW1iZXIgYGNvdW50YCBjYW4gYmUgcGFzc2VkIHRvIHRoaXMgbWV0aG9kLiBJbiBhZGRpdGlvbiB0byBhIG51bWJlciwgb25lIG9mIHRoZSBrZXl3b3JkcyBjYW4gYWxzbyBiZSBwYXNzZWQgZGlyZWN0bHkuXG5cdCAqIFwiemVyb1wiLCBcIm9uZVwiLCBcInR3b1wiLCBcImZld1wiLCBcIm1hbnlcIiBhbmQgXCJvdGhlclwiLiBSZW1lbWJlcjogbm90IGV2ZXJ5IGxhbmd1YWdlIGhhcyBhbGwgcnVsZXMuXG5cdCAqXG5cdCAqIFRoZSBhcHByb3ByaWF0ZSB0ZXh0IGZvciB0aGlzIG51bWJlciBpcyB0aGVuIHNlbGVjdGVkLiBJZiBubyBzdWl0YWJsZSBrZXkgaXMgZm91bmQsIGBkZWZhdWx0VGV4dGAgaXMgdGFrZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHtpbnRlZ2VyfHN0cmluZ30gY291bnRcblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBkZWZhdWx0VGV4dFxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXRQbHVyYWxSdWxlVGV4dChrZXksIGNvdW50LCBkZWZhdWx0VGV4dCkge1xuXHRcdGlmICghdGhpcy5zdG9yYWdlLmhhcyhrZXkpKSB7XG5cdFx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcoZGVmYXVsdFRleHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHIgPSB2YWxpZGF0ZU9iamVjdCh0aGlzLnN0b3JhZ2UuZ2V0KGtleSkpO1xuXG5cdFx0bGV0IGtleXdvcmQ7XG5cdFx0aWYgKGlzU3RyaW5nKGNvdW50KSkge1xuXHRcdFx0a2V5d29yZCA9IGNvdW50LnRvTG9jYWxlU3RyaW5nKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvdW50ID0gdmFsaWRhdGVJbnRlZ2VyKGNvdW50KTtcblx0XHRcdGlmIChjb3VudCA9PT0gMCkge1xuXHRcdFx0XHQvLyBzcGVjaWFsIGhhbmRsaW5nIGZvciB6ZXJvIGNvdW50XG5cdFx0XHRcdGlmIChyLmhhc093blByb3BlcnR5KFwiemVyb1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhyPy56ZXJvKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRrZXl3b3JkID0gbmV3IEludGwuUGx1cmFsUnVsZXModGhpcy5sb2NhbGUudG9TdHJpbmcoKSkuc2VsZWN0KFxuXHRcdFx0XHR2YWxpZGF0ZUludGVnZXIoY291bnQpLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoci5oYXNPd25Qcm9wZXJ0eShrZXl3b3JkKSkge1xuXHRcdFx0cmV0dXJuIHZhbGlkYXRlU3RyaW5nKHJba2V5d29yZF0pO1xuXHRcdH1cblxuXHRcdC8vIEBkZXByZWNhdGVkIHNpbmNlIDIwMjMtMDMtMTRcblx0XHQvLyBERUZBVUxUX0tFWSBpcyB1bmRlZmluZWRcblx0XHQvLyBpZiAoci5oYXNPd25Qcm9wZXJ0eShERUZBVUxUX0tFWSkpIHtcblx0XHQvLyAgICAgcmV0dXJuIHZhbGlkYXRlU3RyaW5nKHJbREVGQVVMVF9LRVldKTtcblx0XHQvLyB9XG5cblx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcoZGVmYXVsdFRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBhIHRleHQgZm9yIGEga2V5XG5cdCAqXG5cdCAqIGBgYFxuXHQgKiB0cmFuc2xhdGlvbnMuc2V0VGV4dChcInRleHQxXCIsIFwiTWFrZSBteSBkYXkhXCIpO1xuXHQgKiAvLyBwbHVyYWwgcnVsZXNcblx0ICogdHJhbnNsYXRpb25zLnNldFRleHQoXCJ0ZXh0NlwiLCB7XG5cdCAqICAgICBcInplcm9cIjogXCJUaGVyZSBhcmUgbm8gZmlsZXMgb24gRGlzay5cIixcblx0ICogICAgIFwib25lXCI6IFwiVGhlcmUgaXMgb25lIGZpbGUgb24gRGlzay5cIixcblx0ICogICAgIFwib3RoZXJcIjogXCJUaGVyZSBhcmUgZmlsZXMgb24gRGlzay5cIlxuXHQgKiAgICAgXCJkZWZhdWx0XCI6IFwiVGhlcmUgYXJlIGZpbGVzIG9uIERpc2suXCJcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gdGV4dFxuXHQgKiBAcmV0dXJuIHtUcmFuc2xhdGlvbnN9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nIG9yIG9iamVjdFxuXHQgKi9cblx0c2V0VGV4dChrZXksIHRleHQpIHtcblx0XHRpZiAoaXNTdHJpbmcodGV4dCkgfHwgaXNPYmplY3QodGV4dCkpIHtcblx0XHRcdHRoaXMuc3RvcmFnZS5zZXQodmFsaWRhdGVTdHJpbmcoa2V5KSwgdGV4dCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgc3RyaW5nIG9yIG9iamVjdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byB0cmFuc2ZlciBvdmVybGF5cyBmcm9tIGFuIG9iamVjdC4gVGhlIGtleXMgYXJlIHRyYW5zZmVycmVkLCBhbmQgdGhlIHZhbHVlcyBhcmUgZW50ZXJlZFxuXHQgKiBhcyB0ZXh0LlxuXHQgKlxuXHQgKiBUaGUgdmFsdWVzIGNhbiBlaXRoZXIgYmUgY2hhcmFjdGVyIHN0cmluZ3Mgb3IsIGluIHRoZSBjYXNlIG9mIHRleHRzIHdpdGggcGx1cmFsIGZvcm1zLCBvYmplY3RzLiBUaGUgcGx1cmFsIGZvcm1zXG5cdCAqIG11c3QgYmUgc3RvcmVkIGFzIHRleHQgdmlhIGEgc3RhbmRhcmQga2V5IFwiemVyb1wiLCBcIm9uZVwiLCBcInR3b1wiLCBcImZld1wiLCBcIm1hbnlcIiBhbmQgXCJvdGhlclwiLlxuXHQgKlxuXHQgKiBBZGRpdGlvbmFsbHksIHRoZSBrZXkgZGVmYXVsdCBjYW4gYmUgc3BlY2lmaWVkLCB3aGljaCB3aWxsIGJlIHVzZWQgaWYgbm8gb3RoZXIga2V5IGZpdHMuXG5cdCAqXG5cdCAqIEluIHNvbWUgbGFuZ3VhZ2VzLCBsaWtlIGZvciBleGFtcGxlIGluIEdlcm1hbiwgdGhlcmUgaXMgbm8gb3duIG1vcmUgbnVtYmVyIGF0IHRoZSB2YWx1ZSAwLiBJbiB0aGVzZSBsYW5ndWFnZXMsXG5cdCAqIHRoZSBmdW5jdGlvbiBhcHBsaWVzIGFkZGl0aW9uYWxseSB6ZXJvLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogdHJhbnNsYXRpb25zLmFzc2lnblRyYW5zbGF0aW9ucyh7XG5cdCAqICAgXCJ0ZXh0MVwiOiBcIk1ha2UgbXkgZGF5IVwiLFxuXHQgKiAgIFwidGV4dDJcIjogXCJJJ2xsIGJlIGJhY2shXCIsXG5cdCAqICAgXCJ0ZXh0NlwiOiB7XG5cdCAqICAgICBcInplcm9cIjogXCJUaGVyZSBhcmUgbm8gZmlsZXMgb24gRGlzay5cIixcblx0ICogICAgIFwib25lXCI6IFwiVGhlcmUgaXMgb25lIGZpbGUgb24gRGlzay5cIixcblx0ICogICAgIFwib3RoZXJcIjogXCJUaGVyZSBhcmUgZmlsZXMgb24gRGlzay5cIlxuXHQgKiAgICAgXCJkZWZhdWx0XCI6IFwiVGhlcmUgYXJlIGZpbGVzIG9uIERpc2suXCJcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gdHJhbnNsYXRpb25zXG5cdCAqIEByZXR1cm4ge1RyYW5zbGF0aW9uc31cblx0ICovXG5cdGFzc2lnblRyYW5zbGF0aW9ucyh0cmFuc2xhdGlvbnMpIHtcblx0XHR2YWxpZGF0ZU9iamVjdCh0cmFuc2xhdGlvbnMpO1xuXG5cdFx0aWYgKHRyYW5zbGF0aW9ucyBpbnN0YW5jZW9mIFRyYW5zbGF0aW9ucykge1xuXHRcdFx0dHJhbnNsYXRpb25zLnN0b3JhZ2UuZm9yRWFjaCgodiwgaykgPT4ge1xuXHRcdFx0XHR0aGlzLnNldFRleHQoaywgdik7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHRyYW5zbGF0aW9ucykpIHtcblx0XHRcdHRoaXMuc2V0VGV4dChrLCB2KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHRyYW5zbGF0aW9ucyBmb3IgdGhlIGN1cnJlbnQgZG9jdW1lbnQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9IFtlbGVtZW50XSAtIEVsZW1lbnQgdG8gc2VhcmNoIGZvciB0cmFuc2xhdGlvbnMuIERlZmF1bHQ6IGVsZW1lbnQgd2l0aCBvYmplY3RsaW5rIEBzY2h1a2FpL21vbnN0ZXIvaTE4bi90cmFuc2xhdGlvbnNAQGxpbmsuXG4gKiBAcmV0dXJuIHtUcmFuc2xhdGlvbnN9XG4gKiBAdGhyb3dzIHtFcnJvcn0gRWxlbWVudCBpcyBub3QgYW4gSFRNTEVsZW1lbnQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gQ2Fubm90IGZpbmQgdGhlIGVsZW1lbnQgd2l0aCB0cmFuc2xhdGlvbnMuIEFkZCB0aGUgdHJhbnNsYXRpb24gb2JqZWN0IHRvIHRoZSBkb2N1bWVudC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBUaGlzIGVsZW1lbnQgaGFzIG5vIHRyYW5zbGF0aW9ucy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBNaXNzaW5nIHRyYW5zbGF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoZWxlbWVudCkge1xuXHRjb25zdCBkID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0ZWxlbWVudCA9IGQucXVlcnlTZWxlY3Rvcihcblx0XHRcdGBbJHtBVFRSSUJVVEVfT0JKRUNUTElOS31+PVwiJHt0cmFuc2xhdGlvbnNMaW5rU3ltYm9sLnRvU3RyaW5nKCl9XCJdYCxcblx0XHQpO1xuXHRcdGlmIChlbGVtZW50ID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFwiQ2Fubm90IGZpbmQgdGhlIGVsZW1lbnQgd2l0aCB0cmFuc2xhdGlvbnMuIEFkZCB0aGUgdHJhbnNsYXRpb24gb2JqZWN0IHRvIHRoZSBkb2N1bWVudC5cIixcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkVsZW1lbnQgaXMgbm90IGFuIEhUTUxFbGVtZW50LlwiKTtcblx0fVxuXG5cdGlmICghaGFzT2JqZWN0TGluayhlbGVtZW50LCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoaXMgZWxlbWVudCBoYXMgbm8gdHJhbnNsYXRpb25zLlwiKTtcblx0fVxuXG5cdGNvbnN0IG9iaiA9IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCk7XG5cblx0Zm9yIChjb25zdCB0IG9mIG9iaikge1xuXHRcdGlmICh0IGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSB7XG5cdFx0XHRyZXR1cm4gdDtcblx0XHR9XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHRyYW5zbGF0aW9ucy5cIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9jYWxlT2ZEb2N1bWVudCB9IGZyb20gXCIuLi9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsLCBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHtcblx0Z2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMsXG5cdFRyYW5zbGF0aW9ucyxcbn0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVGdW5jdGlvbixcblx0dmFsaWRhdGVJbnRlZ2VyLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVQcmltaXRpdmUsXG5cdHZhbGlkYXRlU3RyaW5nLFxuXHR2YWxpZGF0ZUJvb2xlYW4sXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4vcGF0aGZpbmRlci5tanNcIjtcblxuZXhwb3J0IHsgVHJhbnNmb3JtZXIgfTtcblxuLyoqXG4gKiBUaGUgdHJhbnNmb3JtZXIgY2xhc3MgaXMgYSBzd2lzcyBhcm15IGtuaWZlIGZvciBtYW5pcHVsYXRpbmcgdmFsdWVzLlxuICpcbiAqIEEgc2ltcGxlIGV4YW1wbGUgaXMgdGhlIGNvbnZlcnNpb24gb2YgYWxsIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLiBmb3IgdGhpcyBwdXJwb3NlIHRoZSBjb21tYW5kIGB0b2xvd2VyYCBtdXN0IGJlIHVzZWQuXG4gKlxuICogYGBganNcbiAqIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKCd0b2xvd2VyJykucnVuKCdBQkMnKTsgLy8gXHUyMUE2IGFiY1xuICogYGBgXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2xpYnJhcmllcy90cmFuc2Zvcm1lclxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvdHJhbnNmb3JtZXIvc2ltcGxlXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIHRyYW5zZm9ybWVyIGNsYXNzIGlzIGEgc3dpc3MgYXJteSBrbmlmZSBmb3IgbWFuaXB1bGF0aW5nIHZhbHVlcy4gZXNwZWNpYWxseSBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBwaXBlLCBwcm9jZXNzaW5nIGNoYWlucyBjYW4gYmUgYnVpbHQgdXAuXG4gKi9cbmNsYXNzIFRyYW5zZm9ybWVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGVmaW5pdGlvblxuXHQgKi9cblx0Y29uc3RydWN0b3IoZGVmaW5pdGlvbikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5hcmdzID0gZGlzYXNzZW1ibGUoZGVmaW5pdGlvbik7XG5cdFx0dGhpcy5jb21tYW5kID0gdGhpcy5hcmdzLnNoaWZ0KCk7XG5cdFx0dGhpcy5jYWxsYmFja3MgPSBuZXcgTWFwKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcblx0ICogQHJldHVybiB7VHJhbnNmb3JtZXJ9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICovXG5cdHNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdFx0dmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayk7XG5cblx0XHRpZiAoY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWxpZGF0ZU9iamVjdChjb250ZXh0KTtcblx0XHR9XG5cblx0XHR0aGlzLmNhbGxiYWNrcy5zZXQobmFtZSwge1xuXHRcdFx0Y2FsbGJhY2s6IGNhbGxiYWNrLFxuXHRcdFx0Y29udGV4dDogY29udGV4dCxcblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7Kn1cblx0ICogQHRocm93cyB7RXJyb3J9IHVua25vd24gY29tbWFuZFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7RXJyb3J9IHR5cGUgbm90IHN1cHBvcnRlZFxuXHQgKi9cblx0cnVuKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRyYW5zZm9ybS5hcHBseSh0aGlzLCBbdmFsdWVdKTtcblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZFxuICogQHJldHVybiB7YXJyYXl9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkaXNhc3NlbWJsZShjb21tYW5kKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGNvbW1hbmQpO1xuXG5cdGNvbnN0IHBsYWNlaG9sZGVyID0gbmV3IE1hcCgpO1xuXHRjb25zdCByZWdleCA9IC8oKD88cGF0dGVybj5cXFxcKD88Y2hhcj4uKSl7MX0pL2dpbTtcblxuXHQvLyBUaGUgc2VwYXJhdG9yIGZvciBhcmdzIG11c3QgYmUgZXNjYXBlZFxuXHQvLyB1bmRlZmluZWQgc3RyaW5nIHdoaWNoIHNob3VsZCBub3Qgb2NjdXIgbm9ybWFsbHkgYW5kIGlzIGFsc28gbm90IGEgcmVnZXhcblx0Y29uc3QgcmVzdWx0ID0gY29tbWFuZC5tYXRjaEFsbChyZWdleCk7XG5cblx0Zm9yIChjb25zdCBtIG9mIHJlc3VsdCkge1xuXHRcdGNvbnN0IGcgPSBtPy5bXCJncm91cHNcIl07XG5cdFx0aWYgKCFpc09iamVjdChnKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcCA9IGc/LltcInBhdHRlcm5cIl07XG5cdFx0Y29uc3QgYyA9IGc/LltcImNoYXJcIl07XG5cblx0XHRpZiAocCAmJiBjKSB7XG5cdFx0XHRjb25zdCByID0gYF9fJHtuZXcgSUQoKS50b1N0cmluZygpfV9fYDtcblx0XHRcdHBsYWNlaG9sZGVyLnNldChyLCBjKTtcblx0XHRcdGNvbW1hbmQgPSBjb21tYW5kLnJlcGxhY2UocCwgcik7XG5cdFx0fVxuXHR9XG5cdGxldCBwYXJ0cyA9IGNvbW1hbmQuc3BsaXQoXCI6XCIpO1xuXG5cdHBhcnRzID0gcGFydHMubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdGxldCB2ID0gdmFsdWUudHJpbSgpO1xuXHRcdGZvciAoY29uc3QgayBvZiBwbGFjZWhvbGRlcikge1xuXHRcdFx0diA9IHYucmVwbGFjZShrWzBdLCBrWzFdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHY7XG5cdH0pO1xuXG5cdHJldHVybiBwYXJ0cztcbn1cblxuLyoqXG4gKiB0cmllcyB0byBtYWtlIGEgc3RyaW5nIG91dCBvZiB2YWx1ZSBhbmQgaWYgdGhpcyBzdWNjZWVkcyB0byByZXR1cm4gaXQgYmFja1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZyh2YWx1ZSkge1xuXHRpZiAoaXNPYmplY3QodmFsdWUpICYmIHZhbHVlLmhhc093blByb3BlcnR5KFwidG9TdHJpbmdcIikpIHtcblx0XHR2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cdH1cblxuXHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5rbm93biBjb21tYW5kXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB0eXBlIG5vdCBzdXBwb3J0ZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGtleSBwYXJhbWV0ZXJcbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtKHZhbHVlKSB7XG5cdGNvbnN0IGNvbnNvbGUgPSBnZXRHbG9iYWxPYmplY3QoXCJjb25zb2xlXCIpO1xuXG5cdGNvbnN0IGFyZ3MgPSBjbG9uZSh0aGlzLmFyZ3MpO1xuXHRsZXQga2V5O1xuXHRsZXQgZGVmYXVsdFZhbHVlO1xuXG5cdGxldCB0cmFuc2xhdGlvbnM7XG5cdGxldCBkYXRlO1xuXHRsZXQgbG9jYWxlO1xuXHRsZXQgdGltZXN0YW1wO1xuXHRsZXQgbWFwO1xuXHRsZXQga2V5VmFsdWU7XG5cblx0c3dpdGNoICh0aGlzLmNvbW1hbmQpIHtcblx0XHRjYXNlIFwic3RhdGljXCI6XG5cdFx0XHRyZXR1cm4gdGhpcy5hcmdzLmpvaW4oXCI6XCIpO1xuXG5cdFx0Y2FzZSBcInRvbG93ZXJcIjpcblx0XHRjYXNlIFwic3RydG9sb3dlclwiOlxuXHRcdGNhc2UgXCJ0b2xvd2VyY2FzZVwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0cmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRjYXNlIFwiY29udGFpbnNcIjpcblx0XHRcdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmluY2x1ZGVzKGFyZ3NbMF0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmluY2x1ZGVzKGFyZ3NbMF0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShhcmdzWzBdKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Y2FzZSBcImhhcy1lbnRyaWVzXCI6XG5cdFx0Y2FzZSBcImhhc2VudHJpZXNcIjpcblx0XHRcdGlmIChpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPiAwO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmxlbmd0aCA+IDA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdGNhc2UgXCJpc3VuZGVmaW5lZFwiOlxuXHRcdGNhc2UgXCJpcy11bmRlZmluZWRcIjpcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBcImlzbnVsbFwiOlxuXHRcdGNhc2UgXCJpcy1udWxsXCI6XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGw7XG5cblx0XHRjYXNlIFwiaXNzZXRcIjpcblx0XHRjYXNlIFwiaXMtc2V0XCI6XG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcblxuXHRcdGNhc2UgXCJpc251bWJlclwiOlxuXHRcdGNhc2UgXCJpcy1udW1iZXJcIjpcblx0XHRcdHJldHVybiBpc1ByaW1pdGl2ZSh2YWx1ZSkgJiYgIWlzTmFOKHZhbHVlKTtcblxuXHRcdGNhc2UgXCJpc2ludGVnZXJcIjpcblx0XHRjYXNlIFwiaXMtaW50ZWdlclwiOlxuXHRcdFx0cmV0dXJuIGlzUHJpbWl0aXZlKHZhbHVlKSAmJiAhaXNOYU4odmFsdWUpICYmIHZhbHVlICUgMSA9PT0gMDtcblxuXHRcdGNhc2UgXCJpc2Zsb2F0XCI6XG5cdFx0Y2FzZSBcImlzLWZsb2F0XCI6XG5cdFx0XHRyZXR1cm4gaXNQcmltaXRpdmUodmFsdWUpICYmICFpc05hTih2YWx1ZSkgJiYgdmFsdWUgJSAxICE9PSAwO1xuXG5cdFx0Y2FzZSBcImlzb2JqZWN0XCI6XG5cdFx0Y2FzZSBcImlzLW9iamVjdFwiOlxuXHRcdFx0cmV0dXJuIGlzT2JqZWN0KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJpc2FycmF5XCI6XG5cdFx0Y2FzZSBcImlzLWFycmF5XCI6XG5cdFx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG5cblx0XHRjYXNlIFwibm90XCI6XG5cdFx0XHR2YWxpZGF0ZUJvb2xlYW4odmFsdWUpO1xuXHRcdFx0cmV0dXJuICF2YWx1ZTtcblxuXHRcdGNhc2UgXCJ0b3VwcGVyXCI6XG5cdFx0Y2FzZSBcInN0cnRvdXBwZXJcIjpcblx0XHRjYXNlIFwidG91cHBlcmNhc2VcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdHJldHVybiB2YWx1ZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Y2FzZSBcInRvc3RyaW5nXCI6XG5cdFx0XHRyZXR1cm4gYCR7dmFsdWV9YDtcblxuXHRcdGNhc2UgXCJ0b2ludGVnZXJcIjpcblx0XHRcdGNvbnN0IG4gPSBwYXJzZUludCh2YWx1ZSk7XG5cdFx0XHR2YWxpZGF0ZUludGVnZXIobik7XG5cdFx0XHRyZXR1cm4gbjtcblxuXHRcdGNhc2UgXCJ0by1qc29uXCI6XG5cdFx0Y2FzZSBcInRvanNvblwiOlxuXHRcdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJmcm9tLWpzb25cIjpcblx0XHRjYXNlIFwiZnJvbWpzb25cIjpcblx0XHRcdHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcblxuXHRcdGNhc2UgXCJ0cmltXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdmFsdWUudHJpbSgpO1xuXG5cdFx0Y2FzZSBcInJhd3VybGVuY29kZVwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSlcblx0XHRcdFx0LnJlcGxhY2UoLyEvZywgXCIlMjFcIilcblx0XHRcdFx0LnJlcGxhY2UoLycvZywgXCIlMjdcIilcblx0XHRcdFx0LnJlcGxhY2UoL1xcKC9nLCBcIiUyOFwiKVxuXHRcdFx0XHQucmVwbGFjZSgvXFwpL2csIFwiJTI5XCIpXG5cdFx0XHRcdC5yZXBsYWNlKC9cXCovZywgXCIlMkFcIik7XG5cblx0XHRjYXNlIFwiY2FsbFwiOlxuXHRcdFx0LyoqXG5cdFx0XHQgKiBjYWxsYmFjay1kZWZpbml0aW9uXG5cdFx0XHQgKiBmdW5jdGlvbiBjYWxsYmFjayh2YWx1ZSwgLi4uYXJncykge1xuXHRcdFx0ICogICByZXR1cm4gdmFsdWU7XG5cdFx0XHQgKiB9XG5cdFx0XHQgKi9cblxuXHRcdFx0bGV0IGNhbGxiYWNrO1xuXHRcdFx0Y29uc3QgY2FsbGJhY2tOYW1lID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0bGV0IGNvbnRleHQgPSBnZXRHbG9iYWwoKTtcblxuXHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShjYWxsYmFja05hbWUpKSB7XG5cdFx0XHRcdGNhbGxiYWNrID0gdmFsdWVbY2FsbGJhY2tOYW1lXTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5jYWxsYmFja3MuaGFzKGNhbGxiYWNrTmFtZSkpIHtcblx0XHRcdFx0Y29uc3QgcyA9IHRoaXMuY2FsbGJhY2tzLmdldChjYWxsYmFja05hbWUpO1xuXHRcdFx0XHRjYWxsYmFjayA9IHM/LltcImNhbGxiYWNrXCJdO1xuXHRcdFx0XHRjb250ZXh0ID0gcz8uW1wiY29udGV4dFwiXTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiZcblx0XHRcdFx0d2luZG93Lmhhc093blByb3BlcnR5KGNhbGxiYWNrTmFtZSlcblx0XHRcdCkge1xuXHRcdFx0XHRjYWxsYmFjayA9IHdpbmRvd1tjYWxsYmFja05hbWVdO1xuXHRcdFx0fVxuXHRcdFx0dmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayk7XG5cblx0XHRcdGFyZ3MudW5zaGlmdCh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbChjb250ZXh0LCAuLi5hcmdzKTtcblxuXHRcdGNhc2UgXCJwbGFpblwiOlxuXHRcdGNhc2UgXCJwbGFpbnRleHRcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcodmFsdWUsIFwidGV4dC9odG1sXCIpO1xuXHRcdFx0cmV0dXJuIGRvYy5ib2R5LnRleHRDb250ZW50IHx8IFwiXCI7XG5cblx0XHRjYXNlIFwiaWZcIjpcblx0XHRjYXNlIFwiP1wiOlxuXHRcdFx0dmFsaWRhdGVQcmltaXRpdmUodmFsdWUpO1xuXG5cdFx0XHRsZXQgdHJ1ZVN0YXRlbWVudCA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgZmFsc2VTdGF0ZW1lbnQgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXG5cdFx0XHR0cnVlU3RhdGVtZW50ID0gY29udmVydFNwZWNpYWxTdHJpbmdzKHRydWVTdGF0ZW1lbnQsIHZhbHVlKTtcblx0XHRcdGZhbHNlU3RhdGVtZW50ID0gY29udmVydFNwZWNpYWxTdHJpbmdzKGZhbHNlU3RhdGVtZW50LCB2YWx1ZSk7XG5cblx0XHRcdGNvbnN0IGNvbmRpdGlvbiA9IGV2YWx1YXRlQ29uZGl0aW9uKHZhbHVlKTtcblx0XHRcdHJldHVybiBjb25kaXRpb24gPyB0cnVlU3RhdGVtZW50IDogZmFsc2VTdGF0ZW1lbnQ7XG5cblx0XHRjYXNlIFwidWNmaXJzdFwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdFx0XHRjb25zdCBmaXJzdGNoYXIgPSB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTtcblx0XHRcdHJldHVybiBmaXJzdGNoYXIgKyB2YWx1ZS5zdWJzdHIoMSk7XG5cdFx0Y2FzZSBcInVjd29yZHNcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblxuXHRcdFx0cmV0dXJuIHZhbHVlLnJlcGxhY2UoXG5cdFx0XHRcdC9eKFthLXpcXHUwMEUwLVxcdTAwRkNdKXxcXHMrKFthLXpcXHUwMEUwLVxcdTAwRkNdKS9nLFxuXHRcdFx0XHRmdW5jdGlvbiAodikge1xuXHRcdFx0XHRcdHJldHVybiB2LnRvVXBwZXJDYXNlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcImNvdW50XCI6XG5cdFx0Y2FzZSBcImxlbmd0aFwiOlxuXHRcdFx0aWYgKFxuXHRcdFx0XHQoaXNTdHJpbmcodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSB8fCBpc0FycmF5KHZhbHVlKSkgJiZcblx0XHRcdFx0dmFsdWUuaGFzT3duUHJvcGVydHkoXCJsZW5ndGhcIilcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUubGVuZ3RoO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCB0eXBlICR7dHlwZW9mIHZhbHVlfWApO1xuXG5cdFx0Y2FzZSBcInRvLWJhc2U2NFwiOlxuXHRcdGNhc2UgXCJidG9hXCI6XG5cdFx0Y2FzZSBcImJhc2U2NFwiOlxuXHRcdFx0cmV0dXJuIGJ0b2EoY29udmVydFRvU3RyaW5nKHZhbHVlKSk7XG5cblx0XHRjYXNlIFwiYXRvYlwiOlxuXHRcdGNhc2UgXCJmcm9tLWJhc2U2NFwiOlxuXHRcdFx0cmV0dXJuIGF0b2IoY29udmVydFRvU3RyaW5nKHZhbHVlKSk7XG5cblx0XHRjYXNlIFwiZW1wdHlcIjpcblx0XHRcdHJldHVybiBcIlwiO1xuXG5cdFx0Y2FzZSBcInVuZGVmaW5lZFwiOlxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGNhc2UgXCJkZWJ1Z1wiOlxuXHRcdFx0aWYgKGlzT2JqZWN0KGNvbnNvbGUpKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKHZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXG5cdFx0Y2FzZSBcInByZWZpeFwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0Y29uc3QgcHJlZml4ID0gYXJncz8uWzBdO1xuXHRcdFx0cmV0dXJuIHByZWZpeCArIHZhbHVlO1xuXG5cdFx0Y2FzZSBcInN1ZmZpeFwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0Y29uc3Qgc3VmZml4ID0gYXJncz8uWzBdO1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgc3VmZml4O1xuXG5cdFx0Y2FzZSBcInVuaXFpZFwiOlxuXHRcdFx0cmV0dXJuIG5ldyBJRCgpLnRvU3RyaW5nKCk7XG5cblx0XHRjYXNlIFwiZmlyc3Qta2V5XCI6XG5cdFx0Y2FzZSBcImxhc3Qta2V5XCI6XG5cdFx0Y2FzZSBcIm50aC1sYXN0LWtleVwiOlxuXHRcdGNhc2UgXCJudGgta2V5XCI6XG5cdFx0XHRpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG5vdCBzdXBwb3J0ZWRcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSkuc29ydCgpO1xuXG5cdFx0XHRpZiAodGhpcy5jb21tYW5kID09PSBcImZpcnN0LWtleVwiKSB7XG5cdFx0XHRcdGtleSA9IDA7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuY29tbWFuZCA9PT0gXCJsYXN0LWtleVwiKSB7XG5cdFx0XHRcdGtleSA9IGtleXMubGVuZ3RoIC0gMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGtleSA9IHZhbGlkYXRlSW50ZWdlcihwYXJzZUludChhcmdzLnNoaWZ0KCkpKTtcblxuXHRcdFx0XHRpZiAodGhpcy5jb21tYW5kID09PSBcIm50aC1sYXN0LWtleVwiKSB7XG5cdFx0XHRcdFx0a2V5ID0ga2V5cy5sZW5ndGggLSBrZXkgLSAxO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHRWYWx1ZSA9IGFyZ3Muc2hpZnQoKSB8fCBcIlwiO1xuXG5cdFx0XHRjb25zdCB1c2VLZXkgPSBrZXlzPy5ba2V5XTtcblxuXHRcdFx0aWYgKHZhbHVlPy5bdXNlS2V5XSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU/Llt1c2VLZXldO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGVmYXVsdFZhbHVlO1xuXG5cdFx0Y2FzZSBcImtleVwiOlxuXHRcdGNhc2UgXCJwcm9wZXJ0eVwiOlxuXHRcdGNhc2UgXCJpbmRleFwiOlxuXHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgTWFwKSB7XG5cdFx0XHRcdGlmICghdmFsdWUuaGFzKGtleSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZS5nZXQoa2V5KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSB8fCBpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRpZiAodmFsdWU/LltrZXldKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlPy5ba2V5XTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgbm90IHN1cHBvcnRlZFwiKTtcblxuXHRcdGNhc2UgXCJwYXRoLWV4aXN0c1wiOlxuXHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5ldyBQYXRoZmluZGVyKHZhbHVlKS5leGlzdHMoa2V5KTtcblxuXHRcdGNhc2UgXCJjb25jYXRcIjpcblx0XHRcdGNvbnN0IHBmMiA9IG5ldyBQYXRoZmluZGVyKHZhbHVlKTtcblx0XHRcdGxldCBjb25jYXQgPSBcIlwiO1xuXHRcdFx0d2hpbGUgKGFyZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGFkZCBlbXB0eSBzdHJpbmdzXG5cdFx0XHRcdGlmIChpc1N0cmluZyhrZXkpICYmIGtleS50cmltKCkgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRjb25jYXQgKz0ga2V5O1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFwZjIuZXhpc3RzKGtleSkpIHtcblx0XHRcdFx0XHRjb25jYXQgKz0ga2V5O1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHYgPSBwZjIuZ2V0VmlhKGtleSk7XG5cdFx0XHRcdGlmICghaXNQcmltaXRpdmUodikpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ2YWx1ZSBpcyBub3QgcHJpbWl0aXZlXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uY2F0ICs9IHY7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBjb25jYXQ7XG5cdFx0Y2FzZSBcInBhdGhcIjpcblx0XHRcdGtleSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGtleSBwYXJhbWV0ZXJcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHBmID0gbmV3IFBhdGhmaW5kZXIodmFsdWUpO1xuXG5cdFx0XHRpZiAoIXBmLmV4aXN0cyhrZXkpKSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBwZi5nZXRWaWEoa2V5KTtcblxuXHRcdGNhc2UgXCJzdWJzdHJpbmdcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblxuXHRcdFx0Y29uc3Qgc3RhcnQgPSBwYXJzZUludChhcmdzWzBdKSB8fCAwO1xuXHRcdFx0Y29uc3QgZW5kID0gKHBhcnNlSW50KGFyZ3NbMV0pIHx8IDApICsgc3RhcnQ7XG5cblx0XHRcdHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XG5cblx0XHRjYXNlIFwibm9wXCI6XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRjYXNlIFwiPz9cIjpcblx0XHRjYXNlIFwiZGVmYXVsdFwiOlxuXHRcdFx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZhdWx0VmFsdWUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRsZXQgZGVmYXVsdFR5cGUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoZGVmYXVsdFR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkZWZhdWx0VHlwZSA9IFwic3RyaW5nXCI7XG5cdFx0XHR9XG5cblx0XHRcdHN3aXRjaCAoZGVmYXVsdFR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcImludFwiOlxuXHRcdFx0XHRjYXNlIFwiaW50ZWdlclwiOlxuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludChkZWZhdWx0VmFsdWUpO1xuXHRcdFx0XHRjYXNlIFwiZmxvYXRcIjpcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VGbG9hdChkZWZhdWx0VmFsdWUpO1xuXHRcdFx0XHRjYXNlIFwidW5kZWZpbmVkXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0Y2FzZSBcImJvb2xcIjpcblx0XHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KGRlZmF1bHRWYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgIT09IFwiXCIgJiZcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlICE9PSBcIm9mZlwiICYmXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSAhPT0gXCJmYWxzZVwiKSB8fFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlID09PSBcIm9uXCIgfHxcblx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9PT0gXCJ0cnVlXCIgfHxcblx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9PT0gXCJ0cnVlXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRjYXNlIFwic3RyaW5nXCI6XG5cdFx0XHRcdFx0cmV0dXJuIGAke2RlZmF1bHRWYWx1ZX1gO1xuXHRcdFx0XHRjYXNlIFwib2JqZWN0XCI6XG5cdFx0XHRcdFx0cmV0dXJuIEpTT04ucGFyc2UoYXRvYihkZWZhdWx0VmFsdWUpKTtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBub3Qgc3VwcG9ydGVkXCIpO1xuXG5cdFx0Y2FzZSBcIm1hcFwiOlxuXHRcdFx0bWFwID0gbmV3IE1hcCgpO1xuXHRcdFx0d2hpbGUgKGFyZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRrZXlWYWx1ZSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdFx0aWYgKGtleVZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGtleSBwYXJhbWV0ZXJcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRrZXlWYWx1ZSA9IGtleVZhbHVlLnNwbGl0KFwiPVwiKTtcblx0XHRcdFx0bWFwLnNldChrZXlWYWx1ZVswXSwga2V5VmFsdWVbMV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWFwLmdldCh2YWx1ZSk7XG5cblx0XHRjYXNlIFwiZXF1YWxzXCI6XG5cdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyB2YWx1ZSBwYXJhbWV0ZXJcIik7XG5cdFx0XHR9XG5cblx0XHRcdHZhbGlkYXRlUHJpbWl0aXZlKHZhbHVlKTtcblxuXHRcdFx0Y29uc3QgZXF1YWxzVmFsdWUgPSBhcmdzLnNoaWZ0KCk7XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogVGhlIGhpc3Rvcnkgb2YgXHUyMDFDdHlwZW9mIG51bGxcdTIwMURcblx0XHRcdCAqIGh0dHBzOi8vMmFsaXR5LmNvbS8yMDEzLzEwL3R5cGVvZi1udWxsLmh0bWxcblx0XHRcdCAqIEluIEphdmFTY3JpcHQsIHR5cGVvZiBudWxsIGlzICdvYmplY3QnLCB3aGljaCBpbmNvcnJlY3RseSBzdWdnZXN0c1xuXHRcdFx0ICogdGhhdCBudWxsIGlzIGFuIG9iamVjdC5cblx0XHRcdCAqL1xuXHRcdFx0aWYgKHZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBlcXVhbHNWYWx1ZSA9PT0gXCJudWxsXCI7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHR5cGVPZlZhbHVlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHRzd2l0Y2ggKHR5cGVPZlZhbHVlKSB7XG5cdFx0XHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IGVxdWFsc1ZhbHVlO1xuXHRcdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSBwYXJzZUZsb2F0KGVxdWFsc1ZhbHVlKTtcblx0XHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IChlcXVhbHNWYWx1ZSA9PT0gXCJ0cnVlXCIgfHwgZXF1YWxzVmFsdWUgPT09IFwib25cIik7XG5cdFx0XHRcdGNhc2UgXCJ1bmRlZmluZWRcIjpcblx0XHRcdFx0XHRyZXR1cm4gZXF1YWxzVmFsdWUgPT09IFwidW5kZWZpbmVkXCI7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBub3Qgc3VwcG9ydGVkXCIpO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcIm1vbmV5XCI6XG5cdFx0Y2FzZSBcImN1cnJlbmN5XCI6XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsb2NhbGUgPSBnZXRMb2NhbGVPZkRvY3VtZW50KCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFZlcndlbmRlbiB2b24gUmVnRXhwLCB1bSBXXHUwMEU0aHJ1bmcgdW5kIEJldHJhZyB6dSBleHRyYWhpZXJlblxuXHRcdFx0Y29uc3QgbWF0Y2ggPSB2YWx1ZS5tYXRjaCgvXihbQS1aXXszfSlbXFxzLV0qKFxcZCsoXFwuXFxkKyk/KSQvKTtcblx0XHRcdGlmICghbWF0Y2gpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjdXJyZW5jeSBmb3JtYXRcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGN1cnJlbmN5ID0gbWF0Y2hbMV07XG5cdFx0XHRjb25zdCBhbW91bnQgPSBtYXRjaFsyXTtcblxuXHRcdFx0Y29uc3QgbWF4aW11bUZyYWN0aW9uRGlnaXRzID0gYXJncz8uWzBdIHx8IDI7XG5cdFx0XHRjb25zdCByb3VuZGluZ0luY3JlbWVudCA9IGFyZ3M/LlsxXSB8fCA1O1xuXG5cdFx0XHRjb25zdCBuZiA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NhbGUudG9TdHJpbmcoKSwge1xuXHRcdFx0XHRzdHlsZTogXCJjdXJyZW5jeVwiLFxuXHRcdFx0XHRjdXJyZW5jeTogY3VycmVuY3ksXG5cdFx0XHRcdG1heGltdW1GcmFjdGlvbkRpZ2l0czogbWF4aW11bUZyYWN0aW9uRGlnaXRzLFxuXHRcdFx0XHRyb3VuZGluZ0luY3JlbWVudDogcm91bmRpbmdJbmNyZW1lbnQsXG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIG5mLmZvcm1hdChhbW91bnQpO1xuXG5cdFx0Y2FzZSBcInRpbWVzdGFtcFwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuXHRcdFx0aWYgKGlzTmFOKHRpbWVzdGFtcCkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRpbWVzdGFtcDtcblxuXHRcdGNhc2UgXCJ0aW1lXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKGxvY2FsZS50b1N0cmluZygpLCB7XG5cdFx0XHRcdFx0aG91cjEyOiBmYWxzZSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwiZGF0ZXRpbWVmb3JtYXRcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHtcblx0XHRcdFx0ZGF0ZVN0eWxlOiBcIm1lZGl1bVwiLFxuXHRcdFx0XHR0aW1lU3R5bGU6IFwibWVkaXVtXCIsXG5cdFx0XHRcdGhvdXIxMjogZmFsc2UsXG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9wdGlvbnMuZGF0ZVN0eWxlID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9wdGlvbnMudGltZVN0eWxlID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsb2NhbGUgPSBnZXRMb2NhbGVPZkRvY3VtZW50KCkudG9TdHJpbmcoKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgb3B0aW9ucykuZm9ybWF0KGRhdGUpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvY2FsZSBvciBtaXNzaW5nIGZvcm1hdCAoJHtlLm1lc3NhZ2V9KWApO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcImRhdGV0aW1lXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLnRvU3RyaW5nKCksIHtcblx0XHRcdFx0XHRob3VyMTI6IGZhbHNlLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJkYXRlXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKGxvY2FsZS50b1N0cmluZygpLCB7XG5cdFx0XHRcdFx0eWVhcjogXCJudW1lcmljXCIsXG5cdFx0XHRcdFx0bW9udGg6IFwiMi1kaWdpdFwiLFxuXHRcdFx0XHRcdGRheTogXCIyLWRpZ2l0XCIsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvY2FsZSBvciBtaXNzaW5nIGZvcm1hdCAoJHtlLm1lc3NhZ2V9KWApO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcInllYXJcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTtcblxuXHRcdGNhc2UgXCJtb250aFwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXRNb250aCgpICsgMTtcblxuXHRcdGNhc2UgXCJkYXlcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0RGF0ZSgpO1xuXG5cdFx0Y2FzZSBcIndlZWtkYXlcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0RGF5KCk7XG5cblx0XHRjYXNlIFwiaG91clwiOlxuXHRcdGNhc2UgXCJob3Vyc1wiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xuXG5cdFx0Y2FzZSBcIm1pbnV0ZVwiOlxuXHRcdGNhc2UgXCJtaW51dGVzXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldE1pbnV0ZXMoKTtcblxuXHRcdGNhc2UgXCJzZWNvbmRcIjpcblx0XHRjYXNlIFwic2Vjb25kc1wiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXRTZWNvbmRzKCk7XG5cblx0XHRjYXNlIFwiaTE4blwiOlxuXHRcdGNhc2UgXCJ0cmFuc2xhdGlvblwiOlxuXHRcdFx0dHJhbnNsYXRpb25zID0gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoKTtcblx0XHRcdGlmICghKHRyYW5zbGF0aW9ucyBpbnN0YW5jZW9mIFRyYW5zbGF0aW9ucykpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyB0cmFuc2xhdGlvbnNcIik7XG5cdFx0XHR9XG5cblx0XHRcdGtleSA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0a2V5ID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHRWYWx1ZSA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cblx0XHRcdGRlZmF1bHRWYWx1ZSA9IGNvbnZlcnRTcGVjaWFsU3RyaW5ncyhkZWZhdWx0VmFsdWUsIHZhbHVlKTtcblxuXHRcdFx0cmV0dXJuIHRyYW5zbGF0aW9ucy5nZXRUZXh0KGtleSwgZGVmYXVsdFZhbHVlKTtcblxuXHRcdGNhc2UgXCJzZXQtdG9nZ2xlXCI6XG5cdFx0Y2FzZSBcInNldC1zZXRcIjpcblx0XHRjYXNlIFwic2V0LXJlbW92ZVwiOlxuXHRcdFx0Y29uc3QgbW9kaWZpZXIgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRsZXQgZGVsaW1pdGVyID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0aWYgKGRlbGltaXRlciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlbGltaXRlciA9IFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzZXQgPSBuZXcgU2V0KHZhbHVlLnNwbGl0KGRlbGltaXRlcikpO1xuXHRcdFx0Y29uc3QgdG9nZ2xlID0gbmV3IFNldChtb2RpZmllci5zcGxpdChkZWxpbWl0ZXIpKTtcblx0XHRcdGlmICh0aGlzLmNvbW1hbmQgPT09IFwic2V0LXRvZ2dsZVwiKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdCBvZiB0b2dnbGUpIHtcblx0XHRcdFx0XHRpZiAoc2V0Lmhhcyh0KSkge1xuXHRcdFx0XHRcdFx0c2V0LmRlbGV0ZSh0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2V0LmFkZCh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodGhpcy5jb21tYW5kID09PSBcInNldC1zZXRcIikge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHQgb2YgdG9nZ2xlKSB7XG5cdFx0XHRcdFx0c2V0LmFkZCh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNvbW1hbmQgPT09IFwic2V0LXJlbW92ZVwiKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdCBvZiB0b2dnbGUpIHtcblx0XHRcdFx0XHRzZXQuZGVsZXRlKHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gQXJyYXkuZnJvbShzZXQpLmpvaW4oZGVsaW1pdGVyKTtcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gY29tbWFuZCAke3RoaXMuY29tbWFuZH1gKTtcblx0fVxufVxuXG4vKipcbiAqIGNvbnZlcnRzIHNwZWNpYWwgc3RyaW5ncyB0byB0aGVpciB2YWx1ZXNcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gaW5wdXRcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybiB7dW5kZWZpbmVkfCp8bnVsbHxzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTcGVjaWFsU3RyaW5ncyhpbnB1dCwgdmFsdWUpIHtcblx0c3dpdGNoIChpbnB1dCkge1xuXHRcdGNhc2UgXCJ2YWx1ZVwiOlxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdGNhc2UgXCJcXFxcdmFsdWVcIjpcblx0XHRcdHJldHVybiBcInZhbHVlXCI7XG5cdFx0Y2FzZSBcIlxcXFx1bmRlZmluZWRcIjpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y2FzZSBcIlxcXFxudWxsXCI6XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGlucHV0O1xuXHR9XG59XG5cbi8qKlxuICogY2hlY2tzIGlmIGEgdmFsdWUgaXMgdHJ1ZSBvciBub3RcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZXZhbHVhdGVDb25kaXRpb24odmFsdWUpIHtcblx0Y29uc3QgbG93ZXJWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcblxuXHRyZXR1cm4gKFxuXHRcdCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHR2YWx1ZSAhPT0gbnVsbCAmJlxuXHRcdFx0dmFsdWUgIT09IFwiXCIgJiZcblx0XHRcdGxvd2VyVmFsdWUgIT09IFwib2ZmXCIgJiZcblx0XHRcdGxvd2VyVmFsdWUgIT09IFwiZmFsc2VcIiAmJlxuXHRcdFx0dmFsdWUgIT09IGZhbHNlKSB8fFxuXHRcdGxvd2VyVmFsdWUgPT09IFwib25cIiB8fFxuXHRcdGxvd2VyVmFsdWUgPT09IFwidHJ1ZVwiIHx8XG5cdFx0dmFsdWUgPT09IHRydWVcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IFRyYW5zZm9ybWVyIH0gZnJvbSBcIi4vdHJhbnNmb3JtZXIubWpzXCI7XG5cbmV4cG9ydCB7IFBpcGUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgREVMSU1JVEVSID0gXCJ8XCI7XG5cbi8qKlxuICogVGhlIHBpcGUgY2xhc3MgbWFrZXMgaXQgcG9zc2libGUgdG8gY29tYmluZSBzZXZlcmFsIHByb2Nlc3Npbmcgc3RlcHMuXG4gKlxuICogQSBwaXBlIGNvbnNpc3RzIG9mIGNvbW1hbmRzIHdob3NlIGlucHV0IGFuZCBvdXRwdXQgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBwaXBlIHN5bWJvbCBgfGAuXG4gKlxuICogV2l0aCB0aGUgUGlwZSwgcHJvY2Vzc2luZyBzdGVwcyBjYW4gYmUgY29tYmluZWQuIEhlcmUsIHRoZSB2YWx1ZSBvZiBhbiBvYmplY3QgaXMgYWNjZXNzZWQgdmlhIHRoZSBwYXRoZmluZGVyIChwYXRoIGNvbW1hbmQpLlxuICogdGhlIHdvcmQgaXMgdGhlbiBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlIGxldHRlcnMgYW5kIGEgcHJlZml4IEhlbGxvIGlzIGFkZGVkLiB0aGUgdHdvIGJhY2tzbGFzaCBzYWZlIHRoZSBzcGFjZSBjaGFyLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvcGlwZS9leGFtcGxlLTEvXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgcGlwZSBjbGFzcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb21iaW5lIHNldmVyYWwgcHJvY2Vzc2luZyBzdGVwcy5cbiAqL1xuY2xhc3MgUGlwZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBpcGUgYSBwaXBlIGNvbnNpc3RzIG9mIGNvbW1hbmRzIHdob3NlIGlucHV0IGFuZCBvdXRwdXQgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBwaXBlIHN5bWJvbCBgfGAuXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn1cblx0ICovXG5cdGNvbnN0cnVjdG9yKHBpcGUpIHtcblx0XHRzdXBlcigpO1xuXHRcdHZhbGlkYXRlU3RyaW5nKHBpcGUpO1xuXG5cdFx0dGhpcy5waXBlID0gcGlwZS5zcGxpdChERUxJTUlURVIpLm1hcCgodikgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBUcmFuc2Zvcm1lcih2KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuXHQgKiBAcmV0dXJuIHtUcmFuc2Zvcm1lcn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKi9cblx0c2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpIHtcblx0XHRmb3IgKGNvbnN0IFssIHRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucGlwZSkpIHtcblx0XHRcdHQuc2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJ1biBhIHBpcGVcblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0cnVuKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRoaXMucGlwZS5yZWR1Y2UoKGFjY3VtdWxhdG9yLCB0cmFuc2Zvcm1lciwgY3VycmVudEluZGV4LCBhcnJheSkgPT4ge1xuXHRcdFx0cmV0dXJuIHRyYW5zZm9ybWVyLnJ1bihhY2N1bXVsYXRvcik7XG5cdFx0fSwgdmFsdWUpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgUGlwZSB9IGZyb20gXCIuLi9kYXRhL3BpcGUubWpzXCI7XG5cbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgRm9ybWF0dGVyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVybmFsT2JqZWN0U3ltYm9sID0gU3ltYm9sKFwiaW50ZXJuYWxPYmplY3RcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHdhdGNoZG9nU3ltYm9sID0gU3ltYm9sKFwid2F0Y2hkb2dcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG1hcmtlck9wZW5JbmRleFN5bWJvbCA9IFN5bWJvbChcIm1hcmtlck9wZW5JbmRleFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbWFya2VyQ2xvc2VJbmRleFN5bWJvbCA9IFN5bWJvbChcIm1hcmtlcmNsb3NlSW5kZXhcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHdvcmtpbmdEYXRhU3ltYm9sID0gU3ltYm9sKFwid29ya2luZ0RhdGFcIik7XG5cbi8qKlxuICogTWVzc2FnZXMgY2FuIGJlIGZvcm1hdHRlZCB3aXRoIHRoZSBmb3JtYXR0ZXIuIFRvIGRvIHRoaXMsIGFuIG9iamVjdCB3aXRoIHRoZSB2YWx1ZXMgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIGZvcm1hdHRlci4gVGhlIG1lc3NhZ2UgY2FuIHRoZW4gY29udGFpbiBwbGFjZWhvbGRlcnMuXG4gKlxuICogTG9vayBhdCB0aGUgZXhhbXBsZSBiZWxvdy4gVGhlIHBsYWNlaG9sZGVycyB1c2UgdGhlIGxvZ2ljIG9mIFBpcGUuXG4gKlxuICogIyMgTWFya2VyIGluIG1hcmtlclxuICpcbiAqIE1hcmtlcnMgY2FuIGJlIG5lc3RlZC4gSGVyZSwgdGhlIGlubmVyIG1hcmtlciBpcyByZXNvbHZlZCBmaXJzdCBgJHtzdWJrZXl9IFx1MjFBNiAxID0gJHtteWtleTJ9YCBhbmQgdGhlbiB0aGUgb3V0ZXIgbWFya2VyIGAke215a2V5Mn1gLlxuICpcbiAqIGBgYFxuICogY29uc3QgdGV4dCA9ICcke215a2V5JHtzdWJrZXl9fSc7XG4gKiBsZXQgb2JqID0ge1xuICogIG15a2V5MjogXCIxXCIsXG4gKiAgc3Via2V5OiBcIjJcIlxuICogfTtcbiAqXG4gKiBuZXcgRm9ybWF0dGVyKG9iaikuZm9ybWF0KHRleHQpO1xuICogLy8gXHUyMUE2IDFcbiAqIGBgYFxuICpcbiAqICMjIENhbGxiYWNrc1xuICpcbiAqIFRoZSB2YWx1ZXMgaW4gYSBmb3JtYXR0ZXIgY2FuIGJlIGFkanVzdGVkIHZpYSB0aGUgY29tbWFuZHMgb2YgdGhlIGBUcmFuc2Zvcm1lcmAgb3IgdGhlYFBpcGVgLlxuICogVGhlcmUgaXMgYWxzbyB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGNhbGxiYWNrcy5cbiAqXG4gKiBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHt4OiAnMSd9LCB7XG4gKiAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAqICAgICAgICAgICAgICAgICAgICBxdW90ZTogKHZhbHVlKSA9PiB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXCInICsgdmFsdWUgKyAnXCInXG4gKiAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICB9KTtcbiAqXG4gKiBmb3JtYXR0ZXIuZm9ybWF0KCcke3ggfCBjYWxsOnF1b3RlfScpKVxuICogLy8gXHUyMUE2IFwiMVwiXG4gKlxuICogIyMgTWFya2VyIHdpdGggcGFyYW1ldGVyXG4gKlxuICogQSBzdHJpbmcgY2FuIGFsc28gYnJpbmcgaXRzIG93biB2YWx1ZXMuIFRoZXNlIG11c3QgdGhlbiBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUga2V5IGJ5IGEgc2VwYXJhdG9yIGA6OmAuXG4gKiBUaGUgdmFsdWVzIHRoZW1zZWx2ZXMgbXVzdCBiZSBzcGVjaWZpZWQgaW4ga2V5L3ZhbHVlIHBhaXJzLiBUaGUga2V5IG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlIHZhbHVlIGJ5IGEgc2VwYXJhdG9yIGA9YC5cbiAqXG4gKiBXaGVuIHVzaW5nIGEgcGlwZSwgeW91IG11c3QgcGF5IGF0dGVudGlvbiB0byB0aGUgc2VwYXJhdG9ycy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90ZXh0L2Zvcm1hdHRlci5tanMnO1xuICpcbiAqIG5ldyBGb3JtYXR0ZXIoe1xuICogICAgICAgYToge1xuICogICAgICAgICAgIGI6IHtcbiAqICAgICAgICAgICAgICAgYzogXCJIZWxsb1wiXG4gKiAgICAgICAgICAgfSxcbiAqICAgICAgICAgICBkOiBcIndvcmxkXCIsXG4gKiAgICAgICB9XG4gKiAgIH0pLmZvcm1hdChcIiR7YS5iLmN9ICR7YS5kIHwgdWNmaXJzdH0hXCIpOyAvLyB3aXRoIHBpcGVcbiAqXG4gKiAvLyBcdTIxQTYgSGVsbG8gV29ybGQhXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBGb3JtYXR0ZXIgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBtYXJrZXJzIGFyZSBgJHtgIGFuZCBgfWBcblx0ICpcblx0ICogQHBhcmFtIG9iamVjdFxuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0LCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cdFx0dGhpc1tpbnRlcm5hbE9iamVjdFN5bWJvbF0gPSBvYmplY3QgfHwge307XG5cdFx0dGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdID0gMDtcblx0XHR0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdID0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gbWFya2VyXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IG1hcmtlci5vcGVuPVtcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IG1hcmtlci5jbG9zZT1bXCIke1wiXVxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gcGFyYW1ldGVyXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuZGVsaW1pdGVyPVwiOjpcIlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcGFyYW1ldGVyLmFzc2lnbm1lbnQ9XCI9XCJcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGNhbGxiYWNrcz17fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRtYXJrZXI6IHtcblx0XHRcdFx0b3BlbjogW1wiJHtcIl0sXG5cdFx0XHRcdGNsb3NlOiBbXCJ9XCJdLFxuXHRcdFx0fSxcblx0XHRcdHBhcmFtZXRlcjoge1xuXHRcdFx0XHRkZWxpbWl0ZXI6IFwiOjpcIixcblx0XHRcdFx0YXNzaWdubWVudDogXCI9XCIsXG5cdFx0XHR9LFxuXHRcdFx0Y2FsbGJhY2tzOiB7fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbmV3IFBhcmFtZXRlciBDaGFyYWN0ZXJcblx0ICpcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBjaGFycyBhcmUgYDo6YCBhbmQgYD1gXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBmb3JtYXR0ZXIuc2V0UGFyYW1ldGVyQ2hhcnMoJyMnKTtcblx0ICogZm9ybWF0dGVyLnNldFBhcmFtZXRlckNoYXJzKCdbJywnXScpO1xuXHQgKiBmb3JtYXR0ZXIuc2V0UGFyYW1ldGVyQ2hhcnMoJ2kxOG57JywnfScpO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGRlbGltaXRlclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gYXNzaWdubWVudFxuXHQgKiBAcmV0dXJuIHtGb3JtYXR0ZXJ9XG5cdCAqIEBzaW5jZSAxLjI0LjBcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICovXG5cdHNldFBhcmFtZXRlckNoYXJzKGRlbGltaXRlciwgYXNzaWdubWVudCkge1xuXHRcdGlmIChkZWxpbWl0ZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJwYXJhbWV0ZXJcIl1bXCJkZWxpbWl0ZXJcIl0gPVxuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyhkZWxpbWl0ZXIpO1xuXHRcdH1cblxuXHRcdGlmIChhc3NpZ25tZW50ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicGFyYW1ldGVyXCJdW1wiYXNzaWdubWVudFwiXSA9XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKGFzc2lnbm1lbnQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBuZXcgTWFya2VyXG5cdCAqXG5cdCAqIERlZmF1bHQgdmFsdWVzIGZvciB0aGUgbWFya2VycyBhcmUgYCR7YCBhbmQgYH1gXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBmb3JtYXR0ZXIuc2V0TWFya2VyKCcjJyk7IC8vIG9wZW4gYW5kIGNsb3NlIGFyZSBib3RoICNcblx0ICogZm9ybWF0dGVyLnNldE1hcmtlcignWycsJ10nKTtcblx0ICogZm9ybWF0dGVyLnNldE1hcmtlcignaTE4bnsnLCd9Jyk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ30gb3BlblxuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3x1bmRlZmluZWR9IGNsb3NlXG5cdCAqIEByZXR1cm4ge0Zvcm1hdHRlcn1cblx0ICogQHNpbmNlIDEuMTIuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c2V0TWFya2VyKG9wZW4sIGNsb3NlKSB7XG5cdFx0aWYgKGNsb3NlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNsb3NlID0gb3Blbjtcblx0XHR9XG5cblx0XHRpZiAoaXNTdHJpbmcob3BlbikpIG9wZW4gPSBbb3Blbl07XG5cdFx0aWYgKGlzU3RyaW5nKGNsb3NlKSkgY2xvc2UgPSBbY2xvc2VdO1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdID0gdmFsaWRhdGVBcnJheShvcGVuKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcImNsb3NlXCJdID0gdmFsaWRhdGVBcnJheShjbG9zZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHRcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdG9vIGRlZXAgbmVzdGluZ1xuXHQgKi9cblx0Zm9ybWF0KHRleHQpIHtcblx0XHR0aGlzW3dhdGNoZG9nU3ltYm9sXSA9IDA7XG5cdFx0dGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdID0gMDtcblx0XHR0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdID0gMDtcblx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSA9IHt9O1xuXHRcdHJldHVybiBmb3JtYXQuY2FsbCh0aGlzLCB0ZXh0KTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdCh0ZXh0KSB7XG5cdHRoaXNbd2F0Y2hkb2dTeW1ib2xdKys7XG5cdGlmICh0aGlzW3dhdGNoZG9nU3ltYm9sXSA+IDIwKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidG9vIGRlZXAgbmVzdGluZ1wiKTtcblx0fVxuXG5cdGNvbnN0IG9wZW5NYXJrZXIgPVxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wib3BlblwiXT8uW3RoaXNbbWFya2VyT3BlbkluZGV4U3ltYm9sXV07XG5cdGNvbnN0IGNsb3NlTWFya2VyID1cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcImNsb3NlXCJdPy5bdGhpc1ttYXJrZXJDbG9zZUluZGV4U3ltYm9sXV07XG5cblx0Ly8gY29udGFpbnMgbm8gcGxhY2Vob2xkZXJzXG5cdGlmICh0ZXh0LmluZGV4T2Yob3Blbk1hcmtlcikgPT09IC0xIHx8IHRleHQuaW5kZXhPZihjbG9zZU1hcmtlcikgPT09IC0xKSB7XG5cdFx0cmV0dXJuIHRleHQ7XG5cdH1cblxuXHRsZXQgcmVzdWx0ID0gdG9rZW5pemUuY2FsbChcblx0XHR0aGlzLFxuXHRcdHZhbGlkYXRlU3RyaW5nKHRleHQpLFxuXHRcdG9wZW5NYXJrZXIsXG5cdFx0Y2xvc2VNYXJrZXIsXG5cdCk7XG5cblx0aWYgKFxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wib3BlblwiXT8uW3RoaXNbbWFya2VyT3BlbkluZGV4U3ltYm9sXSArIDFdXG5cdCkge1xuXHRcdHRoaXNbbWFya2VyT3BlbkluZGV4U3ltYm9sXSsrO1xuXHR9XG5cblx0aWYgKFxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wiY2xvc2VcIl0/Llt0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdICsgMV1cblx0KSB7XG5cdFx0dGhpc1ttYXJrZXJDbG9zZUluZGV4U3ltYm9sXSsrO1xuXHR9XG5cblx0cmVzdWx0ID0gZm9ybWF0LmNhbGwodGhpcywgcmVzdWx0KTtcblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEyLjBcbiAqIEBwYXJhbSB0ZXh0XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplKHRleHQsIG9wZW5NYXJrZXIsIGNsb3NlTWFya2VyKSB7XG5cdGNvbnN0IGZvcm1hdHRlZCA9IFtdO1xuXG5cdGNvbnN0IHBhcmFtZXRlckFzc2lnbm1lbnQgPSB0aGlzW2ludGVybmFsU3ltYm9sXVtcInBhcmFtZXRlclwiXVtcImFzc2lnbm1lbnRcIl07XG5cdGNvbnN0IHBhcmFtZXRlckRlbGltaXRlciA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicGFyYW1ldGVyXCJdW1wiZGVsaW1pdGVyXCJdO1xuXHRjb25zdCBjYWxsYmFja3MgPSB0aGlzW2ludGVybmFsU3ltYm9sXVtcImNhbGxiYWNrc1wiXTtcblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSB0ZXh0LmluZGV4T2Yob3Blbk1hcmtlcik7XG5cdFx0Ly8gbm8gbWFya2VyXG5cdFx0aWYgKHN0YXJ0SW5kZXggPT09IC0xKSB7XG5cdFx0XHRmb3JtYXR0ZWQucHVzaCh0ZXh0KTtcblx0XHRcdGJyZWFrO1xuXHRcdH0gZWxzZSBpZiAoc3RhcnRJbmRleCA+IDApIHtcblx0XHRcdGZvcm1hdHRlZC5wdXNoKHRleHQuc3Vic3RyaW5nKDAsIHN0YXJ0SW5kZXgpKTtcblx0XHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZyhzdGFydEluZGV4KTtcblx0XHR9XG5cblx0XHRsZXQgZW5kSW5kZXggPSB0ZXh0LnN1YnN0cmluZyhvcGVuTWFya2VyLmxlbmd0aCkuaW5kZXhPZihjbG9zZU1hcmtlcik7XG5cdFx0aWYgKGVuZEluZGV4ICE9PSAtMSkgZW5kSW5kZXggKz0gb3Blbk1hcmtlci5sZW5ndGg7XG5cdFx0bGV0IGluc2lkZVN0YXJ0SW5kZXggPSB0ZXh0XG5cdFx0XHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKVxuXHRcdFx0LmluZGV4T2Yob3Blbk1hcmtlcik7XG5cdFx0aWYgKGluc2lkZVN0YXJ0SW5kZXggIT09IC0xKSB7XG5cdFx0XHRpbnNpZGVTdGFydEluZGV4ICs9IG9wZW5NYXJrZXIubGVuZ3RoO1xuXHRcdFx0aWYgKGluc2lkZVN0YXJ0SW5kZXggPCBlbmRJbmRleCkge1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSB0b2tlbml6ZS5jYWxsKFxuXHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0dGV4dC5zdWJzdHJpbmcoaW5zaWRlU3RhcnRJbmRleCksXG5cdFx0XHRcdFx0b3Blbk1hcmtlcixcblx0XHRcdFx0XHRjbG9zZU1hcmtlcixcblx0XHRcdFx0KTtcblx0XHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGluc2lkZVN0YXJ0SW5kZXgpICsgcmVzdWx0O1xuXHRcdFx0XHRlbmRJbmRleCA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKS5pbmRleE9mKGNsb3NlTWFya2VyKTtcblx0XHRcdFx0aWYgKGVuZEluZGV4ICE9PSAtMSkgZW5kSW5kZXggKz0gb3Blbk1hcmtlci5sZW5ndGg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGVuZEluZGV4ID09PSAtMSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic3ludGF4IGVycm9yIGluIGZvcm1hdHRlciB0ZW1wbGF0ZVwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBrZXkgPSB0ZXh0LnN1YnN0cmluZyhvcGVuTWFya2VyLmxlbmd0aCwgZW5kSW5kZXgpO1xuXHRcdGNvbnN0IHBhcnRzID0ga2V5LnNwbGl0KHBhcmFtZXRlckRlbGltaXRlcik7XG5cdFx0Y29uc3QgY3VycmVudFBpcGUgPSBwYXJ0cy5zaGlmdCgpO1xuXG5cdFx0dGhpc1t3b3JraW5nRGF0YVN5bWJvbF0gPSBleHRlbmQoXG5cdFx0XHR7fSxcblx0XHRcdHRoaXNbaW50ZXJuYWxPYmplY3RTeW1ib2xdLFxuXHRcdFx0dGhpc1t3b3JraW5nRGF0YVN5bWJvbF0sXG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3Qga3Ygb2YgcGFydHMpIHtcblx0XHRcdGNvbnN0IFtrLCB2XSA9IGt2LnNwbGl0KHBhcmFtZXRlckFzc2lnbm1lbnQpO1xuXHRcdFx0dGhpc1t3b3JraW5nRGF0YVN5bWJvbF1ba10gPSB2O1xuXHRcdH1cblxuXHRcdGNvbnN0IHQxID0ga2V5LnNwbGl0KFwifFwiKS5zaGlmdCgpLnRyaW0oKTsgLy8gcGlwZSBzeW1ib2xcblx0XHRjb25zdCB0MiA9IHQxLnNwbGl0KFwiOjpcIikuc2hpZnQoKS50cmltKCk7IC8vIGtleSB2YWx1ZSBkZWxpbWl0ZXJcblx0XHRjb25zdCB0MyA9IHQyLnNwbGl0KFwiLlwiKS5zaGlmdCgpLnRyaW0oKTsgLy8gcGF0aCBkZWxpbWl0ZXJcblx0XHRjb25zdCBwcmVmaXggPSB0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXT8uW3QzXSA/IFwicGF0aDpcIiA6IFwic3RhdGljOlwiO1xuXG5cdFx0bGV0IGNvbW1hbmQgPSBcIlwiO1xuXHRcdGlmIChcblx0XHRcdHByZWZpeCAmJlxuXHRcdFx0a2V5LmluZGV4T2YocHJlZml4KSAhPT0gMCAmJlxuXHRcdFx0a2V5LmluZGV4T2YoXCJwYXRoOlwiKSAhPT0gMCAmJlxuXHRcdFx0a2V5LmluZGV4T2YoXCJzdGF0aWM6XCIpICE9PSAwXG5cdFx0KSB7XG5cdFx0XHRjb21tYW5kID0gcHJlZml4O1xuXHRcdH1cblxuXHRcdGNvbW1hbmQgKz0gY3VycmVudFBpcGU7XG5cblx0XHRjb25zdCBwaXBlID0gbmV3IFBpcGUoY29tbWFuZCk7XG5cblx0XHRpZiAoaXNPYmplY3QoY2FsbGJhY2tzKSkge1xuXHRcdFx0Zm9yIChjb25zdCBbbmFtZSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGNhbGxiYWNrcykpIHtcblx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjayk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9ybWF0dGVkLnB1c2godmFsaWRhdGVTdHJpbmcocGlwZS5ydW4odGhpc1t3b3JraW5nRGF0YVN5bWJvbF0pKSk7XG5cblx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoZW5kSW5kZXggKyBjbG9zZU1hcmtlci5sZW5ndGgpO1xuXHR9XG5cblx0cmV0dXJuIGZvcm1hdHRlZC5qb2luKFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQXJyYXksIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBNZWRpYVR5cGUsIHBhcnNlTWVkaWFUeXBlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVybmFsID0gU3ltYm9sKFwiaW50ZXJuYWxcIik7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGFyYW1ldGVyXG4gKiBAcHJvcGVydHkge3N0cmluZ30ga2V5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWVcbiAqL1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIG9iamVjdCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5NZWRpYVR5cGUoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIE1lZGlhVHlwZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN1YnR5cGVcblx0ICogQHBhcmFtIHtNb25zdGVyLlR5cGVzLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJcblx0ICovXG5cdGNvbnN0cnVjdG9yKHR5cGUsIHN1YnR5cGUsIHBhcmFtZXRlcikge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW2ludGVybmFsXSA9IHtcblx0XHRcdHR5cGU6IHZhbGlkYXRlU3RyaW5nKHR5cGUpLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRzdWJ0eXBlOiB2YWxpZGF0ZVN0cmluZyhzdWJ0eXBlKS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0cGFyYW1ldGVyOiBbXSxcblx0XHR9O1xuXG5cdFx0aWYgKHBhcmFtZXRlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsXVtcInBhcmFtZXRlclwiXSA9IHZhbGlkYXRlQXJyYXkocGFyYW1ldGVyKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL21lZGlhLXR5cGVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7U3RyaW5nfVxuXHQgKi9cblx0Z2V0IHR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxdLnR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7U3RyaW5nfVxuXHQgKi9cblx0Z2V0IHN1YnR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxdLnN1YnR5cGU7XG5cdH1cblxuXHQvLyAvKipcblx0Ly8gICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5QYXJhbWV0ZXJbXX1cblx0Ly8gICovXG5cdC8vIGdldCBwYXJhbWV0ZXIoKSB7XG5cdC8vIFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxdLnBhcmFtZXRlcjtcblx0Ly8gfVxuXG5cdC8qKlxuXHQgKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNYXB9XG5cdCAqL1xuXHRnZXQgcGFyYW1ldGVyKCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxdW1wicGFyYW1ldGVyXCJdLmZvckVhY2goKHApID0+IHtcblx0XHRcdGxldCB2YWx1ZSA9IHAudmFsdWU7XG5cblx0XHRcdC8vIGludGVybmFsbHkgc3BlY2lhbCB2YWx1ZXMgYXJlIHBhcnRseSBzdG9yZWQgd2l0aCBxdW90ZXMsIHRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGVtLlxuXHRcdFx0aWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ1wiJykgJiYgdmFsdWUuZW5kc1dpdGgoJ1wiJykpIHtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3VsdC5zZXQocC5rZXksIHZhbHVlKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0Y29uc3QgcGFyYW1ldGVyID0gW107XG5cdFx0Zm9yIChjb25zdCBhIG9mIHRoaXNbaW50ZXJuYWxdLnBhcmFtZXRlcikge1xuXHRcdFx0cGFyYW1ldGVyLnB1c2goYCR7YS5rZXl9PSR7YS52YWx1ZX1gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7dGhpc1tpbnRlcm5hbF0udHlwZX0vJHt0aGlzW2ludGVybmFsXS5zdWJ0eXBlfSR7XG5cdFx0XHRwYXJhbWV0ZXIubGVuZ3RoID4gMCA/IGA7JHtwYXJhbWV0ZXIuam9pbihcIjtcIil9YCA6IFwiXCJcblx0XHR9YDtcblx0fVxufVxuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5wYXJzZU1lZGlhVHlwZSgpYC5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtNb25zdGVyfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9tb25zdGVyLm1qcyc7XG4gKiBjb25zb2xlLmxvZyhNb25zdGVyLlR5cGVzLnBhcnNlTWVkaWFUeXBlKCkpXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWxzbyBpbnRlZ3JhdGUgdGhpcyBmdW5jdGlvbiBpbmRpdmlkdWFsbHkuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7cGFyc2VNZWRpYVR5cGV9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL2RhdGF1cmwubWpzJztcbiAqIGNvbnNvbGUubG9nKHBhcnNlTWVkaWFUeXBlKCkpXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIFNwZWNpZmljYXRpb246XG4gKlxuICogYGBgXG4gKiBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gKiBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAqIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAqIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVkaWF0eXBlXG4gKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLk1lZGlhVHlwZX1cbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMDQ1I3NlY3Rpb24tNS4xXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHRoZSBtaW1ldHlwZSBjYW4gbm90IGJlIHBhcnNlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSBibGFuayB2YWx1ZSBpcyBub3QgYWxsb3dlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSBtYWxmb3JtZWQgZGF0YSB1cmxcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZWRpYVR5cGUobWVkaWF0eXBlKSB7XG5cdGNvbnN0IHJlZ2V4ID1cblx0XHQvKD88dHlwZT5bQS1aYS16XSt8XFwqKVxcLyg/PHN1YnR5cGU+KFthLXpBLVowLTkuXFwrX1xcLV0rKXxcXCp8KSg/PHBhcmFtZXRlcj5cXHMqO1xccyooW2EtekEtWjAtOV0rKVxccyooPVxccyooXCI/W0EtWmEtejAtOV9cXC1dK1wiPykpPykqL2c7XG5cdGNvbnN0IHJlc3VsdCA9IHJlZ2V4LmV4ZWModmFsaWRhdGVTdHJpbmcobWVkaWF0eXBlKSk7XG5cblx0Y29uc3QgZ3JvdXBzID0gcmVzdWx0Py5bXCJncm91cHNcIl07XG5cdGlmIChncm91cHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgbWltZXR5cGUgY2FuIG5vdCBiZSBwYXJzZWRcIik7XG5cdH1cblxuXHRjb25zdCB0eXBlID0gZ3JvdXBzPy5bXCJ0eXBlXCJdO1xuXHRjb25zdCBzdWJ0eXBlID0gZ3JvdXBzPy5bXCJzdWJ0eXBlXCJdO1xuXHRjb25zdCBwYXJhbWV0ZXIgPSBncm91cHM/LltcInBhcmFtZXRlclwiXTtcblxuXHRpZiAoc3VidHlwZSA9PT0gXCJcIiB8fCB0eXBlID09PSBcIlwiKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcImJsYW5rIHZhbHVlIGlzIG5vdCBhbGxvd2VkXCIpO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBNZWRpYVR5cGUodHlwZSwgc3VidHlwZSwgcGFyc2VQYXJhbWV0ZXIocGFyYW1ldGVyKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTguMFxuICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtZXRlclxuICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5QYXJhbWV0ZXJbXXx1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuXHRpZiAoIWlzU3RyaW5nKHBhcmFtZXRlcikpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0cGFyYW1ldGVyLnNwbGl0KFwiO1wiKS5mb3JFYWNoKChlbnRyeSkgPT4ge1xuXHRcdGVudHJ5ID0gZW50cnkudHJpbSgpO1xuXHRcdGlmIChlbnRyeSA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGt2ID0gZW50cnkuc3BsaXQoXCI9XCIpO1xuXG5cdFx0Y29uc3Qga2V5ID0gdmFsaWRhdGVTdHJpbmcoa3Y/LlswXSkudHJpbSgpO1xuXHRcdGNvbnN0IHZhbHVlID0gdmFsaWRhdGVTdHJpbmcoa3Y/LlsxXSkudHJpbSgpO1xuXG5cdFx0Ly8gaWYgdmFsdWVzIGFyZSBxdW90ZWQsIHRoZXkgcmVtYWluIHNvIGludGVybmFsbHlcblx0XHRyZXN1bHQucHVzaCh7XG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHR9KTtcblx0fSk7XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBNZWRpYVR5cGUsIHBhcnNlTWVkaWFUeXBlIH0gZnJvbSBcIi4vbWVkaWF0eXBlLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVCb29sZWFuLFxuXHR2YWxpZGF0ZUluc3RhbmNlLFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBEYXRhVXJsLCBwYXJzZURhdGFVUkwgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWwgPSBTeW1ib2woXCJpbnRlcm5hbFwiKTtcblxuLyoqXG4gKiBZb3UgY2FuIGNyZWF0ZSBhbiBvYmplY3QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgbmV3IERhdGFVcmwoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvRGF0YV9VUklzXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjM5N1xuICovXG5jbGFzcyBEYXRhVXJsIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudFxuXHQgKiBAcGFyYW0ge1N0cmluZ3xNZWRpYVR5cGV9IG1lZGlhdHlwZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJhc2U2ND10cnVlXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihjb250ZW50LCBtZWRpYXR5cGUsIGJhc2U2NCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNTdHJpbmcobWVkaWF0eXBlKSkge1xuXHRcdFx0bWVkaWF0eXBlID0gcGFyc2VNZWRpYVR5cGUobWVkaWF0eXBlKTtcblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsXSA9IHtcblx0XHRcdGNvbnRlbnQ6IHZhbGlkYXRlU3RyaW5nKGNvbnRlbnQpLFxuXHRcdFx0bWVkaWF0eXBlOiB2YWxpZGF0ZUluc3RhbmNlKG1lZGlhdHlwZSwgTWVkaWFUeXBlKSxcblx0XHRcdGJhc2U2NDogdmFsaWRhdGVCb29sZWFuKGJhc2U2NCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGJhc2U2NCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvZGF0YS11cmxcIik7XG5cdH1cblxuXHRnZXQgY29udGVudCgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0uYmFzZTY0XG5cdFx0XHQ/IGF0b2IodGhpc1tpbnRlcm5hbF0uY29udGVudClcblx0XHRcdDogdGhpc1tpbnRlcm5hbF0uY29udGVudDtcblx0fVxuXG5cdGdldCBtZWRpYXR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxdLm1lZGlhdHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMzk3XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRsZXQgY29udGVudCA9IHRoaXNbaW50ZXJuYWxdLmNvbnRlbnQ7XG5cblx0XHRpZiAodGhpc1tpbnRlcm5hbF0uYmFzZTY0ID09PSB0cnVlKSB7XG5cdFx0XHRjb250ZW50ID0gYDtiYXNlNjQsJHtjb250ZW50fWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRlbnQgPSBgLCR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnQpfWA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGBkYXRhOiR7dGhpc1tpbnRlcm5hbF0ubWVkaWF0eXBlLnRvU3RyaW5nKCl9JHtjb250ZW50fWA7XG5cdH1cbn1cblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYHBhcnNlRGF0YVVSTCgpYC5cbiAqXG4gKiBTcGVjaWZpY2F0aW9uOlxuICpcbiAqIGBgYFxuICogZGF0YXVybCAgICA6PSBcImRhdGE6XCIgWyBtZWRpYXR5cGUgXSBbIFwiO2Jhc2U2NFwiIF0gXCIsXCIgZGF0YVxuICogbWVkaWF0eXBlICA6PSBbIHR5cGUgXCIvXCIgc3VidHlwZSBdICooIFwiO1wiIHBhcmFtZXRlciApXG4gKiBkYXRhICAgICAgIDo9ICp1cmxjaGFyXG4gKiBwYXJhbWV0ZXIgIDo9IGF0dHJpYnV0ZSBcIj1cIiB2YWx1ZVxuICogYGBgXG4gKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0Jhc2ljc19vZl9IVFRQL0RhdGFfVVJJc1xuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gaW5jb3JyZWN0IG9yIG1pc3NpbmcgZGF0YSBwcm90b2NvbFxuICogQHRocm93cyB7VHlwZUVycm9yfSBtYWxmb3JtZWQgZGF0YSB1cmxcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhdXJsXG4gKiBAcmV0dXJuIHtEYXRhVXJsfVxuICovXG5mdW5jdGlvbiBwYXJzZURhdGFVUkwoZGF0YXVybCkge1xuXHR2YWxpZGF0ZVN0cmluZyhkYXRhdXJsKTtcblxuXHRkYXRhdXJsID0gZGF0YXVybC50cmltKCk7XG5cblx0aWYgKGRhdGF1cmwuc3Vic3RyaW5nKDAsIDUpICE9PSBcImRhdGE6XCIpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW5jb3JyZWN0IG9yIG1pc3NpbmcgZGF0YSBwcm90b2NvbFwiKTtcblx0fVxuXG5cdGRhdGF1cmwgPSBkYXRhdXJsLnN1YnN0cmluZyg1KTtcblxuXHRjb25zdCBwID0gZGF0YXVybC5pbmRleE9mKFwiLFwiKTtcblx0aWYgKHAgPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcIm1hbGZvcm1lZCBkYXRhIHVybFwiKTtcblx0fVxuXG5cdGxldCBjb250ZW50ID0gZGF0YXVybC5zdWJzdHJpbmcocCArIDEpO1xuXHRjb25zdCBtZWRpYXR5cGVBbmRCYXNlNjQgPSBkYXRhdXJsLnN1YnN0cmluZygwLCBwKS50cmltKCk7XG5cdGxldCBtZWRpYXR5cGUgPSBcInRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSVwiO1xuXHRsZXQgYmFzZTY0RmxhZyA9IGZhbHNlO1xuXG5cdGlmIChtZWRpYXR5cGVBbmRCYXNlNjQgIT09IFwiXCIpIHtcblx0XHRtZWRpYXR5cGUgPSBtZWRpYXR5cGVBbmRCYXNlNjQ7XG5cdFx0aWYgKG1lZGlhdHlwZUFuZEJhc2U2NC5lbmRzV2l0aChcImJhc2U2NFwiKSkge1xuXHRcdFx0Y29uc3QgaSA9IG1lZGlhdHlwZUFuZEJhc2U2NC5sYXN0SW5kZXhPZihcIjtcIik7XG5cdFx0XHRtZWRpYXR5cGUgPSBtZWRpYXR5cGVBbmRCYXNlNjQuc3Vic3RyaW5nKDAsIGkpO1xuXHRcdFx0YmFzZTY0RmxhZyA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRlbnQgPSBkZWNvZGVVUklDb21wb25lbnQoY29udGVudCk7XG5cdFx0fVxuXG5cdFx0bWVkaWF0eXBlID0gcGFyc2VNZWRpYVR5cGUobWVkaWF0eXBlKTtcblx0fSBlbHNlIHtcblx0XHRjb250ZW50ID0gZGVjb2RlVVJJQ29tcG9uZW50KGNvbnRlbnQpO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBEYXRhVXJsKGNvbnRlbnQsIG1lZGlhdHlwZSwgYmFzZTY0RmxhZyk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFF1ZXVlIH07XG5cbi8qKlxuICogQSBxdWV1ZSBpcyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBhcmUgcHJvY2Vzc2VkIG9uZSBhZnRlciBhbm90aGVyIChmaXJzdCBpbiwgZmlyc3Qgb3V0KS5cbiAqXG4gKiBXaXRoIGEgcXVldWUgeW91IGNhbiBhZGQgaXRlbXMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBgUXVldWUuYWRkKClgIGFuZCByZW1vdmUgaXRlbXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0IGBRdWV1ZS5wb3AoKWAuXG4gKlxuICogV2l0aCBgUXVldWUucGVlaygpYCB5b3UgY2FuIGdldCB0aGUgZmlyc3QgaXRlbSB3aXRob3V0IHJlbW92aW5nIGl0IGZyb20gdGhlIGxpc3QuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhlIGluc3RhbmNlIHZpYSBgbmV3IFF1ZXVlKClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAc3VtbWFyeSBBIFF1ZXVlIChGaWZvKVxuICovXG5jbGFzcyBRdWV1ZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5kYXRhID0gW107XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL3F1ZXVlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0VtcHR5KCkge1xuXHRcdHJldHVybiB0aGlzLmRhdGEubGVuZ3RoID09PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlYWQgdGhlIGVsZW1lbnQgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZSB3aXRob3V0IHJlbW92aW5nIGl0LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0cGVlaygpIHtcblx0XHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZGF0YVswXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSBuZXcgZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZS5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICovXG5cdGFkZCh2YWx1ZSkge1xuXHRcdHRoaXMuZGF0YS5wdXNoKHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIGVudHJpZXNcblx0ICpcblx0ICogQHJldHVybiB7UXVldWV9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgdGhlIGVsZW1lbnQgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZVxuXHQgKiBJZiB0aGUgcXVldWUgaXMgZW1wdHksIHJldHVybiB1bmRlZmluZWQuXG5cdCAqXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRwb2xsKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5zaGlmdCgpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgUXVldWUgfSBmcm9tIFwiLi9xdWV1ZS5tanNcIjtcbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0IH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IFVuaXF1ZVF1ZXVlIH07XG5cbi8qKlxuICogQW4gVW5pcXVlUXVldWUgaXMgYSBxdWV1ZSB0aGF0IGNvbnRhaW5zIGl0ZW1zIG9ubHkgb25jZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgcXVldWUgZm9yIHVuaXF1ZSB2YWx1ZXNcbiAqL1xuY2xhc3MgVW5pcXVlUXVldWUgZXh0ZW5kcyBRdWV1ZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHVuaXF1ZTogbmV3IFdlYWtTZXQoKSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIG5ldyBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gdmFsdWVcblx0ICogQHJldHVybiB7UXVldWV9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqL1xuXHRhZGQodmFsdWUpIHtcblx0XHR2YWxpZGF0ZU9iamVjdCh2YWx1ZSk7XG5cblx0XHRpZiAoIXRoaXNbaW50ZXJuYWxTeW1ib2xdLnVuaXF1ZS5oYXModmFsdWUpKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS51bmlxdWUuYWRkKHZhbHVlKTtcblx0XHRcdHN1cGVyLmFkZCh2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCBlbnRyaWVzXG5cdCAqXG5cdCAqIEByZXR1cm4ge1F1ZXVlfVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0c3VwZXIuY2xlYXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS51bmlxdWUgPSBuZXcgV2Vha1NldCgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSB0aGUgZWxlbWVudCBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlXG5cdCAqIElmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgcmV0dXJuIHVuZGVmaW5lZC5cblx0ICpcblx0ICogQHJldHVybiB7b2JqZWN0fVxuXHQgKi9cblx0cG9sbCgpIHtcblx0XHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlID0gdGhpcy5kYXRhLnNoaWZ0KCk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0udW5pcXVlLmRlbGV0ZSh2YWx1ZSk7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgVG9rZW5MaXN0IH0gZnJvbSBcIi4vdG9rZW5saXN0Lm1qc1wiO1xuaW1wb3J0IHsgVW5pcXVlUXVldWUgfSBmcm9tIFwiLi91bmlxdWVxdWV1ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IE9ic2VydmVyIH07XG5cbi8qKlxuICogQW4gb2JzZXJ2ZXIgbWFuYWdlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKlxuICogVGhlIHVwZGF0ZSBtZXRob2QgaXMgY2FsbGVkIHdpdGggdGhlIHN1YmplY3Qgb2JqZWN0IGFzIHRoaXMgcG9pbnRlci4gRm9yIHRoaXMgcmVhc29uXG4gKiB0aGUgY2FsbGJhY2sgc2hvdWxkIG5vdCBiZSBhbiBhcnJvdyBmdW5jdGlvbiwgYmVjYXVzZSBpdCBnZXRzIHRoaXMgcG9pbnRlciBvZiBpdHMgb3duIGNvbnRleHQuXG4gKlxuICogSW5jbHVkZSB0aGlzIGNsYXNzIGluIHlvdXIgcHJvamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgY29kZTpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG4gKiBgYGBcbiAqXG4gKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IuXG4gKlxuICogYGBganNcbiAqIG5ldyBPYnNlcnZlcigoKT0+e1xuICogICAgIC8vIHRoaXMgaXMgbm90IHN1YmplY3RcbiAqIH0pXG4gKlxuICogbmV3IE9ic2VydmVyKGZ1bmN0aW9uKCkge1xuICogICAgIC8vIHRoaXMgaXMgc3ViamVjdFxuICogfSlcbiAqIGBgYFxuICpcbiAqIEFkZGl0aW9uYWwgYXJndW1lbnRzIGNhbiBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLiBUbyBkbyB0aGlzLCBzaW1wbHkgc3BlY2lmeSB0aGVtLlxuICpcbiAqIGBgYGpzXG4gKiBPYnNlcnZlcihmdW5jdGlvbihhLCBiLCBjKSB7XG4gKiAgICAgY29uc29sZS5sb2coYSwgYiwgYyk7IC8vIFx1MjFBNiBcImFcIiwgMiwgdHJ1ZVxuICogfSwgXCJhXCIsIDIsIHRydWUpXG4gKiBgYGBcbiAqXG4gKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gbXVzdCBoYXZlIGFzIG1hbnkgcGFyYW1ldGVycyBhcyBhcmd1bWVudHMgYXJlIGdpdmVuLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKi9cbmNsYXNzIE9ic2VydmVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0geyp9IGFyZ3Ncblx0ICovXG5cdGNvbnN0cnVjdG9yKGNhbGxiYWNrLCAuLi5hcmdzKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwib2JzZXJ2ZXIgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcblx0XHR0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7XG5cdFx0dGhpcy50YWdzID0gbmV3IFRva2VuTGlzdCgpO1xuXHRcdHRoaXMucXVldWUgPSBuZXcgVW5pcXVlUXVldWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvb2JzZXJ2ZXJcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRhZ1xuXHQgKiBAcmV0dXJuIHtPYnNlcnZlcn1cblx0ICovXG5cdGFkZFRhZyh0YWcpIHtcblx0XHR0aGlzLnRhZ3MuYWRkKHRhZyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRhZ1xuXHQgKiBAcmV0dXJuIHtPYnNlcnZlcn1cblx0ICovXG5cdHJlbW92ZVRhZyh0YWcpIHtcblx0XHR0aGlzLnRhZ3MucmVtb3ZlKHRhZyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7QXJyYXl9XG5cdCAqL1xuXHRnZXRUYWdzKCkge1xuXHRcdHJldHVybiB0aGlzLnRhZ3MuZW50cmllcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWdcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGhhc1RhZyh0YWcpIHtcblx0XHRyZXR1cm4gdGhpcy50YWdzLmNvbnRhaW5zKHRhZyk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IHN1YmplY3Rcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHVwZGF0ZShzdWJqZWN0KSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0XHRpZiAoIWlzT2JqZWN0KHN1YmplY3QpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJzdWJqZWN0IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRzZWxmLnF1ZXVlLmFkZChzdWJqZWN0KTtcblxuXHRcdFx0cXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIHRoZSBxdWV1ZSBhbmQgdGhlIGBxdWV1ZU1pY3JvdGFza2AgZW5zdXJlIHRoYXQgYW4gb2JqZWN0IGlzIG5vdFxuXHRcdFx0XHRcdC8vIGluZm9ybWVkIG9mIHRoZSBzYW1lIGNoYW5nZSBtb3JlIHRoYW4gb25jZS5cblx0XHRcdFx0XHRpZiAoc2VsZi5xdWV1ZS5pc0VtcHR5KCkpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBzID0gc2VsZi5xdWV1ZS5wb2xsKCk7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gc2VsZi5jYWxsYmFjay5hcHBseShzLCBzZWxmLmFyZ3VtZW50cyk7XG5cblx0XHRcdFx0XHRpZiAoaXNPYmplY3QocmVzdWx0KSAmJiByZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJlc29sdmUocmVzdWx0KTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4vb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IE9ic2VydmVyTGlzdCB9O1xuXG4vKipcbiAqIFdpdGggdGhlIGhlbHAgb2YgdGhlIE9ic2VydmVyTGlzdCBjbGFzcywgb2JzZXJ2ZXIgY2FuIGJlIG1hbmFnZWQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqL1xuY2xhc3MgT2JzZXJ2ZXJMaXN0IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm9ic2VydmVycyA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge09ic2VydmVyTGlzdH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgT2JzZXJ2ZXJcblx0ICovXG5cdGF0dGFjaChvYnNlcnZlcikge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2Uob2JzZXJ2ZXIsIE9ic2VydmVyKTtcblxuXHRcdHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge09ic2VydmVyTGlzdH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgT2JzZXJ2ZXJcblx0ICovXG5cdGRldGFjaChvYnNlcnZlcikge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2Uob2JzZXJ2ZXIsIE9ic2VydmVyKTtcblxuXHRcdHZhciBpID0gMDtcblx0XHR2YXIgbCA9IHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDtcblx0XHRmb3IgKDsgaSA8IGw7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMub2JzZXJ2ZXJzW2ldID09PSBvYnNlcnZlcikge1xuXHRcdFx0XHR0aGlzLm9ic2VydmVycy5zcGxpY2UoaSwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgT2JzZXJ2ZXJcblx0ICovXG5cdGNvbnRhaW5zKG9ic2VydmVyKSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShvYnNlcnZlciwgT2JzZXJ2ZXIpO1xuXHRcdHZhciBpID0gMDtcblx0XHR2YXIgbCA9IHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDtcblx0XHRmb3IgKDsgaSA8IGw7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMub2JzZXJ2ZXJzW2ldID09PSBvYnNlcnZlcikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBzdWJqZWN0XG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRub3RpZnkoc3ViamVjdCkge1xuXHRcdGNvbnN0IHBvbWlzZXMgPSBbXTtcblxuXHRcdGxldCBpID0gMDtcblx0XHRjb25zdCBsID0gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuXHRcdGZvciAoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRwb21pc2VzLnB1c2godGhpcy5vYnNlcnZlcnNbaV0udXBkYXRlKHN1YmplY3QpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocG9taXNlcyk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0LCBpc1ByaW1pdGl2ZSB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyTGlzdCB9IGZyb20gXCIuL29ic2VydmVybGlzdC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0IH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuZXhwb3J0IHsgUHJveHlPYnNlcnZlciB9O1xuXG4vKipcbiAqIEFuIG9ic2VydmVyIG1hbmFnZXMgYSBjYWxsYmFjayBmdW5jdGlvblxuICpcbiAqIFdpdGggdGhlIFByb3h5T2JzZXJ2ZXIgeW91IGNhbiBhdHRhY2ggb2JzZXJ2ZXIgZm9yIG9ic2VydmF0aW9uLlxuICogV2l0aCBlYWNoIGNoYW5nZSBhdCB0aGUgb2JqZWN0IHRvIGJlIG9ic2VydmVkLCBhbiB1cGRhdGUgdGFrZXMgcGxhY2UuXG4gKlxuICogVGhpcyBhbHNvIGFwcGxpZXMgdG8gbmVzdGVkIG9iamVjdHMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIFByb3h5T2JzZXJ2ZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3Rcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9iamVjdCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnJlYWxTdWJqZWN0ID0gdmFsaWRhdGVPYmplY3Qob2JqZWN0KTtcblx0XHR0aGlzLnN1YmplY3QgPSBuZXcgUHJveHkob2JqZWN0LCBnZXRIYW5kbGVyLmNhbGwodGhpcykpO1xuXG5cdFx0dGhpcy5vYmplY3RNYXAgPSBuZXcgV2Vha01hcCgpO1xuXHRcdHRoaXMub2JqZWN0TWFwLnNldCh0aGlzLnJlYWxTdWJqZWN0LCB0aGlzLnN1YmplY3QpO1xuXG5cdFx0dGhpcy5wcm94eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cdFx0dGhpcy5wcm94eU1hcC5zZXQodGhpcy5zdWJqZWN0LCB0aGlzLnJlYWxTdWJqZWN0KTtcblxuXHRcdHRoaXMub2JzZXJ2ZXJzID0gbmV3IE9ic2VydmVyTGlzdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9wcm94eS1vYnNlcnZlclwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRnZXRTdWJqZWN0KCkge1xuXHRcdHJldHVybiB0aGlzLnN1YmplY3Q7XG5cdH1cblxuXHQvKipcblx0ICogQHNpbmNlIDEuMjQuMFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb2JqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuUHJveHlPYnNlcnZlcn1cblx0ICovXG5cdHNldFN1YmplY3Qob2JqKSB7XG5cdFx0bGV0IGk7XG5cdFx0Y29uc3QgY2xvbmVkT2JqZWN0ID0gY2xvbmUob2JqKTtcblx0XHRjb25zdCBrID0gT2JqZWN0LmtleXModGhpcy5zdWJqZWN0KTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykge1xuXHRcdFx0ZGVsZXRlIHRoaXMuc3ViamVjdFtrW2ldXTtcblx0XHR9XG5cblx0XHR0aGlzLnN1YmplY3QgPSBleHRlbmQodGhpcy5zdWJqZWN0LCBjbG9uZWRPYmplY3QpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcmVhbCBvYmplY3Rcblx0ICpcblx0ICogQ2hhbmdlcyB0byB0aGlzIG9iamVjdCBhcmUgbm90IG5vdGljZWQgYnkgdGhlIG9ic2VydmVycywgc28geW91IGNhbiBtYWtlIGEgbGFyZ2UgbnVtYmVyIG9mIGNoYW5nZXMgYW5kIGluZm9ybSB0aGUgb2JzZXJ2ZXJzIGxhdGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRnZXRSZWFsU3ViamVjdCgpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFsU3ViamVjdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBhdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpcy5vYnNlcnZlcnMuYXR0YWNoKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBkZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzLm9ic2VydmVycy5kZXRhY2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5vdGlmeSBhbGwgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdG5vdGlmeU9ic2VydmVycygpIHtcblx0XHRyZXR1cm4gdGhpcy5vYnNlcnZlcnMubm90aWZ5KHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXMub2JzZXJ2ZXJzLmNvbnRhaW5zKG9ic2VydmVyKTtcblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcmV0dXJuIHt7ZGVmaW5lUHJvcGVydHk6IChmdW5jdGlvbigqPSwgKj0sICo9KTogKiksIHNldFByb3RvdHlwZU9mOiAoZnVuY3Rpb24oKiwgKj0pOiBib29sZWFuKSwgc2V0OiAoZnVuY3Rpb24oKiwgKiwgKiwgKik6IGJvb2xlYW4pLCBnZXQ6ICgoZnVuY3Rpb24oKj0sICo9LCAqPSk6ICh1bmRlZmluZWQpKXwqKSwgZGVsZXRlUHJvcGVydHk6ICgoZnVuY3Rpb24oKiwgKik6IChib29sZWFuKSl8Kil9fVxuICogQHByaXZhdGVcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tLy0vc25pcHBldHMvNDl9XG4gKi9cbmZ1bmN0aW9uIGdldEhhbmRsZXIoKSB7XG5cdGNvbnN0IHByb3h5ID0gdGhpcztcblxuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90c1xuXHRjb25zdCBoYW5kbGVyID0ge1xuXHRcdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzLWdldC1wLXJlY2VpdmVyXG5cdFx0Z2V0OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHJlY2VpdmVyKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IFJlZmxlY3QuZ2V0KHRhcmdldCwga2V5LCByZWNlaXZlcik7XG5cblx0XHRcdGlmICh0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzUHJpbWl0aXZlKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNldCB2YWx1ZSBhcyBwcm94eSBpZiBvYmplY3Qgb3IgYXJyYXlcblx0XHRcdGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKHByb3h5Lm9iamVjdE1hcC5oYXModmFsdWUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb3h5Lm9iamVjdE1hcC5nZXQodmFsdWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHByb3h5LnByb3h5TWFwLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgcCA9IG5ldyBQcm94eSh2YWx1ZSwgaGFuZGxlcik7XG5cdFx0XHRcdFx0cHJveHkub2JqZWN0TWFwLnNldCh2YWx1ZSwgcCk7XG5cdFx0XHRcdFx0cHJveHkucHJveHlNYXAuc2V0KHAsIHZhbHVlKTtcblx0XHRcdFx0XHRyZXR1cm4gcDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSxcblxuXHRcdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzLXNldC1wLXYtcmVjZWl2ZXJcblx0XHRzZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIHJlY2VpdmVyKSB7XG5cdFx0XHRpZiAocHJveHkucHJveHlNYXAuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IHByb3h5LnByb3h5TWFwLmdldCh2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwcm94eS5wcm94eU1hcC5oYXModGFyZ2V0KSkge1xuXHRcdFx0XHR0YXJnZXQgPSBwcm94eS5wcm94eU1hcC5nZXQodGFyZ2V0KTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IGN1cnJlbnQgPSBSZWZsZWN0LmdldCh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpO1xuXHRcdFx0aWYgKHByb3h5LnByb3h5TWFwLmhhcyhjdXJyZW50KSkge1xuXHRcdFx0XHRjdXJyZW50ID0gcHJveHkucHJveHlNYXAuZ2V0KGN1cnJlbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY3VycmVudCA9PT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGxldCByZXN1bHQ7XG5cdFx0XHRsZXQgZGVzY3JpcHRvciA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcblxuXHRcdFx0aWYgKGRlc2NyaXB0b3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkZXNjcmlwdG9yID0ge1xuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRkZXNjcmlwdG9yW1widmFsdWVcIl0gPSB2YWx1ZTtcblx0XHRcdHJlc3VsdCA9IFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpO1xuXG5cdFx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIikge1xuXHRcdFx0XHRwcm94eS5vYnNlcnZlcnMubm90aWZ5KHByb3h5KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtZGVsZXRlLXBcblx0XHRkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG5cdFx0XHRpZiAoa2V5IGluIHRhcmdldCkge1xuXHRcdFx0XHRkZWxldGUgdGFyZ2V0W2tleV07XG5cblx0XHRcdFx0aWYgKHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0XHRwcm94eS5vYnNlcnZlcnMubm90aWZ5KHByb3h5KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cblx0XHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1kZWZpbmVvd25wcm9wZXJ0eS1wLWRlc2Ncblx0XHRkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcblx0XHRcdGlmICh0eXBlb2Yga2V5ICE9PSBcInN5bWJvbFwiKSB7XG5cdFx0XHRcdHByb3h5Lm9ic2VydmVycy5ub3RpZnkocHJveHkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtc2V0cHJvdG90eXBlb2YtdlxuXHRcdHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IFJlZmxlY3Quc2V0UHJvdG90eXBlT2Yob2JqZWN0MSwga2V5KTtcblxuXHRcdFx0aWYgKHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0cHJveHkub2JzZXJ2ZXJzLm5vdGlmeShwcm94eSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSxcblx0fTtcblxuXHRyZXR1cm4gaGFuZGxlcjtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfVEhFTUVfTkFNRSwgREVGQVVMVF9USEVNRSB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IFRoZW1lLCBnZXREb2N1bWVudFRoZW1lIH07XG5cbi8qKlxuICogVGhlIFRoZW1lIGNsYXNzIHByb3ZpZGVzIHRoZSBmdW5jdGlvbmFsaXR5IGZvciB0aGUgdGhlbWUuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RvbS90aGVtZS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSB0aGVtZSBjbGFzc1xuICovXG5jbGFzcyBUaGVtZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIG5hbWVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICovXG5cdGNvbnN0cnVjdG9yKG5hbWUpIHtcblx0XHRzdXBlcigpO1xuXHRcdHZhbGlkYXRlU3RyaW5nKG5hbWUpO1xuXHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS90aGVtZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXROYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLm5hbWU7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGUgdGhlbWluZyB1c2VkIGluIHRoZSBkb2N1bWVudCBjYW4gYmUgZGVmaW5lZCB2aWEgdGhlIGh0bWwtdGFnLlxuICogVGhlIHRoZW1pbmcgaXMgc3BlY2lmaWVkIHZpYSB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZWAuXG4gKlxuICogQXMgbmFtZSBmb3IgYSB0aGVtZSBhbGwgY2hhcmFjdGVycyBhcmUgdmFsaWQsIHdoaWNoIGFyZSBhbHNvIGFsbG93ZWQgZm9yIGEgSFRNTEVsZW1lbnQtSUQuXG4gKlxuICogYGBgXG4gKiA8aHRtbCBkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZT1cIm15LXRoZW1lXCI+XG4gKiBgYGBcbiAqXG4gKiB0aGUgZGVmYXVsdCB0aGVtZSBuYW1lIGlzIGBtb25zdGVyYC5cbiAqXG4gKiBAcmV0dXJuIHtUaGVtZX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKi9cbmZ1bmN0aW9uIGdldERvY3VtZW50VGhlbWUoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0R2xvYmFsT2JqZWN0KFwiZG9jdW1lbnRcIik7XG5cdGxldCBuYW1lID0gREVGQVVMVF9USEVNRTtcblxuXHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImh0bWxcIik7XG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRjb25zdCB0aGVtZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKTtcblx0XHRpZiAodGhlbWUpIHtcblx0XHRcdG5hbWUgPSB0aGVtZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3IFRoZW1lKG5hbWUpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uLCBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnRUaGVtZSB9IGZyb20gXCIuL3RoZW1lLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzIH0gZnJvbSBcIi4vdXRpbC5tanNcIjtcblxuZXhwb3J0IHsgVGVtcGxhdGUgfTtcblxuLyoqXG4gKiBUaGUgdGVtcGxhdGUgY2xhc3MgcHJvdmlkZXMgbWV0aG9kcyBmb3IgY3JlYXRpbmcgdGVtcGxhdGVzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSB0ZW1wbGF0ZSBjbGFzc1xuICovXG5jbGFzcyBUZW1wbGF0ZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZnVuY3Rpb24gaXMgbm90IGRlZmluZWRcblx0ICovXG5cdGNvbnN0cnVjdG9yKHRlbXBsYXRlKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRjb25zdCBIVE1MVGVtcGxhdGVFbGVtZW50ID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJIVE1MVGVtcGxhdGVFbGVtZW50XCIpO1xuXHRcdHZhbGlkYXRlSW5zdGFuY2UodGVtcGxhdGUsIEhUTUxUZW1wbGF0ZUVsZW1lbnQpO1xuXHRcdHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlL3RlbXBsYXRlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hUTUxUZW1wbGF0ZUVsZW1lbnR9XG5cdCAqL1xuXHRnZXRUZW1wbGF0ZUVsZW1lbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMudGVtcGxhdGU7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7RG9jdW1lbnRGcmFnbWVudH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Zcblx0ICovXG5cdGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMudGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBsb2FkcyBhIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElEIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqIFRvIGRvIHRoaXMsIGl0IGZpcnN0IHJlYWRzIHRoZSB0aGVtZSBvZiB0aGUgZG9jdW1lbnQgYW5kIGxvb2tzIGZvciB0aGUgYGRhdGEtbW9uc3Rlci10aGVtZS1uYW1lYCBhdHRyaWJ1dGUgaW4gdGhlIEhUTUwgdGFnLlxuICpcbiAqIGBgYFxuICogPGh0bWwgZGF0YS1tb25zdGVyLXRoZW1lLW5hbWU9XCJteS10aGVtZVwiPlxuICogYGBgXG4gKlxuICogSWYgbm8gdGhlbWUgd2FzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdGhlbWUgaXMgYG1vbnN0ZXJgLlxuICpcbiAqIE5vdyBpdCBpcyBsb29rZWQgaWYgdGhlcmUgaXMgYSB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJRCBhbmQgdGhlbWUgYGlkLXRoZW1lYCBhbmQgaWYgeWVzIGl0IGlzIHJldHVybmVkLlxuICogSWYgdGhlcmUgaXMgbm8gdGVtcGxhdGUgYSBzZWFyY2ggZm9yIGEgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSUQgYGlkYCBpcyBkb25lLiBJZiB0aGlzIGlzIGFsc28gbm90IGZvdW5kLCBhbiBlcnJvciBpcyB0aHJvd24uXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5ET00uZmluZERvY3VtZW50VGVtcGxhdGUoKWAuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7ZmluZFRlbXBsYXRlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9kb20vdGVtcGxhdGUubWpzJztcbiAqIGZpbmREb2N1bWVudFRlbXBsYXRlKClcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQgeyBmaW5kRG9jdW1lbnRUZW1wbGF0ZSB9IGZyb20gXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BzY2h1a2FpL21vbnN0ZXJAbGF0ZXN0L3NvdXJjZS9kb20vdGVtcGxhdGUubWpzXCI7XG4gKlxuICogY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gKiB0ZW1wbGF0ZS5pZCA9IFwibXlUZW1wbGF0ZVwiO1xuICogdGVtcGxhdGUuaW5uZXJIVE1MID0gXCI8cD5teSBkZWZhdWx0IHRlbXBsYXRlPC9wPlwiO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7XG4gKlxuICogY29uc3QgdGhlbWVkVGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gKiB0aGVtZWRUZW1wbGF0ZS5pZCA9IFwibXlUZW1wbGF0ZS1teVRoZW1lXCI7XG4gKiB0aGVtZWRUZW1wbGF0ZS5pbm5lckhUTUwgPSBcIjxwPm15IHRoZW1lZCB0ZW1wbGF0ZTwvcD5cIjtcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhlbWVkVGVtcGxhdGUpO1xuICpcbiAqIC8vIGxvYWRzIHRoZSB0ZW1wbGUgYW5kIHNpbmNlIG5vIHRoZW1lIGlzIHNldCB0aGUgZGVmYXVsdCB0ZW1wbGF0ZVxuICogY29uc3QgdGVtcGxhdGUxID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteVRlbXBsYXRlXCIpO1xuICogY29uc29sZS5sb2codGVtcGxhdGUxLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gKiAvLyBcdTIxQTYgJzxwPm15IGRlZmF1bHQgdGVtcGxhdGU8L3A+J1xuICpcbiAqIC8vIG5vdyB3ZSBzZXQgb3VyIG93biB0aGVtZVxuICogZG9jdW1lbnRcbiAqIC5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKVxuICogLnNldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci10aGVtZS1uYW1lXCIsIFwibXlUaGVtZVwiKTtcbiAqXG4gKiAvLyBub3cgd2UgZG9uJ3QgZ2V0IHRoZSBkZWZhdWx0IHRlbXBsYXRlLFxuICogLy8gYnV0IHRoZSB0ZW1wbGF0ZSB3aXRoIHRoZSB0aGVtZSBpbiB0aGUgaWRcbiAqIGNvbnN0IHRlbXBsYXRlMiA9IGZpbmREb2N1bWVudFRlbXBsYXRlKFwibXlUZW1wbGF0ZVwiKTtcbiAqIGNvbnNvbGUubG9nKHRlbXBsYXRlMi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICogLy8gXHUyMUE2ICc8cD5teSB0aGVtZWQgdGVtcGxhdGU8L3A+J1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuICogQHBhcmFtIHtOb2RlfSBjdXJyZW50Tm9kZVxuICogQHJldHVybiB7TW9uc3Rlci5ET00uVGVtcGxhdGV9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSB0ZW1wbGF0ZSBpZCBub3QgZm91bmQuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZERvY3VtZW50VGVtcGxhdGUoaWQsIGN1cnJlbnROb2RlKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGlkKTtcblxuXHRjb25zdCBkb2N1bWVudCA9IGdldEdsb2JhbE9iamVjdChcImRvY3VtZW50XCIpO1xuXHRjb25zdCBIVE1MVGVtcGxhdGVFbGVtZW50ID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJIVE1MVGVtcGxhdGVFbGVtZW50XCIpO1xuXHRjb25zdCBEb2N1bWVudEZyYWdtZW50ID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJEb2N1bWVudEZyYWdtZW50XCIpO1xuXHRjb25zdCBEb2N1bWVudCA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiRG9jdW1lbnRcIik7XG5cblx0bGV0IHByZWZpeElEO1xuXG5cdGlmIChcblx0XHQhKFxuXHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCBjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcblx0XHQpXG5cdCkge1xuXHRcdGlmIChjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIE5vZGUpIHtcblx0XHRcdGlmIChjdXJyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1RFTVBMQVRFX1BSRUZJWCkpIHtcblx0XHRcdFx0cHJlZml4SUQgPSBjdXJyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RFTVBMQVRFX1BSRUZJWCk7XG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuZ2V0Um9vdE5vZGUoKTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHQhKFxuXHRcdFx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnQgfHxcblx0XHRcdFx0XHRjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUub3duZXJEb2N1bWVudDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHQhKFxuXHRcdFx0XHRjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50IHx8XG5cdFx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudFxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0Y3VycmVudE5vZGUgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRsZXQgdGVtcGxhdGU7XG5cdGNvbnN0IHRoZW1lID0gZ2V0RG9jdW1lbnRUaGVtZSgpO1xuXG5cdGlmIChwcmVmaXhJRCkge1xuXHRcdGNvbnN0IHRoZW1lZFByZWZpeElEID0gYCR7cHJlZml4SUR9LSR7aWR9LSR7dGhlbWUuZ2V0TmFtZSgpfWA7XG5cblx0XHR0ZW1wbGF0ZSA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjdXJyZW50Tm9kZSwgdGhlbWVkUHJlZml4SUQpO1xuXHRcdGlmICh0ZW1wbGF0ZSBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHtcblx0XHRcdHJldHVybiBuZXcgVGVtcGxhdGUodGVtcGxhdGUpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHRoZW1lZElEID0gYCR7aWR9LSR7dGhlbWUuZ2V0TmFtZSgpfWA7XG5cblx0dGVtcGxhdGUgPSBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoY3VycmVudE5vZGUsIHRoZW1lZElEKTtcblx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuXHRcdHJldHVybiBuZXcgVGVtcGxhdGUodGVtcGxhdGUpO1xuXHR9XG5cblx0dGVtcGxhdGUgPSBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoY3VycmVudE5vZGUsIGlkKTtcblx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuXHRcdHJldHVybiBuZXcgVGVtcGxhdGUodGVtcGxhdGUpO1xuXHR9XG5cblx0dGhyb3cgbmV3IEVycm9yKGB0ZW1wbGF0ZSAke2lkfSBub3QgZm91bmQuYCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB0eXBlT2YgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZW9mLm1qc1wiO1xuXG5leHBvcnQgeyBkaWZmIH07XG5cbi8qKlxuICogV2l0aCB0aGUgZGlmZiBmdW5jdGlvbiB5b3UgY2FuIHBlcmZvcm0gdGhlIGNoYW5nZSBvZiBvbmUgb2JqZWN0IHRvIGFub3RoZXIuIFRoZSByZXN1bHQgc2hvd3MgdGhlIGNoYW5nZXMgb2YgdGhlIHNlY29uZCBvYmplY3QgdG8gdGhlIGZpcnN0IG9iamVjdC5cbiAqXG4gKiBUaGUgb3BlcmF0b3IgYGFkZGAgbWVhbnMgdGhhdCBzb21ldGhpbmcgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHNlY29uZCBvYmplY3QuIGBkZWxldGVgIG1lYW5zIHRoYXQgc29tZXRoaW5nIGhhcyBiZWVuIGRlbGV0ZWQgZnJvbSB0aGUgc2Vjb25kIG9iamVjdCBjb21wYXJlZCB0byB0aGUgZmlyc3Qgb2JqZWN0LlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kYXRhL2RpZmYubWpzXG4gKiBAcGFyYW0geyp9IGZpcnN0XG4gKiBAcGFyYW0geyp9IHNlY29uZFxuICogQHJldHVybiB7YXJyYXl9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gZGlmZihmaXJzdCwgc2Vjb25kKSB7XG5cdHJldHVybiBkb0RpZmYoZmlyc3QsIHNlY29uZCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBhXG4gKiBAcGFyYW0gYlxuICogQHBhcmFtIHR5cGVcbiAqIEByZXR1cm4ge1NldDxzdHJpbmc+fFNldDxudW1iZXI+fVxuICovXG5mdW5jdGlvbiBnZXRLZXlzKGEsIGIsIHR5cGUpIHtcblx0aWYgKGlzQXJyYXkodHlwZSkpIHtcblx0XHRjb25zdCBrZXlzID1cblx0XHRcdGEubGVuZ3RoID4gYi5sZW5ndGggPyBuZXcgQXJyYXkoYS5sZW5ndGgpIDogbmV3IEFycmF5KGIubGVuZ3RoKTtcblx0XHRrZXlzLmZpbGwoMCk7XG5cdFx0cmV0dXJuIG5ldyBTZXQoa2V5cy5tYXAoKF8sIGkpID0+IGkpKTtcblx0fVxuXG5cdHJldHVybiBuZXcgU2V0KE9iamVjdC5rZXlzKGEpLmNvbmNhdChPYmplY3Qua2V5cyhiKSkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gYVxuICogQHBhcmFtIGJcbiAqIEBwYXJhbSBwYXRoXG4gKiBAcGFyYW0gZGlmZlxuICogQHJldHVybiB7YXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGRvRGlmZihhLCBiLCBwYXRoLCBkaWZmKSB7XG5cdGNvbnN0IHR5cGVBID0gdHlwZU9mKGEpO1xuXHRjb25zdCB0eXBlQiA9IHR5cGVPZihiKTtcblxuXHRjb25zdCBjdXJyUGF0aCA9IHBhdGggfHwgW107XG5cdGNvbnN0IGN1cnJEaWZmID0gZGlmZiB8fCBbXTtcblxuXHRpZiAodHlwZUEgPT09IHR5cGVCICYmICh0eXBlQSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlQSA9PT0gXCJhcnJheVwiKSkge1xuXHRcdGdldEtleXMoYSwgYiwgdHlwZUEpLmZvckVhY2goKHYpID0+IHtcblx0XHRcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIHYpKSB7XG5cdFx0XHRcdGN1cnJEaWZmLnB1c2goYnVpbGRSZXN1bHQoYVt2XSwgYlt2XSwgXCJhZGRcIiwgY3VyclBhdGguY29uY2F0KHYpKSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgdikpIHtcblx0XHRcdFx0Y3VyckRpZmYucHVzaChidWlsZFJlc3VsdChhW3ZdLCBiW3ZdLCBcImRlbGV0ZVwiLCBjdXJyUGF0aC5jb25jYXQodikpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvRGlmZihhW3ZdLCBiW3ZdLCBjdXJyUGF0aC5jb25jYXQodiksIGN1cnJEaWZmKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBvID0gZ2V0T3BlcmF0b3IoYSwgYiwgdHlwZUEsIHR5cGVCKTtcblx0XHRpZiAobyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjdXJyRGlmZi5wdXNoKGJ1aWxkUmVzdWx0KGEsIGIsIG8sIHBhdGgpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY3VyckRpZmY7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3JcbiAqIEBwYXJhbSB7YXJyYXl9IHBhdGhcbiAqIEByZXR1cm4ge3twYXRoOiBhcnJheSwgb3BlcmF0b3I6IHN0cmluZ319XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBidWlsZFJlc3VsdChhLCBiLCBvcGVyYXRvciwgcGF0aCkge1xuXHRjb25zdCByZXN1bHQgPSB7XG5cdFx0b3BlcmF0b3IsXG5cdFx0cGF0aCxcblx0fTtcblxuXHRpZiAob3BlcmF0b3IgIT09IFwiYWRkXCIpIHtcblx0XHRyZXN1bHQuZmlyc3QgPSB7XG5cdFx0XHR2YWx1ZTogYSxcblx0XHRcdHR5cGU6IHR5cGVvZiBhLFxuXHRcdH07XG5cblx0XHRpZiAoaXNPYmplY3QoYSkpIHtcblx0XHRcdGNvbnN0IG5hbWUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSk/LmNvbnN0cnVjdG9yPy5uYW1lO1xuXHRcdFx0aWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXN1bHQuZmlyc3QuaW5zdGFuY2UgPSBuYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChvcGVyYXRvciA9PT0gXCJhZGRcIiB8fCBvcGVyYXRvciA9PT0gXCJ1cGRhdGVcIikge1xuXHRcdHJlc3VsdC5zZWNvbmQgPSB7XG5cdFx0XHR2YWx1ZTogYixcblx0XHRcdHR5cGU6IHR5cGVvZiBiLFxuXHRcdH07XG5cblx0XHRpZiAoaXNPYmplY3QoYikpIHtcblx0XHRcdGNvbnN0IG5hbWUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYik/LmNvbnN0cnVjdG9yPy5uYW1lO1xuXHRcdFx0aWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXN1bHQuc2Vjb25kLmluc3RhbmNlID0gbmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNOb3RFcXVhbChhLCBiKSB7XG5cdGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdHJldHVybiBhLmdldFRpbWUoKSAhPT0gYi5nZXRUaW1lKCk7XG5cdH1cblxuXHRyZXR1cm4gYSAhPT0gYjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBhXG4gKiBAcGFyYW0geyp9IGJcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdG9yKGEsIGIpIHtcblx0LyoqXG5cdCAqIEB0eXBlIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0bGV0IG9wZXJhdG9yO1xuXG5cdC8qKlxuXHQgKiBAdHlwZSB7c3RyaW5nfVxuXHQgKi9cblx0Y29uc3QgdHlwZUEgPSB0eXBlb2YgYTtcblxuXHQvKipcblx0ICogQHR5cGUge3N0cmluZ31cblx0ICovXG5cdGNvbnN0IHR5cGVCID0gdHlwZW9mIGI7XG5cblx0aWYgKHR5cGVBID09PSBcInVuZGVmaW5lZFwiICYmIHR5cGVCICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0b3BlcmF0b3IgPSBcImFkZFwiO1xuXHR9IGVsc2UgaWYgKHR5cGVBICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVCID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0b3BlcmF0b3IgPSBcImRlbGV0ZVwiO1xuXHR9IGVsc2UgaWYgKGlzTm90RXF1YWwoYSwgYikpIHtcblx0XHRvcGVyYXRvciA9IFwidXBkYXRlXCI7XG5cdH1cblxuXHRyZXR1cm4gb3BlcmF0b3I7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyB0cmltU3BhY2VzIH07XG5cbi8qKlxuICogVGhpcyBzcGVjaWFsIHRyaW0gZnVuY3Rpb24gYWxsb3dzIHRvIHRyaW0gc3BhY2VzIHRoYXQgaGF2ZSBiZWVuIHByb3RlY3RlZCBieSBhIHNwZWNpYWwgZXNjYXBlIGNoYXJhY3Rlci5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt0cmltU3BhY2VzfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS91dGlsL3RyaW1zcGFjZXMubWpzJztcbiAqIHRyaW1TcGFjZXMoJyBoZWxsbyBcXFxcICcpXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEhpbnQ6IE9uZSBzdHJva2UgaXMgZXNjYXBlZCBieSB0aGUgamF2YXNjcmlwdCBpbnRlcnByZXRlciwgdGhlIHNlY29uZCBzdHJva2UgZXNjYXBlcyB0aGUgc3Ryb2tlLlxuICpcbiAqIGBgYHRleHRcbiAqIGFcXCBiICBcdTIxQTYgYSBiXG4gKiBhXFxcXCBiIFx1MjFBNiBhXFwgYlxuICogYGBgXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiB0cmltU3BhY2VzKHZhbHVlKSB7XG5cdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblxuXHRjb25zdCBwbGFjZWhvbGRlciA9IG5ldyBNYXAoKTtcblx0Y29uc3QgcmVnZXggPSAvKCg/PHBhdHRlcm4+XFxcXCg/PGNoYXI+LikpezF9KS9naW07XG5cblx0Ly8gVGhlIHNlcGFyYXRvciBmb3IgYXJncyBtdXN0IGJlIGVzY2FwZWRcblx0Ly8gdW5kZWZpbmVkIHN0cmluZyB3aGljaCBzaG91bGQgbm90IG9jY3VyIG5vcm1hbGx5IGFuZCBpcyBhbHNvIG5vdCBhIHJlZ2V4XG5cdGNvbnN0IHJlc3VsdCA9IHZhbHVlLm1hdGNoQWxsKHJlZ2V4KTtcblxuXHRmb3IgKGNvbnN0IG0gb2YgcmVzdWx0KSB7XG5cdFx0Y29uc3QgZyA9IG0/LltcImdyb3Vwc1wiXTtcblx0XHRpZiAoIWlzT2JqZWN0KGcpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb25zdCBwID0gZz8uW1wicGF0dGVyblwiXTtcblx0XHRjb25zdCBjID0gZz8uW1wiY2hhclwiXTtcblxuXHRcdGlmIChwICYmIGMpIHtcblx0XHRcdGNvbnN0IHIgPSBgX18ke25ldyBJRCgpLnRvU3RyaW5nKCl9X19gO1xuXHRcdFx0cGxhY2Vob2xkZXIuc2V0KHIsIGMpO1xuXHRcdFx0dmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHAsIHIpO1xuXHRcdH1cblx0fVxuXG5cdHZhbHVlID0gdmFsdWUudHJpbSgpO1xuXHRwbGFjZWhvbGRlci5mb3JFYWNoKCh2LCBrKSA9PiB7XG5cdFx0dmFsdWUgPSB2YWx1ZS5yZXBsYWNlKGssIGBcXFxcJHt2fWApO1xuXHR9KTtcblxuXHRyZXR1cm4gdmFsdWU7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4vdXRpbC5tanNcIjtcblxuZXhwb3J0IHsgZmlyZUV2ZW50LCBmaXJlQ3VzdG9tRXZlbnQsIGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH07XG5cbi8qKlxuICogVGhlIGZ1bmN0aW9uIHNlbmRzIGFuIGV2ZW50XG4gKlxuICogQHBhcmFtIHtFbGVtZW50IHwgTm9kZSB8IEhUTUxDb2xsZWN0aW9uIHwgTm9kZUxpc3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cbiAqIEBzdW1tYXJ5IENvbnN0cnVjdCBhbmQgc2VuZCBhbmQgZXZlbnRcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50KGVsZW1lbnQsIHR5cGUpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRpZiAodHlwZSA9PT0gXCJjbGlja1wiKSB7XG5cdFx0XHRlbGVtZW50LmNsaWNrKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50L0V2ZW50XG5cdFx0Y29uc3QgZXZlbnQgPSBuZXcgRXZlbnQodmFsaWRhdGVTdHJpbmcodHlwZSksIHtcblx0XHRcdGJ1YmJsZXM6IHRydWUsXG5cdFx0XHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRcdFx0Y29tcG9zZWQ6IHRydWUsXG5cdFx0fSk7XG5cblx0XHRlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQ29sbGVjdGlvbiB8fCBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxpc3QpIHtcblx0XHRmb3IgKGNvbnN0IGUgb2YgZWxlbWVudCkge1xuXHRcdFx0ZmlyZUV2ZW50KGUsIHR5cGUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XCJ2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cIixcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5ET00uZmlyZUN1c3RvbUV2ZW50KClgLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudCB8IE5vZGUgfCBIVE1MQ29sbGVjdGlvbiB8IE5vZGVMaXN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtvYmplY3R9IGRldGFpbFxuICogQHJldHVybiB7dm9pZH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50IG9yIEhUTUxDb2xsZWN0aW9uXG4gKiBAc3VtbWFyeSBDb25zdHJ1Y3QgYW5kIHNlbmQgYW5kIGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGZpcmVDdXN0b21FdmVudChlbGVtZW50LCB0eXBlLCBkZXRhaWwpIHtcblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGlmICghaXNPYmplY3QoZGV0YWlsKSkge1xuXHRcdFx0ZGV0YWlsID0geyBkZXRhaWwgfTtcblx0XHR9XG5cblx0XHRjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCh2YWxpZGF0ZVN0cmluZyh0eXBlKSwge1xuXHRcdFx0YnViYmxlczogdHJ1ZSxcblx0XHRcdGNhbmNlbGFibGU6IHRydWUsXG5cdFx0XHRjb21wb3NlZDogdHJ1ZSxcblx0XHRcdGRldGFpbCxcblx0XHR9KTtcblxuXHRcdGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uIHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlTGlzdCkge1xuXHRcdGZvciAoY29uc3QgZSBvZiBlbGVtZW50KSB7XG5cdFx0XHRmaXJlQ3VzdG9tRXZlbnQoZSwgdHlwZSwgZGV0YWlsKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFwiZWxlbWVudCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cIixcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBwYXRoIGBFdmVudC5jb21wb3NlZFBhdGgoKWAgZnJvbSBhbiBldmVudCBhbmQgdHJpZXMgdG8gZmluZCB0aGUgbmV4dCBlbGVtZW50XG4gKiB1cCB0aGUgdHJlZSBgZWxlbWVudC5jbG9zZXN0KClgIHdpdGggdGhlIGF0dHJpYnV0ZSBhbmQgdmFsdWUuIElmIG5vIHZhbHVlLCBvciBhIHZhbHVlIHRoYXQgaXMgdW5kZWZpbmVkIG9yIG51bGwsXG4gKiBpcyBzcGVjaWZpZWQsIG9ubHkgdGhlIGF0dHJpYnV0ZSBpcyBzZWFyY2hlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlTmFtZVxuICogQHBhcmFtIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IGF0dHJpYnV0ZVZhbHVlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgZXZlbnRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuICogQHN1bW1hcnkgSGVscCBmdW5jdGlvbiB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGV2ZW50LCBFdmVudCk7XG5cblx0aWYgKHR5cGVvZiBldmVudC5jb21wb3NlZFBhdGggIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGV2ZW50XCIpO1xuXHR9XG5cblx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXG5cdC8vIGNsb3Nlc3QgY2Fubm90IGJlIHVzZWQgaGVyZSwgYmVjYXVzZSBjbG9zZXN0IGlzIG5vdCBjb3JyZWN0IGZvciBzbG90dGVkIGVsZW1lbnRzXG5cdGlmIChpc0FycmF5KHBhdGgpKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBvID0gcGF0aFtpXTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRvIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XHRcdFx0by5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkgJiZcblx0XHRcdFx0KGF0dHJpYnV0ZVZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRvLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA9PT0gYXR0cmlidXRlVmFsdWUpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIG87XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBkaWZmIH0gZnJvbSBcIi4uL2RhdGEvZGlmZi5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgUGlwZSB9IGZyb20gXCIuLi9kYXRhL3BpcGUubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9CSU5ELFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9CSU5EX1RZUEUsXG5cdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVCxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSxcblx0QVRUUklCVVRFX1VQREFURVJfUkVNT1ZFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJUyxcbn0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZywgaXNJbnN0YW5jZSwgaXNJdGVyYWJsZSB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVBcnJheSwgdmFsaWRhdGVJbnN0YW5jZSB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQgeyB0cmltU3BhY2VzIH0gZnJvbSBcIi4uL3V0aWwvdHJpbXNwYWNlcy5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuLCBhZGRUb09iamVjdExpbmsgfSBmcm9tIFwiLi9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbCB9IGZyb20gXCIuL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCB9IGZyb20gXCIuL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGZpbmREb2N1bWVudFRlbXBsYXRlIH0gZnJvbSBcIi4vdGVtcGxhdGUubWpzXCI7XG5pbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBVcGRhdGVyLCBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudCB9O1xuXG4vKipcbiAqIFRoZSB1cGRhdGVyIGNsYXNzIGNvbm5lY3RzIGFuIG9iamVjdCB3aXRoIHRoZSBET00uIEluIHRoaXMgd2F5LCBzdHJ1Y3R1cmVzIGFuZCBjb250ZW50cyBpbiB0aGUgRE9NIGNhbiBiZVxuICogcHJvZ3JhbW1hdGljYWxseSBhZGFwdGVkIHZpYSBhdHRyaWJ1dGVzLlxuICpcbiAqIEZvciBleGFtcGxlLCB0byBpbmNsdWRlIGEgc3RyaW5nIGZyb20gYW4gb2JqZWN0LCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItcmVwbGFjZWAgY2FuIGJlIHVzZWQuXG4gKiBhIGZ1cnRoZXIgZXhwbGFuYXRpb24gY2FuIGJlIGZvdW5kIHVuZGVyIFttb25zdGVyanMub3JnXShodHRwczovL21vbnN0ZXJqcy5vcmcvKVxuICpcbiAqIENoYW5nZXMgdG8gYXR0cmlidXRlcyBhcmUgbWFkZSBvbmx5IHdoZW4gdGhlIGRpcmVjdCB2YWx1ZXMgYXJlIGNoYW5nZWQuIElmIHlvdSB3YW50IHRvIGFzc2lnbiBjaGFuZ2VzXG4gKiB0byBvdGhlciB2YWx1ZXMgYXMgd2VsbCwgeW91IGhhdmUgdG8gaW5zZXJ0IHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1zZWxlY3QtdGhpc2AuIFRoaXMgc2hvdWxkIGJlXG4gKiBkb25lIHdpdGggY2FyZSwgYXMgaXQgY2FuIHJlZHVjZSBwZXJmb3JtYW5jZS5cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL2RvbS91cGRhdGVyL3NpbXBsZS8gU2ltcGxlIGV4YW1wbGVcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlXG4gKiBAdGhyb3dzIHtFcnJvcn0gcGlwZXMgYXJlIG5vdCBhbGxvd2VkIHdoZW4gY2xvbmluZyBhIG5vZGUuXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gdGVtcGxhdGUgd2FzIGZvdW5kIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG1heGltdW0gZGVwdGggZm9yIHRoZSByZWN1cnNpb24gaXMgcmVhY2hlZC5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuICogQHN1bW1hcnkgVGhlIHVwZGF0ZXIgY2xhc3MgY29ubmVjdHMgYW4gb2JqZWN0IHdpdGggdGhlIGRvbVxuICovXG5jbGFzcyBVcGRhdGVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAc2luY2UgMS44LjBcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge29iamVjdHxQcm94eU9ic2VydmVyfHVuZGVmaW5lZH0gc3ViamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuXHQgKiBAc2VlIHtAbGluayBNb25zdGVyLkRPTS5maW5kRG9jdW1lbnRUZW1wbGF0ZX1cblx0ICovXG5cdGNvbnN0cnVjdG9yKGVsZW1lbnQsIHN1YmplY3QpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0LyoqXG5cdFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuXHRcdCAqL1xuXHRcdGlmIChzdWJqZWN0ID09PSB1bmRlZmluZWQpIHN1YmplY3QgPSB7fTtcblx0XHRpZiAoIWlzSW5zdGFuY2Uoc3ViamVjdCwgUHJveHlPYnNlcnZlcikpIHtcblx0XHRcdHN1YmplY3QgPSBuZXcgUHJveHlPYnNlcnZlcihzdWJqZWN0KTtcblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdGVsZW1lbnQ6IHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpLFxuXHRcdFx0bGFzdDoge30sXG5cdFx0XHRjYWxsYmFja3M6IG5ldyBNYXAoKSxcblx0XHRcdGV2ZW50VHlwZXM6IFtcImtleXVwXCIsIFwiY2xpY2tcIiwgXCJjaGFuZ2VcIiwgXCJkcm9wXCIsIFwidG91Y2hlbmRcIiwgXCJpbnB1dFwiXSxcblx0XHRcdHN1YmplY3Q6IHN1YmplY3QsXG5cdFx0fTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5zZXQoXG5cdFx0XHRcImNoZWNrc3RhdGVcIixcblx0XHRcdGdldENoZWNrU3RhdGVDYWxsYmFjay5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmF0dGFjaE9ic2VydmVyKFxuXHRcdFx0bmV3IE9ic2VydmVyKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgcyA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKTtcblxuXHRcdFx0XHRjb25zdCBkaWZmUmVzdWx0ID0gZGlmZih0aGlzW2ludGVybmFsU3ltYm9sXS5sYXN0LCBzKTtcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ubGFzdCA9IGNsb25lKHMpO1xuXG5cdFx0XHRcdGNvbnN0IHByb21pc2VzID0gW107XG5cblx0XHRcdFx0Zm9yIChjb25zdCBbLCBjaGFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKGRpZmZSZXN1bHQpKSB7XG5cdFx0XHRcdFx0cHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRcdG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0XHRcdFx0Z2V0V2luZG93KCkucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVtb3ZlRWxlbWVudC5jYWxsKHRoaXMsIGNoYW5nZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpbnNlcnRFbGVtZW50LmNhbGwodGhpcywgY2hhbmdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZUNvbnRlbnQuY2FsbCh0aGlzLCBjaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlQXR0cmlidXRlcy5jYWxsKHRoaXMsIGNoYW5nZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmF1bHRzOiAna2V5dXAnLCAnY2xpY2snLCAnY2hhbmdlJywgJ2Ryb3AnLCAndG91Y2hlbmQnXG5cdCAqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0V2ZW50c31cblx0ICogQHNpbmNlIDEuOS4wXG5cdCAqIEBwYXJhbSB7QXJyYXl9IHR5cGVzXG5cdCAqIEByZXR1cm4ge1VwZGF0ZXJ9XG5cdCAqL1xuXHRzZXRFdmVudFR5cGVzKHR5cGVzKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZXZlbnRUeXBlcyA9IHZhbGlkYXRlQXJyYXkodHlwZXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpdGggdGhpcyBtZXRob2QsIHRoZSBldmVudGxpc3RlbmVycyBhcmUgaG9va2VkIGluIGFuZCB0aGUgbWFnaWMgYmVnaW5zLlxuXHQgKlxuXHQgKiBgYGBqc1xuXHQgKiB1cGRhdGVyLnJ1bigpLnRoZW4oKCkgPT4ge1xuXHQgKiAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cdCAqIH0pO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHNpbmNlIDEuOS4wXG5cdCAqIEByZXR1cm4ge1VwZGF0ZXJ9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGhcblx0ICovXG5cdGVuYWJsZUV2ZW50UHJvY2Vzc2luZygpIHtcblx0XHR0aGlzLmRpc2FibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuXHRcdGZvciAoY29uc3QgdHlwZSBvZiB0aGlzW2ludGVybmFsU3ltYm9sXS5ldmVudFR5cGVzKSB7XG5cdFx0XHQvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudFRhcmdldC9hZGRFdmVudExpc3RlbmVyXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdGdldENvbnRyb2xFdmVudEhhbmRsZXIuY2FsbCh0aGlzKSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNhcHR1cmU6IHRydWUsXG5cdFx0XHRcdFx0cGFzc2l2ZTogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgdHVybnMgb2ZmIHRoZSBtYWdpYyBvciB3aG8gbG92ZXMgaXQgbW9yZSBwcm9mYW5lIGl0IHJlbW92ZXMgdGhlIGV2ZW50TGlzdGVuZXIuXG5cdCAqXG5cdCAqIEBzaW5jZSAxLjkuMFxuXHQgKiBAcmV0dXJuIHtVcGRhdGVyfVxuXHQgKi9cblx0ZGlzYWJsZUV2ZW50UHJvY2Vzc2luZygpIHtcblx0XHRmb3IgKGNvbnN0IHR5cGUgb2YgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZXZlbnRUeXBlcykge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuXHRcdFx0XHR0eXBlLFxuXHRcdFx0XHRnZXRDb250cm9sRXZlbnRIYW5kbGVyLmNhbGwodGhpcyksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBydW4gbWV0aG9kIG11c3QgYmUgY2FsbGVkIGZvciB0aGUgdXBkYXRlIHRvIHN0YXJ0IHdvcmtpbmcuXG5cdCAqIFRoZSBtZXRob2QgZW5zdXJlcyB0aGF0IGNoYW5nZXMgYXJlIGRldGVjdGVkLlxuXHQgKlxuXHQgKiBgYGBqc1xuXHQgKiB1cGRhdGVyLnJ1bigpLnRoZW4oKCkgPT4ge1xuXHQgKiAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cdCAqIH0pO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHN1bW1hcnkgTGV0IHRoZSBtYWdpYyBiZWdpblxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cnVuKCkge1xuXHRcdC8vIHRoZSBrZXkgX19pbml0X19oYXMgbm8gZnVydGhlciBtZWFuaW5nIGFuZCBpcyBvbmx5XG5cdFx0Ly8gdXNlZCB0byBjcmVhdGUgdGhlIGRpZmYgZm9yIGVtcHR5IG9iamVjdHMuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ubGFzdCA9IHsgX19pbml0X186IHRydWUgfTtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5ub3RpZnlPYnNlcnZlcnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2YWx1ZXMgb2YgYm91bmQgZWxlbWVudHMgYW5kIGNoYW5nZXMgdGhlbSBpbiBzdWJqZWN0XG5cdCAqXG5cdCAqIEBzaW5jZSAxLjI3LjBcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uVXBkYXRlcn1cblx0ICovXG5cdHJldHJpZXZlKCkge1xuXHRcdHJldHJpZXZlRnJvbUJpbmRpbmdzLmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogSWYgeW91IGhhdmUgcGFzc2VkIGEgUHJveHlPYnNlcnZlciBpbiB0aGUgY29uc3RydWN0b3IsIHlvdSB3aWxsIGdldCB0aGUgb2JqZWN0IHRoYXQgdGhlIFByb3h5T2JzZXJ2ZXIgbWFuYWdlcyBoZXJlLlxuXHQgKiBIb3dldmVyLCBpZiB5b3UgcGFzc2VkIGEgc2ltcGxlIG9iamVjdCwgaGVyZSB5b3Ugd2lsbCBnZXQgYSBwcm94eSBmb3IgdGhhdCBvYmplY3QuXG5cdCAqXG5cdCAqIEZvciBjaGFuZ2VzLCB0aGUgUHJveHlPYnNlcnZlciBtdXN0IGJlIHVzZWQuXG5cdCAqXG5cdCAqIEBzaW5jZSAxLjguMFxuXHQgKiBAcmV0dXJuIHtQcm94eX1cblx0ICovXG5cdGdldFN1YmplY3QoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0U3ViamVjdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHJlZ2lzdGVyIGNvbW1hbmRzIHRoYXQgY2FuIGJlIGNhbGxlZCB2aWEgY2FsbDogaW5zdHJ1Y3Rpb24uXG5cdCAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBhIHBpcGUgd2l0aCBpdHMgb3duIGZ1bmN0aW9uYWxpdHkuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEByZXR1cm4ge1RyYW5zZm9ybWVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqL1xuXHRzZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaykge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5zZXQobmFtZSwgY2FsbGJhY2spO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAcmV0dXJuIHtmdW5jdGlvblxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiBnZXRDaGVja1N0YXRlQ2FsbGJhY2soKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoY3VycmVudCkge1xuXHRcdC8vIHRoaXMgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgb2JqZWN0ICh0aGVyZWZvcmUgbm8gYXJyYXkgZnVuY3Rpb24gaGVyZSlcblx0XHRpZiAodGhpcyBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdGlmIChbXCJyYWRpb1wiLCBcImNoZWNrYm94XCJdLmluZGV4T2YodGhpcy50eXBlKSAhPT0gLTEpIHtcblx0XHRcdFx0cmV0dXJuIGAke3RoaXMudmFsdWV9YCA9PT0gYCR7Y3VycmVudH1gID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzIGluc3RhbmNlb2YgSFRNTE9wdGlvbkVsZW1lbnQpIHtcblx0XHRcdGlmIChpc0FycmF5KGN1cnJlbnQpICYmIGN1cnJlbnQuaW5kZXhPZih0aGlzLnZhbHVlKSAhPT0gLTEpIHtcblx0XHRcdFx0cmV0dXJuIFwidHJ1ZVwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBzeW1ib2wgPSBTeW1ib2woXCJAc2NodWthaS9tb25zdGVyL3VwZGF0ZXJAQEV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKiBAdGhpcyBVcGRhdGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGJpbmQgYXJndW1lbnQgbXVzdCBzdGFydCBhcyBhIHZhbHVlIHdpdGggYSBwYXRoXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRyb2xFdmVudEhhbmRsZXIoKSB7XG5cdGlmICh0aGlzW3N5bWJvbF0pIHtcblx0XHRyZXR1cm4gdGhpc1tzeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGguXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBvYmplY3Rcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbc3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1VQREFURVJfQklORCk7XG5cblx0XHRpZiAoZWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHF1ZXVlTWljcm90YXNrKCgpID0+IHtcblx0XHRcdHJldHJpZXZlQW5kU2V0VmFsdWUuY2FsbCh0aGlzLCBlbGVtZW50KTtcblx0XHR9KTtcblx0fTtcblxuXHRyZXR1cm4gdGhpc1tzeW1ib2xdO1xufVxuXG4vKipcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4gdm9pZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmV0cmlldmVBbmRTZXRWYWx1ZShlbGVtZW50KSB7XG5cdGNvbnN0IHBhdGhmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcih0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFN1YmplY3QoKSk7XG5cblx0bGV0IHBhdGggPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9CSU5EKTtcblx0aWYgKHBhdGggPT09IG51bGwpXG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGJpbmQgYXJndW1lbnQgbXVzdCBzdGFydCBhcyBhIHZhbHVlIHdpdGggYSBwYXRoXCIpO1xuXG5cdGlmIChwYXRoLmluZGV4T2YoXCJwYXRoOlwiKSAhPT0gMCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFwiKTtcblx0fVxuXG5cdHBhdGggPSBwYXRoLnN1YnN0cmluZyg1KTsgLy8gcmVtb3ZlIHBhdGg6IGZyb20gdGhlIHN0cmluZ1xuXG5cdGxldCB2YWx1ZTtcblxuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0Y2FzZSBcImNoZWNrYm94XCI6XG5cdFx0XHRcdHZhbHVlID0gZWxlbWVudC5jaGVja2VkID8gZWxlbWVudC52YWx1ZSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcblx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0Y2FzZSBcInNlbGVjdC1vbmVcIjpcblx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzZWxlY3QtbXVsdGlwbGVcIjpcblx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXG5cdFx0XHRcdGxldCBvcHRpb25zID0gZWxlbWVudD8uc2VsZWN0ZWRPcHRpb25zO1xuXHRcdFx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6c2NvcGUgb3B0aW9uOmNoZWNrZWRcIik7XG5cdFx0XHRcdHZhbHVlID0gQXJyYXkuZnJvbShvcHRpb25zKS5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpO1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdC8vIHZhbHVlcyBmcm9tIGN1c3RvbSBlbGVtZW50c1xuXHR9IGVsc2UgaWYgKFxuXHRcdChlbGVtZW50Py5jb25zdHJ1Y3Rvcj8ucHJvdG90eXBlICYmXG5cdFx0XHQhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG5cdFx0XHRcdGVsZW1lbnQuY29uc3RydWN0b3IucHJvdG90eXBlLFxuXHRcdFx0XHRcInZhbHVlXCIsXG5cdFx0XHQpPy5bXCJnZXRcIl0pIHx8XG5cdFx0ZWxlbWVudC5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpXG5cdCkge1xuXHRcdHZhbHVlID0gZWxlbWVudD8uW1widmFsdWVcIl07XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgb2JqZWN0XCIpO1xuXHR9XG5cblx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdGNvbnN0IHR5cGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9CSU5EX1RZUEUpO1xuXHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0Y2FzZSBcIm51bWJlclwiOlxuXHRcdFx0Y2FzZSBcImludFwiOlxuXHRcdFx0Y2FzZSBcImZsb2F0XCI6XG5cdFx0XHRjYXNlIFwiaW50ZWdlclwiOlxuXHRcdFx0XHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdFx0XHRcdGlmIChpc05hTih2YWx1ZSkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0Y2FzZSBcImJvb2xcIjpcblx0XHRcdGNhc2UgXCJjaGVja2JveFwiOlxuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlID09PSBcInRydWVcIiB8fCB2YWx1ZSA9PT0gXCIxXCIgfHwgdmFsdWUgPT09IFwib25cIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiYXJyYXlcIjpcblx0XHRcdGNhc2UgXCJsaXN0XCI6XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuc3BsaXQoXCIsXCIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJvYmplY3RcIjpcblx0XHRcdGNhc2UgXCJqc29uXCI6XG5cdFx0XHRcdHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgY29weSA9IGNsb25lKHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKSk7XG5cblx0Y29uc3QgcGYgPSBuZXcgUGF0aGZpbmRlcihjb3B5KTtcblx0cGYuc2V0VmlhKHBhdGgsIHZhbHVlKTtcblxuXHRjb25zdCBkaWZmUmVzdWx0ID0gZGlmZihjb3B5LCB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFJlYWxTdWJqZWN0KCkpO1xuXG5cdGlmIChkaWZmUmVzdWx0Lmxlbmd0aCA+IDApIHtcblx0XHRwYXRoZmluZGVyLnNldFZpYShwYXRoLCB2YWx1ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI3LjBcbiAqIEByZXR1cm4gdm9pZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmV0cmlldmVGcm9tQmluZGluZ3MoKSB7XG5cdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50Lm1hdGNoZXMoYFske0FUVFJJQlVURV9VUERBVEVSX0JJTkR9XWApKSB7XG5cdFx0cmV0cmlldmVBbmRTZXRWYWx1ZS5jYWxsKHRoaXMsIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQpO1xuXHR9XG5cblx0Zm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50XG5cdFx0LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0FUVFJJQlVURV9VUERBVEVSX0JJTkR9XWApXG5cdFx0LmVudHJpZXMoKSkge1xuXHRcdHJldHJpZXZlQW5kU2V0VmFsdWUuY2FsbCh0aGlzLCBlbGVtZW50KTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHBhcmFtIHtvYmplY3R9IGNoYW5nZVxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRWxlbWVudChjaGFuZ2UpIHtcblx0Zm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50XG5cdFx0LnF1ZXJ5U2VsZWN0b3JBbGwoYDpzY29wZSBbJHtBVFRSSUJVVEVfVVBEQVRFUl9SRU1PVkV9XWApXG5cdFx0LmVudHJpZXMoKSkge1xuXHRcdGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHBhcmFtIHtvYmplY3R9IGNoYW5nZVxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlXG4gKiBAdGhyb3dzIHtFcnJvcn0gcGlwZXMgYXJlIG5vdCBhbGxvd2VkIHdoZW4gY2xvbmluZyBhIG5vZGUuXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gdGVtcGxhdGUgd2FzIGZvdW5kIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG1heGltdW0gZGVwdGggZm9yIHRoZSByZWN1cnNpb24gaXMgcmVhY2hlZC5cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqL1xuZnVuY3Rpb24gaW5zZXJ0RWxlbWVudChjaGFuZ2UpIHtcblx0Y29uc3Qgc3ViamVjdCA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKTtcblxuXHRjb25zdCBtZW0gPSBuZXcgV2Vha1NldCgpO1xuXHRsZXQgd2QgPSAwO1xuXG5cdGNvbnN0IGNvbnRhaW5lciA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQ7XG5cblx0d2hpbGUgKHRydWUpIHtcblx0XHRsZXQgZm91bmQgPSBmYWxzZTtcblx0XHR3ZCsrO1xuXG5cdFx0Y29uc3QgcCA9IGNsb25lKGNoYW5nZT8uW1wicGF0aFwiXSk7XG5cdFx0aWYgKCFpc0FycmF5KHApKSByZXR1cm47XG5cblx0XHR3aGlsZSAocC5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50ID0gcC5qb2luKFwiLlwiKTtcblxuXHRcdFx0bGV0IGl0ZXJhdG9yID0gbmV3IFNldCgpO1xuXHRcdFx0Y29uc3QgcXVlcnkgPSBgWyR7QVRUUklCVVRFX1VQREFURVJfSU5TRVJUfSo9XCJwYXRoOiR7Y3VycmVudH1cIl1gO1xuXG5cdFx0XHRjb25zdCBlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpO1xuXG5cdFx0XHRpZiAoZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGl0ZXJhdG9yID0gbmV3IFNldChbLi4uZV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY29udGFpbmVyLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRcdGl0ZXJhdG9yLmFkZChjb250YWluZXIpO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IFssIGNvbnRhaW5lckVsZW1lbnRdIG9mIGl0ZXJhdG9yLmVudHJpZXMoKSkge1xuXHRcdFx0XHRpZiAobWVtLmhhcyhjb250YWluZXJFbGVtZW50KSkgY29udGludWU7XG5cdFx0XHRcdG1lbS5hZGQoY29udGFpbmVyRWxlbWVudCk7XG5cblx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXG5cdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBjb250YWluZXJFbGVtZW50LmdldEF0dHJpYnV0ZShcblx0XHRcdFx0XHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlQsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChhdHRyaWJ1dGVzID09PSBudWxsKSBjb250aW51ZTtcblxuXHRcdFx0XHRjb25zdCBkZWYgPSB0cmltU3BhY2VzKGF0dHJpYnV0ZXMpO1xuXHRcdFx0XHRjb25zdCBpID0gZGVmLmluZGV4T2YoXCIgXCIpO1xuXHRcdFx0XHRjb25zdCBrZXkgPSB0cmltU3BhY2VzKGRlZi5zdWJzdHIoMCwgaSkpO1xuXHRcdFx0XHRjb25zdCByZWZQcmVmaXggPSBgJHtrZXl9LWA7XG5cdFx0XHRcdGNvbnN0IGNtZCA9IHRyaW1TcGFjZXMoZGVmLnN1YnN0cihpKSk7XG5cblx0XHRcdFx0Ly8gdGhpcyBjYXNlIGlzIGFjdHVhbGx5IGV4Y2x1ZGVkIGJ5IHRoZSBxdWVyeSBidXQgaXMgbmV2ZXJ0aGVsZXNzIGNoZWNrZWQgYWdhaW4gaGVyZVxuXHRcdFx0XHRpZiAoY21kLmluZGV4T2YoXCJ8XCIpID4gMCkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInBpcGVzIGFyZSBub3QgYWxsb3dlZCB3aGVuIGNsb25pbmcgYSBub2RlLlwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZShjbWQpO1xuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5jYWxsYmFja3MuZm9yRWFjaCgoZiwgbikgPT4ge1xuXHRcdFx0XHRcdHBpcGUuc2V0Q2FsbGJhY2sobiwgZik7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGxldCB2YWx1ZTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb250YWluZXJFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFKTtcblx0XHRcdFx0XHR2YWx1ZSA9IHBpcGUucnVuKHN1YmplY3QpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0Y29udGFpbmVyRWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGRhdGFQYXRoID0gY21kLnNwbGl0KFwiOlwiKS5wb3AoKTtcblxuXHRcdFx0XHRsZXQgaW5zZXJ0UG9pbnQ7XG5cdFx0XHRcdGlmIChjb250YWluZXJFbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0XHRcdGluc2VydFBvaW50ID0gY29udGFpbmVyRWxlbWVudC5sYXN0Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIWlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIHZhbHVlIGlzIG5vdCBpdGVyYWJsZVwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGF2YWlsYWJsZSA9IG5ldyBTZXQoKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFtpXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRjb25zdCByZWYgPSByZWZQcmVmaXggKyBpO1xuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRQYXRoID0gYCR7ZGF0YVBhdGh9LiR7aX1gO1xuXG5cdFx0XHRcdFx0YXZhaWxhYmxlLmFkZChyZWYpO1xuXHRcdFx0XHRcdGNvbnN0IHJlZkVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdFx0XHRgWyR7QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRX09XCIke3JlZn1cIl1gLFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRpZiAocmVmRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRpbnNlcnRQb2ludCA9IHJlZkVsZW1lbnQ7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhcHBlbmROZXdEb2N1bWVudEZyYWdtZW50KGNvbnRhaW5lckVsZW1lbnQsIGtleSwgcmVmLCBjdXJyZW50UGF0aCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBub2RlcyA9IGNvbnRhaW5lckVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0XHRgWyR7QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRX0qPVwiJHtyZWZQcmVmaXh9XCJdYCxcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFssIG5vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGVzKSkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCFhdmFpbGFibGUuaGFzKFxuXHRcdFx0XHRcdFx0XHRub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFKSxcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5lckVsZW1lbnQucmVtb3ZlQ2hpbGQobm9kZSk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5lckVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XHRcdFx0YCR7Y29udGFpbmVyRWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSl9LCAke1xuXHRcdFx0XHRcdFx0XHRcdFx0ZS5tZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0fWAudHJpbSgpLFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRwLnBvcCgpO1xuXHRcdH1cblxuXHRcdGlmIChmb3VuZCA9PT0gZmFsc2UpIGJyZWFrO1xuXHRcdGlmICh3ZCsrID4gMjAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgbWF4aW11bSBkZXB0aCBmb3IgdGhlIHJlY3Vyc2lvbiBpcyByZWFjaGVkLlwiKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWZcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gdGVtcGxhdGUgd2FzIGZvdW5kIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZE5ld0RvY3VtZW50RnJhZ21lbnQoY29udGFpbmVyLCBrZXksIHJlZiwgcGF0aCkge1xuXHRjb25zdCB0ZW1wbGF0ZSA9IGZpbmREb2N1bWVudFRlbXBsYXRlKGtleSwgY29udGFpbmVyKTtcblxuXHRjb25zdCBub2RlcyA9IHRlbXBsYXRlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0Zm9yIChjb25zdCBbLCBub2RlXSBvZiBPYmplY3QuZW50cmllcyhub2Rlcy5jaGlsZE5vZGVzKSkge1xuXHRcdGlmIChub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGFwcGx5UmVjdXJzaXZlKG5vZGUsIGtleSwgcGF0aCk7XG5cdFx0XHRub2RlLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLCByZWYpO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZChub2RlKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiBhcHBseVJlY3Vyc2l2ZShub2RlLCBrZXksIHBhdGgpIHtcblx0aWYgKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFKSkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFKTtcblx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFLFxuXHRcdFx0XHR2YWx1ZS5yZXBsYWNlQWxsKGBwYXRoOiR7a2V5fWAsIGBwYXRoOiR7cGF0aH1gKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMpKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMpO1xuXHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMsXG5cdFx0XHRcdHZhbHVlLnJlcGxhY2VBbGwoYHBhdGg6JHtrZXl9YCwgYHBhdGg6JHtwYXRofWApLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFssIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyhub2RlLmNoaWxkTm9kZXMpKSB7XG5cdFx0XHRhcHBseVJlY3Vyc2l2ZShjaGlsZCwga2V5LCBwYXRoKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7b2JqZWN0fSBjaGFuZ2VcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRlbnQoY2hhbmdlKSB7XG5cdGNvbnN0IHN1YmplY3QgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFJlYWxTdWJqZWN0KCk7XG5cblx0Y29uc3QgcCA9IGNsb25lKGNoYW5nZT8uW1wicGF0aFwiXSk7XG5cdHJ1blVwZGF0ZUNvbnRlbnQuY2FsbCh0aGlzLCB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LCBwLCBzdWJqZWN0KTtcblxuXHRjb25zdCBzbG90cyA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcInNsb3RcIik7XG5cdGlmIChzbG90cy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBbLCBzbG90XSBvZiBPYmplY3QuZW50cmllcyhzbG90cykpIHtcblx0XHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdC5hc3NpZ25lZE5vZGVzKCkpKSB7XG5cdFx0XHRcdHJ1blVwZGF0ZUNvbnRlbnQuY2FsbCh0aGlzLCBlbGVtZW50LCBwLCBzdWJqZWN0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICogQHBhcmFtIHthcnJheX0gcGFydHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiBydW5VcGRhdGVDb250ZW50KGNvbnRhaW5lciwgcGFydHMsIHN1YmplY3QpIHtcblx0aWYgKCFpc0FycmF5KHBhcnRzKSkgcmV0dXJuO1xuXHRpZiAoIShjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybjtcblx0cGFydHMgPSBjbG9uZShwYXJ0cyk7XG5cblx0Y29uc3QgbWVtID0gbmV3IFdlYWtTZXQoKTtcblxuXHR3aGlsZSAocGFydHMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSBwYXJ0cy5qb2luKFwiLlwiKTtcblx0XHRwYXJ0cy5wb3AoKTtcblxuXHRcdC8vIFVuZm9ydHVuYXRlbHksIHN0YXRpYyBkYXRhIGlzIGFsd2F5cyBjaGFuZ2VkIGFzIHdlbGwsIHNpbmNlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byByZWFjdCB0byBjaGFuZ2VzIGhlcmUuXG5cdFx0Y29uc3QgcXVlcnkgPSBgWyR7QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRX1ePVwicGF0aDoke2N1cnJlbnR9XCJdLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFfV49XCJzdGF0aWM6XCJdLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFfV49XCJpMThuOlwiXWA7XG5cdFx0Y29uc3QgZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAke3F1ZXJ5fWApO1xuXG5cdFx0Y29uc3QgaXRlcmF0b3IgPSBuZXcgU2V0KFsuLi5lXSk7XG5cblx0XHRpZiAoY29udGFpbmVyLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRpdGVyYXRvci5hZGQoY29udGFpbmVyKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG5cdFx0ICovXG5cdFx0Zm9yIChjb25zdCBbZWxlbWVudF0gb2YgaXRlcmF0b3IuZW50cmllcygpKSB7XG5cdFx0XHRpZiAobWVtLmhhcyhlbGVtZW50KSkgcmV0dXJuO1xuXHRcdFx0bWVtLmFkZChlbGVtZW50KTtcblxuXHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UpO1xuXHRcdFx0Y29uc3QgY21kID0gdHJpbVNwYWNlcyhhdHRyaWJ1dGVzKTtcblxuXHRcdFx0Y29uc3QgcGlwZSA9IG5ldyBQaXBlKGNtZCk7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5jYWxsYmFja3MuZm9yRWFjaCgoZiwgbikgPT4ge1xuXHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKG4sIGYpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGxldCB2YWx1ZTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpO1xuXHRcdFx0XHR2YWx1ZSA9IHBpcGUucnVuKHN1YmplY3QpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHR3aGlsZSAoZWxlbWVudC5maXJzdENoaWxkKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50LmZpcnN0Q2hpbGQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRlbGVtZW50LmFwcGVuZENoaWxkKHZhbHVlKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XHRcdGAke2VsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpfSwgJHtcblx0XHRcdFx0XHRcdFx0ZS5tZXNzYWdlXG5cdFx0XHRcdFx0XHR9YC50cmltKCksXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiB1cGRhdGVBdHRyaWJ1dGVzKGNoYW5nZSkge1xuXHRjb25zdCBzdWJqZWN0ID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXHRjb25zdCBwID0gY2xvbmUoY2hhbmdlPy5bXCJwYXRoXCJdKTtcblx0cnVuVXBkYXRlQXR0cmlidXRlcy5jYWxsKHRoaXMsIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQsIHAsIHN1YmplY3QpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXJcbiAqIEBwYXJhbSB7YXJyYXl9IHBhcnRzXG4gKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqL1xuZnVuY3Rpb24gcnVuVXBkYXRlQXR0cmlidXRlcyhjb250YWluZXIsIHBhcnRzLCBzdWJqZWN0KSB7XG5cdGlmICghaXNBcnJheShwYXJ0cykpIHJldHVybjtcblx0cGFydHMgPSBjbG9uZShwYXJ0cyk7XG5cblx0Y29uc3QgbWVtID0gbmV3IFdlYWtTZXQoKTtcblxuXHR3aGlsZSAocGFydHMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSBwYXJ0cy5qb2luKFwiLlwiKTtcblx0XHRwYXJ0cy5wb3AoKTtcblxuXHRcdGxldCBpdGVyYXRvciA9IG5ldyBTZXQoKTtcblxuXHRcdGNvbnN0IHF1ZXJ5ID0gYFske0FUVFJJQlVURV9VUERBVEVSX1NFTEVDVF9USElTfV1bJHtBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTfV0sIFske0FUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVN9Kj1cInBhdGg6JHtjdXJyZW50fVwiXSwgWyR7QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFU31ePVwic3RhdGljOlwiXSwgWyR7QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFU31ePVwiaTE4bjpcIl1gO1xuXG5cdFx0Y29uc3QgZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KTtcblxuXHRcdGlmIChlLmxlbmd0aCA+IDApIHtcblx0XHRcdGl0ZXJhdG9yID0gbmV3IFNldChbLi4uZV0pO1xuXHRcdH1cblxuXHRcdGlmIChjb250YWluZXIubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdGl0ZXJhdG9yLmFkZChjb250YWluZXIpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgW2VsZW1lbnRdIG9mIGl0ZXJhdG9yLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKG1lbS5oYXMoZWxlbWVudCkpIHJldHVybjtcblx0XHRcdG1lbS5hZGQoZWxlbWVudCk7XG5cblx0XHRcdC8vIHRoaXMgY2FzZSBvY2N1cnMgd2hlbiB0aGUgQVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVMgYXR0cmlidXRlIGlzIHNldFxuXHRcdFx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTKSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMpO1xuXG5cdFx0XHRmb3IgKGxldCBbLCBkZWZdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMuc3BsaXQoXCIsXCIpKSkge1xuXHRcdFx0XHRkZWYgPSB0cmltU3BhY2VzKGRlZik7XG5cdFx0XHRcdGNvbnN0IGkgPSBkZWYuaW5kZXhPZihcIiBcIik7XG5cdFx0XHRcdGNvbnN0IG5hbWUgPSB0cmltU3BhY2VzKGRlZi5zdWJzdHIoMCwgaSkpO1xuXHRcdFx0XHRjb25zdCBjbWQgPSB0cmltU3BhY2VzKGRlZi5zdWJzdHIoaSkpO1xuXG5cdFx0XHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZShjbWQpO1xuXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5mb3JFYWNoKChmLCBuKSA9PiB7XG5cdFx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhuLCBmLCBlbGVtZW50KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0bGV0IHZhbHVlO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpO1xuXHRcdFx0XHRcdHZhbHVlID0gcGlwZS5ydW4oc3ViamVjdCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIHtcblx0XHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRoYW5kbGVJbnB1dENvbnRyb2xBdHRyaWJ1dGVVcGRhdGUuY2FsbCh0aGlzLCBlbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8Kn0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRoaXMgVXBkYXRlclxuICovXG5cbmZ1bmN0aW9uIGhhbmRsZUlucHV0Q29udHJvbEF0dHJpYnV0ZVVwZGF0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSB7XG5cdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdGNhc2UgXCJzZWxlY3QtbXVsdGlwbGVcIjpcblx0XHRcdFx0Zm9yIChjb25zdCBbaW5kZXgsIG9wdF0gb2YgT2JqZWN0LmVudHJpZXMoZWxlbWVudC5vcHRpb25zKSkge1xuXHRcdFx0XHRcdGlmICh2YWx1ZS5pbmRleE9mKG9wdC52YWx1ZSkgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRvcHQuc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvcHQuc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzZWxlY3Qtb25lXCI6XG5cdFx0XHRcdC8vIE9ubHkgb25lIHZhbHVlIG1heSBiZSBzZWxlY3RlZFxuXG5cdFx0XHRcdGZvciAoY29uc3QgW2luZGV4LCBvcHRdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW1lbnQub3B0aW9ucykpIHtcblx0XHRcdFx0XHRpZiAob3B0LnZhbHVlID09PSB2YWx1ZSkge1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0Y2FzZSBcInJhZGlvXCI6XG5cdFx0XHRcdGlmIChuYW1lID09PSBcImNoZWNrZWRcIikge1xuXHRcdFx0XHRcdGVsZW1lbnQuY2hlY2tlZCA9IHZhbHVlICE9PSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcImNoZWNrYm94XCI6XG5cdFx0XHRcdGlmIChuYW1lID09PSBcImNoZWNrZWRcIikge1xuXHRcdFx0XHRcdGVsZW1lbnQuY2hlY2tlZCA9IHZhbHVlICE9PSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ0ZXh0XCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAobmFtZSA9PT0gXCJ2YWx1ZVwiKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC52YWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyBcIlwiIDogdmFsdWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcblx0XHRpZiAobmFtZSA9PT0gXCJ2YWx1ZVwiKSB7XG5cdFx0XHRlbGVtZW50LnZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiB2YWx1ZTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGVMaXN0fEhUTUxFbGVtZW50fFNldDxIVE1MRWxlbWVudD59IGVsZW1lbnRzXG4gKiBAcGFyYW0ge1N5bWJvbH0gc3ltYm9sXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnXG4gKlxuICogQ29uZmlnOiBlbmFibGVFdmVudFByb2Nlc3Npbmcge2Jvb2xlYW59IC0gZGVmYXVsdDogZmFsc2UgLSBlbmFibGVzIHRoZSBldmVudCBwcm9jZXNzaW5nXG4gKlxuICogQHJldHVybiB7UHJvbWlzZVtdfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMy4wXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IGVsZW1lbnRzIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBOb2RlTGlzdCwgSFRNTEVsZW1lbnQgb3IgU2V0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gc3ltYm9sIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgU3ltYm9sXG4gKi9cbmZ1bmN0aW9uIGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50KGVsZW1lbnRzLCBzeW1ib2wsIG9iamVjdCwgY29uZmlnID0ge30pIHtcblx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcInRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFwiLFxuXHRcdCk7XG5cdH1cblxuXHRpZiAoISh0eXBlb2Ygc3ltYm9sID09PSBcInN5bWJvbFwiKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJzeW1ib2wgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBTeW1ib2xcIik7XG5cdH1cblxuXHRjb25zdCB1cGRhdGVycyA9IG5ldyBTZXQoKTtcblxuXHRpZiAoZWxlbWVudHMgaW5zdGFuY2VvZiBOb2RlTGlzdCkge1xuXHRcdGVsZW1lbnRzID0gbmV3IFNldChbLi4uZWxlbWVudHNdKTtcblx0fSBlbHNlIGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0ZWxlbWVudHMgPSBuZXcgU2V0KFtlbGVtZW50c10pO1xuXHR9IGVsc2UgaWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgU2V0KSB7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdGBlbGVtZW50cyBpcyBub3QgYSB2YWxpZCB0eXBlLiAoYWN0dWFsOiAke3R5cGVvZiBlbGVtZW50c30pYCxcblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0Y29uc3QgdXBkYXRlckNhbGxiYWNrcyA9IFtdO1xuXHRjb25zdCBjYiA9IHRoaXM/Llt1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sXTtcblx0aWYgKHRoaXMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGNvbnN0IGNhbGxiYWNrcyA9IGNiLmNhbGwodGhpcyk7XG5cdFx0aWYgKHR5cGVvZiBjYWxsYmFja3MgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGZvciAoY29uc3QgW25hbWUsIGNhbGxiYWNrXSBvZiBPYmplY3QuZW50cmllcyhjYWxsYmFja3MpKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHVwZGF0ZXJDYWxsYmFja3MucHVzaChbbmFtZSwgY2FsbGJhY2tdKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHRcdFx0YG9uVXBkYXRlclBpcGVDYWxsYmFja3M6ICR7bmFtZX0gaXMgbm90IGEgZnVuY3Rpb25gLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdGBvblVwZGF0ZXJQaXBlQ2FsbGJhY2tzIGRvIG5vdCByZXR1cm4gYW4gb2JqZWN0IHdpdGggZnVuY3Rpb25zYCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0ZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybjtcblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHJldHVybjtcblxuXHRcdGNvbnN0IHUgPSBuZXcgVXBkYXRlcihlbGVtZW50LCBvYmplY3QpO1xuXHRcdHVwZGF0ZXJzLmFkZCh1KTtcblxuXHRcdGlmICh1cGRhdGVyQ2FsbGJhY2tzLmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAoY29uc3QgW25hbWUsIGNhbGxiYWNrXSBvZiB1cGRhdGVyQ2FsbGJhY2tzKSB7XG5cdFx0XHRcdHUuc2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2spO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJlc3VsdC5wdXNoKFxuXHRcdFx0dS5ydW4oKS50aGVuKCgpID0+IHtcblx0XHRcdFx0aWYgKGNvbmZpZy5ldmVudFByb2Nlc3NpbmcgPT09IHRydWUpIHtcblx0XHRcdFx0XHR1LmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHU7XG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9KTtcblxuXHRpZiAodXBkYXRlcnMuc2l6ZSA+IDApIHtcblx0XHRhZGRUb09iamVjdExpbmsodGhpcywgc3ltYm9sLCB1cGRhdGVycyk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGdldFNsb3R0ZWRFbGVtZW50cywgZ2V0U2xvdHRlZE5vZGVzIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfHVuZGVmaW5lZH0gcXVlcnlcbiAqIEBwYXJhbSB7U3RyaW5nfHVuZGVmaW5lZHxudWxsfSBuYW1lIG5hbWUgb2YgdGhlIHNsb3QgKGlmIHRoZSBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLCBhbGwgc2xvdHMgYXJlIHNlYXJjaGVkLCBpZiB0aGUgcGFyYW1ldGVyIGhhcyB0aGUgdmFsdWUgbnVsbCwgYWxsIHNsb3RzIHdpdGhvdXQgYSBuYW1lIGFyZSBzZWFyY2hlZC4gaWYgYSBzdHJpbmcgaXMgc3BlY2lmaWVkLCB0aGUgc2xvdHMgd2l0aCB0aGlzIG5hbWUgYXJlIHNlYXJjaGVkLilcbiAqIEByZXR1cm4geyp9XG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjMzLjBcbiAqIEB0aHJvd3Mge0Vycm9yfSBxdWVyeSBtdXN0IGJlIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFNsb3R0ZWROb2RlcyhxdWVyeSwgbmFtZSkge1xuXHRjb25zdCByZXN1bHQgPSBuZXcgU2V0KCk7XG5cblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0bGV0IHNlbGVjdG9yID0gXCJzbG90XCI7XG5cdGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAobmFtZSA9PT0gbnVsbCkge1xuXHRcdFx0c2VsZWN0b3IgKz0gXCI6bm90KFtuYW1lXSlcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZWN0b3IgKz0gYFtuYW1lPSR7dmFsaWRhdGVTdHJpbmcobmFtZSl9XWA7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc2xvdHMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cblx0Zm9yIChjb25zdCBbLCBzbG90XSBvZiBPYmplY3QuZW50cmllcyhzbG90cykpIHtcblx0XHRzbG90LmFzc2lnbmVkTm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG5cdFx0XHRpZiAobm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNTdHJpbmcocXVlcnkpKSB7XG5cdFx0XHRcdG5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeSkuZm9yRWFjaChmdW5jdGlvbiAobikge1xuXHRcdFx0XHRcdHJlc3VsdC5hZGQobik7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChub2RlLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRcdFx0cmVzdWx0LmFkZChub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChxdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInF1ZXJ5IG11c3QgYmUgYSBzdHJpbmdcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQuYWRkKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfSBxdWVyeVxuICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfG51bGx9IG5hbWUgbmFtZSBvZiB0aGUgc2xvdCAoaWYgdGhlIHBhcmFtZXRlciBpcyB1bmRlZmluZWQsIGFsbCBzbG90cyBhcmUgc2VhcmNoZWQsIGlmIHRoZSBwYXJhbWV0ZXIgaGFzIHRoZSB2YWx1ZSBudWxsLCBhbGwgc2xvdHMgd2l0aG91dCBhIG5hbWUgYXJlIHNlYXJjaGVkLiBpZiBhIHN0cmluZyBpcyBzcGVjaWZpZWQsIHRoZSBzbG90cyB3aXRoIHRoaXMgbmFtZSBhcmUgc2VhcmNoZWQuKVxuICogQHJldHVybiB7Kn1cbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjMuMFxuICogQHRocm93cyB7RXJyb3J9IHF1ZXJ5IG11c3QgYmUgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0U2xvdHRlZEVsZW1lbnRzKHF1ZXJ5LCBuYW1lKSB7XG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuXHRpZiAoISh0aGlzLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRsZXQgc2VsZWN0b3IgPSBcInNsb3RcIjtcblx0aWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChuYW1lID09PSBudWxsKSB7XG5cdFx0XHRzZWxlY3RvciArPSBcIjpub3QoW25hbWVdKVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxlY3RvciArPSBgW25hbWU9JHt2YWxpZGF0ZVN0cmluZyhuYW1lKX1dYDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzbG90cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblxuXHRmb3IgKGNvbnN0IFssIHNsb3RdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RzKSkge1xuXHRcdHNsb3QuYXNzaWduZWRFbGVtZW50cygpLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0IShub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpICYmXG5cdFx0XHRcdCEobm9kZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpICYmXG5cdFx0XHRcdCEobm9kZSBpbnN0YW5jZW9mIE1hdGhNTEVsZW1lbnQpXG5cdFx0XHQpXG5cdFx0XHRcdHJldHVybjtcblxuXHRcdFx0aWYgKGlzU3RyaW5nKHF1ZXJ5KSkge1xuXHRcdFx0XHRpZiAocXVlcnkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeSkuZm9yRWFjaChmdW5jdGlvbiAobikge1xuXHRcdFx0XHRcdFx0cmVzdWx0LmFkZChuKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGlmIChub2RlLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQuYWRkKG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXN1bHQuYWRkKG5vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicXVlcnkgbXVzdCBiZSBhIHN0cmluZyBhbmQgbm90IGVtcHR5XCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0LmFkZChub2RlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuZXhwb3J0IHsgZXh0cmFjdEtleXMgfTtcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUga2V5cyBmcm9tIHRoZSBnaXZlbiBvYmplY3QgYW5kIHJldHVybnMgYSBtYXAgd2l0aCB0aGUga2V5cyBhbmQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5UHJlZml4XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5U2VwYXJhdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVTZXBhcmF0b3JcbiAqIEByZXR1cm4ge01hcDxhbnksIGFueT59XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RLZXlzKFxuXHRvYmosXG5cdGtleVByZWZpeCA9IFwiXCIsXG5cdGtleVNlcGFyYXRvciA9IFwiLVwiLFxuXHR2YWx1ZVNlcGFyYXRvciA9IFwiLlwiLFxuKSB7XG5cdGNvbnN0IHJlc3VsdE1hcCA9IG5ldyBNYXAoKTtcblxuXHRmdW5jdGlvbiBoZWxwZXIoY3VycmVudE9iaiwgY3VycmVudEtleVByZWZpeCwgY3VycmVudFZhbHVlUHJlZml4KSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gY3VycmVudE9iaikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRjdXJyZW50T2JqW2tleV0gIT09IG51bGwgJiZcblx0XHRcdFx0dHlwZW9mIGN1cnJlbnRPYmpba2V5XSA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0XHQhQXJyYXkuaXNBcnJheShjdXJyZW50T2JqW2tleV0pXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgbmV3S2V5UHJlZml4ID0gY3VycmVudEtleVByZWZpeFxuXHRcdFx0XHRcdD8gY3VycmVudEtleVByZWZpeCArIGtleVNlcGFyYXRvciArIGtleS50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdFx0OiBrZXkudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0Y29uc3QgbmV3VmFsdWVQcmVmaXggPSBjdXJyZW50VmFsdWVQcmVmaXhcblx0XHRcdFx0XHQ/IGN1cnJlbnRWYWx1ZVByZWZpeCArIHZhbHVlU2VwYXJhdG9yICsga2V5XG5cdFx0XHRcdFx0OiBrZXk7XG5cdFx0XHRcdGhlbHBlcihjdXJyZW50T2JqW2tleV0sIG5ld0tleVByZWZpeCwgbmV3VmFsdWVQcmVmaXgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZmluYWxLZXkgPSBjdXJyZW50S2V5UHJlZml4XG5cdFx0XHRcdFx0PyBjdXJyZW50S2V5UHJlZml4ICsga2V5U2VwYXJhdG9yICsga2V5LnRvTG93ZXJDYXNlKClcblx0XHRcdFx0XHQ6IGtleS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRjb25zdCBmaW5hbFZhbHVlID0gY3VycmVudFZhbHVlUHJlZml4XG5cdFx0XHRcdFx0PyBjdXJyZW50VmFsdWVQcmVmaXggKyB2YWx1ZVNlcGFyYXRvciArIGtleVxuXHRcdFx0XHRcdDoga2V5O1xuXHRcdFx0XHRyZXN1bHRNYXAuc2V0KGZpbmFsS2V5LCBmaW5hbFZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoZWxwZXIob2JqLCBrZXlQcmVmaXgsIGtleVByZWZpeCk7XG5cdHJldHVybiByZXN1bHRNYXA7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi8uLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQge1xuXHRpc0Jvb2xlYW4sXG5cdGlzU3RyaW5nLFxuXHRpc09iamVjdCxcblx0aXNBcnJheSxcblx0aXNGdW5jdGlvbixcblx0aXNJbnRlZ2VyLFxufSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBleHRyYWN0S2V5cyB9IGZyb20gXCIuL2V4dHJhY3Qta2V5cy5tanNcIjtcblxuZXhwb3J0IHsgaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyB9O1xuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSBnaXZlbiBvcHRpb25zIG9iamVjdCBiYXNlZCBvbiB0aGUgYXR0cmlidXRlcyBvZiB0aGUgY3VycmVudCBET00gZWxlbWVudC5cbiAqIFRoZSBmdW5jdGlvbiBsb29rcyBmb3IgYXR0cmlidXRlcyB3aXRoIHRoZSBwcmVmaXggJ2RhdGEtbW9uc3Rlci1vcHRpb24tJywgYW5kIG1hcHMgdGhlbSB0b1xuICogcHJvcGVydGllcyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuIEl0IHJlcGxhY2VzIHRoZSBkYXNoZXMgd2l0aCBkb3RzIHRvIGZvcm0gdGhlIHByb3BlcnR5IHBhdGguXG4gKiBGb3IgZXhhbXBsZSwgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi11cmwnIG1hcHMgdG8gdGhlICd1cmwnIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBXaXRoIHRoZSBtYXBwaW5nIHBhcmFtZXRlciwgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBjYW4gYmUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IHZhbHVlLlxuICogRm9yIGV4YW1wbGUsIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tZm9vJyBtYXBzIHRvIHRoZSAnYmFyJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKlxuICogVGhlIG1hcHBpbmcgb2JqZWN0IHdvdWxkIGxvb2sgbGlrZSB0aGlzOlxuICpcbiAqIHtcbiAqICAgICdmb28nOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAqICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbycgaXMgYXBwZW5kZWQgd2l0aCAnYmFyJ1xuICogICAgLy8gYW5kIGFzc2lnbmVkIHRvIHRoZSAnYmFyJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKiAgICAvLyBlLmcuIDxkaXYgZGF0YS1tb25zdGVyLW9wdGlvbi1mb289XCJmb29cIj48L2Rpdj5cbiAqICAgICdiYXIuYmF6JzogKHZhbHVlKSA9PiB2YWx1ZSArICdiYXInXG4gKiAgICAvLyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1iYXItYmF6JyBpcyBhcHBlbmRlZCB3aXRoICdiYXInXG4gKiAgICAvLyBhbmQgYXNzaWduZWQgdG8gdGhlICdiYXIuYmF6JyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKiAgICAvLyBlLmcuIDxkaXYgZGF0YS1tb25zdGVyLW9wdGlvbi1iYXItYmF6PVwiZm9vXCI+PC9kaXY+XG4gKiB9XG4gKlxuICogQXJyYXkgdmFsdWVzIGhhdmUgdG8gYmUgc2VwYXJhdGVkIGJ5ICc6OicuXG4gKlxuICogQHNpbmNlIDMuMzguMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBET00gZWxlbWVudCB0byBiZSB1c2VkIGFzIHRoZSBzb3VyY2Ugb2YgdGhlIGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCB0byBiZSBpbml0aWFsaXplZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXBwaW5nIC0gQSBtYXBwaW5nIGJldHdlZW4gdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhbmQgdGhlIHByb3BlcnR5IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCAtIFRoZSBwcmVmaXggb2YgdGhlIGF0dHJpYnV0ZXMgdG8gYmUgY29uc2lkZXJlZC5cbiAqIEByZXR1cm4ge09iamVjdH0gLSBUaGUgaW5pdGlhbGl6ZWQgb3B0aW9ucyBvYmplY3QuXG4gKiBAdGhpcyBIVE1MRWxlbWVudCAtIFRoZSBjb250ZXh0IG9mIHRoZSBET00gZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhcblx0ZWxlbWVudCxcblx0b3B0aW9ucyxcblx0bWFwcGluZyA9IHt9LFxuXHRwcmVmaXggPSBcImRhdGEtbW9uc3Rlci1vcHRpb24tXCIsXG4pIHtcblx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIG9wdGlvbnM7XG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpIHJldHVybiBvcHRpb25zO1xuXG5cdGNvbnN0IGtleU1hcCA9IGV4dHJhY3RLZXlzKG9wdGlvbnMpO1xuXHRjb25zdCBmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcihvcHRpb25zKTtcblxuXHRlbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzKCkuZm9yRWFjaCgobmFtZSkgPT4ge1xuXHRcdGlmICghbmFtZS5zdGFydHNXaXRoKHByZWZpeCkpIHJldHVybjtcblxuXHRcdC8vIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgbmFtZSBpcyBhIHZhbGlkIG9wdGlvbi5cblx0XHQvLyB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBhdHRyaWJ1dGUgaXMgc2ltcGxlLiBUaGUgZGFzaCBpcyByZXBsYWNlZCBieSBhIGRvdC5cblx0XHQvLyBlLmcuIGRhdGEtbW9uc3Rlci11cmwgPT4gdXJsXG5cdFx0Y29uc3Qgb3B0aW9uTmFtZSA9IGtleU1hcC5nZXQobmFtZS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCkudG9Mb3dlckNhc2UoKSk7XG5cdFx0aWYgKCFmaW5kZXIuZXhpc3RzKG9wdGlvbk5hbWUpKSByZXR1cm47XG5cblx0XHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSkpIHtcblx0XHRcdGxldCB2YWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtYXBwaW5nLmhhc093blByb3BlcnR5KG9wdGlvbk5hbWUpICYmXG5cdFx0XHRcdGlzRnVuY3Rpb24obWFwcGluZ1tvcHRpb25OYW1lXSlcblx0XHRcdCkge1xuXHRcdFx0XHR2YWx1ZSA9IG1hcHBpbmdbb3B0aW9uTmFtZV0odmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgb3B0aW9uVmFsdWUgPSBmaW5kZXIuZ2V0VmlhKG9wdGlvbk5hbWUpO1xuXHRcdFx0aWYgKG9wdGlvblZhbHVlID09PSBudWxsIHx8IG9wdGlvblZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0b3B0aW9uVmFsdWUgPSB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly9jb25zdCB0eXBlT2ZPcHRpb25WYWx1ZSA9IHR5cGVvZiBvcHRpb25WYWx1ZTtcblx0XHRcdGlmIChvcHRpb25WYWx1ZSA9PT0gbnVsbCB8fCBvcHRpb25WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhbHVlID0gbnVsbDtcblx0XHRcdH0gZWxzZSBpZiAoaXNCb29sZWFuKG9wdGlvblZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlID09PSBcInRydWVcIjtcblx0XHRcdH0gZWxzZSBpZiAoaXNJbnRlZ2VyKG9wdGlvblZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKGlzU3RyaW5nKG9wdGlvblZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKGlzT2JqZWN0KG9wdGlvblZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmIChpc0FycmF5KG9wdGlvblZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnNwbGl0KFwiOjpcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YWx1ZSA9IG9wdGlvblZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaW5kZXIuc2V0VmlhKG9wdGlvbk5hbWUsIHZhbHVlKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBvcHRpb25zO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sIH0gZnJvbSBcIi4uL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBleHRyYWN0S2V5cyB9IGZyb20gXCIuL2V4dHJhY3Qta2V5cy5tanNcIjtcblxuZXhwb3J0IHsgc2V0T3B0aW9uRnJvbUF0dHJpYnV0ZSB9O1xuXG4vKipcbiAqIFNldCB0aGUgZ2l2ZW4gb3B0aW9ucyBvYmplY3QgYmFzZWQgb24gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGN1cnJlbnQgRE9NIGVsZW1lbnQuXG4gKiBUaGUgZnVuY3Rpb24gbG9va3MgZm9yIGF0dHJpYnV0ZXMgd2l0aCB0aGUgcHJlZml4ICdkYXRhLW1vbnN0ZXItb3B0aW9uLScsIGFuZCBtYXBzIHRoZW0gdG9cbiAqIHByb3BlcnRpZXMgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LiBJdCByZXBsYWNlcyB0aGUgZGFzaGVzIHdpdGggZG90cyB0byBmb3JtIHRoZSBwcm9wZXJ0eSBwYXRoLlxuICogRm9yIGV4YW1wbGUsIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJyBtYXBzIHRvIHRoZSAndXJsJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKlxuICogV2l0aCB0aGUgbWFwcGluZyBwYXJhbWV0ZXIsIHRoZSBhdHRyaWJ1dGUgdmFsdWUgY2FuIGJlIG1hcHBlZCB0byBhIGRpZmZlcmVudCB2YWx1ZS5cbiAqIEZvciBleGFtcGxlLCB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbycgbWFwcyB0byB0aGUgJ2JhcicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIFRoZSBtYXBwaW5nIG9iamVjdCB3b3VsZCBsb29rIGxpa2UgdGhpczpcbiAqIHtcbiAqICAgICdmb28nOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAqICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbycgaXMgYXBwZW5kZWQgd2l0aCAnYmFyJ1xuICogICAgLy8gYW5kIGFzc2lnbmVkIHRvIHRoZSAnYmFyJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKiAgICAvLyBlLmcuIDxkaXYgZGF0YS1tb25zdGVyLW9wdGlvbi1mb289XCJmb29cIj48L2Rpdj5cbiAqICAgICdiYXIuYmF6JzogKHZhbHVlKSA9PiB2YWx1ZSArICdiYXInXG4gKiAgICAvLyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1iYXItYmF6JyBpcyBhcHBlbmRlZCB3aXRoICdiYXInXG4gKiAgICAvLyBhbmQgYXNzaWduZWQgdG8gdGhlICdiYXIuYmF6JyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKiAgICAvLyBlLmcuIDxkaXYgZGF0YS1tb25zdGVyLW9wdGlvbi1iYXItYmF6PVwiZm9vXCI+PC9kaXY+XG4gKiB9XG4gKlxuICogQHNpbmNlIDMuNDUuMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBET00gZWxlbWVudCB0byBiZSB1c2VkIGFzIHRoZSBzb3VyY2Ugb2YgdGhlIGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gbmFtZSAtIFRoZSBhdHRyaWJ1dGUgb2JqZWN0IHRvIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBvZiB0aGUgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHRvIGJlIGluaXRpYWxpemVkLlxuICogQHBhcmFtIHtPYmplY3R9IG1hcHBpbmcgLSBBIG1hcHBpbmcgYmV0d2VlbiB0aGUgYXR0cmlidXRlIHZhbHVlIGFuZCB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IC0gVGhlIHByZWZpeCBvZiB0aGUgYXR0cmlidXRlcyB0byBiZSBjb25zaWRlcmVkLlxuICogQHJldHVybiB7T2JqZWN0fSAtIFRoZSBpbml0aWFsaXplZCBvcHRpb25zIG9iamVjdC5cbiAqIEB0aGlzIEhUTUxFbGVtZW50IC0gVGhlIGNvbnRleHQgb2YgdGhlIERPTSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBzZXRPcHRpb25Gcm9tQXR0cmlidXRlKFxuXHRlbGVtZW50LFxuXHRuYW1lLFxuXHRvcHRpb25zLFxuXHRtYXBwaW5nID0ge30sXG5cdHByZWZpeCA9IFwiZGF0YS1tb25zdGVyLW9wdGlvbi1cIixcbikge1xuXHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gb3B0aW9ucztcblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgcmV0dXJuIG9wdGlvbnM7XG5cblx0Y29uc3Qga2V5TWFwID0gZXh0cmFjdEtleXMob3B0aW9ucyk7XG5cdGNvbnN0IGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKG9wdGlvbnMpO1xuXG5cdC8vIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgbmFtZSBpcyBhIHZhbGlkIG9wdGlvbi5cblx0Ly8gdGhlIG1hcHBpbmcgYmV0d2VlbiB0aGUgYXR0cmlidXRlIGlzIHNpbXBsZS4gVGhlIGRhc2ggaXMgcmVwbGFjZWQgYnkgYSBkb3QuXG5cdC8vIGUuZy4gZGF0YS1tb25zdGVyLXVybCA9PiB1cmxcblx0Y29uc3Qgb3B0aW9uTmFtZSA9IGtleU1hcC5nZXQobmFtZS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCkudG9Mb3dlckNhc2UoKSk7XG5cdGlmICghZmluZGVyLmV4aXN0cyhvcHRpb25OYW1lKSkgcmV0dXJuO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSkpIHtcblx0XHRyZXR1cm4gb3B0aW9ucztcblx0fVxuXG5cdGxldCB2YWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXHRpZiAobWFwcGluZy5oYXNPd25Qcm9wZXJ0eShvcHRpb25OYW1lKSAmJiBpc0Z1bmN0aW9uKG1hcHBpbmdbb3B0aW9uTmFtZV0pKSB7XG5cdFx0dmFsdWUgPSBtYXBwaW5nW29wdGlvbk5hbWVdKHZhbHVlKTtcblx0fVxuXG5cdGNvbnN0IHR5cGVPZk9wdGlvblZhbHVlID0gdHlwZW9mIGZpbmRlci5nZXRWaWEob3B0aW9uTmFtZSk7XG5cdGlmICh0eXBlT2ZPcHRpb25WYWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHR2YWx1ZSA9IHZhbHVlID09PSBcInRydWVcIjtcblx0fSBlbHNlIGlmICh0eXBlT2ZPcHRpb25WYWx1ZSA9PT0gXCJudW1iZXJcIikge1xuXHRcdHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblx0fSBlbHNlIGlmICh0eXBlT2ZPcHRpb25WYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0fSBlbHNlIGlmICh0eXBlT2ZPcHRpb25WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cdH1cblxuXHRmaW5kZXIuc2V0VmlhKG9wdGlvbk5hbWUsIHZhbHVlKTtcblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5cbmltcG9ydCB7IHBhcnNlRGF0YVVSTCB9IGZyb20gXCIuLi90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzRnVuY3Rpb24sXG5cdGlzSXRlcmFibGUsXG5cdGlzT2JqZWN0LFxuXHRpc1N0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUZ1bmN0aW9uLFxuXHR2YWxpZGF0ZUluc3RhbmNlLFxuXHR2YWxpZGF0ZU9iamVjdCxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuLFxuXHRnZXRMaW5rZWRPYmplY3RzLFxuXHRoYXNPYmplY3RMaW5rLFxufSBmcm9tIFwiLi9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0RJU0FCTEVELFxuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfT1BUSU9OUyxcblx0QVRUUklCVVRFX0lOSVRfQ0FMTEJBQ0ssXG5cdEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SLFxuXHRBVFRSSUJVVEVfU0NSSVBUX0hPU1QsXG5cdGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCxcblx0aW5pdENvbnRyb2xDYWxsYmFja05hbWUsXG59IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGZpbmREb2N1bWVudFRlbXBsYXRlLCBUZW1wbGF0ZSB9IGZyb20gXCIuL3RlbXBsYXRlLm1qc1wiO1xuaW1wb3J0IHsgYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQgfSBmcm9tIFwiLi91cGRhdGVyLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBnZXRTbG90dGVkRWxlbWVudHMgfSBmcm9tIFwiLi9zbG90dGVkLm1qc1wiO1xuaW1wb3J0IHsgaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyB9IGZyb20gXCIuL3V0aWwvaW5pdC1vcHRpb25zLWZyb20tYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IHNldE9wdGlvbkZyb21BdHRyaWJ1dGUgfSBmcm9tIFwiLi91dGlsL3NldC1vcHRpb24tZnJvbS1hdHRyaWJ1dGUubWpzXCI7XG5cbmV4cG9ydCB7XG5cdEN1c3RvbUVsZW1lbnQsXG5cdGluaXRNZXRob2RTeW1ib2wsXG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG5cdHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wsXG59O1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGluaXRNZXRob2RTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBpbml0TWV0aG9kU3ltYm9sXCIpO1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGFzc2VtYmxlTWV0aG9kU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RvbS9AQGFzc2VtYmxlTWV0aG9kU3ltYm9sXCIsXG4pO1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbFwiLFxuKTtcblxuLyoqXG4gKiB0aGlzIHN5bWJvbCBob2xkcyB0aGUgYXR0cmlidXRlIG9ic2VydmVyIGNhbGxiYWNrcy4gVGhlIGtleSBpcyB0aGUgYXR0cmlidXRlIG5hbWUuXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBhdHRyaWJ1dGVPYnNlcnZlclwiLFxuKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXR0cmlidXRlTXV0YXRpb25PYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcblx0XCJAc2NodWthaS9tb25zdGVyL2RvbS9AQG11dGF0aW9uT2JzZXJ2ZXJcIixcbik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHVwZGF0ZUNsb25lRGF0YVN5bWJvbCA9IFN5bWJvbChcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAdXBkYXRlQ2xvbmVEYXRhXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzY3JpcHRIb3N0RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInNjcmlwdEhvc3RFbGVtZW50XCIpO1xuXG4vKipcbiAqIFRoZSBgQ3VzdG9tRWxlbWVudGAgY2xhc3MgcHJvdmlkZXMgYSB3YXkgdG8gZGVmaW5lIGEgbmV3IEhUTUwgZWxlbWVudCB1c2luZyB0aGUgcG93ZXIgb2YgQ3VzdG9tIEVsZW1lbnRzLlxuICpcbiAqICoqSU1QT1JUQU5UOioqIEFmdGVyIGRlZmluaW5nIGEgYEN1c3RvbUVsZW1lbnRgLCB0aGUgYHJlZ2lzdGVyQ3VzdG9tRWxlbWVudGAgbWV0aG9kIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBjbGFzcyBuYW1lXG4gKiB0byBtYWtlIHRoZSB0YWcgZGVmaW5lZCB2aWEgdGhlIGBnZXRUYWdgIG1ldGhvZCBrbm93biB0byB0aGUgRE9NLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBvYmplY3QgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpYCBmdW5jdGlvbi5cbiAqXG4gKiAjIyBTdHlsaW5nXG4gKlxuICogVG8gZGlzcGxheSBjdXN0b20gZWxlbWVudHMgb3B0aW1hbGx5LCB0aGUgYDpkZWZpbmVkYCBwc2V1ZG8tY2xhc3MgY2FuIGJlIHVzZWQuIFRvIHByZXZlbnQgY3VzdG9tIGVsZW1lbnRzIGZyb20gYmVpbmcgZGlzcGxheWVkIGFuZCBmbGlja2VyaW5nIHVudGlsIHRoZSBjb250cm9sIGlzIHJlZ2lzdGVyZWQsXG4gKiBpdCBpcyByZWNvbW1lbmRlZCB0byBjcmVhdGUgYSBDU1MgZGlyZWN0aXZlLlxuICpcbiAqIEluIHRoZSBzaW1wbGVzdCBjYXNlLCB5b3UgY2FuIHNpbXBseSBoaWRlIHRoZSBjb250cm9sOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxzdHlsZT5cbiAqIG15LWN1c3RvbS1lbGVtZW50Om5vdCg6ZGVmaW5lZCkge1xuICogICAgIGRpc3BsYXk6IG5vbmU7XG4gKiB9XG4gKlxuICogbXktY3VzdG9tLWVsZW1lbnQ6ZGVmaW5lZCB7XG4gKiAgICAgZGlzcGxheTogZmxleDtcbiAqIH1cbiAqIDwvc3R5bGU+XG4gKiBgYGBcbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGRpc3BsYXkgYSBsb2FkZXI6XG4gKlxuICogYGBgY3NzXG4gKiBteS1jdXN0b20tZWxlbWVudDpub3QoOmRlZmluZWQpIHtcbiAqICAgICBkaXNwbGF5OiBmbGV4O1xuICogICAgIGJveC1zaGFkb3c6IDAgNHB4IDEwcHggMCByZ2JhKDMzLCAzMywgMzMsIDAuMTUpO1xuICogICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAqICAgICBoZWlnaHQ6IDIwMHB4O1xuICogICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAqICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICogfVxuICpcbiAqIG15LWN1c3RvbS1lbGVtZW50Om5vdCg6ZGVmaW5lZCk6OmJlZm9yZSB7XG4gKiAgICAgY29udGVudDogJyc7XG4gKiAgICAgZGlzcGxheTogYmxvY2s7XG4gKiAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICogICAgIGxlZnQ6IC0xNTBweDtcbiAqICAgICB0b3A6IDA7XG4gKiAgICAgaGVpZ2h0OiAxMDAlO1xuICogICAgIHdpZHRoOiAxNTBweDtcbiAqICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50IDAlLCAjRThFOEU4IDUwJSwgdHJhbnNwYXJlbnQgMTAwJSk7XG4gKiAgICAgYW5pbWF0aW9uOiBsb2FkIDFzIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZTtcbiAqIH1cbiAqXG4gKiBAa2V5ZnJhbWVzIGxvYWQge1xuICogICAgIGZyb20ge1xuICogICAgICAgICBsZWZ0OiAtMTUwcHg7XG4gKiAgICAgfVxuICogICAgIHRvIHtcbiAqICAgICAgICAgbGVmdDogMTAwJTtcbiAqICAgICB9XG4gKiB9XG4gKlxuICogbXktY3VzdG9tLWVsZW1lbnQ6ZGVmaW5lZCB7XG4gKiAgICAgZGlzcGxheTogZmxleDtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQ3VzdG9tIEVsZW1lbnRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgW01ETiBXZWIgRG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvV2ViX0NvbXBvbmVudHMvVXNpbmdfY3VzdG9tX2VsZW1lbnRzKS5cbiAqIEFuZCBpbiB0aGUgW0hUTUwgU3RhbmRhcmRdKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2N1c3RvbS1lbGVtZW50cykgb3IgaW4gdGhlIFtXSEFUV0cgV2lraV0oaHR0cHM6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9DdXN0b21fRWxlbWVudHMpLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiYXNlIGNsYXNzIGZvciBIVE1MNSBjdXN0b20gY29udHJvbHMuXG4gKi9cbmNsYXNzIEN1c3RvbUVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBBIG5ldyBvYmplY3QgaXMgY3JlYXRlZC4gRmlyc3QsIHRoZSBgaW5pdE9wdGlvbnNgIG1ldGhvZCBpcyBjYWxsZWQuIEhlcmUgdGhlXG5cdCAqIG9wdGlvbnMgY2FuIGJlIGRlZmluZWQgaW4gZGVyaXZlZCBjbGFzc2VzLiBTdWJzZXF1ZW50bHksIHRoZSBzaGFkb3dSb290IGlzIGluaXRpYWxpemVkLlxuXHQgKlxuXHQgKiBJTVBPUlRBTlQ6IEN1c3RvbUNvbnRyb2xzIGluc3RhbmNlcyBhcmUgbm90IGNyZWF0ZWQgdmlhIHRoZSBjb25zdHJ1Y3RvciwgYnV0IGVpdGhlciB2aWEgYSB0YWcgaW4gdGhlIEhUTUwgb3IgdmlhIDxjb2RlPmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKTwvY29kZT4uXG5cdCAqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9uIGF0dHJpYnV0ZSBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgSlNPTiBkZWZpbml0aW9uLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdID0ge307XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBuZXcgUHJveHlPYnNlcnZlcih7XG5cdFx0XHRvcHRpb25zOiBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKHRoaXMsIGV4dGVuZCh7fSwgdGhpcy5kZWZhdWx0cykpLFxuXHRcdH0pO1xuXHRcdHRoaXNbaW5pdE1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0T3B0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0XHR0aGlzW3NjcmlwdEhvc3RFbGVtZW50U3ltYm9sXSA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hpY2ggYXR0cmlidXRlcyBhcmUgdG8gYmVcblx0ICogbW9uaXRvcmVkIGJ5IGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKWAuIFVuZm9ydHVuYXRlbHksIHRoaXMgbWV0aG9kIGlzIHN0YXRpYy5cblx0ICogVGhlcmVmb3JlLCB0aGUgYG9ic2VydmVkQXR0cmlidXRlc2AgcHJvcGVydHkgY2Fubm90IGJlIGNoYW5nZWQgZHVyaW5nIHJ1bnRpbWUuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ1tdfVxuXHQgKiBAc2luY2UgMS4xNS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGF0dHJpYnV0ZVxuXHQgKiBAcGFyYW0gY2FsbGJhY2tcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uQ3VzdG9tRWxlbWVudH1cblx0ICovXG5cdGFkZEF0dHJpYnV0ZU9ic2VydmVyKGF0dHJpYnV0ZSwgY2FsbGJhY2spIHtcblx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblx0XHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVthdHRyaWJ1dGVdID0gY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGF0dHJpYnV0ZVxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5DdXN0b21FbGVtZW50fVxuXHQgKi9cblx0cmVtb3ZlQXR0cmlidXRlT2JzZXJ2ZXIoYXR0cmlidXRlKSB7XG5cdFx0ZGVsZXRlIHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW2F0dHJpYnV0ZV07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBkZWZhdWx0c2AgcHJvcGVydHkgZGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGEgY29udHJvbC4gSWYgeW91IHdhbnQgdG8gb3ZlcnJpZGUgdGhlc2UsXG5cdCAqIHlvdSBjYW4gdXNlIHZhcmlvdXMgbWV0aG9kcywgd2hpY2ggYXJlIGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhdmFpbGFibGUgYXRcblx0ICoge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZ2VuZG9jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9LlxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBhcmUgbGlzdGVkIGJlbG93OlxuXHQgKlxuXHQgKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzaGFkb3dSb290IGNhbiBiZSBmb3VuZCBpbiB0aGUgW01ETiBXZWIgRG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvYXR0YWNoU2hhZG93KSxcblx0ICogaW4gdGhlIFtIVE1MIFN0YW5kYXJkXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCNjdXN0b20tZWxlbWVudHMpIG9yIGluIHRoZSBbV0hBVFdHIFdpa2ldKGh0dHBzOi8vd2lraS53aGF0d2cub3JnL3dpa2kvQ3VzdG9tX0VsZW1lbnRzKS5cblx0ICpcblx0ICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGVtcGxhdGUgZWxlbWVudCBjYW4gYmUgZm91bmQgaW4gdGhlIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZW1wbGF0ZSkuXG5cdCAqXG5cdCAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNsb3QgZWxlbWVudCBjYW4gYmUgZm91bmQgaW4gdGhlIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zbG90KS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkaXNhYmxlZD1mYWxzZSBTcGVjaWZpZXMgd2hldGhlciB0aGUgY29udHJvbCBpcyBkaXNhYmxlZC4gV2hlbiBwcmVzZW50LCBpdCBtYWtlcyB0aGUgZWxlbWVudCBub24tbXV0YWJsZSwgbm9uLWZvY3VzYWJsZSwgYW5kIG5vbi1zdWJtaXR0YWJsZSB3aXRoIHRoZSBmb3JtLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gc2hhZG93TW9kZT1vcGVuIFNwZWNpZmllcyB0aGUgbW9kZSBvZiB0aGUgc2hhZG93IHJvb3QuIFdoZW4gc2V0IHRvIGBvcGVuYCwgZWxlbWVudHMgaW4gdGhlIHNoYWRvdyByb290IGFyZSBhY2Nlc3NpYmxlIGZyb20gSmF2YVNjcmlwdCBvdXRzaWRlIHRoZSByb290LCB3aGlsZSBzZXR0aW5nIGl0IHRvIGBjbG9zZWRgIGRlbmllcyBhY2Nlc3MgdG8gdGhlIHJvb3QncyBub2RlcyBmcm9tIEphdmFTY3JpcHQgb3V0c2lkZSBpdC5cblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBkZWxlZ2F0ZXNGb2N1cz10cnVlIFNwZWNpZmllcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvbnRyb2wgd2l0aCByZXNwZWN0IHRvIGZvY3VzYWJpbGl0eS4gV2hlbiBzZXQgdG8gYHRydWVgLCBpdCBtaXRpZ2F0ZXMgY3VzdG9tIGVsZW1lbnQgaXNzdWVzIGFyb3VuZCBmb2N1c2FiaWxpdHkuIFdoZW4gYSBub24tZm9jdXNhYmxlIHBhcnQgb2YgdGhlIHNoYWRvdyBET00gaXMgY2xpY2tlZCwgdGhlIGZpcnN0IGZvY3VzYWJsZSBwYXJ0IGlzIGdpdmVuIGZvY3VzLCBhbmQgdGhlIHNoYWRvdyBob3N0IGlzIGdpdmVuIGFueSBhdmFpbGFibGUgOmZvY3VzIHN0eWxpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgU3BlY2lmaWVzIHRoZSB0ZW1wbGF0ZXMgdXNlZCBieSB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluPXVuZGVmaW5lZCBTcGVjaWZpZXMgdGhlIG1haW4gdGVtcGxhdGUgdXNlZCBieSB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlTWFwcGluZyBTcGVjaWZpZXMgdGhlIG1hcHBpbmcgb2YgdGVtcGxhdGVzLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVGb3JtYXR0ZXIgU3BlY2lmaWVzIHRoZSBmb3JtYXR0ZXIgZm9yIHRoZSB0ZW1wbGF0ZXMuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZUZvcm1hdHRlci5tYXJrZXIgU3BlY2lmaWVzIHRoZSBtYXJrZXIgZm9yIHRoZSB0ZW1wbGF0ZXMuXG5cdCAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHRlbXBsYXRlRm9ybWF0dGVyLm1hcmtlci5vcGVuPW51bGwgU3BlY2lmaWVzIHRoZSBvcGVuaW5nIG1hcmtlciBmb3IgdGhlIHRlbXBsYXRlcy5cblx0ICogQHByb3BlcnR5IHtGdW5jdGlvbn0gdGVtcGxhdGVGb3JtYXR0ZXIubWFya2VyLmNsb3NlPW51bGwgU3BlY2lmaWVzIHRoZSBjbG9zaW5nIG1hcmtlciBmb3IgdGhlIHRlbXBsYXRlcy5cblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBldmVudFByb2Nlc3Npbmc9ZmFsc2UgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGNvbnRyb2wgcHJvY2Vzc2VzIGV2ZW50cy5cblx0ICogQHNpbmNlIDEuOC4wXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGRpc2FibGVkOiBmYWxzZSxcblx0XHRcdHNoYWRvd01vZGU6IFwib3BlblwiLFxuXHRcdFx0ZGVsZWdhdGVzRm9jdXM6IHRydWUsXG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHRcdHRlbXBsYXRlTWFwcGluZzoge30sXG5cdFx0XHR0ZW1wbGF0ZUZvcm1hdHRlcjoge1xuXHRcdFx0XHRtYXJrZXI6IHtcblx0XHRcdFx0XHRvcGVuOiBudWxsLFxuXHRcdFx0XHRcdGNsb3NlOiBudWxsLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblxuXHRcdFx0ZXZlbnRQcm9jZXNzaW5nOiBmYWxzZSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGxhYmVscyBvZiB0aGUgZWxlbWVudC5cblx0ICogVGhlIGxhYmVscyBhcmUgZGVmaW5lZCBpbiB0aGUgb3B0aW9uIG9iamVjdC5cblx0ICogVGhlIGtleSBvZiB0aGUgbGFiZWwgaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgdHJhbnNsYXRpb24gZnJvbSB0aGUgZG9jdW1lbnQuXG5cdCAqIElmIHRoZSB0cmFuc2xhdGlvbiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbGFiZWwsIHRoZSBsYWJlbCBpcyB1cGRhdGVkLlxuXHQgKlxuXHQgKiBCZWZvcmUgeW91IGNhbiB1c2UgdGhpcyBtZXRob2QsIHlvdSBtdXN0IGhhdmUgbG9hZGVkIHRoZSB0cmFuc2xhdGlvbnMuXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkN1c3RvbUVsZW1lbnR9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSAgQ2Fubm90IGZpbmQgYW4gZWxlbWVudCB3aXRoIHRyYW5zbGF0aW9ucy4gQWRkIGEgdHJhbnNsYXRpb24gb2JqZWN0IHRvIHRoZSBkb2N1bWVudC5cblx0ICovXG5cdHVwZGF0ZUkxOG4oKSB7XG5cdFx0bGV0IHRyYW5zbGF0aW9ucztcblxuXHRcdHRyeSB7XG5cdFx0XHR0cmFuc2xhdGlvbnMgPSBnZXREb2N1bWVudFRyYW5zbGF0aW9ucygpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAoIXRyYW5zbGF0aW9ucykge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGFiZWxzID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHNcIik7XG5cdFx0aWYgKCEoaXNPYmplY3QobGFiZWxzKSB8fCBpc0l0ZXJhYmxlKGxhYmVscykpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiBsYWJlbHMpIHtcblx0XHRcdGNvbnN0IGRlZiA9IGxhYmVsc1trZXldO1xuXG5cdFx0XHRpZiAoaXNTdHJpbmcoZGVmKSkge1xuXHRcdFx0XHRjb25zdCB0ZXh0ID0gdHJhbnNsYXRpb25zLmdldFRleHQoa2V5LCBkZWYpO1xuXHRcdFx0XHRpZiAodGV4dCAhPT0gZGVmKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYGxhYmVscy4ke2tleX1gLCB0ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH0gZWxzZSBpZiAoaXNPYmplY3QoZGVmKSkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGsgaW4gZGVmKSB7XG5cdFx0XHRcdFx0Y29uc3QgZCA9IGRlZltrXTtcblxuXHRcdFx0XHRcdGNvbnN0IHRleHQgPSB0cmFuc2xhdGlvbnMuZ2V0UGx1cmFsUnVsZVRleHQoa2V5LCBrLCBkKTtcblx0XHRcdFx0XHRpZiAoIWlzU3RyaW5nKHRleHQpKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxhYmVscyBkZWZpbml0aW9uXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGV4dCAhPT0gZCkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYGxhYmVscy4ke2tleX0uJHtrfWAsIHRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsYWJlbHMgZGVmaW5pdGlvblwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBnZXRUYWcoKWAgbWV0aG9kIHJldHVybnMgdGhlIHRhZyBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VzdG9tIGVsZW1lbnQuIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBvdmVyd3JpdHRlblxuXHQgKiBieSB0aGUgZGVyaXZlZCBjbGFzcy5cblx0ICpcblx0ICogTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGNoZWNrIG9uIHRoZSBuYW1lIG9mIHRoZSB0YWcgaW4gdGhpcyBjbGFzcy4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mXG5cdCAqIHRoZSBkZXZlbG9wZXIgdG8gYXNzaWduIGFuIGFwcHJvcHJpYXRlIHRhZyBuYW1lLiBJZiB0aGUgbmFtZSBpcyBub3QgdmFsaWQsIHRoZVxuXHQgKiBgcmVnaXN0ZXJDdXN0b21FbGVtZW50KClgIG1ldGhvZCB3aWxsIGlzc3VlIGFuIGVycm9yLlxuXHQgKlxuXHQgKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI3ZhbGlkLWN1c3RvbS1lbGVtZW50LW5hbWVcblx0ICogQHRocm93cyB7RXJyb3J9IFRoaXMgbWV0aG9kIG11c3QgYmUgb3ZlcnJpZGRlbiBieSB0aGUgZGVyaXZlZCBjbGFzcy5cblx0ICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGFnIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXN0b20gZWxlbWVudC5cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFwiVGhlIG1ldGhvZCBgZ2V0VGFnKClgIG11c3QgYmUgb3ZlcnJpZGRlbiBieSB0aGUgZGVyaXZlZCBjbGFzcy5cIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgZ2V0Q1NTU3R5bGVTaGVldCgpYCBtZXRob2QgcmV0dXJucyBhIGBDU1NTdHlsZVNoZWV0YCBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBzdHlsZXMgZm9yIHRoZSBjdXN0b20gZWxlbWVudC5cblx0ICogSWYgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIGBDU1NTdHlsZVNoZWV0YCBjb25zdHJ1Y3RvciwgdGhlbiBhbiBvYmplY3QgY2FuIGJlIGJ1aWx0IHVzaW5nIHRoZSBwcm92aWRlZCBkZXRvdXIuXG5cdCAqXG5cdCAqIElmIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLCB0aGVuIHRoZSBzaGFkb3cgcm9vdCBkb2VzIG5vdCByZWNlaXZlIGEgc3R5bGVzaGVldC5cblx0ICpcblx0ICogRXhhbXBsZSB1c2FnZTpcblx0ICpcblx0ICogYGBganNcblx0ICogY2xhc3MgTXlFbGVtZW50IGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdCAqICAgc3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdCAqICAgICAgIGNvbnN0IHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0ICogICAgICAgc2hlZXQucmVwbGFjZVN5bmMoXCJwIHsgY29sb3I6IHJlZDsgfVwiKTtcblx0ICogICAgICAgcmV0dXJuIHNoZWV0O1xuXHQgKiAgIH1cblx0ICogfVxuXHQgKiBgYGBcblx0ICpcblx0ICogSWYgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIGBDU1NTdHlsZVNoZWV0YCBjb25zdHJ1Y3Rvcixcblx0ICogeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB3b3JrYXJvdW5kIHRvIGNyZWF0ZSB0aGUgc3R5bGVzaGVldDpcblx0ICpcblx0ICogYGBganNcblx0ICogY29uc3QgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCd0aXRsZScpO1xuXHQgKiBsZXQgc3R5bGUgPSBkb2MuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuXHQgKiBzdHlsZS5pbm5lckhUTUwgPSBcInAgeyBjb2xvcjogcmVkOyB9XCI7XG5cdCAqIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpKTtcblx0ICogZG9jLmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHQgKiByZXR1cm4gZG9jLnN0eWxlU2hlZXRzWzBdO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldHxDU1NTdHlsZVNoZWV0W118c3RyaW5nfHVuZGVmaW5lZH0gQSBgQ1NTU3R5bGVTaGVldGAgb2JqZWN0IG9yIGFuIGFycmF5IG9mIHN1Y2ggb2JqZWN0cyB0aGF0IGRlZmluZSB0aGUgc3R5bGVzIGZvciB0aGUgY3VzdG9tIGVsZW1lbnQsIG9yIGB1bmRlZmluZWRgIGlmIG5vIHN0eWxlc2hlZXQgc2hvdWxkIGJlIGFwcGxpZWQuXG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIGF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogZGV0YWNoIGEgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cblx0ICovXG5cdGRldGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqIEBzaW5jZSAxLjEwLjBcblx0ICovXG5cdGdldE9wdGlvbihwYXRoLCBkZWZhdWx0VmFsdWUgPSB1bmRlZmluZWQpIHtcblx0XHRsZXQgdmFsdWU7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFsdWUgPSBuZXcgUGF0aGZpbmRlcihcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sXG5cdFx0XHQpLmdldFZpYShwYXRoKTtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBvcHRpb24gYW5kIGluZm9ybSBlbGVtZW50c1xuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICovXG5cdHNldE9wdGlvbihwYXRoLCB2YWx1ZSkge1xuXHRcdG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0pLnNldFZpYShcblx0XHRcdHBhdGgsXG5cdFx0XHR2YWx1ZSxcblx0XHQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG5cdCAqL1xuXHRzZXRPcHRpb25zKG9wdGlvbnMpIHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSBwYXJzZU9wdGlvbnNKU09OLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdFx0fVxuXHRcdC8vIDIwMjQtMDEtMjE6IHJlbW92ZSB0aGlzLmRlZmF1bHRzLCBvdGhlcndpc2UgaXQgd2lsbCBvdmVyd3JpdGVcblx0XHQvLyB0aGUgY3VycmVudCBzZXR0aW5ncyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIG1hZGUuXG5cdFx0Ly8gaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvMTM2XG5cdFx0ZXh0ZW5kKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sIG9wdGlvbnMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogSXMgY2FsbGVkIG9uY2UgdmlhIHRoZSBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuXHQgKiBAc2luY2UgMS44LjBcblx0ICovXG5cdFtpbml0TWV0aG9kU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBvYmplY3QgaXMgZXF1aXBwZWQgd2l0aCB1cGRhdGUgZm9yIHRoZSBkeW5hbWljIGNoYW5nZSBvZiB0aGUgZG9tLlxuXHQgKiBUaGUgZnVuY3Rpb25zIHJldHVybmVkIGhlcmUgY2FuIGJlIHVzZWQgYXMgcGlwZSBmdW5jdGlvbnMgaW4gdGhlIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBJbiB0aGUgZXhhbXBsZSwgdGhlIGZ1bmN0aW9uIGBteS10cmFuc2Zvcm1lcmAgaXMgZGVmaW5lZC4gSW4gdGhlIHRlbXBsYXRlLCB5b3UgY2FuIHVzZSBpdCBhcyBmb2xsb3dzOlxuXHQgKlxuXHQgKiBgYGBodG1sXG5cdCAqIDxteS1lbGVtZW50XG5cdCAqICAgZGF0YS1tb25zdGVyLW9wdGlvbi10cmFuc2Zvcm1lcj1cInBhdGg6bXktdmFsdWUgfCBjYWxsOm15LXRyYW5zZm9ybWVyXCI+XG5cdCAqIDwvbXktZWxlbWVudD5cblx0ICogYGBgXG5cdCAqXG5cdCAqIFRoZSBmdW5jdGlvbiBgbXktdHJhbnNmb3JtZXJgIGlzIGNhbGxlZCB3aXRoIHRoZSB2YWx1ZSBvZiBgbXktdmFsdWVgIGFzIGEgcGFyYW1ldGVyLlxuXHQgKlxuXHQgKiBgYGBqc1xuXHQgKiBjbGFzcyBNeUVsZW1lbnQgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0ICogW3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdKCkge1xuXHQgKiAgICByZXR1cm4ge1xuXHQgKiAgICAgICBcIm15LXRyYW5zZm9ybWVyXCI6ICh2YWx1ZSkgPT4ge1xuXHQgKiAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgV2VydCkge1xuXHQgKiAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuXHQgKiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIFwiIVwiO1xuXHQgKiAgICAgICAgICAgY2FzZSBcIlphaGxcIjpcblx0ICogICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKyAxO1xuXHQgKiAgICAgICAgICAgZGVmYXVsdDpcblx0ICogICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG5cdCAqICAgICAgICAgICB9XG5cdCAqICAgIH1cblx0ICogICAgfTtcblx0ICogIH07XG5cdCAqICB9XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqIEBzaW5jZSAyLjQzLjBcblx0ICovXG5cdFt1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUgb2JqZWN0IGlzIGluY2x1ZGVkIGluIHRoZSBET00gZm9yIHRoZSBmaXJzdCB0aW1lLiBJdCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIGFjdGlvbnM6XG5cdCAqXG5cdCAqIDxvbD5cblx0ICogPGxpPkV4dHJhY3RzIHRoZSBvcHRpb25zIGZyb20gdGhlIGF0dHJpYnV0ZXMgYW5kIHRoZSBzY3JpcHQgdGFnIG9mIHRoZSBlbGVtZW50IGFuZCBzZXRzIHRoZW0uPC9saT5cblx0ICogPGxpPkluaXRpYWxpemVzIHRoZSBzaGFkb3cgcm9vdCBhbmQgaXRzIENTUyBzdHlsZXNoZWV0IChpZiBzcGVjaWZpZWQpLjwvbGk+XG5cdCAqIDxsaT5Jbml0aWFsaXplcyB0aGUgSFRNTCBjb250ZW50IG9mIHRoZSBlbGVtZW50LjwvbGk+XG5cdCAqIDxsaT5Jbml0aWFsaXplcyB0aGUgY3VzdG9tIGVsZW1lbnRzIGluc2lkZSB0aGUgc2hhZG93IHJvb3QgYW5kIHRoZSBzbG90dGVkIGVsZW1lbnRzLjwvbGk+XG5cdCAqIDxsaT5BdHRhY2hlcyBhIG11dGF0aW9uIG9ic2VydmVyIHRvIG9ic2VydmUgY2hhbmdlcyB0byB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVudC48L2xpPlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fSAtIFRoZSB1cGRhdGVkIGN1c3RvbSBlbGVtZW50LlxuXHQgKiBAc2luY2UgMS44LjBcblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0bGV0IGVsZW1lbnRzO1xuXHRcdGxldCBub2RlTGlzdDtcblxuXHRcdC8vIEV4dHJhY3Qgb3B0aW9ucyBmcm9tIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGVtXG5cdFx0Y29uc3QgQXR0cmlidXRlT3B0aW9ucyA9IGdldE9wdGlvbnNGcm9tQXR0cmlidXRlcy5jYWxsKHRoaXMpO1xuXHRcdGlmIChcblx0XHRcdGlzT2JqZWN0KEF0dHJpYnV0ZU9wdGlvbnMpICYmXG5cdFx0XHRPYmplY3Qua2V5cyhBdHRyaWJ1dGVPcHRpb25zKS5sZW5ndGggPiAwXG5cdFx0KSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbnMoQXR0cmlidXRlT3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Ly8gRXh0cmFjdCBvcHRpb25zIGZyb20gc2NyaXB0IHRhZyBhbmQgc2V0IHRoZW1cblx0XHRjb25zdCBTY3JpcHRPcHRpb25zID0gZ2V0T3B0aW9uc0Zyb21TY3JpcHRUYWcuY2FsbCh0aGlzKTtcblx0XHRpZiAoaXNPYmplY3QoU2NyaXB0T3B0aW9ucykgJiYgT2JqZWN0LmtleXMoU2NyaXB0T3B0aW9ucykubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb25zKFNjcmlwdE9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdC8vIEluaXRpYWxpemUgdGhlIHNoYWRvdyByb290IGFuZCBpdHMgQ1NTIHN0eWxlc2hlZXRcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJzaGFkb3dNb2RlXCIsIGZhbHNlKSAhPT0gZmFsc2UpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGluaXRTaGFkb3dSb290LmNhbGwodGhpcyk7XG5cdFx0XHRcdGVsZW1lbnRzID0gdGhpcy5zaGFkb3dSb290LmNoaWxkTm9kZXM7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGluaXRDU1NTdHlsZXNoZWV0LmNhbGwodGhpcyk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIGVsZW1lbnRzIGFyZSBub3QgZm91bmQgaW5zaWRlIHRoZSBzaGFkb3cgcm9vdCwgaW5pdGlhbGl6ZSB0aGUgSFRNTCBjb250ZW50IG9mIHRoZSBlbGVtZW50XG5cdFx0aWYgKCEoZWxlbWVudHMgaW5zdGFuY2VvZiBOb2RlTGlzdCkpIHtcblx0XHRcdGluaXRIdG1sQ29udGVudC5jYWxsKHRoaXMpO1xuXHRcdFx0ZWxlbWVudHMgPSB0aGlzLmNoaWxkTm9kZXM7XG5cdFx0fVxuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgY3VzdG9tIGVsZW1lbnRzIGluc2lkZSB0aGUgc2hhZG93IHJvb3QgYW5kIHRoZSBzbG90dGVkIGVsZW1lbnRzXG5cdFx0aW5pdEZyb21DYWxsYmFja0hvc3QuY2FsbCh0aGlzKTtcblx0XHR0cnkge1xuXHRcdFx0bm9kZUxpc3QgPSBuZXcgU2V0KFsuLi5lbGVtZW50cywgLi4uZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcyldKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRub2RlTGlzdCA9IGVsZW1lbnRzO1xuXHRcdH1cblxuXHRcdHRoaXNbdXBkYXRlQ2xvbmVEYXRhU3ltYm9sXSA9IGNsb25lKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sXG5cdFx0KTtcblxuXHRcdGNvbnN0IGNmZyA9IHt9O1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImV2ZW50UHJvY2Vzc2luZ1wiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Y2ZnLmV2ZW50UHJvY2Vzc2luZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0YWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQuY2FsbChcblx0XHRcdHRoaXMsXG5cdFx0XHRub2RlTGlzdCxcblx0XHRcdGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCxcblx0XHRcdHRoaXNbdXBkYXRlQ2xvbmVEYXRhU3ltYm9sXSxcblx0XHRcdGNmZyxcblx0XHQpO1xuXG5cdFx0Ly8gQXR0YWNoIGEgbXV0YXRpb24gb2JzZXJ2ZXIgdG8gb2JzZXJ2ZSBjaGFuZ2VzIHRvIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBlbGVtZW50XG5cdFx0YXR0YWNoQXR0cmlidXRlQ2hhbmdlTXV0YXRpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogWW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nPyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgZm9yIGFkdmFuY2VkIHVzZXJzLlxuXHQgKiBUaGUgcmVzdWx0IGlzIGEgY2xvbmUgb2YgdGhlIGludGVybmFsIGRhdGEuXG5cdCAqXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRnZXRJbnRlcm5hbFVwZGF0ZUNsb25lRGF0YSgpIHtcblx0XHRyZXR1cm4gY2xvbmUodGhpc1t1cGRhdGVDbG9uZURhdGFTeW1ib2xdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZXZlcnkgdGltZSB0aGUgZWxlbWVudCBpcyBpbnNlcnRlZCBpbnRvIHRoZSBET00uIEl0IGNoZWNrcyBpZiB0aGUgY3VzdG9tIGVsZW1lbnRcblx0ICogaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZCBhbmQgaWYgbm90LCBjYWxscyB0aGUgYXNzZW1ibGVNZXRob2QgdG8gaW5pdGlhbGl6ZSBpdC5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvY29ubmVjdGVkQ2FsbGJhY2tcblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdC8vIENoZWNrIGlmIHRoZSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZFxuXHRcdGlmICghaGFzT2JqZWN0TGluayh0aGlzLCBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wpKSB7XG5cdFx0XHQvLyBJZiBub3QsIGNhbGwgdGhlIGFzc2VtYmxlTWV0aG9kIHRvIGluaXRpYWxpemUgdGhlIG9iamVjdFxuXHRcdFx0dGhpc1thc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00uIFVzZWZ1bCBmb3IgcnVubmluZyBjbGVhbiB1cCBjb2RlLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKiBAc2luY2UgMS43LjBcblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge31cblxuXHQvKipcblx0ICogVGhlIGN1c3RvbSBlbGVtZW50IGhhcyBiZWVuIG1vdmVkIGludG8gYSBuZXcgZG9jdW1lbnQgKGUuZy4gc29tZW9uZSBjYWxsZWQgZG9jdW1lbnQuYWRvcHROb2RlKGVsKSkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqIEBzaW5jZSAxLjcuMFxuXHQgKi9cblx0YWRvcHRlZENhbGxiYWNrKCkge31cblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gYW4gb2JzZXJ2ZWQgYXR0cmlidXRlIGhhcyBiZWVuIGFkZGVkLCByZW1vdmVkLCB1cGRhdGVkLCBvciByZXBsYWNlZC4gQWxzbyBjYWxsZWQgZm9yIGluaXRpYWxcblx0ICogdmFsdWVzIHdoZW4gYW4gZWxlbWVudCBpcyBjcmVhdGVkIGJ5IHRoZSBwYXJzZXIsIG9yIHVwZ3JhZGVkLiBOb3RlOiBvbmx5IGF0dHJpYnV0ZXMgbGlzdGVkIGluIHRoZSBvYnNlcnZlZEF0dHJpYnV0ZXNcblx0ICogcHJvcGVydHkgd2lsbCByZWNlaXZlIHRoaXMgY2FsbGJhY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyTmFtZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gb2xkVmFsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuZXdWYWxcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICogQHNpbmNlIDEuMTUuMFxuXHQgKi9cblx0YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKGF0dHJOYW1lLCBvbGRWYWwsIG5ld1ZhbCkge1xuXHRcdGlmIChhdHRyTmFtZS5zdGFydHNXaXRoKFwiZGF0YS1tb25zdGVyLW9wdGlvbi1cIikpIHtcblx0XHRcdHNldE9wdGlvbkZyb21BdHRyaWJ1dGUoXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdGF0dHJOYW1lLFxuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBjYWxsYmFjayA9IHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdPy5bYXR0ck5hbWVdO1xuXHRcdGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y2FsbGJhY2suY2FsbCh0aGlzLCBuZXdWYWwsIG9sZFZhbCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKiBAc2luY2UgMS4xOS4wXG5cdCAqL1xuXHRoYXNOb2RlKG5vZGUpIHtcblx0XHRpZiAoY29udGFpbkNoaWxkTm9kZS5jYWxsKHRoaXMsIHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSkpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoISh0aGlzLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb250YWluQ2hpbGROb2RlLmNhbGwodGhpcy5zaGFkb3dSb290LCBub2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxscyBhIGNhbGxiYWNrIGZ1bmN0aW9uIGlmIGl0IGV4aXN0cy5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHsqfSBhcmdzXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRjYWxsQ2FsbGJhY2sobmFtZSwgYXJncykge1xuXHRcdHJldHVybiBjYWxsQ29udHJvbENhbGxiYWNrLmNhbGwodGhpcywgbmFtZSwgLi4uYXJncyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2FsbEJhY2tGdW5jdGlvbk5hbWVcbiAqIEBwYXJhbSB7Kn0gIGFyZ3NcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZnVuY3Rpb24gY2FsbENvbnRyb2xDYWxsYmFjayhjYWxsQmFja0Z1bmN0aW9uTmFtZSwgLi4uYXJncykge1xuXHRpZiAoIWlzU3RyaW5nKGNhbGxCYWNrRnVuY3Rpb25OYW1lKSB8fCBjYWxsQmFja0Z1bmN0aW9uTmFtZSA9PT0gXCJcIikge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmIChjYWxsQmFja0Z1bmN0aW9uTmFtZSBpbiB0aGlzKSB7XG5cdFx0cmV0dXJuIHRoaXNbY2FsbEJhY2tGdW5jdGlvbk5hbWVdKHRoaXMsIC4uLmFyZ3MpO1xuXHR9XG5cblx0aWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfU0NSSVBUX0hPU1QpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXNbc2NyaXB0SG9zdEVsZW1lbnRTeW1ib2xdLmxlbmd0aCA9PT0gMCkge1xuXHRcdGNvbnN0IHRhcmdldElkID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1NDUklQVF9IT1NUKTtcblx0XHRpZiAoIXRhcmdldElkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdCA9IHRhcmdldElkLnNwbGl0KFwiLFwiKTtcblx0XHRmb3IgKGNvbnN0IGlkIG9mIGxpc3QpIHtcblx0XHRcdGNvbnN0IGhvc3QgPSBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHModGhpcywgdGFyZ2V0SWQpO1xuXHRcdFx0aWYgKCEoaG9zdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0ucHVzaChob3N0KTtcblx0XHR9XG5cdH1cblxuXHRmb3IgKGNvbnN0IGhvc3Qgb2YgdGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0pIHtcblx0XHRpZiAoY2FsbEJhY2tGdW5jdGlvbk5hbWUgaW4gaG9zdCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIGhvc3RbY2FsbEJhY2tGdW5jdGlvbk5hbWVdKHRoaXMsIC4uLmFyZ3MpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdHRoaXMsXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRgY2FsbGJhY2sgJHtjYWxsQmFja0Z1bmN0aW9uTmFtZX0gbm90IGZvdW5kYCxcblx0KTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyB0aGUgY3VzdG9tIGVsZW1lbnQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgYXR0YWNoZWQgdG8gdGhlIERPTS4gSXQgY2hlY2tzIGlmIHRoZVxuICogYGRhdGEtbW9uc3Rlci1vcHRpb24tY2FsbGJhY2tgIGF0dHJpYnV0ZSBpcyBzZXQsIGFuZCBpZiBub3QsIHRoZSBkZWZhdWx0IGNhbGxiYWNrXG4gKiBgaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFja2AgaXMgY2FsbGVkLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgc2VhcmNoZWQgZm9yIGluIHRoaXNcbiAqIGVsZW1lbnQgYW5kIGluIHRoZSBob3N0IGVsZW1lbnQuIElmIHRoZSBjYWxsYmFjayBpcyBmb3VuZCwgaXQgaXMgY2FsbGVkIHdpdGggdGhlIGVsZW1lbnRcbiAqIGFzIGEgcGFyYW1ldGVyLlxuICpcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS9kZWZpbmUjcHJvdmlkaW5nX2FfY29uc3RydWN0aW9uX2NhbGxiYWNrXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuZnVuY3Rpb24gaW5pdEZyb21DYWxsYmFja0hvc3QoKSB7XG5cdC8vIFNldCB0aGUgZGVmYXVsdCBjYWxsYmFjayBmdW5jdGlvbiBuYW1lXG5cdGxldCBjYWxsQmFja0Z1bmN0aW9uTmFtZSA9IGluaXRDb250cm9sQ2FsbGJhY2tOYW1lO1xuXG5cdC8vIElmIHRoZSBgZGF0YS1tb25zdGVyLW9wdGlvbi1jYWxsYmFja2AgYXR0cmlidXRlIGlzIHNldCwgdXNlIGl0cyB2YWx1ZSBhcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZVxuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0lOSVRfQ0FMTEJBQ0spKSB7XG5cdFx0Y2FsbEJhY2tGdW5jdGlvbk5hbWUgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSyk7XG5cdH1cblxuXHQvLyBDYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHRoZSBlbGVtZW50IGFzIGEgcGFyYW1ldGVyIGlmIGl0IGV4aXN0c1xuXHRjYWxsQ29udHJvbENhbGxiYWNrLmNhbGwodGhpcywgY2FsbEJhY2tGdW5jdGlvbk5hbWUpO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGZpcnN0IGNyZWF0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gYXR0YWNoQXR0cmlidXRlQ2hhbmdlTXV0YXRpb25PYnNlcnZlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKHR5cGVvZiBzZWxmW2F0dHJpYnV0ZU11dGF0aW9uT2JzZXJ2ZXJTeW1ib2xdICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c2VsZlthdHRyaWJ1dGVNdXRhdGlvbk9ic2VydmVyU3ltYm9sXSA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuXHRcdGZ1bmN0aW9uIChtdXRhdGlvbnMsIG9ic2VydmVyKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuXHRcdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJhdHRyaWJ1dGVzXCIpIHtcblx0XHRcdFx0XHRzZWxmLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhcblx0XHRcdFx0XHRcdG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUsXG5cdFx0XHRcdFx0XHRtdXRhdGlvbi5vbGRWYWx1ZSxcblx0XHRcdFx0XHRcdG11dGF0aW9uLnRhcmdldC5nZXRBdHRyaWJ1dGUobXV0YXRpb24uYXR0cmlidXRlTmFtZSksXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdCk7XG5cblx0dHJ5IHtcblx0XHRzZWxmW2F0dHJpYnV0ZU11dGF0aW9uT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUoc2VsZiwge1xuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGF0dHJpYnV0ZU9sZFZhbHVlOiB0cnVlLFxuXHRcdH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0fVxufVxuXG4vKipcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5DaGlsZE5vZGUobm9kZSkge1xuXHRpZiAodGhpcy5jb250YWlucyhub2RlKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Zm9yIChjb25zdCBbLCBlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNoaWxkTm9kZXMpKSB7XG5cdFx0aWYgKGUuY29udGFpbnMobm9kZSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5DaGlsZE5vZGUuY2FsbChlLCBub2RlKTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE1LjBcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25PYnNlcnZlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0bGV0IGxhc3REaXNhYmxlZFZhbHVlID0gdW5kZWZpbmVkO1xuXHRzZWxmLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zdCBmbGFnID0gc2VsZi5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKTtcblxuXHRcdFx0aWYgKGZsYWcgPT09IGxhc3REaXNhYmxlZFZhbHVlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0bGFzdERpc2FibGVkVmFsdWUgPSBmbGFnO1xuXG5cdFx0XHRpZiAoIShzZWxmLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHF1ZXJ5ID1cblx0XHRcdFx0XCJidXR0b24sIGNvbW1hbmQsIGZpZWxkc2V0LCBrZXlnZW4sIG9wdGdyb3VwLCBvcHRpb24sIHNlbGVjdCwgdGV4dGFyZWEsIGlucHV0LCBbZGF0YS1tb25zdGVyLW9iamVjdGxpbmtdXCI7XG5cdFx0XHRjb25zdCBlbGVtZW50cyA9IHNlbGYuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KTtcblxuXHRcdFx0bGV0IG5vZGVMaXN0O1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bm9kZUxpc3QgPSBuZXcgU2V0KFtcblx0XHRcdFx0XHQuLi5lbGVtZW50cyxcblx0XHRcdFx0XHQuLi5nZXRTbG90dGVkRWxlbWVudHMuY2FsbChzZWxmLCBxdWVyeSksXG5cdFx0XHRcdF0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRub2RlTGlzdCA9IGVsZW1lbnRzO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgWy4uLm5vZGVMaXN0XSkge1xuXHRcdFx0XHRpZiAoZmxhZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ESVNBQkxFRCwgXCJcIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVEKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pLFxuXHQpO1xuXG5cdHNlbGYuYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0bmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblx0XHRcdC8vIG5vdCBpbml0aWFsaXNlZFxuXHRcdFx0aWYgKCFoYXNPYmplY3RMaW5rKHNlbGYsIGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gaW5mb3JtIGV2ZXJ5IGVsZW1lbnRcblx0XHRcdGNvbnN0IHVwZGF0ZXJzID0gZ2V0TGlua2VkT2JqZWN0cyhzZWxmLCBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGxpc3Qgb2YgdXBkYXRlcnMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB1cGRhdGVyIG9mIGxpc3QpIHtcblx0XHRcdFx0XHRjb25zdCBkID0gY2xvbmUoc2VsZltpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0pO1xuXHRcdFx0XHRcdE9iamVjdC5hc3NpZ24odXBkYXRlci5nZXRTdWJqZWN0KCksIGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSksXG5cdCk7XG5cblx0Ly8gZGlzYWJsZWRcblx0c2VsZlthdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX0RJU0FCTEVEXSA9ICgpID0+IHtcblx0XHRpZiAoc2VsZi5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVEKSkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb24oQVRUUklCVVRFX0RJU0FCTEVELCB0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZi5zZXRPcHRpb24oQVRUUklCVVRFX0RJU0FCTEVELCB1bmRlZmluZWQpO1xuXHRcdH1cblx0fTtcblxuXHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRzZWxmW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfT1BUSU9OU10gPSAoKSA9PiB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnNGcm9tQXR0cmlidXRlcy5jYWxsKHNlbGYpO1xuXHRcdGlmIChpc09iamVjdChvcHRpb25zKSAmJiBPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRzZWxmLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yXG5cdHNlbGZbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SXSA9ICgpID0+IHtcblx0XHRjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9uc0Zyb21TY3JpcHRUYWcuY2FsbChzZWxmKTtcblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykgJiYgT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID4gMCkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZ2V0T3B0aW9uc0Zyb21TY3JpcHRUYWcoKSB7XG5cdGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IpKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0Y29uc3Qgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0dGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IpLFxuXHQpO1xuXHRpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTFNjcmlwdEVsZW1lbnQpKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHR0aGlzLFxuXHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdGB0aGUgc2VsZWN0b3IgJHtBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUn0gZm9yIG9wdGlvbnMgd2FzIHNwZWNpZmllZCAoJHt0aGlzLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0QVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IsXG5cdFx0XHQpfSkgYnV0IG5vdCBmb3VuZC5gLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0bGV0IG9iaiA9IHt9O1xuXG5cdHRyeSB7XG5cdFx0b2JqID0gcGFyc2VPcHRpb25zSlNPTi5jYWxsKHRoaXMsIG5vZGUudGV4dENvbnRlbnQudHJpbSgpKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0dGhpcyxcblx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRgd2hlbiBhbmFseXppbmcgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgc2NyaXB0IHRhZyB0aGVyZSB3YXMgYW4gZXJyb3IuICR7ZX1gLFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldE9wdGlvbnNGcm9tQXR0cmlidXRlcygpIHtcblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TKSkge1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gcGFyc2VPcHRpb25zSlNPTi5jYWxsKHRoaXMsIHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TKSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdGB0aGUgb3B0aW9ucyBhdHRyaWJ1dGUgJHtBVFRSSUJVVEVfT1BUSU9OU30gZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvbiAoYWN0dWFsOiAke3RoaXMuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdEFUVFJJQlVURV9PUFRJT05TLFxuXHRcdFx0XHQpfSkuJHtlfWAsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7fTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGdpdmVuIEpTT04gZGF0YSBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgVGhlIEpTT04gZGF0YSB0byBiZSBwYXJzZWQuXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBwYXJzZWQgb2JqZWN0LlxuICogQHRocm93cyB7ZXJyb3J9IFRocm93cyBhbiBlcnJvciBpZiB0aGUgSlNPTiBkYXRhIGlzIG5vdCB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VPcHRpb25zSlNPTihkYXRhKSB7XG5cdGxldCBvYmogPSB7fTtcblxuXHRpZiAoIWlzU3RyaW5nKGRhdGEpKSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdC8vIHRoZSBjb25maWd1cmF0aW9uIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBkYXRhIHVybC5cblx0dHJ5IHtcblx0XHRjb25zdCBkYXRhVXJsID0gcGFyc2VEYXRhVVJMKGRhdGEpO1xuXHRcdGRhdGEgPSBkYXRhVXJsLmNvbnRlbnQ7XG5cdH0gY2F0Y2ggKGUpIHt9XG5cblx0dHJ5IHtcblx0XHRvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0dGhyb3cgZTtcblx0fVxuXG5cdHJldHVybiB2YWxpZGF0ZU9iamVjdChvYmopO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtpbml0SHRtbENvbnRlbnR9XG4gKi9cbmZ1bmN0aW9uIGluaXRIdG1sQ29udGVudCgpIHtcblx0dHJ5IHtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IGZpbmREb2N1bWVudFRlbXBsYXRlKHRoaXMuY29uc3RydWN0b3IuZ2V0VGFnKCkpO1xuXHRcdHRoaXMuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGxldCBodG1sID0gdGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZXMubWFpblwiLCBcIlwiKTtcblx0XHRpZiAoaXNTdHJpbmcoaHRtbCkgJiYgaHRtbC5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBtYXBwaW5nID0gdGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZU1hcHBpbmdcIiwge30pO1xuXHRcdFx0aWYgKGlzT2JqZWN0KG1hcHBpbmcpKSB7XG5cdFx0XHRcdGh0bWwgPSBuZXcgRm9ybWF0dGVyKG1hcHBpbmcsIHt9KS5mb3JtYXQoaHRtbCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmlubmVySFRNTCA9IGh0bWw7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE2LjBcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG4gKi9cbmZ1bmN0aW9uIGluaXRDU1NTdHlsZXNoZWV0KCkge1xuXHRpZiAoISh0aGlzLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3Qgc3R5bGVTaGVldCA9IHRoaXMuY29uc3RydWN0b3IuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXG5cdGlmIChzdHlsZVNoZWV0IGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCkge1xuXHRcdGlmIChzdHlsZVNoZWV0LmNzc1J1bGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHMgPSBbc3R5bGVTaGVldF07XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzQXJyYXkoc3R5bGVTaGVldCkpIHtcblx0XHRjb25zdCBhc3NpZ24gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHMgb2Ygc3R5bGVTaGVldCkge1xuXHRcdFx0aWYgKGlzU3RyaW5nKHMpKSB7XG5cdFx0XHRcdGNvbnN0IHRyaW1lZFN0eWxlU2hlZXQgPSBzLnRyaW0oKTtcblx0XHRcdFx0aWYgKHRyaW1lZFN0eWxlU2hlZXQgIT09IFwiXCIpIHtcblx0XHRcdFx0XHRjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblx0XHRcdFx0XHRzdHlsZS5pbm5lckhUTUwgPSB0cmltZWRTdHlsZVNoZWV0O1xuXHRcdFx0XHRcdHRoaXMuc2hhZG93Um9vdC5wcmVwZW5kKHN0eWxlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dmFsaWRhdGVJbnN0YW5jZShzLCBDU1NTdHlsZVNoZWV0KTtcblxuXHRcdFx0aWYgKHMuY3NzUnVsZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRhc3NpZ24ucHVzaChzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYXNzaWduLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHMgPSBhc3NpZ247XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzU3RyaW5nKHN0eWxlU2hlZXQpKSB7XG5cdFx0Y29uc3QgdHJpbWVkU3R5bGVTaGVldCA9IHN0eWxlU2hlZXQudHJpbSgpO1xuXHRcdGlmICh0cmltZWRTdHlsZVNoZWV0ICE9PSBcIlwiKSB7XG5cdFx0XHRjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblx0XHRcdHN0eWxlLmlubmVySFRNTCA9IHN0eWxlU2hlZXQ7XG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3QucHJlcGVuZChzdHlsZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG4gKiBAdGhyb3dzIHtFcnJvcn0gaHRtbCBpcyBub3Qgc2V0LlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9hdHRhY2hTaGFkb3dcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmZ1bmN0aW9uIGluaXRTaGFkb3dSb290KCkge1xuXHRsZXQgdGVtcGxhdGU7XG5cdGxldCBodG1sO1xuXG5cdHRyeSB7XG5cdFx0dGVtcGxhdGUgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZSh0aGlzLmNvbnN0cnVjdG9yLmdldFRhZygpKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGh0bWwgPSB0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlcy5tYWluXCIsIFwiXCIpO1xuXHRcdGlmICghaXNTdHJpbmcoaHRtbCkgfHwgaHRtbCA9PT0gdW5kZWZpbmVkIHx8IGh0bWwgPT09IFwiXCIpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImh0bWwgaXMgbm90IHNldC5cIik7XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5hdHRhY2hTaGFkb3coe1xuXHRcdG1vZGU6IHRoaXMuZ2V0T3B0aW9uKFwic2hhZG93TW9kZVwiLCBcIm9wZW5cIiksXG5cdFx0ZGVsZWdhdGVzRm9jdXM6IHRoaXMuZ2V0T3B0aW9uKFwiZGVsZWdhdGVzRm9jdXNcIiwgdHJ1ZSksXG5cdH0pO1xuXG5cdGlmICh0ZW1wbGF0ZSBpbnN0YW5jZW9mIFRlbXBsYXRlKSB7XG5cdFx0dGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKHRlbXBsYXRlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb25zdCBtYXBwaW5nID0gdGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZU1hcHBpbmdcIiwge30pO1xuXHRpZiAoaXNPYmplY3QobWFwcGluZykpIHtcblx0XHRjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKG1hcHBpbmcpO1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlRm9ybWF0dGVyLm1hcmtlci5vcGVuXCIpICE9PSBudWxsKSB7XG5cdFx0XHRmb3JtYXR0ZXIuc2V0TWFya2VyKFxuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlRm9ybWF0dGVyLm1hcmtlci5vcGVuXCIpLFxuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlRm9ybWF0dGVyLm1hcmtlci5jbG9zZVwiKSxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGh0bWwgPSBmb3JtYXR0ZXIuZm9ybWF0KGh0bWwpO1xuXHR9XG5cblx0dGhpcy5zaGFkb3dSb290LmlubmVySFRNTCA9IGh0bWw7XG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHJlZ2lzdGVycyBhIG5ldyBlbGVtZW50LiBUaGUgc3RyaW5nIHJldHVybmVkIGJ5IGBDdXN0b21FbGVtZW50LmdldFRhZygpYCBpcyB1c2VkIGFzIHRoZSB0YWcuXG4gKlxuICogQHBhcmFtIHtDdXN0b21FbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtET01FeGNlcHRpb259IEZhaWxlZCB0byBleGVjdXRlICdkZWZpbmUnIG9uICdDdXN0b21FbGVtZW50UmVnaXN0cnknOiBpcyBub3QgYSB2YWxpZCBjdXN0b20gZWxlbWVudCBuYW1lXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChlbGVtZW50KSB7XG5cdHZhbGlkYXRlRnVuY3Rpb24oZWxlbWVudCk7XG5cdGNvbnN0IGN1c3RvbUVsZW1lbnRzID0gZ2V0R2xvYmFsT2JqZWN0KFwiY3VzdG9tRWxlbWVudHNcIik7XG5cdGlmIChjdXN0b21FbGVtZW50cyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiY3VzdG9tRWxlbWVudHMgaXMgbm90IHN1cHBvcnRlZC5cIik7XG5cdH1cblxuXHRjb25zdCB0YWcgPSBlbGVtZW50Py5nZXRUYWcoKTtcblx0aWYgKCFpc1N0cmluZyh0YWcpIHx8IHRhZyA9PT0gXCJcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRhZyBpcyBub3Qgc2V0LlwiKTtcblx0fVxuXG5cdGlmIChjdXN0b21FbGVtZW50cy5nZXQodGFnKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHRhZywgZWxlbWVudCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuZXhwb3J0IHsgcmFuZG9tIH07XG5cbi8qKlxuICogdGhpcyBmdW5jdGlvbiB1c2VzIGNyeXB0IGFuZCByZXR1cm5zIGEgcmFuZG9tIG51bWJlci5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbWluIHN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBkZWZpbml0aW9uIHNldCAoZGVmYXVsdCBpcyAwKVxuICogQHBhcmFtIHtudW1iZXJ9IG1heCBlbmQgdmFsdWUgb2YgdGhlIGRlZmluaXRpb24gc2V0IChkZWZhdWx0IGlzIDEwMDAwMDAwMDApXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBjcnlwdFxuICogQHRocm93cyB7RXJyb3J9IHdlIGNhbm5vdCBnZW5lcmF0ZSBudW1iZXJzIGxhcmdlciB0aGFuIDUzIGJpdHMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGRpc3RhbmNlIGlzIHRvbyBzbWFsbCB0byBjcmVhdGUgYSByYW5kb20gbnVtYmVyLlxuXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gcmFuZG9tKG1pbiwgbWF4KSB7XG5cdGlmIChtaW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdG1pbiA9IDA7XG5cdH1cblx0aWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0bWF4ID0gTUFYO1xuXHR9XG5cblx0aWYgKG1heCA8IG1pbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm1heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW5cIik7XG5cdH1cblxuXHRyZXR1cm4gTWF0aC5yb3VuZChjcmVhdGUobWluLCBtYXgpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgTUFYID0gMTAwMDAwMDAwMDtcblxuTWF0aC5sb2cyID1cblx0TWF0aC5sb2cyIHx8XG5cdGZ1bmN0aW9uIChuKSB7XG5cdFx0cmV0dXJuIE1hdGgubG9nKG4pIC8gTWF0aC5sb2coMik7XG5cdH07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBjcnlwdFxuICogQHRocm93cyB7RXJyb3J9IHdlIGNhbm5vdCBnZW5lcmF0ZSBudW1iZXJzIGxhcmdlciB0aGFuIDUzIGJpdHMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGRpc3RhbmNlIGlzIHRvbyBzbWFsbCB0byBjcmVhdGUgYSByYW5kb20gbnVtYmVyLlxuICovXG5mdW5jdGlvbiBjcmVhdGUobWluLCBtYXgpIHtcblx0Y29uc3QgZ2xvYmFsUmVmZXJlbmNlID0gZ2V0R2xvYmFsKCk7XG5cblx0Y29uc3QgY3J5cHQgPVxuXHRcdGdsb2JhbFJlZmVyZW5jZT8uW1wiY3J5cHRvXCJdIHx8XG5cdFx0Z2xvYmFsUmVmZXJlbmNlPy5bXCJtc0NyeXB0b1wiXSB8fFxuXHRcdGdsb2JhbFJlZmVyZW5jZT8uW1wiY3J5cHRvXCJdIHx8XG5cdFx0dW5kZWZpbmVkO1xuXG5cdGlmICh0eXBlb2YgY3J5cHQgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGNyeXB0XCIpO1xuXHR9XG5cblx0bGV0IHJ2YWwgPSAwO1xuXHRjb25zdCByYW5nZSA9IG1heCAtIG1pbjtcblx0aWYgKHJhbmdlIDwgMikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBkaXN0YW5jZSBpcyB0b28gc21hbGwgdG8gY3JlYXRlIGEgcmFuZG9tIG51bWJlci5cIik7XG5cdH1cblxuXHRjb25zdCBiaXRzTmVlZGVkID0gTWF0aC5jZWlsKE1hdGgubG9nMihyYW5nZSkpO1xuXHRpZiAoYml0c05lZWRlZCA+IDUzKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwid2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy5cIik7XG5cdH1cblx0Y29uc3QgYnl0ZXNOZWVkZWQgPSBNYXRoLmNlaWwoYml0c05lZWRlZCAvIDgpO1xuXHRjb25zdCBtYXNrID0gTWF0aC5wb3coMiwgYml0c05lZWRlZCkgLSAxO1xuXG5cdGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzTmVlZGVkKTtcblx0Y3J5cHQuZ2V0UmFuZG9tVmFsdWVzKGJ5dGVBcnJheSk7XG5cblx0bGV0IHAgPSAoYnl0ZXNOZWVkZWQgLSAxKSAqIDg7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXNOZWVkZWQ7IGkrKykge1xuXHRcdHJ2YWwgKz0gYnl0ZUFycmF5W2ldICogTWF0aC5wb3coMiwgcCk7XG5cdFx0cCAtPSA4O1xuXHR9XG5cblx0cnZhbCA9IHJ2YWwgJiBtYXNrO1xuXG5cdGlmIChydmFsID49IHJhbmdlKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZShtaW4sIG1heCk7XG5cdH1cblxuXHRpZiAocnZhbCA8IG1pbikge1xuXHRcdHJ2YWwgKz0gbWluO1xuXHR9XG5cblx0cmV0dXJuIHJ2YWw7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUZ1bmN0aW9uLCB2YWxpZGF0ZUludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IERlYWRNYW5zU3dpdGNoIH07XG5cbi8qKlxuICogVGhlIGRlYWQgbWFuJ3Mgc3dpdGNoIGFsbG93cyBzZXR0aW5nIGEgdGltZXIgd2hpY2ggY2FuIGJlIHJlc2V0IGFnYWluXG4gKiBhbmQgYWdhaW4gd2l0aGluIGEgZGVmaW5lZCBwZXJpb2Qgb2YgdGltZS5cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZS91dGlsL2RlYWRtYW5zc3dpdGNoL3NpbXBsZS8gU2ltcGxlIGV4YW1wbGVcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI5LjBcbiAqIEBzdW1tYXJ5IENsYXNzIHRvIGJlIGFibGUgdG8gZXhlY3V0ZSBmdW5jdGlvbiBjaGFpbnNcbiAqL1xuY2xhc3MgRGVhZE1hbnNTd2l0Y2ggZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIENyZWF0ZSBuZXcgZGVhZCBtYW4ncyBzd2l0Y2hcblx0ICpcblx0ICogQHBhcmFtIHtJbnRlZ2VyfSBkZWxheVxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAdGhyb3cge1R5cGVFcnJvcn0gdGhlIGFyZ3VtZW50cyBtdXN0IGJlIGVpdGhlciBpbnRlZ2VyIG9yIGZ1bmN0aW9uc1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihkZWxheSwgY2FsbGJhY2spIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aW5pdC5jYWxsKHRoaXMsIHZhbGlkYXRlSW50ZWdlcihkZWxheSksIHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2spKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gZGVsYXlcblx0ICogQHJldHVybnMge0RlYWRNYW5zU3dpdGNofVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gaGFzIGFscmVhZHkgcnVuXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhcmd1bWVudFxuXHQgKi9cblx0dG91Y2goZGVsYXkpIHtcblx0XHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJpc0FscmVhZHlSdW5cIl0gPT09IHRydWUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImhhcyBhbHJlYWR5IHJ1blwiKTtcblx0XHR9XG5cblx0XHRpZiAoaXNJbnRlZ2VyKGRlbGF5KSkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJkZWxheVwiXSA9IGRlbGF5O1xuXHRcdH0gZWxzZSBpZiAoZGVsYXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgYXJndW1lbnRcIik7XG5cdFx0fVxuXG5cdFx0Y2xlYXJUaW1lb3V0KHRoaXNbaW50ZXJuYWxTeW1ib2xdW1widGltZXJcIl0pO1xuXHRcdGluaXRDYWxsYmFjay5jYWxsKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IGhhcyBhbHJlYWR5IHJ1blxuXHQgKiBAcmV0dXJucyB7RGVhZE1hbnNTd2l0Y2h9XG5cdCAqL1xuXHRkZWZ1c2UoKSB7XG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiaXNBbHJlYWR5UnVuXCJdID09PSB0cnVlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJoYXMgYWxyZWFkeSBydW5cIik7XG5cdFx0fVxuXG5cdFx0Y2xlYXJUaW1lb3V0KHRoaXNbaW50ZXJuYWxTeW1ib2xdW1widGltZXJcIl0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdENhbGxiYWNrKCkge1xuXHR0aGlzW2ludGVybmFsU3ltYm9sXVtcInRpbWVyXCJdID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJpc0FscmVhZHlSdW5cIl0gPSB0cnVlO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiY2FsbGJhY2tcIl0oKTtcblx0fSwgdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJkZWxheVwiXSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7aW50ZWdlcn0gZGVsYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmZ1bmN0aW9uIGluaXQoZGVsYXksIGNhbGxiYWNrKSB7XG5cdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdGNhbGxiYWNrLFxuXHRcdGRlbGF5LFxuXHRcdGlzQWxyZWFkeVJ1bjogZmFsc2UsXG5cdFx0dGltZXI6IHVuZGVmaW5lZCxcblx0fTtcblxuXHRpbml0Q2FsbGJhY2suY2FsbCh0aGlzKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUZ1bmN0aW9uLCB2YWxpZGF0ZUludGVnZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IENhbGxiYWNrIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQ2FsbGJhY2sge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHBhcmFtIHtpbnR8dW5kZWZpbmVkfSB0aW1lXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Y29uc3RydWN0b3IoY2FsbGJhY2ssIHRpbWUpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdGNhbGxiYWNrOiB2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKSxcblx0XHRcdHRpbWU6IHZhbGlkYXRlSW50ZWdlcih0aW1lID8/IDApLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtICB7Kn0gZGF0YVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cnVuKGRhdGEpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Z2V0R2xvYmFsRnVuY3Rpb24oXCJzZXRUaW1lb3V0XCIpKCgpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRyZXNvbHZlKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrKGRhdGEpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgdGhpc1tpbnRlcm5hbFN5bWJvbF0udGltZSk7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc0ludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCIuLi90eXBlcy9xdWV1ZS5tanNcIjtcbmltcG9ydCB7IENhbGxiYWNrIH0gZnJvbSBcIi4vcHJvY2Vzc2luZy9jYWxsYmFjay5tanNcIjtcblxuZXhwb3J0IHsgUHJvY2Vzc2luZyB9O1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgYWxsb3dzIGV4ZWN1dGluZyBzZXZlcmFsIGZ1bmN0aW9ucyBpbiBvcmRlci5cbiAqXG4gKiBGdW5jdGlvbnMgYW5kIHRpbWVvdXRzIGNhbiBiZSBwYXNzZWQuIElmIGEgdGltZW91dCBpcyBwYXNzZWQsIGl0IGFwcGxpZXMgdG8gYWxsIGZ1cnRoZXIgZnVuY3Rpb25zLlxuICogSW4gdGhlIGV4YW1wbGVcbiAqXG4gKiBgdGltZW91dDEsIGZ1bmN0aW9uMSwgZnVuY3Rpb24yLCBmdW5jdGlvbjMsIHRpbWVvdXQyLCBmdW5jdGlvbjRgXG4gKlxuICogdGhlIHRpbWVvdXQxIGlzIHZhbGlkIGZvciB0aGUgZnVuY3Rpb25zIDEsIDIgYW5kIDMgYW5kIHRoZSB0aW1lb3V0MiBmb3IgdGhlIGZ1bmN0aW9uNC5cbiAqXG4gKiBTbyB0aGUgZXhlY3V0aW9uIHRpbWUgaXMgdGltZW91dDErdGltZW91dDErdGltZW91dDErdGltZW91dDJcbiAqXG4gKiBUaGUgcmVzdWx0IG9mIGBydW4oKWAgaXMgYSBwcm9taXNlLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvdXRpbC9wcm9jZXNzaW5nL3NpbXBsZS8gQSBzaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIxLjBcbiAqIEBzdW1tYXJ5IENsYXNzIHRvIGJlIGFibGUgdG8gZXhlY3V0ZSBmdW5jdGlvbiBjaGFpbnNcbiAqL1xuY2xhc3MgUHJvY2Vzc2luZyBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQ3JlYXRlIG5ldyBQcm9jZXNzaW5nXG5cdCAqXG5cdCAqIEZ1bmN0aW9ucyBhbmQgdGltZW91dHMgY2FuIGJlIHBhc3NlZC4gSWYgYSB0aW1lb3V0IGlzIHBhc3NlZCwgaXQgYXBwbGllcyB0byBhbGwgZnVydGhlciBmdW5jdGlvbnMuXG5cdCAqIEluIHRoZSBleGFtcGxlXG5cdCAqXG5cdCAqIGB0aW1lb3V0MSwgZnVuY3Rpb24xLCBmdW5jdGlvbjIsIGZ1bmN0aW9uMywgdGltZW91dDIsIGZ1bmN0aW9uNGBcblx0ICpcblx0ICogdGhlIHRpbWVvdXQxIGlzIHZhbGlkIGZvciB0aGUgZnVuY3Rpb25zIDEsIDIgYW5kIDMgYW5kIHRoZSB0aW1lb3V0MiBmb3IgdGhlIGZ1bmN0aW9uNC5cblx0ICpcblx0ICogU28gdGhlIGV4ZWN1dGlvbiB0aW1lIGlzIHRpbWVvdXQxK3RpbWVvdXQxK3RpbWVvdXQxK3RpbWVvdXQyXG5cdCAqXG5cdCAqIEB0aHJvdyB7VHlwZUVycm9yfSB0aGUgYXJndW1lbnRzIG11c3QgYmUgZWl0aGVyIGludGVnZXIgb3IgZnVuY3Rpb25zXG5cdCAqIEBwYXJhbSB7Li4uKGludHxmdW5jdGlvbil9IGFyZ3Ncblx0ICovXG5cdGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRxdWV1ZTogbmV3IFF1ZXVlKCksXG5cdFx0fTtcblxuXHRcdGxldCB0aW1lID0gMDtcblxuXHRcdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidGhlIGFyZ3VtZW50cyBtdXN0IGJlIGVpdGhlciBpbnRlZ2VyIG9yIGZ1bmN0aW9uc1wiKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFssIGFyZ10gb2YgT2JqZWN0LmVudHJpZXMoYXJncykpIHtcblx0XHRcdGlmIChpc0ludGVnZXIoYXJnKSAmJiBhcmcgPj0gMCkge1xuXHRcdFx0XHR0aW1lID0gYXJnO1xuXHRcdFx0fSBlbHNlIGlmIChpc0Z1bmN0aW9uKGFyZykpIHtcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ucXVldWUuYWRkKG5ldyBDYWxsYmFjayhhcmcsIHRpbWUpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcdFx0XCJ0aGUgYXJndW1lbnRzIG11c3QgYmUgZWl0aGVyIGludGVnZXIgb3IgZnVuY3Rpb25zXCIsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBmdW5jdGlvbiB3aXRoIHRoZSBkZXNpcmVkIHRpbWVvdXRcblx0ICogSWYgbm8gdGltZW91dCBpcyBzcGVjaWZpZWQsIHRoZSB0aW1lb3V0IG9mIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBpcyB1c2VkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0ge2ludHx1bmRlZmluZWR9IHRpbWVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqL1xuXHRhZGQoY2FsbGJhY2ssIHRpbWUpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5xdWV1ZS5hZGQobmV3IENhbGxiYWNrKGNhbGxiYWNrLCB0aW1lKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIGRlZmluZWQgZnVuY3Rpb25zIGluIG9yZGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGRhdGFcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHJ1bihkYXRhKSB7XG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdLnF1ZXVlLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhKTtcblx0XHR9XG5cblx0XHRjb25zdCBjYWxsYmFjayA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLnF1ZXVlLnBvbGwoKTtcblxuXHRcdGlmIChjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRhdGEpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjYWxsYmFjay5ydW4oZGF0YSkudGhlbigocmVzdWx0KSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5ydW4ocmVzdWx0KTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEFUVFJJQlVURV9QUkVGSVggfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuLyoqXG4gKiBAc2luY2UgMS4wLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyA9IFwiYmxvY2tcIjtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXVybGAgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGUgY29udHJvbC5cbiAqXG4gKiBAc2luY2UgMS4wLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX1VSTCA9IGAke0FUVFJJQlVURV9QUkVGSVh9dXJsYDtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXJlbG9hZGAgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgcmVsb2FkLlxuICpcbiAqIHZhbGlkIHZhbHVlczogb25zaG93XG4gKlxuICogQHNpbmNlIDEuMTEuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0ZPUk1fUkVMT0FEID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yZWxvYWRgO1xuXG4vKipcbiAqIGBkYXRhLW1vbnN0ZXItaW50ZW5kYFxuICpcbiAqIEBzaW5jZSAxLjkuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX1ZJU0lCSUxJVFkgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXZpc2liaWxpdHlgO1xuLyoqXG4gKiBgZGF0YS1tb25zdGVyLWludGVuZGBcbiAqXG4gKiBAc2luY2UgMS45LjBcbiAqIEBkZXByZWNhdGVkIHNpbmNlIDMuMzIuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0JVVFRPTl9DTEFTUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWNsYXNzYDtcblxuLyoqXG4gKiBgZGF0YS1tb25zdGVyLWludGVuZGBcbiAqXG4gKiBAc2luY2UgMS44LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JTlRFTkQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWludGVuZGA7XG5cbi8qKlxuICogYGRhdGEtbW9uc3Rlci1oYXMtY2hpbGRyZW5gXG4gKlxuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfSEFTX0NISUxEUkVOID0gYCR7QVRUUklCVVRFX1BSRUZJWH1oYXMtY2hpbGRyZW5gO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZWAgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIGRhdGFzb3VyY2UuXG4gKlxuICogQHNpbmNlIDEuNi4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1kYXRhc291cmNlYDtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLWRhdGFzb3VyY2UtYXJndW1lbnRzYCBjYW4gYmUgdXNlZCB0byBwYXNzIGFyZ3VtZW50cy5cbiAqXG4gKiBAc2luY2UgMS42LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0VfQVJHVU1FTlRTID0gYCR7QVRUUklCVVRFX1BSRUZJWH1kYXRhc291cmNlLWFyZ3VtZW50c2A7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1idXR0b24tbGFiZWxgIGNhbiBiZSB1c2VkIHRvIHBhc3MgbGFiZWxzLlxuICpcbiAqIEBzaW5jZSAxLjYuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0JVVFRPTl9MQUJFTCA9IGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWxhYmVsYDtcblxuZXhwb3J0IHtcblx0QVRUUklCVVRFX0JVVFRPTl9MQUJFTCxcblx0U1RZTEVfRElTUExBWV9NT0RFX0JMT0NLLFxuXHRBVFRSSUJVVEVfRk9STV9VUkwsXG5cdEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0UsXG5cdEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0VfQVJHVU1FTlRTLFxuXHRBVFRSSUJVVEVfSU5URU5ELFxuXHRBVFRSSUJVVEVfVklTSUJJTElUWSxcblx0QVRUUklCVVRFX0ZPUk1fUkVMT0FELFxuXHRBVFRSSUJVVEVfSEFTX0NISUxEUkVOLFxuXHRBVFRSSUJVVEVfQlVUVE9OX0NMQVNTLFxufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBUYWJzU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgVGFic1N0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRUYWJzU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciB0YWJzIHsgXG46YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlOlxcXCJDb25zb2xhc1xcXCIsXFxcIkNvdXJpZXIgTmV3XFxcIixcXFwiUm9ib3RvIE1vbm9cXFwiLFxcXCJTb3VyY2UgQ29kZSBQcm9cXFwiLFxcXCJGaXJhIE1vbm9cXFwiLG1vbm9zcGFjZTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTYpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoOjJweDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDozcHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweDstLW1vbnN0ZXItZHJhZ2dlci13aWR0aDoycHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoOjRweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0OjUwcHh9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLWJvcmRlci1jb2xvci0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0xKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTF7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLWNvbG9yLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMil9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLXRoZW1lLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMil9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ye2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTMpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtM3tjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLWJvcmRlci1jb2xvci00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci00KX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTR7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLWNvbG9yLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtZWxlbWVudCwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtYmFja2dyb3VuZC1pbmhlcml0e2JhY2tncm91bmQtY29sb3I6aW5oZXJpdCFpbXBvcnRhbnR9Lm1vbnN0ZXItdGhlbWUtb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1vZmZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3IpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtwYWRkaW5nOjEuMWVtO3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1bZGF0YS1wb3BwZXItYXJyb3ddLFtkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JhY2tncm91bmQ6aW5oZXJpdDtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xKnZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEqdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpfVtkYXRhLXBvcHBlci1hcnJvd117dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2NvbnRlbnQ6XFxcIlxcXCI7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7dmlzaWJpbGl0eTp2aXNpYmxlfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXRvcF0+W2RhdGEtcG9wcGVyLWFycm93XXtib3R0b206Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKS8yKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj10b3BdPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWxlZnQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci10b3A6dHJhbnNwYXJlbnR9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49Ym90dG9tXT5bZGF0YS1wb3BwZXItYXJyb3dde3RvcDpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1ib3R0b21dPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJpZ2h0OnRyYW5zcGFyZW50O2JvcmRlci10b3A6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49bGVmdF0+W2RhdGEtcG9wcGVyLWFycm93XXtyaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1sZWZ0XT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItdG9wOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXJpZ2h0XT5bZGF0YS1wb3BwZXItYXJyb3dde2xlZnQ6Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKS8yKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1yaWdodF0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItbGVmdDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmlnaHQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDp0cmFuc3BhcmVudH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfS5tb25zdGVyLWJhZGdlLXByaW1hcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXByaW1hcnksLm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnksLm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnksLm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZle3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZSwubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzc3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2VzcywubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5ne3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLC5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWVycm9ye3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1lcnJvciwubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uLmhpZGRlbntkaXNwbGF5Om5vbmV9bmF2W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl17YWxpZ24taXRlbXM6ZmxleC1lbmQ7Ym9yZGVyLWJvdHRvbS1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLWJvdHRvbS13aWR0aDp0aGluO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7bWFyZ2luLWJvdHRvbTouNzVyZW07b3ZlcmZsb3c6aGlkZGVufVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbiAucmVtb3ZlLXRhYnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7YmFja2dyb3VuZC1wb3NpdGlvbjoxMDAlIDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZToxNnB4O2ZsZXgtd3JhcDpub3dyYXA7aGVpZ2h0OjE2cHg7bWluLWhlaWdodDoxNnB4O29yZGVyOjI7d2lkdGg6MTZweH1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b24gc3BhbntkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNDt3aGl0ZS1zcGFjZTpwcmV9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9ue2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1zZWxmOnN0cmV0Y2g7Ym9yZGVyOm5vbmU7Ym9yZGVyLWJvdHRvbTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTttYXJnaW4tcmlnaHQ6Ljc1cmVtO291dGxpbmU6bm9uZTtwYWRkaW5nOi4zNzVyZW0gMDt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt0cmFuc2l0aW9uOmNvbG9yIC44czstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7Ym9yZGVyLWJvdHRvbS1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV0sW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdOm5vdChbZGlzYWJsZWRdKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWJvdHRvbS1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKSFpbXBvcnRhbnR9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXtbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV0sW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdOm5vdChbZGlzYWJsZWRdKTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMikhaW1wb3J0YW50fX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGlzYWJsZWRde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKTtjdXJzb3I6bm90LWFsbG93ZWR9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1yb2xlPXN3aXRjaF17YWxpZ24tc2VsZjpjZW50ZXI7Ym9yZGVyOjA7b3JkZXI6Mjt0b3VjaC1hY3Rpb246bm9uZX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXJvbGU9c3dpdGNoXTpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7Ym9yZGVyLWJvdHRvbS13aWR0aDowfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbiBpbWd7aGVpZ2h0OjEuM3JlbTttYXJnaW4tbGVmdDouNHJlbTt3aWR0aDoxLjNyZW19OjpzbG90dGVkKDpub3QoW3Nsb3RdKTpub3QoLmFjdGl2ZSkpe2Rpc3BsYXk6bm9uZX06OnNsb3R0ZWQoKil7YWxpZ24tc2VsZjpjZW50ZXJ9OjpzbG90dGVkKFtzbG90XSl7Ym9yZGVyLWJvdHRvbS1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9OjpzbG90dGVkKFtzbG90PXN0YXJ0XSl7bWFyZ2luLXJpZ2h0Oi43NXJlbTtvcmRlcjowfTo6c2xvdHRlZChbc2xvdD1lbmRdKXttYXJnaW4tbGVmdDouNzVyZW07b3JkZXI6M31bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uOm5vdChbZGlzYWJsZWRdKXtib3JkZXI6MDtqdXN0aWZ5LWNvbnRlbnQ6bGVmdDtwYWRkaW5nLWxlZnQ6MTVweDtwYWRkaW5nLXJpZ2h0OjE1cHg7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uOmhvdmVyLFtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV0sW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXTpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7Ym9yZGVyOjB9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXtbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdLFtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV06bm90KFtkaXNhYmxlZF0pOmhvdmVye2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpIWltcG9ydGFudH19IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZnVuY3Rpb24gZmluZFNoYWRvd1Jvb3QoZWxlbWVudCkge1xuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHJldHVybiBlbGVtZW50O1xuXHRpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkgcmV0dXJuIG51bGw7XG5cdHJldHVybiBmaW5kU2hhZG93Um9vdChlbGVtZW50LnBhcmVudE5vZGUpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgZmV0Y2ggb3B0aW9uc1xuICogQHBhcmFtIHtPYmplY3R9IGZpbHRlciBmZXRjaCBvcHRpb25zXG4gKiBAcmV0dXJuIHtQcm9taXNlPE9iamVjdD59XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gY2xpZW50IGVycm9yXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gbG9hZEFuZEFzc2lnbkNvbnRlbnQoZWxlbWVudCwgdXJsLCBvcHRpb25zLCBmaWx0ZXIpIHtcblx0cmV0dXJuIGxvYWRDb250ZW50KHVybCwgb3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHRsZXQgY29udGVudCA9IHJlc3BvbnNlLmNvbnRlbnQ7XG5cblx0XHRpZiAoaXNTdHJpbmcoZmlsdGVyKSAmJiBmaWx0ZXIgIT09IFwiXCIpIHtcblx0XHRcdGNvbnN0IHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0Y29uc3QgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRjLmlubmVySFRNTCA9IGNvbnRlbnQ7XG5cdFx0XHRmb3IgKGNvbnN0IFssIG5vZGVdIG9mIGMucXVlcnlTZWxlY3RvckFsbChmaWx0ZXIpLmVudHJpZXMoKSkge1xuXHRcdFx0XHR0LmFwcGVuZENoaWxkKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb250ZW50ID0gdC5pbm5lckhUTUw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0dC5pbm5lckhUTUwgPSBjb250ZW50O1xuXG5cdFx0Y29uc3Qgc2NyaXB0cyA9IHQucXVlcnlTZWxlY3RvckFsbChcInNjcmlwdFwiKTtcblx0XHRmb3IgKGNvbnN0IFssIHNjcmlwdF0gb2Ygc2NyaXB0cy5lbnRyaWVzKCkpIHtcblx0XHRcdGNvbnN0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXHRcdFx0cy5pbm5lckhUTUwgPSBzY3JpcHQuaW5uZXJIVE1MO1xuXHRcdFx0aWYgKHNjcmlwdC5zcmMpIHMuc3JjID0gc2NyaXB0LnNyYztcblx0XHRcdGlmIChzY3JpcHQudHlwZSkgcy50eXBlID0gc2NyaXB0LnR5cGU7XG5cdFx0XHRpZiAoc2NyaXB0LmFzeW5jKSBzLmFzeW5jID0gc2NyaXB0LmFzeW5jO1xuXHRcdFx0aWYgKHNjcmlwdC5kZWZlcikgcy5kZWZlciA9IHNjcmlwdC5kZWZlcjtcblx0XHRcdGlmIChzY3JpcHQuY3Jvc3NPcmlnaW4pIHMuY3Jvc3NPcmlnaW4gPSBzY3JpcHQuY3Jvc3NPcmlnaW47XG5cdFx0XHRpZiAoc2NyaXB0LmludGVncml0eSkgcy5pbnRlZ3JpdHkgPSBzY3JpcHQuaW50ZWdyaXR5O1xuXHRcdFx0aWYgKHNjcmlwdC5yZWZlcnJlclBvbGljeSkgcy5yZWZlcnJlclBvbGljeSA9IHNjcmlwdC5yZWZlcnJlclBvbGljeTtcblx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocyk7XG5cdFx0XHR0LnJlbW92ZUNoaWxkKHNjcmlwdCk7XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCkuaW5uZXJIVE1MID0gdC5pbm5lckhUTUw7XG5cblx0XHRjb25zdCByb290ID0gZmluZFNoYWRvd1Jvb3QoZWxlbWVudCk7XG5cdFx0aWYgKHJvb3QgIT09IG51bGwpIHtcblx0XHRcdGVsZW1lbnQgPSByb290Lmhvc3Q7XG5cdFx0fVxuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KGVsZW1lbnQsIFwibW9uc3Rlci1mZXRjaGVkXCIsIHtcblx0XHRcdHVybCxcblx0XHR9KTtcblxuXHRcdHJldHVybiByZXNwb25zZTtcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBmZXRjaCBvcHRpb25zXG4gKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gY2xpZW50IGVycm9yXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBsb2FkQ29udGVudCh1cmwsIG9wdGlvbnMpIHtcblx0aWYgKHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHR9XG5cblx0cmV0dXJuIGZldGNoKHZhbGlkYXRlU3RyaW5nKHVybCksIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0Ly8gVGhlIG9rIHJlYWQtb25seSBwcm9wZXJ0eSBvZiB0aGUgUmVzcG9uc2UgaW50ZXJmYWNlIGNvbnRhaW5zIGFcblx0XHQvLyBCb29sZWFuIHN0YXRpbmcgd2hldGhlciB0aGUgcmVzcG9uc2Ugd2FzIHN1Y2Nlc3NmdWwgKHN0YXR1cyBpbiB0aGUgcmFuZ2UgMjAwLTI5OSkgb3Igbm90LlxuXHRcdGlmIChyZXNwb25zZT8ub2sgIT09IHRydWUpIHtcblx0XHRcdC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Jlc3BvbnNlL3R5cGVcblx0XHRcdGlmIChcblx0XHRcdFx0W1wiZXJyb3JcIiwgXCJvcGFxdWVcIiwgXCJvcGFxdWVyZWRpcmVjdFwiXS5pbmRleE9mKHJlc3BvbnNlPy50eXBlKSAhPT0gLTFcblx0XHRcdCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0YHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YSAoJHtyZXNwb25zZT8udHlwZX0pYCxcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc3RhdHVzQ2xhc3MgPSBgJHtyZXNwb25zZT8uc3RhdHVzfWAuc3Vic3RyaW5nKDAsIDEpO1xuXHRcdFx0c3dpdGNoIChzdGF0dXNDbGFzcykge1xuXHRcdFx0XHRjYXNlIFwiNFwiOlxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY2xpZW50IGVycm9yICR7cmVzcG9uc2U/LnN0YXR1c1RleHR9YCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0YHVuZGVmaW5lZCBzdGF0dXMgKCR7cmVzcG9uc2U/LnN0YXR1c30gLyAke3Jlc3BvbnNlPy5zdGF0dXNUZXh0fSkgb3IgdHlwZSAoJHtyZXNwb25zZT8udHlwZX0pYCxcblx0XHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRyZXNwb25zZVxuXHRcdFx0XHQudGV4dCgpXG5cdFx0XHRcdC50aGVuKChjb250ZW50KSA9PiB7XG5cdFx0XHRcdFx0cmVzb2x2ZSh7XG5cdFx0XHRcdFx0XHRjb250ZW50LFxuXHRcdFx0XHRcdFx0dHlwZTogcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIiksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuZXhwb3J0IHsgbG9hZEFuZEFzc2lnbkNvbnRlbnQsIGxvYWRDb250ZW50IH07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgVGhlbWVTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBUaGVtZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRUaGVtZVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgdGhlbWUgeyBcbi5tb25zdGVyLXRoZW1lLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLWJvcmRlci1jb2xvci0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0xKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTF7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLWNvbG9yLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMil9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLXRoZW1lLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMil9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ye2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTMpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtM3tjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLWJvcmRlci1jb2xvci00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci00KX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTR7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLWNvbG9yLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtZWxlbWVudCwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtYmFja2dyb3VuZC1pbmhlcml0e2JhY2tncm91bmQtY29sb3I6aW5oZXJpdCFpbXBvcnRhbnR9Lm1vbnN0ZXItdGhlbWUtb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1vZmZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3IpfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVCb29sZWFuIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycywgcG9wcGVySW5zdGFuY2VTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVySW5zdGFuY2VTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJJbnN0YW5jZVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMge0N1c3RvbUVsZW1lbnR9XG4gKiBAcGFyYW0ge0Jvb2xlYW59IG1vZGVcbiAqL1xuZnVuY3Rpb24gc2V0RXZlbnRMaXN0ZW5lcnNNb2RpZmllcnMobW9kZSkge1xuXHRjb25zdCBvcHRpb25zID0gZXh0ZW5kKHt9LCB0aGlzLmdldE9wdGlvbihcInBvcHBlclwiKSk7XG5cdGNvbnN0IG1vZGlmaWVycyA9IG9wdGlvbnM/LltcIm1vZGlmaWVyc1wiXTtcblxuXHRpZiAoIWlzQXJyYXkobW9kaWZpZXJzKSkge1xuXHRcdG9wdGlvbnNbXCJtb2RpZmllcnNcIl0gPSBbXTtcblx0fVxuXG5cdGlmIChcblx0XHRvcHRpb25zW1wibW9kaWZpZXJzXCJdLmZpbHRlcigoZW50cnkpID0+IHtcblx0XHRcdGlmIChlbnRyeT8uW1wibmFtZVwiXSA9PT0gXCJldmVudExpc3RlbmVyc1wiKSB7XG5cdFx0XHRcdC8vIHBlcmZvcm1hbmNlIGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3R1dG9yaWFsLyNwZXJmb3JtYW5jZVxuXHRcdFx0XHRlbnRyeVtcImVuYWJsZWRcIl0gPSB2YWxpZGF0ZUJvb2xlYW4obW9kZSk7XG5cdFx0XHR9XG5cdFx0fSkubGVuZ3RoID09PSAwXG5cdCkge1xuXHRcdG9wdGlvbnNbXCJtb2RpZmllcnNcIl0ucHVzaCh7XG5cdFx0XHRuYW1lOiBcImV2ZW50TGlzdGVuZXJzXCIsXG5cdFx0XHRlbmFibGVkOiB2YWxpZGF0ZUJvb2xlYW4obW9kZSksXG5cdFx0fSk7XG5cdH1cblxuXHR0aGlzW3BvcHBlckluc3RhbmNlU3ltYm9sXS5zZXRPcHRpb25zKG9wdGlvbnMpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcHBlciB9IGZyb20gXCJAcG9wcGVyanMvY29yZVwiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi8uLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbixcblx0YWRkVG9PYmplY3RMaW5rLFxuXHRoYXNPYmplY3RMaW5rLFxufSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7XG5cdGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50LFxuXHRmaXJlQ3VzdG9tRXZlbnQsXG59IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyByYW5kb20gfSBmcm9tIFwiLi4vLi4vbWF0aC9yYW5kb20ubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFRva2VuTGlzdCB9IGZyb20gXCIuLi8uLi90eXBlcy90b2tlbmxpc3QubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi8uLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IFByb2Nlc3NpbmcgfSBmcm9tIFwiLi4vLi4vdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0JVVFRPTl9MQUJFTCxcblx0QVRUUklCVVRFX0ZPUk1fUkVMT0FELFxuXHRBVFRSSUJVVEVfRk9STV9VUkwsXG5cdFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyxcbn0gZnJvbSBcIi4uL2Zvcm0vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQgeyBUYWJzU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvdGFicy5tanNcIjtcbmltcG9ydCB7IGxvYWRBbmRBc3NpZ25Db250ZW50IH0gZnJvbSBcIi4uL2Zvcm0vdXRpbC9mZXRjaC5tanNcIjtcbmltcG9ydCB7IFRoZW1lU3R5bGVTaGVldCB9IGZyb20gXCIuLi9zdHlsZXNoZWV0L3RoZW1lLm1qc1wiO1xuaW1wb3J0IHtcblx0cG9wcGVySW5zdGFuY2VTeW1ib2wsXG5cdHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzLFxufSBmcm9tIFwiLi4vZm9ybS91dGlsL3BvcHBlci5tanNcIjtcblxuZXhwb3J0IHsgVGFicyB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyTmF2RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlck5hdkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG5hdkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJuYXZFbGVtZW50XCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3dpdGNoRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInN3aXRjaEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNoYW5nZVRhYkV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNoYW5nZVRhYkV2ZW50SGFuZGxlclwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlbW92ZVRhYkV2ZW50SGFuZGxlciA9IFN5bWJvbChcInJlbW92ZVRhYkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwicG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG11dGF0aW9uT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJtdXRhdGlvbk9ic2VydmVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkaW1lbnNpb25zU3ltYm9sID0gU3ltYm9sKFwiZGltZW5zaW9uc1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBBIFRhYnMgQ29udHJvbFxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2xheW91dC90YWJzL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC90YWJzLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAzLjc0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIHRhYiBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKi9cbmNsYXNzIFRhYnMgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvbGF5b3V0L3RhYnNcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsYWJlbHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5uZXctdGFiLWxhYmVsPVwiTmV3IFRhYlwiXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlc1xuXHQgKiBAcHJvcGVydHkge251bWJlcn0gZmVhdHVyZXMub3BlbkRlbGF5PTUwMCBPcGVuIGRlbGF5IGluIG1pbGxpc2Vjb25kc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2ggRmV0Y2ggW3NlZSBVc2luZyBGZXRjaCBtb3ppbGxhLm9yZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSS9Vc2luZ19GZXRjaClcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZGlyZWN0PWVycm9yXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2guaGVhZGVycz17XCJhY2NlcHRcIjpcInRleHQvaHRtbFwifX1cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHBvcHBlciBbUG9wcGVySlMgT3B0aW9uc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcG9wcGVyLnBsYWNlbWVudD1ib3R0b20gUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0W119IG1vZGlmaWVycz17bmFtZTpvZmZzZXR9IFBvcHBlckpTIHBsYWNlbWVudFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdFwibmV3LXRhYi1sYWJlbFwiOiBcIk5ldyBUYWJcIixcblx0XHRcdH0sXG5cdFx0XHRidXR0b25zOiB7XG5cdFx0XHRcdHN0YW5kYXJkOiBbXSxcblx0XHRcdFx0cG9wcGVyOiBbXSxcblx0XHRcdH0sXG5cdFx0XHRmZXRjaDoge1xuXHRcdFx0XHRyZWRpcmVjdDogXCJlcnJvclwiLFxuXHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdGFjY2VwdDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdG9wZW5EZWxheTogbnVsbCxcblx0XHRcdH0sXG5cblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xXCIsXG5cdFx0XHRcdHBvcHBlcjogXCJtb25zdGVyLXRoZW1lLXByaW1hcnktMVwiLFxuXHRcdFx0XHRuYXZpZ2F0aW9uOiBcIm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xXCIsXG5cdFx0XHR9LFxuXG5cdFx0XHRwb3BwZXI6IHtcblx0XHRcdFx0cGxhY2VtZW50OiBcImJvdHRvbVwiLFxuXHRcdFx0XHRtb2RpZmllcnM6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiBcIm9mZnNldFwiLFxuXHRcdFx0XHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRcdFx0XHRvZmZzZXQ6IFswLCAyXSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiZXZlbnRMaXN0ZW5lcnNcIixcblx0XHRcdFx0XHRcdGVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cblx0XHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdID0gbmV3IFBhdGhmaW5kZXIoeyBkYXRhOiB7fSB9KTtcblxuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdC8vIHNldHVwIHN0cnVjdHVyZVxuXHRcdGluaXRUYWJCdXR0b25zLmNhbGwodGhpcykudGhlbigoKSA9PiB7XG5cdFx0XHRpbml0UG9wcGVyU3dpdGNoLmNhbGwodGhpcyk7XG5cdFx0XHRpbml0UG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0XHRhdHRhY2hSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHRcdFx0YXR0YWNoVGFiQ2hhbmdlT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1RhYnNTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdGFic1wiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZnVuY3Rpb24gdGhhdCBhY3RpdmF0ZXMgYSB0YWIgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG5hbWUuXG5cdCAqXG5cdCAqIFRoZSB0YWJzIGhhdmUgdG8gYmUgbmFtZWQgd2l0aCB0aGUgYGRhdGEtbW9uc3Rlci1uYW1lYCBhdHRyaWJ1dGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7dHlwZX0gaWRPck5hbWUgLSB0aGUgbmFtZSBvciBpZCBvZiB0aGUgdGFiIHRvIGFjdGl2YXRlXG5cdCAqIEByZXR1cm4ge1RhYnN9IC0gVGhlIGN1cnJlbnQgaW5zdGFuY2Vcblx0ICovXG5cdGFjdGl2ZVRhYihpZE9yTmFtZSkge1xuXHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXG5cdFx0Z2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcykuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0aWYgKGZvdW5kID09PSB0cnVlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLW5hbWVcIikgPT09IGlkT3JOYW1lKSB7XG5cdFx0XHRcdHRoaXMuc2hhZG93Um9vdFxuXHRcdFx0XHRcdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XHRcdFx0YFtkYXRhLW1vbnN0ZXItdGFiLXJlZmVyZW5jZT1cIiR7bm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKX1cIl1gLFxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQuY2xpY2soKTtcblx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSA9PT0gaWRPck5hbWUpIHtcblx0XHRcdFx0dGhpcy5zaGFkb3dSb290XG5cdFx0XHRcdFx0LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdFx0XHRgW2RhdGEtbW9uc3Rlci10YWItcmVmZXJlbmNlPVwiJHtub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpfVwiXWAsXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC5jbGljaygpO1xuXHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmFtZSBvciBpZCBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSB0YWIuXG5cdCAqXG5cdCAqIFRoZSB0YWJzIGhhdmUgdG8gYmUgbmFtZWQgd2l0aCB0aGUgYGRhdGEtbW9uc3Rlci1uYW1lYCBhdHRyaWJ1dGUuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3xudWxsfVxuXHQgKi9cblx0Z2V0QWN0aXZlVGFiKCkge1xuXHRcdGNvbnN0IG5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcyk7XG5cdFx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0XHRpZiAobm9kZS5tYXRjaGVzKFwiLmFjdGl2ZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItbmFtZVwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1uYW1lXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgZG9tIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgZG9tIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRQb3BwZXJTd2l0Y2goKSB7XG5cdGNvbnN0IG5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgYFske0FUVFJJQlVURV9ST0xFfT1cInN3aXRjaFwiXWApOyAvLyBudWxsIFx1MjFBNiBvbmx5IHVubmFtZWQgc2xvdHNcblx0bGV0IHN3aXRjaEJ1dHRvbjtcblx0aWYgKG5vZGVzLnNpemUgPT09IDApIHtcblx0XHRzd2l0Y2hCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuXHRcdHN3aXRjaEJ1dHRvbi5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUsIFwic3dpdGNoXCIpO1xuXHRcdHN3aXRjaEJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJwYXJ0XCIsIFwic3dpdGNoXCIpO1xuXHRcdHN3aXRjaEJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xuXHRcdGNvbnN0IGNsYXNzTGlzdCA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5idXR0b25cIik7XG5cdFx0aWYgKGNsYXNzTGlzdCkge1xuXHRcdFx0c3dpdGNoQnV0dG9uLmNsYXNzTGlzdC5hZGQoY2xhc3NMaXN0KTtcblx0XHR9XG5cdFx0c3dpdGNoQnV0dG9uLmlubmVySFRNTCA9XG5cdFx0XHQnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj48cGF0aCBkPVwiTTkuNSAxM2ExLjUgMS41IDAgMSAxLTMgMCAxLjUgMS41IDAgMCAxIDMgMHptMC01YTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwem0wLTVhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDB6XCIvPjwvc3ZnPic7XG5cdFx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXS5wcmVwZW5kKHN3aXRjaEJ1dHRvbik7XG5cdH0gZWxzZSB7XG5cdFx0c3dpdGNoQnV0dG9uID0gbm9kZXMubmV4dCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW3BvcHBlclN3aXRjaEV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoZXZlbnQsIEFUVFJJQlVURV9ST0xFLCBcInN3aXRjaFwiKTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHtcblx0XHRcdHRvZ2dsZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdH1cblx0fTtcblxuXHRmb3IgKGNvbnN0IHR5cGUgb2YgW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkge1xuXHRcdHN3aXRjaEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbcG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyXSk7XG5cdH1cblxuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdID0gc3dpdGNoQnV0dG9uO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGhpZGVQb3BwZXIoKSB7XG5cdGlmICghdGhpc1twb3BwZXJJbnN0YW5jZVN5bWJvbF0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0Ly8gcGVyZm9ybWFuY2UgaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvdHV0b3JpYWwvI3BlcmZvcm1hbmNlXG5cdHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzLmNhbGwodGhpcywgZmFsc2UpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNob3dQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSztcblx0Ly8gcGVyZm9ybWFuY2UgaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvdHV0b3JpYWwvI3BlcmZvcm1hbmNlXG5cdHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzLmNhbGwodGhpcywgdHJ1ZSk7XG5cblx0dGhpc1twb3BwZXJJbnN0YW5jZVN5bWJvbF0udXBkYXRlKCk7XG5cblx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ2aXNpYmlsaXR5XCIpO1xuXHR9KVxuXHRcdC5ydW4odW5kZWZpbmVkKVxuXHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGVQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdGhpZGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0fSBlbHNlIHtcblx0XHRzaG93UG9wcGVyLmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhdHRhY2hSZXNpemVPYnNlcnZlcigpIHtcblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0aWYgKHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0XHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEuY2FsY3VsYXRlZFwiLCBmYWxzZSk7XG5cdFx0XHRjaGVja0FuZFJlYXJyYW5nZUJ1dHRvbnMuY2FsbCh0aGlzKTtcblx0XHR9KTtcblx0fSk7XG5cblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZSh0aGlzW25hdkVsZW1lbnRTeW1ib2xdKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhdHRhY2hUYWJDaGFuZ2VPYnNlcnZlcigpIHtcblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcblx0XHRsZXQgcnVuVXBkYXRlID0gZmFsc2U7XG5cblx0XHRmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuXHRcdFx0aWYgKG11dGF0aW9uLnR5cGUgPT09IFwiY2hpbGRMaXN0XCIpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoID4gMCB8fFxuXHRcdFx0XHRcdG11dGF0aW9uLnJlbW92ZWROb2Rlcy5sZW5ndGggPiAwXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJ1blVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocnVuVXBkYXRlID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEuY2FsY3VsYXRlZFwiLCBmYWxzZSk7XG5cdFx0XHRpbml0VGFiQnV0dG9ucy5jYWxsKHRoaXMpO1xuXHRcdH1cblx0fSkub2JzZXJ2ZSh0aGlzLCB7XG5cdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQGV4dGVybmFsIFwiZXh0ZXJuYWw6Y3JlYXRlUG9wcGVyXCJcbiAqIEBzZWUge0BsaW5rICBQbHVnaW5zfVxuICovXG5mdW5jdGlvbiBpbml0UG9wcGVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRjb25zdCBvcHRpb25zID0gZXh0ZW5kKHt9LCBzZWxmLmdldE9wdGlvbihcInBvcHBlclwiKSk7XG5cblx0c2VsZltwb3BwZXJJbnN0YW5jZVN5bWJvbF0gPSBjcmVhdGVQb3BwZXIoXG5cdFx0c2VsZltzd2l0Y2hFbGVtZW50U3ltYm9sXSxcblx0XHRzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLFxuXHRcdG9wdGlvbnMsXG5cdCk7XG5cblx0Y29uc3Qgb2JzZXJ2ZXIxID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXHRcdGxldCBydW5VcGRhdGUgPSBmYWxzZTtcblx0XHRmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuXHRcdFx0aWYgKG11dGF0aW9uLnR5cGUgPT09IFwiY2hpbGRMaXN0XCIpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoID4gMCB8fFxuXHRcdFx0XHRcdG11dGF0aW9uLnJlbW92ZWROb2Rlcy5sZW5ndGggPiAwXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJ1blVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocnVuVXBkYXRlID09PSB0cnVlKSB7XG5cdFx0XHRzZWxmW3BvcHBlckluc3RhbmNlU3ltYm9sXS51cGRhdGUoKTtcblx0XHR9XG5cdH0pO1xuXG5cdG9ic2VydmVyMS5vYnNlcnZlKHNlbGZbcG9wcGVyTmF2RWxlbWVudFN5bWJvbF0sIHtcblx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0c3VidHJlZTogdHJ1ZSxcblx0fSk7XG5cblx0cmV0dXJuIHNlbGY7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gc2hvdyhlbGVtZW50KSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGNvbnN0IHJlZmVyZW5jZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9dGFiLXJlZmVyZW5jZWApO1xuXG5cdGNvbnN0IG5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcyk7XG5cdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdGNvbnN0IGlkID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuXHRcdGlmIChpZCA9PT0gcmVmZXJlbmNlKSB7XG5cdFx0XHRub2RlLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cblx0XHRcdGNvbnN0IG9wZW5EZWxheSA9IHBhcnNlSW50KHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMub3BlbkRlbGF5XCIpLCAxMCk7XG5cblx0XHRcdGlmICghaXNOYU4ob3BlbkRlbGF5KSAmJiBvcGVuRGVsYXkgPiAwKSB7XG5cdFx0XHRcdG5vZGUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0bm9kZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XG5cdFx0XHRcdH0sIG9wZW5EZWxheSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGdldCBhbGwgZGF0YS0gZnJvbSBidXR0b24gYW5kIGZpbHRlciBvdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXMgYW5kIGRhdGEtbW9uc3Rlci1pbnNlcnRcblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRcdGNvbnN0IG1hc2sgPSBbXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXNcIixcblx0XHRcdFx0XCJkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZVwiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1zdGF0ZVwiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1idXR0b24tbGFiZWxcIixcblx0XHRcdFx0XCJkYXRhLW1vbnN0ZXItb2JqZWN0bGlua1wiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1yb2xlXCIsXG5cdFx0XHRdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IFssIGF0dHJdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUuYXR0cmlidXRlcykpIHtcblx0XHRcdFx0aWYgKGF0dHIubmFtZS5zdGFydHNXaXRoKFwiZGF0YS1cIikgJiYgbWFzay5pbmRleE9mKGF0dHIubmFtZSkgPT09IC0xKSB7XG5cdFx0XHRcdFx0ZGF0YVthdHRyLm5hbWVdID0gYXR0ci52YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKSkge1xuXHRcdFx0XHRjb25zdCB1cmwgPSBub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQhbm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKSB8fFxuXHRcdFx0XHRcdG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1JFTE9BRCkudG9Mb3dlckNhc2UoKSA9PT0gXCJvbnNob3dcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRub2RlLnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiZmV0Y2hcIiwge30pO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXIgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdGxvYWRBbmRBc3NpZ25Db250ZW50KG5vZGUsIHVybCwgb3B0aW9ucywgZmlsdGVyKVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItdGFiLWNoYW5nZWRcIiwge1xuXHRcdFx0XHRcdFx0XHRyZWZlcmVuY2UsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItdGFiLWNoYW5nZWRcIiwge1xuXHRcdFx0XHRcdHJlZmVyZW5jZSxcblx0XHRcdFx0XHRkYXRhLFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0bm9kZS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN0YW5kYXJkQnV0dG9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiKTtcblx0Zm9yIChjb25zdCBpbmRleCBpbiBzdGFuZGFyZEJ1dHRvbnMpIHtcblx0XHRjb25zdCBidXR0b24gPSBzdGFuZGFyZEJ1dHRvbnNbaW5kZXhdO1xuXHRcdGNvbnN0IHN0YXRlID0gYnV0dG9uW1wicmVmZXJlbmNlXCJdID09PSByZWZlcmVuY2UgPyBcImFjdGl2ZVwiIDogXCJpbmFjdGl2ZVwiO1xuXHRcdHRoaXMuc2V0T3B0aW9uKGBidXR0b25zLnN0YW5kYXJkLiR7aW5kZXh9LnN0YXRlYCwgc3RhdGUpO1xuXHR9XG5cblx0Y29uc3QgcG9wcGVyQnV0dG9uID0gdGhpcy5nZXRPcHRpb24oXCJidXR0b25zLnBvcHBlclwiKTtcblx0Zm9yIChjb25zdCBpbmRleCBpbiBwb3BwZXJCdXR0b24pIHtcblx0XHRjb25zdCBidXR0b24gPSBwb3BwZXJCdXR0b25baW5kZXhdO1xuXHRcdGNvbnN0IHN0YXRlID0gYnV0dG9uW1wicmVmZXJlbmNlXCJdID09PSByZWZlcmVuY2UgPyBcImFjdGl2ZVwiIDogXCJpbmFjdGl2ZVwiO1xuXHRcdHRoaXMuc2V0T3B0aW9uKGBidXR0b25zLnBvcHBlci4ke2luZGV4fS5zdGF0ZWAsIHN0YXRlKTtcblx0fVxuXG5cdGhpZGVQb3BwZXIuY2FsbCh0aGlzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbY2hhbmdlVGFiRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1JPTEUsIFwiYnV0dG9uXCIpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBlbGVtZW50LmRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRzaG93LmNhbGwodGhpcywgZWxlbWVudCk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKiBAZmlyZXMgbW9uc3Rlci10YWItcmVtb3ZlXG5cdCAqL1xuXHR0aGlzW3JlbW92ZVRhYkV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJyZW1vdmUtdGFiXCIsXG5cdFx0KTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IGJ1dHRvbiA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0XHRldmVudCxcblx0XHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcdFwiYnV0dG9uXCIsXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoYnV0dG9uIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQgJiYgYnV0dG9uLmRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRcdGNvbnN0IHJlZmVyZW5jZSA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0YCR7QVRUUklCVVRFX1BSRUZJWH10YWItcmVmZXJlbmNlYCxcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucXVlcnlTZWxlY3RvcihgW2lkPSR7cmVmZXJlbmNlfV1gKTtcblx0XHRcdFx0XHRpZiAoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGNvbnRhaW5lci5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdGluaXRUYWJCdXR0b25zLmNhbGwodGhpcyk7XG5cdFx0XHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLXRhYi1yZW1vdmVcIiwge1xuXHRcdFx0XHRcdFx0XHRyZWZlcmVuY2UsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hcIiwgdGhpc1tjaGFuZ2VUYWJFdmVudEhhbmRsZXJdKTtcblx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpc1tjaGFuZ2VUYWJFdmVudEhhbmRsZXJdKTtcblxuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaFwiLCB0aGlzW3JlbW92ZVRhYkV2ZW50SGFuZGxlcl0pO1xuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzW3JlbW92ZVRhYkV2ZW50SGFuZGxlcl0pO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHBhdGgpKSB7XG5cdFx0XHRpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGlkZVBvcHBlci5jYWxsKHRoaXMpO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb2JzZXJ2ZWROb2RlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFRhYk11dGF0aW9uT2JzZXJ2ZXIob2JzZXJ2ZWROb2RlKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmIChoYXNPYmplY3RMaW5rKG9ic2VydmVkTm9kZSwgbXV0YXRpb25PYnNlcnZlclN5bWJvbCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvKipcblx0ICogdGhpcyBjb25zdHJ1Y3QgbW9uaXRvcnMgYSBub2RlIHdoZXRoZXIgaXQgaXMgZGlzYWJsZWQgb3IgbW9kaWZpZWRcblx0ICogQHR5cGUge011dGF0aW9uT2JzZXJ2ZXJ9XG5cdCAqL1xuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcblx0XHRpZiAoaXNBcnJheShtdXRhdGlvbnMpKSB7XG5cdFx0XHRjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9ucy5wb3AoKTtcblx0XHRcdGlmIChtdXRhdGlvbiBpbnN0YW5jZW9mIE11dGF0aW9uUmVjb3JkKSB7XG5cdFx0XHRcdGluaXRUYWJCdXR0b25zLmNhbGwoc2VsZik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRvYnNlcnZlci5vYnNlcnZlKG9ic2VydmVkTm9kZSwge1xuXHRcdGNoaWxkTGlzdDogZmFsc2UsXG5cdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRzdWJ0cmVlOiBmYWxzZSxcblx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcblx0XHRcdFwiZGlzYWJsZWRcIixcblx0XHRcdEFUVFJJQlVURV9CVVRUT05fTEFCRUwsXG5cdFx0XHRgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1pY29uYCxcblx0XHRdLFxuXHR9KTtcblxuXHRhZGRUb09iamVjdExpbmsob2JzZXJ2ZWROb2RlLCBtdXRhdGlvbk9ic2VydmVyU3ltYm9sLCBvYnNlcnZlcik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRyb2xdYCxcblx0KTtcblx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBuYXZbJHtBVFRSSUJVVEVfUk9MRX09bmF2XWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXBvcHBlcl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlck5hdkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXItbmF2XWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj59XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICpcbiAqL1xuZnVuY3Rpb24gaW5pdFRhYkJ1dHRvbnMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGxldCBhY3RpdmVSZWZlcmVuY2U7XG5cblx0Y29uc3QgZGltZW5zaW9uc0NhbGN1bGF0ZWQgPSB0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShcblx0XHRcImRhdGEuY2FsY3VsYXRlZFwiLFxuXHRcdGZhbHNlLFxuXHQpO1xuXG5cdGNvbnN0IGJ1dHRvbnMgPSBbXTtcblx0Y29uc3Qgbm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzLCB1bmRlZmluZWQsIG51bGwpOyAvLyBudWxsIFx1MjFBNiBvbmx5IHVubmFtZWQgc2xvdHNcblxuXHRmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcblx0XHRpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSBjb250aW51ZTtcblx0XHRsZXQgbGFiZWwgPSBnZXRCdXR0b25MYWJlbC5jYWxsKHRoaXMsIG5vZGUpO1xuXG5cdFx0bGV0IHJlZmVyZW5jZTtcblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoXCJpZFwiKSkge1xuXHRcdFx0cmVmZXJlbmNlID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblx0XHR9XG5cblx0XHRsZXQgZGlzYWJsZWQ7XG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikgfHwgbm9kZS5kaXNhYmxlZCA9PT0gdHJ1ZSkge1xuXHRcdFx0ZGlzYWJsZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICghcmVmZXJlbmNlKSB7XG5cdFx0XHRyZWZlcmVuY2UgPSBuZXcgSUQoXCJ0YWJcIikudG9TdHJpbmcoKTtcblx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgcmVmZXJlbmNlKTtcblx0XHR9XG5cblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24taWNvbmApKSB7XG5cdFx0XHRsYWJlbCA9IGA8c3BhbiBwYXJ0PVwibGFiZWxcIj4ke2xhYmVsfTwvc3Bhbj48aW1nIHBhcnQ9XCJpY29uXCIgc3JjPVwiJHtub2RlLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0YCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24taWNvbmAsXG5cdFx0XHQpfVwiPmA7XG5cdFx0fVxuXG5cdFx0bGV0IHJlbW92ZSA9IGZhbHNlO1xuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShgJHtBVFRSSUJVVEVfUFJFRklYfXJlbW92YWJsZWApKSB7XG5cdFx0XHRyZW1vdmUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChub2RlLm1hdGNoZXMoXCIuYWN0aXZlXCIpID09PSB0cnVlICYmIGRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRub2RlLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdFx0XHRhY3RpdmVSZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3RhdGUgPSBcIlwiO1xuXHRcdGNvbnN0IGNsYXNzZXMgPSBkaW1lbnNpb25zQ2FsY3VsYXRlZCA/IFwiXCIgOiBcImludmlzaWJsZVwiO1xuXG5cdFx0YnV0dG9ucy5wdXNoKHtcblx0XHRcdHJlZmVyZW5jZSxcblx0XHRcdGxhYmVsLFxuXHRcdFx0c3RhdGUsXG5cdFx0XHRjbGFzczogY2xhc3Nlcyxcblx0XHRcdGRpc2FibGVkLFxuXHRcdFx0cmVtb3ZlLFxuXHRcdH0pO1xuXG5cdFx0YXR0YWNoVGFiTXV0YXRpb25PYnNlcnZlci5jYWxsKHRoaXMsIG5vZGUpO1xuXHR9XG5cblx0dGhpcy5zZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIsIGNsb25lKGJ1dHRvbnMpKTtcblx0dGhpcy5zZXRPcHRpb24oXCJidXR0b25zLnBvcHBlclwiLCBbXSk7XG5cdHRoaXMuc2V0T3B0aW9uKFwibWFya2VyXCIsIHJhbmRvbSgpKTtcblxuXHRyZXR1cm4gYWRqdXN0QnV0dG9uVmlzaWJpbGl0eS5jYWxsKHRoaXMpLnRoZW4oKCkgPT4ge1xuXHRcdGlmIChhY3RpdmVSZWZlcmVuY2UpIHtcblx0XHRcdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGJ1dHRvbiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XHRcdGBbJHtBVFRSSUJVVEVfUFJFRklYfXRhYi1yZWZlcmVuY2U9XCIke2FjdGl2ZVJlZmVyZW5jZX1cIl1gLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoYnV0dG9uIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQgJiYgYnV0dG9uLmRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0c2hvdy5jYWxsKHRoaXMsIGJ1dHRvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHRcdC5ydW4odW5kZWZpbmVkKVxuXHRcdFx0XHQudGhlbigoKSA9PiB7fSlcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gY2hlY2tBbmRSZWFycmFuZ2VCdXR0b25zKCkge1xuXHRpZiAodGhpc1tkaW1lbnNpb25zU3ltYm9sXS5nZXRWaWEoXCJkYXRhLmNhbGN1bGF0ZWRcIiwgZmFsc2UpICE9PSB0cnVlKSB7XG5cdFx0Y2FsY3VsYXRlTmF2aWdhdGlvbkJ1dHRvbnNEaW1lbnNpb25zLmNhbGwodGhpcyk7XG5cdH1cblxuXHRyZWFycmFuZ2VCdXR0b25zLmNhbGwodGhpcyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmZ1bmN0aW9uIGFkanVzdEJ1dHRvblZpc2liaWxpdHkoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXHRcdFx0Y29uc3QgZGVmQ291bnQgPSBzZWxmLmdldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIikubGVuZ3RoO1xuXHRcdFx0Y29uc3QgZG9tQ291bnQgPSBzZWxmW25hdkVsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0XHRcdCdidXR0b25bZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIl0nLFxuXHRcdFx0KS5sZW5ndGg7XG5cblx0XHRcdC8vIGluIGRyYXdpbmdcblx0XHRcdGlmIChkZWZDb3VudCAhPT0gZG9tQ291bnQpIHJldHVybjtcblxuXHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXG5cdFx0XHRjaGVja0FuZFJlYXJyYW5nZUJ1dHRvbnMuY2FsbChzZWxmKTtcblxuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXG5cdFx0b2JzZXJ2ZXIub2JzZXJ2ZShzZWxmW25hdkVsZW1lbnRTeW1ib2xdLCB7XG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldERpbVZhbHVlKHZhbHVlKSB7XG5cdGlmIChbdW5kZWZpbmVkLCBudWxsXS5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IHZhbHVlQXNJbnQgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuXG5cdGlmIChpc05hTih2YWx1ZUFzSW50KSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0cmV0dXJuIHZhbHVlQXNJbnQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gY2FsY0JveFdpZHRoKG5vZGUpIHtcblx0Y29uc3QgZGltID0gZ2V0R2xvYmFsKFwid2luZG93XCIpLmdldENvbXB1dGVkU3R5bGUobm9kZSk7XG5cdGNvbnN0IGJvdW5kaW5nID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRyZXR1cm4gKFxuXHRcdGdldERpbVZhbHVlKGRpbVtcImJvcmRlci1sZWZ0LXdpZHRoXCJdKSArXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wicGFkZGluZy1sZWZ0XCJdKSArXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wibWFyZ2luLWxlZnRcIl0pICtcblx0XHRnZXREaW1WYWx1ZShib3VuZGluZ1tcIndpZHRoXCJdKSArXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wiYm9yZGVyLXJpZ2h0LXdpZHRoXCJdKSArXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wibWFyZ2luLXJpZ2h0XCJdKSArXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wicGFkZGluZy1sZWZ0XCJdKVxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHJlYXJyYW5nZUJ1dHRvbnMoKSB7XG5cdGNvbnN0IHN0YW5kYXJkQnV0dG9ucyA9IFtdO1xuXHRjb25zdCBwb3BwZXJCdXR0b25zID0gW107XG5cblx0bGV0IHN1bSA9IDA7XG5cdGNvbnN0IHNwYWNlID0gdGhpc1tkaW1lbnNpb25zU3ltYm9sXS5nZXRWaWEoXCJkYXRhLnNwYWNlXCIpO1xuXG5cdGNvbnN0IGJ1dHRvbnMgPSB0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIik7XG5cdGZvciAoY29uc3QgWywgYnV0dG9uXSBvZiBidXR0b25zLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IHJlZiA9IGJ1dHRvbj8ucmVmZXJlbmNlO1xuXG5cdFx0c3VtICs9IHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uZ2V0VmlhKGBkYXRhLmJ1dHRvbi4ke3JlZn1gKTtcblxuXHRcdGlmIChzdW0gPiBzcGFjZSkge1xuXHRcdFx0cG9wcGVyQnV0dG9ucy5wdXNoKGNsb25lKGJ1dHRvbikpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdGFuZGFyZEJ1dHRvbnMucHVzaChjbG9uZShidXR0b24pKTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIiwgc3RhbmRhcmRCdXR0b25zKTtcblx0dGhpcy5zZXRPcHRpb24oXCJidXR0b25zLnBvcHBlclwiLCBwb3BwZXJCdXR0b25zKTtcblxuXHRpZiAodGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXSkge1xuXHRcdGlmIChwb3BwZXJCdXR0b25zLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZU5hdmlnYXRpb25CdXR0b25zRGltZW5zaW9ucygpIHtcblx0Y29uc3Qgd2lkdGggPSB0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXG5cdGxldCBzdGFydEVuZFdpZHRoID0gMDtcblxuXHRnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzLCB1bmRlZmluZWQsIFwic3RhcnRcIikuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdHN0YXJ0RW5kV2lkdGggKz0gY2FsY0JveFdpZHRoLmNhbGwodGhpcywgbm9kZSk7XG5cdH0pO1xuXG5cdGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIHVuZGVmaW5lZCwgXCJlbmRcIikuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdHN0YXJ0RW5kV2lkdGggKz0gY2FsY0JveFdpZHRoLmNhbGwodGhpcywgbm9kZSk7XG5cdH0pO1xuXG5cdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS5zcGFjZVwiLCB3aWR0aCAtIHN0YXJ0RW5kV2lkdGggLSAyKTtcblx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLnZpc2libGVcIiwgISh3aWR0aCA9PT0gMCkpO1xuXG5cdGNvbnN0IGJ1dHRvbnMgPSB0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIikuY29uY2F0KFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiYnV0dG9ucy5wb3BwZXJcIiksXG5cdCk7XG5cblx0Zm9yIChjb25zdCBbaSwgYnV0dG9uXSBvZiBidXR0b25zLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IHJlZiA9IGJ1dHRvbj8ucmVmZXJlbmNlO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSB0aGlzW25hdkVsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRgOnNjb3BlID4gWyR7QVRUUklCVVRFX1BSRUZJWH10YWItcmVmZXJlbmNlPVwiJHtyZWZ9XCJdYCxcblx0XHQpO1xuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkpIGNvbnRpbnVlO1xuXG5cdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXG5cdFx0XHRgZGF0YS5idXR0b24uJHtyZWZ9YCxcblx0XHRcdGNhbGNCb3hXaWR0aC5jYWxsKHRoaXMsIGVsZW1lbnQpLFxuXHRcdCk7XG5cdFx0YnV0dG9uW1wiY2xhc3NcIl0gPSBuZXcgVG9rZW5MaXN0KGJ1dHRvbltcImNsYXNzXCJdKVxuXHRcdFx0LnJlbW92ZShcImludmlzaWJsZVwiKVxuXHRcdFx0LnRvU3RyaW5nKCk7XG5cdH1cblxuXHRjb25zdCBzbG90cyA9IHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0YG5hdlske0FUVFJJQlVURV9QUkVGSVh9cm9sZT1uYXZdID4gc2xvdC5pbnZpc2libGUsIHNsb3RbJHtBVFRSSUJVVEVfUFJFRklYfXJvbGU9c2xvdF0uaW52aXNpYmxlYCxcblx0KTtcblx0Zm9yIChjb25zdCBbLCBzbG90XSBvZiBzbG90cy5lbnRyaWVzKCkpIHtcblx0XHRzbG90LmNsYXNzTGlzdC5yZW1vdmUoXCJpbnZpc2libGVcIik7XG5cdH1cblxuXHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEuY2FsY3VsYXRlZFwiLCB0cnVlKTtcblx0dGhpcy5zZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIsIGNsb25lKGJ1dHRvbnMpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRCdXR0b25MYWJlbChub2RlKSB7XG5cdGxldCBsYWJlbDtcblx0bGV0IHNldExhYmVsID0gZmFsc2U7XG5cdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMKSkge1xuXHRcdGxhYmVsID0gbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCk7XG5cdH0gZWxzZSB7XG5cdFx0bGFiZWwgPSBub2RlLmlubmVyVGV4dDtcblx0XHRzZXRMYWJlbCA9IHRydWU7XG5cdH1cblxuXHRpZiAoIWlzU3RyaW5nKGxhYmVsKSkge1xuXHRcdGxhYmVsID0gXCJcIjtcblx0fVxuXG5cdGxhYmVsID0gbGFiZWwudHJpbSgpO1xuXG5cdGlmIChsYWJlbCA9PT0gXCJcIikge1xuXHRcdGxhYmVsID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMubmV3LXRhYi1sYWJlbFwiLCBcIk5ldyBUYWJcIik7XG5cdH1cblxuXHRpZiAobGFiZWwubGVuZ3RoID4gMTAwKSB7XG5cdFx0bGFiZWwgPSBgJHtsYWJlbC5zdWJzdHJpbmcoMCwgOTkpfVx1MjAyNmA7XG5cdH1cblxuXHRpZiAoc2V0TGFiZWwgPT09IHRydWUpIHtcblx0XHRub2RlLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLCBsYWJlbCk7XG5cdH1cblxuXHRyZXR1cm4gbGFiZWw7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItc3RhdGUgcGF0aDpidXR0b25zLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCBwYXRoOmJ1dHRvbnMuZGlzYWJsZWQgfCBpZjp0cnVlLCAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci10YWItcmVmZXJlbmNlIHBhdGg6YnV0dG9ucy5yZWZlcmVuY2VcIj48c3BhblxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6YnV0dG9ucy5sYWJlbFwiPjwvc3Bhbj48c3BhbiBwYXJ0PVwicmVtb3ZlLXRhYlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6YnV0dG9ucy5yZW1vdmUgfCA/OnJlbW92ZS10YWI6aGlkZGVuIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cInJlbW92ZS10YWJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvc3Bhbj48L2J1dHRvbj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPG5hdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm5hdlwiIHBhcnQ9XCJuYXZcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1tYXJrZXIgcGF0aDptYXJrZXIsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5uYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWluc2VydD1cImJ1dHRvbnMgcGF0aDpidXR0b25zLnN0YW5kYXJkXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cInN0YXJ0XCIgY2xhc3M9XCJpbnZpc2libGVcIj48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCJcblx0XHRcdFx0XHQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMucG9wcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1wb3BwZXItYXJyb3c+PC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJwb3BwZXItbmF2XCIgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXItbmF2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiYnV0dG9ucyBwYXRoOmJ1dHRvbnMucG9wcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cInBvcHBlclwiIGNsYXNzPVwiaW52aXNpYmxlXCI+PC9zbG90PlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJlbmRcIiBjbGFzcz1cImludmlzaWJsZVwiPjwvc2xvdD5cbiAgICAgICAgICAgIDwvbmF2PlxuICAgICAgICAgICAgPHNsb3QgZGF0YS1tb25zdGVyLXJvbGU9XCJzbG90XCIgY2xhc3M9XCJpbnZpc2libGVcIj48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUYWJzKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBNZXNzYWdlU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgTWVzc2FnZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRNZXNzYWdlU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBtZXNzYWdlIHsgXG46d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0ZXh0LXNpemUtYWRqdXN0OjEwMCV9OndoZXJlKGgxKXtmb250LXNpemU6MmVtO21hcmdpbi1ibG9jay1lbmQ6LjY3ZW07bWFyZ2luLWJsb2NrLXN0YXJ0Oi42N2VtfTp3aGVyZShkbCxvbCx1bCkgOndoZXJlKGRsLG9sLHVsKXttYXJnaW4tYmxvY2stZW5kOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OjB9OndoZXJlKGhyKXtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbG9yOmluaGVyaXQ7aGVpZ2h0OjB9OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHByZSxzYW1wKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKHNtYWxsKXtmb250LXNpemU6ODAlfTp3aGVyZSh0YWJsZSl7Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcjt0ZXh0LWluZGVudDowfTp3aGVyZShidXR0b24saW5wdXQsc2VsZWN0KXttYXJnaW46MH06d2hlcmUoYnV0dG9uKXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259OndoZXJlKHByb2dyZXNzKXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06d2hlcmUoc2VsZWN0KXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZSh0ZXh0YXJlYSl7bWFyZ2luOjB9OndoZXJlKGlucHV0W3R5cGU9c2VhcmNoIGldKXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi41NH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5bGU6bm9uZTtwYWRkaW5nOjB9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6MXB4IGRvdHRlZCBCdXR0b25UZXh0fTp3aGVyZSg6LW1vei11aS1pbnZhbGlkKXtib3gtc2hhZG93Om5vbmV9OndoZXJlKGRpYWxvZyl7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjpzb2xpZDtjb2xvcjojMDAwO2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtsZWZ0OjA7bWFyZ2luOmF1dG87cGFkZGluZzoxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50fTp3aGVyZShkaWFsb2c6bm90KFtvcGVuXSkpe2Rpc3BsYXk6bm9uZX06d2hlcmUoc3VtbWFyeSl7ZGlzcGxheTpsaXN0LWl0ZW19aHRtbHtoZWlnaHQ6MTAwJX1ib2R5LGh0bWx7bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCl9Ym9keXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYXktMTojZjZmNmY2Oy0tbW9uc3Rlci1jb2xvci1ncmF5LTI6I2UyZTJlMjstLW1vbnN0ZXItY29sb3ItZ3JheS0zOiM4YjhiOGI7LS1tb25zdGVyLWNvbG9yLWdyYXktNDojNmY2ZjZmOy0tbW9uc3Rlci1jb2xvci1ncmF5LTU6IzNlM2UzZTstLW1vbnN0ZXItY29sb3ItZ3JheS02OiMyMjI7LS1tb25zdGVyLWNvbG9yLXJvc2UtMTojZmZmN2Y5Oy0tbW9uc3Rlci1jb2xvci1yb3NlLTI6I2ZmZGNlNTstLW1vbnN0ZXItY29sb3Itcm9zZS0zOiNmZjNiOGQ7LS1tb25zdGVyLWNvbG9yLXJvc2UtNDojZGIwMDcyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTU6IzgwMDA0MDstLW1vbnN0ZXItY29sb3Itcm9zZS02OiM0YzAwMjM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0xOiNmZmY4Zjg7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0yOiNmZmRkZGY7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0zOiNmZjQyNmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS00OiNkZTAwNTE7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS01OiM4MjAwMmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS02OiM1MTAwMTg7LS1tb25zdGVyLWNvbG9yLXJlZC0xOiNmZmY4ZjY7LS1tb25zdGVyLWNvbG9yLXJlZC0yOiNmZmRkZDg7LS1tb25zdGVyLWNvbG9yLXJlZC0zOiNmZjQ2NDc7LS1tb25zdGVyLWNvbG9yLXJlZC00OiNlMDAwMmI7LS1tb25zdGVyLWNvbG9yLXJlZC01OiM4MzAwMTQ7LS1tb25zdGVyLWNvbG9yLXJlZC02OiM1MzAwMDM7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xOiNmZmY4ZjU7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yOiNmZmRlZDE7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zOiNmZDRkMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS00OiNjZDNjMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS01OiM3NTIxMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS02OiM0MDE2MDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTE6I2ZmZjhmMzstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMjojZmZkZmM2Oy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0zOiNkNTczMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTQ6I2FjNWMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNTojNjMzMzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi02OiMzNzFkMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTE6I2ZmZjhlZjstLW1vbnN0ZXItY29sb3ItYW1iZXItMjojZmZlMGIyOy0tbW9uc3Rlci1jb2xvci1hbWJlci0zOiNiOTgzMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTQ6IzkyNjcwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNTojNTIzODAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci02OiMzMDIxMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0xOiNmZmY5ZTU7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0yOiNmZmU1M2U7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0zOiM5YzhiMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy00OiM3ZDZmMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy01OiM0NjNkMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy02OiMyOTIzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMTojZjdmZmFjOy0tbW9uc3Rlci1jb2xvci1saW1lLTI6I2Q1ZjIwMDstLW1vbnN0ZXItY29sb3ItbGltZS0zOiM4MTkzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNDojNjc3NjAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTU6IzM5NDEwMDstLW1vbnN0ZXItY29sb3ItbGltZS02OiMyMjI2MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMTojZTVmZmMzOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTI6Izk4ZmIwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0zOiM1YzliMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNDojNDk3YzAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTU6IzI2NDUwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS02OiMxODI2MDA7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTE6I2UwZmZkOTstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMjojNzJmZjZjOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0zOiMwMGEyMWY7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTQ6IzAwODIxNzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNTojMDA0OTA4Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi02OiMwNjI4MDA7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMTojZGNmZmU2Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTI6IzVkZmZhMjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0zOiMwMGEwNWE7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNDojMDA4MTQ3Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTU6IzAwNDgyNTstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC02OiMwMDI4MTI7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMTojZGFmZmVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTI6IzQyZmZjNjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0zOiMwMDlmNzg7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNDojMDA3ZjVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTU6IzAwNDczNDstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS02OiMwMDI4MWI7LS1tb25zdGVyLWNvbG9yLXRlYWwtMTojZDdmZmY3Oy0tbW9uc3Rlci1jb2xvci10ZWFsLTI6IzAwZmZlNDstLW1vbnN0ZXItY29sb3ItdGVhbC0zOiMwMDllOGM7LS1tb25zdGVyLWNvbG9yLXRlYWwtNDojMDA3YzZlOy0tbW9uc3Rlci1jb2xvci10ZWFsLTU6IzAwNDQzYzstLW1vbnN0ZXItY29sb3ItdGVhbC02OiMwMDI3MjI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMTojYzRmZmZlOy0tbW9uc3Rlci1jb2xvci1jeWFuLTI6IzAwZmFmYjstLW1vbnN0ZXItY29sb3ItY3lhbi0zOiMwMDk5OWE7LS1tb25zdGVyLWNvbG9yLWN5YW4tNDojMDA3YTdiOy0tbW9uc3Rlci1jb2xvci1jeWFuLTU6IzAwNDM0NDstLW1vbnN0ZXItY29sb3ItY3lhbi02OiMwMDI1MjU7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0xOiNkYWZhZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0yOiM4ZGYwZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0zOiMwMDk4YTk7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci00OiMwMDc5ODc7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci01OiMwMDQwNDg7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci02OiMwMDIyMjc7LS1tb25zdGVyLWNvbG9yLXNreS0xOiNlM2Y3ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0yOiNhZWU5ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0zOiMwMDk0YjQ7LS1tb25zdGVyLWNvbG9yLXNreS00OiMwMDc1OTA7LS1tb25zdGVyLWNvbG9yLXNreS01OiMwMDQwNGY7LS1tb25zdGVyLWNvbG9yLXNreS02OiMwMDFmMjg7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTE6I2U4ZjZmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMjojYjllM2ZmOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0zOiMwMDkyYzU7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTQ6IzAwNzQ5ZDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNTojMDAzYzU0Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi02OiMwMDFkMmE7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTE6I2U4ZjJmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMjojYzZlMGZmOy0tbW9uc3Rlci1jb2xvci1henVyZS0zOiMwMDhmZGI7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTQ6IzAwNzFhZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtNTojMDAzYjVlOy0tbW9uc3Rlci1jb2xvci1henVyZS02OiMwMDFjMzA7LS1tb25zdGVyLWNvbG9yLWJsdWUtMTojZjBmNGZmOy0tbW9uc3Rlci1jb2xvci1ibHVlLTI6I2Q0ZTBmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0zOiMwMDg5ZmM7LS1tb25zdGVyLWNvbG9yLWJsdWUtNDojMDA2ZGNhOy0tbW9uc3Rlci1jb2xvci1ibHVlLTU6IzAwMzg2ZDstLW1vbnN0ZXItY29sb3ItYmx1ZS02OiMwMDFhMzk7LS1tb25zdGVyLWNvbG9yLWluZGlnby0xOiNmM2YzZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0yOiNkZWRkZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0zOiM2NTdlZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby00OiMwMDYxZmM7LS1tb25zdGVyLWNvbG9yLWluZGlnby01OiMwMDMyOGE7LS1tb25zdGVyLWNvbG9yLWluZGlnby02OiMwMDE2NDk7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0xOiNmN2YxZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0yOiNlOGRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0zOiM5YjcwZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC00OiM3OTRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC01OiMyZDBmYmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC02OiMwYjAwNzQ7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0xOiNmZGY0ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0yOiNmN2Q5ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0zOiNkMTUwZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS00OiNiMDFmZTM7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS01OiM2NjAwODc7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS02OiMzYTAwNGY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMTojZmZmM2ZjOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTI6I2ZmZDdmNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0zOiNmOTExZTA7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNDojY2EwMGI2Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTU6Izc0MDA2ODstLW1vbnN0ZXItY29sb3ItbWFnZW50YS02OiM0NDAwM2M7LS1tb25zdGVyLWNvbG9yLXBpbmstMTojZmZmN2ZiOy0tbW9uc3Rlci1jb2xvci1waW5rLTI6I2ZmZGNlYzstLW1vbnN0ZXItY29sb3ItcGluay0zOiNmZjJmYjI7LS1tb25zdGVyLWNvbG9yLXBpbmstNDojZDIwMDhmOy0tbW9uc3Rlci1jb2xvci1waW5rLTU6Izc5MDA1MTstLW1vbnN0ZXItY29sb3ItcGluay02OiM0YjAwMzA7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0xOiNlNWI4NzU7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0yOiNkOWEzNjI7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0zOiNjMDhhNGU7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS00OiNhNzcxM2I7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS01OiM4ZjVhMjg7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS02OiMzNjA1MDU7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTE6I2Y3ZjVlZjstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMjojZTVlMmQ5Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0zOiNjYmM2YjM7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTQ6I2ExOWQ4YTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNTojN2E3NTY2Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02OiM1MTRkM2Z9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci10aGVtZS1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTEpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMXtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0yKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLWNvbG9yLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLXRoZW1lLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMyl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ze2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci10aGVtZS1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTQpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtNHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1lbGVtZW50LC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1iYWNrZ3JvdW5kLWluaGVyaXR7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0IWltcG9ydGFudH0ubW9uc3Rlci10aGVtZS1vbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tY29sb3IpfS5tb25zdGVyLXRoZW1lLW9mZntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcil9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9W2RhdGEtbW9uc3Rlci1yb2xlPW1lc3NhZ2Vde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6OHB4O3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRlbnRde2ZsZXgtZ3JvdzoyO0BtaXhpbnMgcGFyYWdyYXBofVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9Y2xvc2Vde2N1cnNvcjpwb2ludGVyO2hlaWdodDoxNnB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0xMHB4O3RvcDotNXB4O3dpZHRoOjE2cHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1jbG9zZV06YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxMDAlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0aW5pdE1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvbWVzc2FnZS5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZW1vdmVFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicmVtb3ZlRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJTeW1ib2wgPSBTeW1ib2woXCJ0aW1lclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcIm1vdXNlZW50ZXJFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG1vdXNlbGVhdmVFdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJtb3VzZWxlYXZlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZW1vdmVFdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJyZW1vdmVFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBub3RpZmljYXRpb24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvbWVzc2FnZS5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnkuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyBgPG1vbnN0ZXItbm90aWZ5LW1lc3NhZ2UgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItbm90aWZ5LW1lc3NhZ2U+PC9tb25zdGVyLW5vdGlmeS1tZXNzYWdlPlxuICogYGBgXG4gKlxuICogb3IgdXNpbmcgSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW5vdGlmeScpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW5vdGlmeS1tZXNzYWdlJyk7XG4gKiBgYGBcbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uLy4uL2V4YW1wbGUvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5tanNcbiAqIEBzdGFydHVtbCBtZXNzYWdlLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gTWVzc2FnZVxuICogQGVuZHVtbFxuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBoaWdobHkgY29uZmlndXJhYmxlIHNlbGVjdCBjb250cm9sXG4gKi9cbmNsYXNzIE1lc3NhZ2UgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0cyBjYW4gYmUgc2V0IGVpdGhlciBkaXJlY3RseSBpbiB0aGUgb2JqZWN0IG9yIHZpYSBhbiBhdHRyaWJ1dGUgaW4gdGhlIEhUTUwgdGFnLlxuXHQgKiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIGluIHRoZSBIVE1MIHRhZyBtdXN0IGJlIGEgSlNPTiBzdHJpbmcuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiA8bW9uc3Rlci1tZXNzYWdlIGRhdGEtbW9uc3Rlci1vcHRpb25zPVwie31cIj48L21vbnN0ZXItbWVzc2FnZT5cblx0ICogYGBgXG5cdCAqXG5cdCAqIFNpbmNlIDEuMTguMCB0aGUgSlNPTiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgRGF0YVVSSS5cblx0ICpcblx0ICogYGBgXG5cdCAqIG5ldyBNb25zdGVyLlR5cGVzLkRhdGFVcmwoYnRvYShKU09OLnN0cmluZ2lmeSh7XG5cdCAqICAgICAgICB0aW1lb3V0OiAzMDAwLFxuXHQgKiAgICAgICAgZmVhdHVyZXM6IHtcblx0ICogICAgICAgICAgY2xvc2U6IHRydWUsXG5cdCAqICAgICAgICAgIGRpc2FwcGVhcjogdHJ1ZVxuXHQgKiAgICAgICAgfVxuXHQgKiAgICB9KSksJ2FwcGxpY2F0aW9uL2pzb24nLHRydWUpLnRvU3RyaW5nKClcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge2ludGVnZXJ9IHRpbWVvdXQgdGltZSBpbiBtaWxsaXNlY29uZHMgdW50aWwgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIHJlbW92ZWQuIFRoZSB0aW1lb3V0IGNhbiBiZSBkaXNhYmxlZCB2aWEgdGhlIGZlYXR1cmUgYGRpc2FwcGVhcmAuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlc1xuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLmNsb3NlIHNob3cgY2xvc2UgYnV0dG9uXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuZGlzYXBwZWFyIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHRoZSBtZXNzYWdlIGFmdGVyIHRoZSB0aW1lb3V0XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHR0aW1lb3V0OiA2MDAwLFxuXHRcdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHRcdGNsb3NlOiB0cnVlLFxuXHRcdFx0XHRcdGRpc2FwcGVhcjogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0Y29udGVudDogXCI8c2xvdD48L3Nsb3Q+XCIsXG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuTm90aWZ5Lk1lc3NhZ2V9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudGhhbmRsZXIuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItbm90aWZ5LW1lc3NhZ2VcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW01lc3NhZ2VTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0W2luaXRNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2luaXRNZXRob2RTeW1ib2xdKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5kaXNhcHBlYXJcIikgPT09IHRydWUpIHtcblx0XHRcdHN0YXJ0RmFkZW91dC5jYWxsKHRoaXMpO1xuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCB0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0c3RvcEZhZGVvdXQuY2FsbCh0aGlzKTtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmRpc2FwcGVhclwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcIm1vdXNlZW50ZXJcIixcblx0XHRcdFx0dGhpc1ttb3VzZWVudGVyRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0XHRcdCk7XG5cdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFwibW91c2VlbnRlclwiLFxuXHRcdFx0XHR0aGlzW21vdXNlbGVhdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzdGFydEZhZGVvdXQoKSB7XG5cdGlmICghdGhpcz8uW3RpbWVyU3ltYm9sXSkge1xuXHRcdHRoaXNbdGltZXJTeW1ib2xdID0gc2V0VGltZW91dChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmVtb3ZlU2VsZi5jYWxsKHRoaXMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwidGltZW91dFwiLCAxMDAwKSxcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNlbGYoKSB7XG5cdHN0b3BGYWRlb3V0KCk7XG5cdHRoaXMuY2xhc3NMaXN0LmFkZChcImZhZGVvdXRcIik7XG5cblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0dGhpcy5yZW1vdmUoKTtcblx0fSwgMjAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzdG9wRmFkZW91dCgpIHtcblx0aWYgKHRoaXM/Llt0aW1lclN5bWJvbF0pIHtcblx0XHRjbGVhclRpbWVvdXQodGhpc1t0aW1lclN5bWJvbF0pO1xuXHRcdHRoaXNbdGltZXJTeW1ib2xdID0gdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMoKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuXHRjb25zdCB0aW1lb3V0ID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1BSRUZJWCArIFwidGltZW91dFwiKTtcblx0aWYgKGlzU3RyaW5nKHRpbWVvdXQpKSB7XG5cdFx0dHJ5IHtcblx0XHRcdG9wdGlvbnNbXCJ0aW1lb3V0XCJdID0gcGFyc2VJbnQodGltZW91dCwgMTApO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHR0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFICsgXCIsIFwiICsgZS50b1N0cmluZygpKSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge01lc3NhZ2V9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbXCIgKyBBVFRSSUJVVEVfUk9MRSArIFwiPWNvbnRyb2xdXCIsXG5cdCk7XG5cdHRoaXNbcmVtb3ZlRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9Y2xvc2VdXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50aGFuZGxlcigpIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFwiY29udHJvbFwiLFxuXHRcdCk7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFwibW91c2VlbnRlclwiLFxuXHRcdFx0XHR0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgdGhpc1ttb3VzZWxlYXZlRXZlbnRIYW5kbGVyU3ltYm9sXSk7XG5cdFx0XHRzdG9wRmFkZW91dC5jYWxsKHRoaXMpO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJjb250cm9sXCIsXG5cdFx0KTtcblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFwibW91c2VsZWF2ZVwiLFxuXHRcdFx0XHR0aGlzW21vdXNlbGVhdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgdGhpc1ttb3VzZWVudGVyRXZlbnRIYW5kbGVyU3ltYm9sXSk7XG5cdFx0XHRzdGFydEZhZGVvdXQuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW3JlbW92ZUV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoZXZlbnQsIEFUVFJJQlVURV9ST0xFLCBcImNsb3NlXCIpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0cmVtb3ZlU2VsZi5jYWxsKHRoaXMpO1xuXHRcdH1cblx0fTtcblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5jbG9zZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdHRoaXNbcmVtb3ZlRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFwiY2xpY2tcIixcblx0XHRcdHRoaXNbcmVtb3ZlRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0XHQpO1xuXHRcdHRoaXNbcmVtb3ZlRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFwidG91Y2hcIixcblx0XHRcdHRoaXNbcmVtb3ZlRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIGNsYXNzPVwiY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwibWVzc2FnZVwiIHBhcnQ9XCJtZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24gcGF0aDpvcmllbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIiBwYXJ0PVwiY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cInJlbW92ZVwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6ZmVhdHVyZXMuY2xvc2UgfCA/OjpoaWRkZW4gXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY2xvc2VcIiB0YWJpbmRleD1cIi0xXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE1lc3NhZ2UpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IE5vdGlmeVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IE5vdGlmeVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHROb3RpZnlTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIG5vdGlmeSB7IFxuLmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Ym9yZGVyOjA7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luOjA7bWF4LWhlaWdodDoxMDB2SDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3dpZHRoOjI1cmVtO3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXkpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPWxlZnRde2xlZnQ6MDtyaWdodDphdXRvfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPXJpZ2h0XXtsZWZ0OmF1dG87cmlnaHQ6MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj1jZW50ZXJde2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdW2RhdGEtbW9uc3Rlci1vcmllbnRhdGlvbio9Ym90dG9tXXthbGlnbi1pdGVtczpmbGV4LWVuZDtib3R0b206MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj10b3Bde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7dG9wOjB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl17d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV17YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtYm9yZGVyLWNvbG9yLHJnYmEoMCwwLDAsLjEpKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1ib3JkZXItcmFkaXVzLC4yNXJlbSk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1ib3JkZXItc3R5bGUsc29saWQpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtYm9yZGVyLXdpZHRoLDFweCk7Ym94LXNoYWRvdzowIC41cmVtIDFyZW0gcmdiYSgwLDAsMCwuMTUpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOi44NzVyZW07bWFyZ2luOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tdG9wLDE1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tcmlnaHQsNXB4KSB2YXIoLS1tb25zdGVyLW1lc3NhZ2UtbWFyZ2luLWJvdHRvbSwwKSB2YXIoLS1tb25zdGVyLW1lc3NhZ2UtbWFyZ2luLWxlZnQsMCk7bWF4LWhlaWdodDoyMDBweDttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtcGFkZGluZy10b3AsNXB4KSB2YXIoLS1tb25zdGVyLW1lc3NhZ2UtcGFkZGluZy1yaWdodCw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLWJvdHRvbSw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLWxlZnQsNXB4KTtwb2ludGVyLWV2ZW50czphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7LXdlYmtpdC11c2VyLXNlbGVjdDp0ZXh0Oy1tb3otdXNlci1zZWxlY3Q6dGV4dDt1c2VyLXNlbGVjdDp0ZXh0O3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW1lc3NhZ2VdOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH1bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV0uZmFkZW91dHtib3JkZXI6MDttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21heC1oZWlnaHQ6MDtwYWRkaW5nLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7dHJhbnNpdGlvbjphbGwgLjJzIGN1YmljLWJlemllcigxLC0uMDQsMCwxLjAzKX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gXCIuL21lc3NhZ2UubWpzXCI7XG5pbXBvcnQgeyBOb3RpZnlTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9ub3RpZnkubWpzXCI7XG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCIuLi8uLi90eXBlcy9xdWV1ZS5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBOb3RpZnkgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udGFpbmVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRhaW5lckVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHF1ZXVlU3ltYm9sID0gU3ltYm9sKFwicXVldWVcIik7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBub3RpZmljYXRpb24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvbm90aWZ5LnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci1ub3RpZnkgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItbm90aWZ5PjwvbW9uc3Rlci1ub3RpZnk+XG4gKiBgYGBcbiAqXG4gKiBvciB1c2luZyBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5Jyk7YCBtZXRob2QuXG4gKlxuICogYGBganNcbiAqIGltcG9ydCAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5LmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5Jyk7XG4gKiBgYGBcbiAqXG4gKiAjIyBFdmVudHNcbiAqXG4gKiBUaGUgQ3VzdG9tRXZlbnQgaGFzIHRoZSBwcm9wZXJ0eSBbYGRldGFpbGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DdXN0b21FdmVudC9kZXRhaWwpLlxuICpcbiAqIGBgYFxuICogbm9kZS5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLW5vdGlmeS1tZXNzYWdlJywoZSk9PmNvbnNvbGUubG9nKGUuZGV0YWlsKSlcbiAqIGBgYFxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzXG4gKiBAc3RhcnR1bWwgbm90aWZ5LnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gTm90aWZ5XG4gKiBAZW5kdW1sXG4gKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBoaWdobHkgY29uZmlndXJhYmxlIHNlbGVjdCBjb250cm9sXG4gKi9cbmNsYXNzIE5vdGlmeSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbcXVldWVTeW1ib2xdID0gbmV3IFF1ZXVlKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGRlZmF1bHRzIGNhbiBiZSBzZXQgZWl0aGVyIGRpcmVjdGx5IGluIHRoZSBvYmplY3Qgb3IgdmlhIGFuIGF0dHJpYnV0ZSBpbiB0aGUgSFRNTCB0YWcuXG5cdCAqIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgaW4gdGhlIEhUTUwgdGFnIG11c3QgYmUgYSBKU09OIHN0cmluZy5cblx0ICpcblx0ICogYGBgaHRtbFxuXHQgKiA8bW9uc3Rlci1ub3RpZnkgZGF0YS1tb25zdGVyLW9wdGlvbnM9XCJ7fVwiPjwvbW9uc3Rlci1ub3RpZnk+XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBTaW5jZSAxLjE4LjAgdGhlIEpTT04gY2FuIGJlIHNwZWNpZmllZCBhcyBhIERhdGFVUkkuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBuZXcgTW9uc3Rlci5UeXBlcy5EYXRhVXJsKGJ0b2EoSlNPTi5zdHJpbmdpZnkoe1xuXHQgKiAgICAgICAgb3JpZW50YXRpb246ICdyaWdodCB0b3AnXG5cdCAqICAgIH0pKSwnYXBwbGljYXRpb24vanNvbicsdHJ1ZSkudG9TdHJpbmcoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHRvcmllbnRhdGlvbjogXCJsZWZ0IHRvcFwiLFxuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cy5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Tm90aWZ5fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblxuXHRcdGlmICh0aGlzW2NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0XHR3aGlsZSAodGhpc1txdWV1ZVN5bWJvbF0uaXNFbXB0eSgpID09PSBmYWxzZSkge1xuXHRcdFx0XHR0aGlzLnB1c2godGhpc1txdWV1ZVN5bWJvbF0ucG9sbCgpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItbm90aWZ5XCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtOb3RpZnlTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge01vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnkuTWFzc2FnZXxTdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLk5vdGlmeS5Ob3RpZnl9XG5cdCAqL1xuXHRwdXNoKG1lc3NhZ2UpIHtcblx0XHRsZXQgbWVzc2FnZUVsZW1lbnQgPSBtZXNzYWdlO1xuXHRcdGlmICghKG1lc3NhZ2UgaW5zdGFuY2VvZiBNZXNzYWdlKSkge1xuXHRcdFx0Y29uc3QgdGV4dCA9IHZhbGlkYXRlU3RyaW5nKG1lc3NhZ2UpO1xuXHRcdFx0bWVzc2FnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibW9uc3Rlci1ub3RpZnktbWVzc2FnZVwiKTtcblx0XHRcdG1lc3NhZ2VFbGVtZW50LnNldE9wdGlvbihcImNvbnRlbnRcIiwgdGV4dCk7XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVJbnN0YW5jZShtZXNzYWdlRWxlbWVudCwgTWVzc2FnZSk7XG5cdFx0bWVzc2FnZUVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcIm1lc3NhZ2VcIik7XG5cblx0XHQvLyBpZiBub3QgY29ubmVjdGVkLCBhZGQgdG8gcXVldWVcblx0XHRpZiAoIXRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0pIHtcblx0XHRcdHRoaXNbcXVldWVTeW1ib2xdLmFkZChtZXNzYWdlRWxlbWVudCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW5vdGlmeS1tZXNzYWdlXCIsIHtcblx0XHRcdG1lc3NhZ2VFbGVtZW50LFxuXHRcdH0pO1xuXG5cdFx0dGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXS5hcHBlbmRDaGlsZChtZXNzYWdlRWxlbWVudCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIGBgYFxuICogPG1vbnN0ZXItc2VsZWN0IGRhdGEtbW9uc3Rlci11cmw9XCJodHRwczovL2V4YW1wbGUuY29tL1wiPjwvbW9uc3Rlci1zZWxlY3Q+XG4gKiBgYGBcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMoKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW1wiICsgQVRUUklCVVRFX1JPTEUgKyBcIj1jb250cm9sXVwiLFxuXHQpO1xuXHR0aGlzW2NvbnRhaW5lckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbXCIgKyBBVFRSSUJVVEVfUk9MRSArIFwiPWNvbnRhaW5lcl1cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgY2xhc3M9XCJjZW50ZXJcIlxuICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uIHBhdGg6b3JpZW50YXRpb25cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoTm90aWZ5KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBTcGxpdFBhbmVsU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgU3BsaXRQYW5lbFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRTcGxpdFBhbmVsU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBzcGxpdHBhbmVsIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtcGFuZWxde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2hlaWdodDphdXRvO21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1wYW5lbF0gLnBhbmVse2ZsZXgtZ3JvdzoxO292ZXJmbG93OmF1dG99W2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXBhbmVsXSBbZGF0YS1tb25zdGVyLXJvbGU9ZHJhZ2dlcl17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2hlaWdodDphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOnZhcigtLW1vbnN0ZXItZHJhZ2dlci13aWR0aCl9OmlzKFtkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1wYW5lbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRyYWdnZXJdKSBbZGF0YS1tb25zdGVyLXJvbGU9aGFuZGxlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0KTtsZWZ0OjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt3aWR0aDp2YXIoLS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoKTt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0uaG9yaXpvbnRhbFtkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1wYW5lbF17ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5ob3Jpem9udGFsW2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXBhbmVsXSBbZGF0YS1tb25zdGVyLXJvbGU9ZHJhZ2dlcl17aGVpZ2h0OnZhcigtLW1vbnN0ZXItZHJhZ2dlci13aWR0aCk7d2lkdGg6MTAwJX06aXMoLmhvcml6b250YWxbZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtcGFuZWxdIFtkYXRhLW1vbnN0ZXItcm9sZT1kcmFnZ2VyXSkgW2RhdGEtbW9uc3Rlci1yb2xlPWhhbmRsZV17aGVpZ2h0OnZhcigtLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGgpO3dpZHRoOnZhcigtLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0KX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IFwiLi4vbm90aWZ5L25vdGlmeS5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBTcGxpdFBhbmVsU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc3BsaXQtcGFuZWwubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFNwbGl0UGFuZWwsIFRZUEVfVkVSVElDQUwsIFRZUEVfSE9SSVpPTlRBTCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzcGxpdFNjcmVlbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRyYWdnZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZHJhZ2dlckVsZW1lbnRcIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzdGFydFBhbmVsRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInN0YXJ0UGFuZWxFbGVtZW50XCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZW5kUGFuZWxFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZW5kUGFuZWxFbGVtZW50XCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaGFuZGxlRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImhhbmRsZUVsZW1lbnRcIik7XG5cbi8qKlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFRZUEVfVkVSVElDQUwgPSBcInZlcnRpY2FsXCI7XG4vKipcbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBUWVBFX0hPUklaT05UQUwgPSBcImhvcml6b250YWxcIjtcblxuLyoqXG4gKiBBIFNwbGl0UGFuZWwgQ29udHJvbFxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2xheW91dC9zcGxpdC1wYW5lbC9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvc3BsaXQtcGFuZWwtc2ltcGxlXG4gKlxuICogQHNpbmNlIDMuNTQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBTcGxpdFBhbmVsIGNvbnRyb2wgaXMgYSBzaW1wbGUgbGF5b3V0IGNvbnRyb2wgdGhhdCBhbGxvd3MgeW91IHRvIHNwbGl0IHRoZSBzY3JlZW5cbiAqIGludG8gdHdvIHBhcnRzLiBUaGUgc3BsaXQgY2FuIGJlIGVpdGhlciB2ZXJ0aWNhbCBvciBob3Jpem9udGFsLiBUaGUgY29udHJvbCBwcm92aWRlcyBhXG4gKiBkcmFnZ2FibGUgaGFuZGxlIHRoYXQgYWxsb3dzIHlvdSB0byBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIHR3byBwYW5lbHMuXG4gKi9cbmNsYXNzIFNwbGl0UGFuZWwgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvbGF5b3V0L3NwbGl0LXBhbmVsXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gc3BsaXRUeXBlIFNwbGl0IHR5cGUgKHZlcnRpY2FsIG9yIGhvcml6b250YWwpXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkaW1lbnNpb24gRGltZW5zaW9uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkaW1lbnNpb24uaW5pdGlhbCBJbml0aWFsIGRpbWVuc2lvbiBvZiB0aGUgc3RhcnQgcGFuZWxcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGRpbWVuc2lvbi5tYXggTWF4aW11bSBkaW1lbnNpb24gb2YgdGhlIHN0YXJ0IHBhbmVsIChpbiBwZXJjZW50YWdlKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZGltZW5zaW9uLm1pbiBNaW5pbXVtIGRpbWVuc2lvbiBvZiB0aGUgc3RhcnQgcGFuZWwgKGluIHBlcmNlbnRhZ2UpXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRzcGxpdFR5cGU6IFRZUEVfVkVSVElDQUwsXG5cdFx0XHRkaW1lbnNpb246IHtcblx0XHRcdFx0aW5pdGlhbDogXCI2MCVcIixcblx0XHRcdFx0bWF4OiBcIjgwJVwiLFxuXHRcdFx0XHRtaW46IFwiMjAlXCIsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0ZnVsbFN0YXJ0U2NyZWVuKCkge1xuXHRcdHRoaXMuc2V0RGltZW5zaW9uKFwiMTAwJVwiKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGZ1bGxFbmRTY3JlZW4oKSB7XG5cdFx0dGhpcy5zZXREaW1lbnNpb24oXCIwJVwiKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGlzRnVsbFN0YXJ0U2NyZWVuKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvbiA9PT0gXCIxMDAlXCI7XG5cdH1cblxuXHRpc0Z1bGxFbmRTY3JlZW4oKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uID09PSBcIjAlXCI7XG5cdH1cblxuXHRpc0luaXRpYWxTY3JlZW4oKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uID09PVxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikuaW5pdGlhbFxuXHRcdCk7XG5cdH1cblxuXHRyZXNldFNjcmVlbigpIHtcblx0XHR0aGlzLnNldERpbWVuc2lvbih0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5pbml0aWFsKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldENvbnRlbnQoaHRtbCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwiY29udGVudFwiLCBodG1sKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5WaWV3ZXJ9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHRcdC8vYXBwbHlQYW5lbERpbWVuc2lvbnMuY2FsbCh0aGlzKTtcblx0XHR0aGlzLnNldERpbWVuc2lvbih0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5pbml0aWFsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiB0aGUgZGltZW5zaW9uIGlzIGEgcGVyY2VudGFnZSBhbmQgd2l0aGluIGEgdmFsaWQgcmFuZ2UsIHRoZW4gc2V0IHRoZSBkaW1lbnNpb24gb3B0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGltZW5zaW9uIC0gVGhlIGRpbWVuc2lvbiB0byBiZSBzZXQsIGNhbiBiZSBpbiBwZXJjZW50YWdlIG9yIGFic29sdXRlIHZhbHVlLlxuXHQgKiBAcmV0dXJuIHtPYmplY3R9IC0gUmV0dXJucyB0aGUgY3VycmVudCBvYmplY3QgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuXHQgKi9cblx0c2V0RGltZW5zaW9uKGRpbWVuc2lvbikge1xuXHRcdC8vIGNoZWNrIGlmIHBlcmNlbnQgYW5kIGdyZWF0ZXIgdGhhbjEwMFxuXHRcdGlmIChkaW1lbnNpb24uaW5jbHVkZXMoXCIlXCIpKSB7XG5cdFx0XHRpZiAocGFyc2VJbnQoZGltZW5zaW9uKSA+IDEwMCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkaW1lbnNpb24gbXVzdCBiZSBsZXNzIHRoYW4gMTAwJVwiKTtcblx0XHRcdH0gZWxzZSBpZiAocGFyc2VJbnQoZGltZW5zaW9uKSA8IDApIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZGltZW5zaW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAlXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uID0gZGltZW5zaW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1zcGxpdC1wYW5lbFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbU3BsaXRQYW5lbFN0eWxlU2hlZXRdO1xuXHR9XG59XG5cbi8qKlxuICogU2V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBwYW5lbCBiYXNlZCBvbiB0aGUgc3BsaXQgdHlwZS5cbiAqIEBmaXJlcyBtb25zdGVyLWRpbWVuc2lvbi1jaGFuZ2VkXG4gKi9cbmZ1bmN0aW9uIGFwcGx5UGFuZWxEaW1lbnNpb25zKCkge1xuXHRjb25zdCBzcGxpdFR5cGUgPSB0aGlzLmdldE9wdGlvbihcInNwbGl0VHlwZVwiKTtcblx0Y29uc3QgZGltZW5zaW9uID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmN1cnJlbnREaW1lbnNpb247XG5cblx0aWYgKHNwbGl0VHlwZSA9PT0gVFlQRV9WRVJUSUNBTCkge1xuXHRcdHRoaXNbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdLnN0eWxlLndpZHRoID0gZGltZW5zaW9uO1xuXHRcdHRoaXNbZW5kUGFuZWxFbGVtZW50U3ltYm9sXS5zdHlsZS53aWR0aCA9IGBjYWxjKDEwMCUgLSAke2RpbWVuc2lvbn0gLSA1cHgpYDtcblx0XHR0aGlzW2RyYWdnZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5jdXJzb3IgPSBcImV3LXJlc2l6ZVwiO1xuXHRcdHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwidmVydGljYWxcIik7XG5cdFx0dGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJob3Jpem9udGFsXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXNbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdLnN0eWxlLmhlaWdodCA9IGRpbWVuc2lvbjtcblx0XHR0aGlzW2VuZFBhbmVsRWxlbWVudFN5bWJvbF0uc3R5bGUuaGVpZ2h0ID1cblx0XHRcdGBjYWxjKDEwMCUgLSAke2RpbWVuc2lvbn0gLSA1cHgpYDtcblx0XHR0aGlzW2RyYWdnZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5jdXJzb3IgPSBcIm5zLXJlc2l6ZVwiO1xuXHRcdHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiaG9yaXpvbnRhbFwiKTtcblx0XHR0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcInZlcnRpY2FsXCIpO1xuXHR9XG5cblx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1kaW1lbnNpb24tY2hhbmdlZFwiLCB7XG5cdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRkaW1lbnNpb246IGRpbWVuc2lvbixcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtcGFuZWxdXCIsXG5cdCk7XG5cdHRoaXNbZHJhZ2dlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9ZHJhZ2dlcl1cIixcblx0KTtcblx0dGhpc1toYW5kbGVFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWhhbmRsZV1cIixcblx0KTtcblxuXHR0aGlzW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPXN0YXJ0UGFuZWxdXCIsXG5cdCk7XG5cdHRoaXNbZW5kUGFuZWxFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWVuZFBhbmVsXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGxldCBsYXN0RGltZW5zaW9uID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmN1cnJlbnREaW1lbnNpb247XG5cdGxldCBsYXN0VHlwZSA9IHRoaXMuZ2V0T3B0aW9uKFwic3BsaXRUeXBlXCIpO1xuXG5cdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5pc0RyYWdnaW5nID0gZmFsc2U7XG5cblx0Ly8gQHRvZG86IGFkZCBiZXR0ZXIgdG91Y2ggc3VwcG9ydFxuXHRjb25zdCBldmVudFR5cGVzID0gW1wiZGJsY2xpY2tcIiwgXCJ0b3VjaHN0YXJ0XCJdO1xuXHRmb3IgKGNvbnN0IGV2ZW50VHlwZSBvZiBldmVudFR5cGVzKSB7XG5cdFx0dGhpc1tkcmFnZ2VyRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsICgpID0+IHtcblx0XHRcdHNlbGZbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5pc0RyYWdnaW5nID0gZmFsc2U7XG5cdFx0XHRsYXN0RGltZW5zaW9uID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRsZXQgY3VycmVudERpbWVuc2lvbjtcblx0XHRcdGlmIChzZWxmLmdldE9wdGlvbihcInNwbGl0VHlwZVwiKSA9PT0gVFlQRV9WRVJUSUNBTCkge1xuXHRcdFx0XHRjb25zdCB0b3BQYW5lbCA9IHNlbGZbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdO1xuXHRcdFx0XHRjdXJyZW50RGltZW5zaW9uID0gdG9wUGFuZWwuc3R5bGUud2lkdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCB0b3BQYW5lbCA9IHNlbGZbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdO1xuXHRcdFx0XHRjdXJyZW50RGltZW5zaW9uID0gdG9wUGFuZWwuc3R5bGUuaGVpZ2h0O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY3VycmVudERpbWVuc2lvbiA9PT0gc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikuaW5pdGlhbCkge1xuXHRcdFx0XHRzZWxmLnNldERpbWVuc2lvbihzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5tYXgpO1xuXHRcdFx0fSBlbHNlIGlmIChjdXJyZW50RGltZW5zaW9uID09PSBzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5tYXgpIHtcblx0XHRcdFx0c2VsZi5zZXREaW1lbnNpb24oc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWluKTtcblx0XHRcdH0gZWxzZSBpZiAoY3VycmVudERpbWVuc2lvbiA9PT0gc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWluKSB7XG5cdFx0XHRcdHNlbGYuc2V0RGltZW5zaW9uKHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLmluaXRpYWwpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5zZXREaW1lbnNpb24oc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikuaW5pdGlhbCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHR0aGlzW2RyYWdnZXJFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsICgpID0+IHtcblx0XHRzZWxmW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuaXNEcmFnZ2luZyA9IHRydWU7XG5cblx0XHRjb25zdCBldmVudExpc3RlbmVyID0gKGUpID0+IHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0Ly8gdGhlIDVweCBhcmUgd3JvbmcgYW5kIG11c3QgYmUgY2FsYyBmcm9tIGNzcyBwcm9wZXJ0eSAtLW1vbnN0ZXItZHJhZ2dlci13aWR0aFxuXG5cdFx0XHRsZXQgZHJhZ2dlcldpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZShcblx0XHRcdFx0c2VsZltkcmFnZ2VyRWxlbWVudFN5bWJvbF0sXG5cdFx0XHQpLmdldFByb3BlcnR5VmFsdWUoXCItLW1vbnN0ZXItZHJhZ2dlci13aWR0aFwiKTtcblx0XHRcdGlmIChcblx0XHRcdFx0ZHJhZ2dlcldpZHRoID09PSBcIlwiIHx8XG5cdFx0XHRcdGRyYWdnZXJXaWR0aCA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdGRyYWdnZXJXaWR0aCA9PT0gbnVsbFxuXHRcdFx0KSB7XG5cdFx0XHRcdGRyYWdnZXJXaWR0aCA9IFwiMFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXNlbGZbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5pc0RyYWdnaW5nKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwic3BsaXRUeXBlXCIpID09PSBUWVBFX0hPUklaT05UQUwpIHtcblx0XHRcdFx0Y29uc3QgY29udGFpbmVyT2Zmc2V0VG9wID0gc2VsZltzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLm9mZnNldFRvcDtcblx0XHRcdFx0Y29uc3QgdG9wUGFuZWwgPSBzZWxmW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXTtcblx0XHRcdFx0Y29uc3QgYm90dG9tUGFuZWwgPSBzZWxmW2VuZFBhbmVsRWxlbWVudFN5bWJvbF07XG5cdFx0XHRcdGxldCBuZXdUb3BIZWlnaHQgPSBlLmNsaWVudFkgLSBjb250YWluZXJPZmZzZXRUb3A7XG5cblx0XHRcdFx0Y29uc3QgbWluID0gdGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWluO1xuXHRcdFx0XHRjb25zdCBtYXggPSB0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5tYXg7XG5cblx0XHRcdFx0Y29uc3QgdG9wQXNQZXJjZW50ID1cblx0XHRcdFx0XHQobmV3VG9wSGVpZ2h0IC8gdGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLm9mZnNldEhlaWdodCkgKiAxMDA7XG5cdFx0XHRcdGlmIChwYXJzZUludChtaW4pID4gdG9wQXNQZXJjZW50KSB7XG5cdFx0XHRcdFx0bmV3VG9wSGVpZ2h0ID0gbWluO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHBhcnNlSW50KG1heCkgPCB0b3BBc1BlcmNlbnQpIHtcblx0XHRcdFx0XHRuZXdUb3BIZWlnaHQgPSBtYXg7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmV3VG9wSGVpZ2h0ID0gdG9wQXNQZXJjZW50ICsgXCIlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBjYWxjIG5ldyB0b3AgaGVpZ2h0IHRvIHBpeGVsXG5cdFx0XHRcdGNvbnN0IG5ld1RvcEhlaWdodFB4ID1cblx0XHRcdFx0XHQocGFyc2VJbnQobmV3VG9wSGVpZ2h0KSAvIDEwMCkgKlxuXHRcdFx0XHRcdHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5vZmZzZXRIZWlnaHQ7XG5cblx0XHRcdFx0dG9wUGFuZWwuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3VG9wSGVpZ2h0UHh9cHhgO1xuXHRcdFx0XHRib3R0b21QYW5lbC5zdHlsZS5oZWlnaHQgPSBgY2FsYygxMDAlIC0gJHtuZXdUb3BIZWlnaHRQeH1weCAtICR7ZHJhZ2dlcldpZHRofSlgOyAvLyA1cHggaXMgZHJhZ2dlciBoZWlnaHRcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRhaW5lck9mZnNldExlZnQgPSBzZWxmW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0ub2Zmc2V0TGVmdDtcblx0XHRcdFx0Y29uc3QgbGVmdFBhbmVsID0gc2VsZltzdGFydFBhbmVsRWxlbWVudFN5bWJvbF07XG5cdFx0XHRcdGNvbnN0IHJpZ2h0UGFuZWwgPSBzZWxmW2VuZFBhbmVsRWxlbWVudFN5bWJvbF07XG5cdFx0XHRcdGxldCBuZXdMZWZ0V2lkdGggPSBlLmNsaWVudFggLSBjb250YWluZXJPZmZzZXRMZWZ0O1xuXG5cdFx0XHRcdGNvbnN0IG1pbiA9IHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1pbjtcblx0XHRcdFx0Y29uc3QgbWF4ID0gdGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWF4O1xuXG5cdFx0XHRcdGNvbnN0IGxlZnRBc1BlcmNlbnQgPVxuXHRcdFx0XHRcdChuZXdMZWZ0V2lkdGggLyB0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0ub2Zmc2V0V2lkdGgpICogMTAwO1xuXG5cdFx0XHRcdGlmIChwYXJzZUludChtaW4pID4gbGVmdEFzUGVyY2VudCkge1xuXHRcdFx0XHRcdG5ld0xlZnRXaWR0aCA9IG1pbjtcblx0XHRcdFx0fSBlbHNlIGlmIChwYXJzZUludChtYXgpIDwgbGVmdEFzUGVyY2VudCkge1xuXHRcdFx0XHRcdG5ld0xlZnRXaWR0aCA9IG1heDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXdMZWZ0V2lkdGggPSBsZWZ0QXNQZXJjZW50ICsgXCIlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZWZ0UGFuZWwuc3R5bGUud2lkdGggPSBgJHtuZXdMZWZ0V2lkdGh9YDtcblx0XHRcdFx0cmlnaHRQYW5lbC5zdHlsZS53aWR0aCA9IGBjYWxjKDEwMCUgLSAke25ld0xlZnRXaWR0aH0gLSAke2RyYWdnZXJXaWR0aH0pYDsgLy8gNXB4IGlzIGRyYWdnZXIgd2lkdGhcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3QgZHJhZ0V2ZW50SGFuZGxlciA9IChlKSA9PiB7XG5cdFx0XHRzZWxmW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuaXNEcmFnZ2luZyA9IGZhbHNlO1xuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBldmVudExpc3RlbmVyKTtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGV2ZW50TGlzdGVuZXIpO1xuXHRcdH07XG5cblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIGV2ZW50TGlzdGVuZXIpO1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGRyYWdFdmVudEhhbmRsZXIpO1xuXHR9KTtcblxuXHR0aGlzW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihcblx0XHRuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdFx0bGV0IGFwcGx5ID0gZmFsc2U7XG5cblx0XHRcdGlmIChcblx0XHRcdFx0bGFzdERpbWVuc2lvbiAhPT0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmN1cnJlbnREaW1lbnNpb25cblx0XHRcdCkge1xuXHRcdFx0XHRsYXN0RGltZW5zaW9uID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmN1cnJlbnREaW1lbnNpb247XG5cdFx0XHRcdGFwcGx5ID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGxhc3RUeXBlICE9PSB0aGlzLmdldE9wdGlvbihcInNwbGl0VHlwZVwiKSkge1xuXHRcdFx0XHRsYXN0VHlwZSA9IHRoaXMuZ2V0T3B0aW9uKFwic3BsaXRUeXBlXCIpO1xuXHRcdFx0XHRhcHBseSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhcHBseSkge1xuXHRcdFx0XHRhcHBseVBhbmVsRGltZW5zaW9ucy5jYWxsKHRoaXMpO1xuXHRcdFx0fVxuXHRcdH0pLFxuXHQpO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzcGxpdC1wYW5lbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhcnRQYW5lbFwiIGNsYXNzPVwicGFuZWxcIiBwYXJ0PVwic3RhcnRQYW5lbFwiPlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJzdGFydFwiPjwvc2xvdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImRyYWdnZXJcIiBwYXJ0PVwiZHJhZ2dlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJoYW5kbGVcIiBwYXJ0PVwiaGFuZGxlXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJlbmRQYW5lbFwiIGNsYXNzPVwicGFuZWxcIiBwYXJ0PVwiZW5kUGFuZWxcIj5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwiZW5kXCI+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChTcGxpdFBhbmVsKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBQYW5lbFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFBhbmVsU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdFBhbmVsU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBwYW5lbCB7IFxuOmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZTpcXFwiQ29uc29sYXNcXFwiLFxcXCJDb3VyaWVyIE5ld1xcXCIsXFxcIlJvYm90byBNb25vXFxcIixcXFwiU291cmNlIENvZGUgUHJvXFxcIixcXFwiRmlyYSBNb25vXFxcIixtb25vc3BhY2U7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTIpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6M3B4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHg7LS1tb25zdGVyLWRyYWdnZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aDo0cHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodDo1MHB4fS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLXRoZW1lLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMSl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0xe2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci1jb2xvci1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTIpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMntjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0zKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTN7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLWNvbG9yLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLXRoZW1lLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci1ib3JkZXItY29sb3ItNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItNCl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC00e2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci1jb2xvci1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS1jb250cm9sLWVsZW1lbnQsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpfS5tb25zdGVyLXRoZW1lLWJhY2tncm91bmQtaW5oZXJpdHtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQhaW1wb3J0YW50fS5tb25zdGVyLXRoZW1lLW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtb2Zme2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7cGFkZGluZzoxLjFlbTt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9W2RhdGEtcG9wcGVyLWFycm93XSxbZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtiYWNrZ3JvdW5kOmluaGVyaXQ7aGVpZ2h0OmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSp2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xKnZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKX1bZGF0YS1wb3BwZXItYXJyb3dde3Zpc2liaWxpdHk6aGlkZGVufVtkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb250ZW50OlxcXCJcXFwiO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO3Zpc2liaWxpdHk6dmlzaWJsZX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj10b3BdPltkYXRhLXBvcHBlci1hcnJvd117Ym90dG9tOmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkvMil9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49dG9wXT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1sZWZ0OnRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItdG9wOnRyYW5zcGFyZW50fWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWJvdHRvbV0+W2RhdGEtcG9wcGVyLWFycm93XXt0b3A6Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49Ym90dG9tXT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yaWdodDp0cmFuc3BhcmVudDtib3JkZXItdG9wOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWxlZnRdPltkYXRhLXBvcHBlci1hcnJvd117cmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49bGVmdF0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp0cmFuc3BhcmVudDtib3JkZXItbGVmdDp0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXRvcDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1yaWdodF0+W2RhdGEtcG9wcGVyLWFycm93XXtsZWZ0OmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkvMil9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49cmlnaHRdPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWxlZnQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJpZ2h0OnRyYW5zcGFyZW50O2JvcmRlci10b3A6dHJhbnNwYXJlbnR9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeSwubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeSwubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeSwubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmV7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLC5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1zdWNjZXNze3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLC5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXdhcm5pbmd7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXdhcm5pbmcsLm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3J7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLWVycm9yLC5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX06aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9jaztoZWlnaHQ6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTtoZWlnaHQ6ZmlsbC1hdmFpbGFibGU7aGVpZ2h0Oi1tb3otYXZhaWxhYmxlO2hlaWdodDpzdHJldGNoO292ZXJmbG93OmF1dG87d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym9yZGVyOjA7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO2hlaWdodDpmaWxsLWF2YWlsYWJsZTtoZWlnaHQ6LW1vei1hdmFpbGFibGU7aGVpZ2h0OnN0cmV0Y2g7bWFyZ2luOjA7b3V0bGluZTpub25lO292ZXJmbG93OmF1dG87cGFkZGluZzowO3Njcm9sbGJhci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO3Njcm9sbGJhci13aWR0aDp0aGluOy8vcG9zaXRpb246Zml4ZWQ7Ly90b3A6MDsvL2xlZnQ6MDsvL3JpZ2h0OjA7Ly9ib3R0b206MDsvL292ZXJmbG93OmF1dG87Ly9ib3gtc2l6aW5nOmJvcmRlci1ib3h9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5cbmltcG9ydCB7IFBhbmVsU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvcGFuZWwubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFBhbmVsIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IFBhbmVsRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIlBhbmVsRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBBIFNsaWRlclxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2xheW91dC9wYW5lbC9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvcGFuZWwtc2ltcGxlXG4gKlxuICogQHNpbmNlIDMuNTQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBQYW5lbCBjb21wb25lbnQgaXMgdXNlZCB0byBkaXNwbGF5IGEgcGFuZWwsIGlzbid0IHRoYXQgY29vbD9cbiAqL1xuY2xhc3MgUGFuZWwgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvbGF5b3V0L3BhbmVsXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaGVpZ2h0QWRqdXN0bWVudCBIZWlnaHQgYWRqdXN0bWVudFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0aGVpZ2h0QWRqdXN0bWVudDogNCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5WaWV3ZXJ9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXG5cdFx0Y2FsY0hlaWdodC5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgZG9tIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0YXR0YWNoUmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblxuXHRcdC8vIGRpc2FibGUgc2Nyb2xsaW5nIGluIHBhcmVudCBub2RlXG5cdFx0aWYgKHRoaXMucGFyZW50Tm9kZSAmJiB0aGlzLnBhcmVudE5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0dGhpcy5wYXJlbnROb2RlLnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBkb20gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItcGFuZWxcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1BhbmVsU3R5bGVTaGVldF07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjYWxjSGVpZ2h0KCkge1xuXHR0aGlzLnN0eWxlLmJveFNpemluZyA9IFwiYm9yZGVyLWJveFwiO1xuXG5cdGNvbnN0IGhlaWdodCA9IGNhbGN1bGF0ZU1heGltdW1IZWlnaHQuY2FsbCh0aGlzLCB0aGlzKTtcblx0aWYgKGhlaWdodCA8IDApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIGhlaWdodCBvZiBhbiBlbGVtZW50IGJhc2VkIG9uIHRoZSB3aW5kb3cncyBpbm5lciBoZWlnaHRcbiAqIEBwYXJhbSBlbGVtZW50XG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVNYXhpbXVtSGVpZ2h0KGVsZW1lbnQpIHtcblx0bGV0IHRvdGFsQm90dG9tQm9yZGVyID0gMDtcblx0bGV0IHRvdGFsQm90dG9tUGFkZGluZyA9IDA7XG5cdGxldCB0b3RhbEJvdHRvbU1hcmdpbiA9IDA7XG5cdGxldCB0b3RhbE91dGxpbmVIZWlnaHQgPSAwO1xuXHRsZXQgdG90YWxCb3hTaGFkb3dIZWlnaHQgPSAwO1xuXHRsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuXG5cdC8vIEdldCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgdG9wIG9mIHRoZSBlbGVtZW50IHRvIHRoZSB0b3Agb2YgdGhlIHZpZXdwb3J0XG5cdGNvbnN0IGRpc3RhbmNlRnJvbVRvcCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuXG5cdC8vIExvb3AgdGhyb3VnaCB0aGUgZWxlbWVudHMgdXAgdG8gdGhlIGJvZHkgdG8gc3VtIHVwIHRoZSBib3R0b20gYm9yZGVycywgcGFkZGluZywgYW5kIG1hcmdpblxuXHR3aGlsZSAoY3VycmVudEVsZW1lbnQgJiYgY3VycmVudEVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkpIHtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGN1cnJlbnRFbGVtZW50KTtcblxuXHRcdC8vIEJveCBzaXppbmdcblx0XHRjb25zdCBib3hTaXppbmcgPSBzdHlsZS5ib3hTaXppbmc7XG5cblx0XHQvLyBCb3JkZXJzLCBwYWRkaW5nLCBhbmQgbWFyZ2luXG5cdFx0Y29uc3QgYm9yZGVyQm90dG9tV2lkdGggPSBwYXJzZUZsb2F0KHN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKTtcblx0XHRjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nQm90dG9tKTtcblx0XHRjb25zdCBtYXJnaW5Cb3R0b20gPSBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpbkJvdHRvbSk7XG5cblx0XHQvLyBPdXRsaW5lIGFuZCBib3gtc2hhZG93XG5cdFx0Y29uc3Qgb3V0bGluZUhlaWdodCA9IHBhcnNlRmxvYXQoc3R5bGUub3V0bGluZVdpZHRoKTtcblx0XHQvLyBUaGlzIGlzIGEgc2ltcGxpZmljYXRpb247IGJveC1zaGFkb3cgaXMgbW9yZSBjb21wbGV4IHRvIHBhcnNlXG5cdFx0Y29uc3QgYm94U2hhZG93VmVydGljYWwgPSBwYXJzZUZsb2F0KHN0eWxlLmJveFNoYWRvdy5zcGxpdChcIiBcIilbM10gfHwgMCk7XG5cblx0XHQvLyBBY2N1bXVsYXRlIHZhbHVlc1xuXHRcdHRvdGFsQm90dG9tQm9yZGVyICs9IGlzTmFOKGJvcmRlckJvdHRvbVdpZHRoKSA/IDAgOiBib3JkZXJCb3R0b21XaWR0aDtcblx0XHR0b3RhbEJvdHRvbVBhZGRpbmcgKz1cblx0XHRcdGlzTmFOKHBhZGRpbmdCb3R0b20pIHx8IGJveFNpemluZyA9PT0gXCJib3JkZXItYm94XCIgPyAwIDogcGFkZGluZ0JvdHRvbTtcblx0XHR0b3RhbEJvdHRvbU1hcmdpbiArPSBpc05hTihtYXJnaW5Cb3R0b20pID8gMCA6IG1hcmdpbkJvdHRvbTtcblx0XHR0b3RhbE91dGxpbmVIZWlnaHQgKz0gaXNOYU4ob3V0bGluZUhlaWdodCkgPyAwIDogb3V0bGluZUhlaWdodDtcblx0XHR0b3RhbEJveFNoYWRvd0hlaWdodCArPSBpc05hTihib3hTaGFkb3dWZXJ0aWNhbCkgPyAwIDogYm94U2hhZG93VmVydGljYWw7XG5cblx0XHRjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUgfHwgY3VycmVudEVsZW1lbnQuaG9zdDtcblx0fVxuXG5cdC8vIENhbGN1bGF0ZSB0aGUgbWF4aW11bSBoZWlnaHQgYnkgc3VidHJhY3RpbmcgdGhlIGRpc3RhbmNlLCBib3JkZXJzLCBwYWRkaW5nLCBtYXJnaW4sIG91dGxpbmUsIGFuZCBib3gtc2hhZG93IGZyb20gdGhlIHdpbmRvdydzIGlubmVyIGhlaWdodFxuXHRjb25zdCBtYXhpbXVtSGVpZ2h0ID1cblx0XHR3aW5kb3cuaW5uZXJIZWlnaHQgLVxuXHRcdGRpc3RhbmNlRnJvbVRvcCAtXG5cdFx0dG90YWxCb3R0b21Cb3JkZXIgLVxuXHRcdHRvdGFsQm90dG9tUGFkZGluZyAtXG5cdFx0dG90YWxCb3R0b21NYXJnaW4gLVxuXHRcdHRvdGFsT3V0bGluZUhlaWdodCAtXG5cdFx0dG90YWxCb3hTaGFkb3dIZWlnaHQ7XG5cdHJldHVybiBtYXhpbXVtSGVpZ2h0ICsgdGhpcy5nZXRPcHRpb24oXCJoZWlnaHRBZGp1c3RtZW50XCIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0Y2FsY0hlaWdodC5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXMub3duZXJEb2N1bWVudC5ib2R5KTtcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZShkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbUGFuZWxFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoUGFuZWwpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21FbGVtZW50LCBhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCB9IGZyb20gXCIuL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEN1c3RvbUNvbnRyb2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXR0YWNoZWRJbnRlcm5hbFN5bWJvbCA9IFN5bWJvbChcImF0dGFjaGVkSW50ZXJuYWxcIik7XG5cbi8qKlxuICogVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGN1c3RvbSBjb250cm9scyB1c2luZyB0aGUgcG93ZXIgb2YgQ3VzdG9tRWxlbWVudC5cbiAqXG4gKiBBZnRlciBkZWZpbmluZyBhIGBDdXN0b21FbGVtZW50YCwgdGhlIGByZWdpc3RlckN1c3RvbUVsZW1lbnRgIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgY2xhc3MgbmFtZS4gT25seSB0aGVuXG4gKiB3aWxsIHRoZSB0YWcgZGVmaW5lZCB2aWEgdGhlIGBnZXRUYWdgIG1ldGhvZCBiZSBtYWRlIGtub3duIHRvIHRoZSBET00uXG4gKlxuICogVGhpcyBjb250cm9sIHVzZXMgYGF0dGFjaEludGVybmFscygpYCB0byBpbnRlZ3JhdGUgdGhlIGNvbnRyb2wgaW50byBhIGZvcm0uIElmIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhpcyBtZXRob2QsIHRoZSBbcG9seWZpbGxdKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2VsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsKSBjYW4gYmUgdXNlZC5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGUgb2JqZWN0IHVzaW5nIHRoZSBmdW5jdGlvbiBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpYC5cbiAqXG4gKiBUaGlzIGNvbnRyb2wgdXNlcyBgYXR0YWNoSW50ZXJuYWxzKClgIHRvIGludGVncmF0ZSB0aGUgY29udHJvbCBpbnRvIGEgZm9ybS4gSWYgdGhlIHRhcmdldCBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0XG4gKiB0aGlzIG1ldGhvZCwgdGhlIFBvbHlmaWxsIGZvciBhdHRhY2hJbnRlcm5hbHMoKSBjYW4gYmUgdXNlZDoge0BsaW5rIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2VsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsfGVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsfS5cbiAqXG4gKiBMZWFybiBtb3JlIGFib3V0IFdJQ0cgV2ViIENvbXBvbmVudHM6IHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vV0lDRy93ZWJjb21wb25lbnRzfFdJQ0cgV2ViIENvbXBvbmVudHN9LlxuICpcbiAqIFJlYWQgdGhlIEhUTUwgc3BlY2lmaWNhdGlvbiBmb3IgQ3VzdG9tIEVsZW1lbnRzOiB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzfEN1c3RvbSBFbGVtZW50c30uXG4gKlxuICogUmVhZCB0aGUgSFRNTCBzcGVjaWZpY2F0aW9uIGZvciBDdXN0b20gRWxlbWVudCBSZWFjdGlvbnM6IHtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL2Rldi9jdXN0b20tZWxlbWVudHMuaHRtbCNjdXN0b20tZWxlbWVudC1yZWFjdGlvbnN8Q3VzdG9tIEVsZW1lbnQgUmVhY3Rpb25zfS5cbiAqXG4gKiBAc3VtbWFyeSBBIGJhc2UgY2xhc3MgZm9yIGN1c3RvbSBjb250cm9scyBiYXNlZCBvbiBDdXN0b21FbGVtZW50LlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKi9cbmNsYXNzIEN1c3RvbUNvbnRyb2wgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoZSBjb25zdHJ1Y3RvciBtZXRob2Qgb2YgQ3VzdG9tQ29udHJvbCwgd2hpY2ggaXMgY2FsbGVkIHdoZW4gY3JlYXRpbmcgYSBuZXcgaW5zdGFuY2UuXG5cdCAqIEl0IGNoZWNrcyB3aGV0aGVyIHRoZSBlbGVtZW50IHN1cHBvcnRzIGBhdHRhY2hJbnRlcm5hbHMoKWAgYW5kIGluaXRpYWxpemVzIGFuIGludGVybmFsIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50XG5cdCAqIGlmIHN1cHBvcnRlZC4gQWRkaXRpb25hbGx5LCBpdCBpbml0aWFsaXplcyBhIE11dGF0aW9uT2JzZXJ2ZXIgdG8gd2F0Y2ggZm9yIGF0dHJpYnV0ZSBjaGFuZ2VzLlxuXHQgKlxuXHQgKiBTZWUgdGhlIGxpbmtzIGJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uOlxuXHQgKiB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjZG9tLWN1c3RvbWVsZW1lbnRyZWdpc3RyeS1kZWZpbmV8Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmRlZmluZSgpfVxuXHQgKiB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjZG9tLWN1c3RvbWVsZW1lbnRyZWdpc3RyeS1nZXR8Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmdldCgpfVxuXHQgKiBhbmQge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzfEVsZW1lbnRJbnRlcm5hbHN9XG5cdCAqXG5cdCAqIEBpbmhlcml0ZG9jXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdC8vIGNoZWNrIGlmIGVsZW1lbnQgc3VwcG9ydHMgYGF0dGFjaEludGVybmFscygpYFxuXHRcdGlmICh0eXBlb2YgdGhpc1tcImF0dGFjaEludGVybmFsc1wiXSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHR0aGlzW2F0dGFjaGVkSW50ZXJuYWxTeW1ib2xdID0gdGhpcy5hdHRhY2hJbnRlcm5hbHMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gYGF0dGFjaEludGVybmFscygpYCBpcyBub3Qgc3VwcG9ydGVkLCBzbyBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHRcdFx0dGhyb3cgRXJyb3IoXG5cdFx0XHRcdFwidGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3NhcnlcIixcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly8gaW5pdGlhbGl6ZSBhIE11dGF0aW9uT2JzZXJ2ZXIgdG8gd2F0Y2ggZm9yIGF0dHJpYnV0ZSBjaGFuZ2VzXG5cdFx0aW5pdE9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tY29udHJvbEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdHJldHVybiBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkaW5nIGEgc3RhdGljIGBmb3JtQXNzb2NpYXRlZGAgcHJvcGVydHksIHdpdGggYSB0cnVlIHZhbHVlLCBtYWtlcyBhbiBhdXRvbm9tb3VzIGN1c3RvbSBlbGVtZW50IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2VlIFthdHRhY2hJbnRlcm5hbHMoKV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2F0dGFjaEludGVybmFsc31cblx0ICogQHNlZSBbQ3VzdG9tIEVsZW1lbnRzIEZhY2UgRXhhbXBsZV17QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzLWZhY2UtZXhhbXBsZX1cblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBmb3JtQXNzb2NpYXRlZCA9IHRydWU7XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0ZG9jXG5cdCAqKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNdXN0IGJlIG92ZXJyaWRkZW4gYnkgYSBkZXJpdmVkIGNsYXNzIGFuZCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBBUEldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKSwgd2hpY2ggaXMgYSBwYXJ0IG9mIHRoZSB3ZWIgc3RhbmRhcmQgZm9yIGN1c3RvbSBlbGVtZW50cy5cblx0ICpcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBnZXR0ZXIgbXVzdCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZGVyaXZlZCBjbGFzc1xuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHRocm93IEVycm9yKFwidGhlIHZhbHVlIGdldHRlciBtdXN0IGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE11c3QgYmUgb3ZlcnJpZGRlbiBieSBhIGRlcml2ZWQgY2xhc3MgYW5kIHNldCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wuXG5cdCAqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpLCB3aGljaCBpcyBhIHBhcnQgb2YgdGhlIHdlYiBzdGFuZGFyZCBmb3IgY3VzdG9tIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgdmFsdWUgc2V0dGVyIG11c3QgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3Ncblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRocm93IEVycm9yKFwidGhlIHZhbHVlIHNldHRlciBtdXN0IGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge05vZGVMaXN0fVxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9sYWJlbHN9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Z2V0IGxhYmVscygpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8ubGFiZWxzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3xudWxsfVxuXHQgKi9cblx0Z2V0IG5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXQgdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5nZXRUYWcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtWYWxpZGl0eVN0YXRlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICogQHNlZSBbVmFsaWRpdHlTdGF0ZV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1ZhbGlkaXR5U3RhdGV9XG5cdCAqIEBzZWUgW3ZhbGlkaXR5XXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvdmFsaWRpdHl9XG5cdCAqL1xuXHRnZXQgdmFsaWRpdHkoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LnZhbGlkaXR5O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy92YWxpZGF0aW9uTWVzc2FnZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8udmFsaWRhdGlvbk1lc3NhZ2U7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy93aWxsVmFsaWRhdGVcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqL1xuXHRnZXQgd2lsbFZhbGlkYXRlKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy53aWxsVmFsaWRhdGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9zdGF0ZXNcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqL1xuXHRnZXQgc3RhdGVzKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5zdGF0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7SFRNTEZvbnRFbGVtZW50fG51bGx9XG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvZm9ybVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCBmb3JtKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5mb3JtO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiAvLyBVc2UgdGhlIGNvbnRyb2wncyBuYW1lIGFzIHRoZSBiYXNlIG5hbWUgZm9yIHN1Ym1pdHRlZCBkYXRhXG5cdCAqIGNvbnN0IG4gPSB0aGlzLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xuXHQgKiBjb25zdCBlbnRyaWVzID0gbmV3IEZvcm1EYXRhKCk7XG5cdCAqIGVudHJpZXMuYXBwZW5kKG4gKyAnLWZpcnN0LW5hbWUnLCB0aGlzLmZpcnN0TmFtZV8pO1xuXHQgKiBlbnRyaWVzLmFwcGVuZChuICsgJy1sYXN0LW5hbWUnLCB0aGlzLmxhc3ROYW1lXyk7XG5cdCAqIHRoaXMuc2V0Rm9ybVZhbHVlKGVudHJpZXMpO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtGaWxlfHN0cmluZ3xGb3JtRGF0YX0gdmFsdWVcblx0ICogQHBhcmFtIHtGaWxlfHN0cmluZ3xGb3JtRGF0YX0gc3RhdGVcblx0ICogQHJldHVybiB7dW5kZWZpbmVkfVxuXHQgKiBAdGhyb3dzIHtET01FeGNlcHRpb259IE5vdFN1cHBvcnRlZEVycm9yXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3NldEZvcm1WYWx1ZVxuXHQgKi9cblx0c2V0Rm9ybVZhbHVlKHZhbHVlLCBzdGF0ZSkge1xuXHRcdGdldEludGVybmFsLmNhbGwodGhpcykuc2V0Rm9ybVZhbHVlKHZhbHVlLCBzdGF0ZSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IGZsYWdzXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gbWVzc2FnZVxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBhbmNob3Jcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9zZXRWYWxpZGl0eVxuXHQgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG5cdCAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gTm90U3VwcG9ydGVkRXJyb3Jcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqL1xuXHRzZXRWYWxpZGl0eShmbGFncywgbWVzc2FnZSwgYW5jaG9yKSB7XG5cdFx0Z2V0SW50ZXJuYWwuY2FsbCh0aGlzKS5zZXRWYWxpZGl0eShmbGFncywgbWVzc2FnZSwgYW5jaG9yKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL2NoZWNrVmFsaWRpdHlcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7RE9NRXhjZXB0aW9ufSBOb3RTdXBwb3J0ZWRFcnJvclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGNoZWNrVmFsaWRpdHkoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LmNoZWNrVmFsaWRpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3JlcG9ydFZhbGlkaXR5XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKiBAdGhyb3dzIHtET01FeGNlcHRpb259IE5vdFN1cHBvcnRlZEVycm9yXG5cdCAqL1xuXHRyZXBvcnRWYWxpZGl0eSgpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8ucmVwb3J0VmFsaWRpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBgZm9ybWAgYXR0cmlidXRlIG9mIHRoZSBjdXN0b20gY29udHJvbCB0byB0aGUgYGlkYCBvZiB0aGUgcGFzc2VkIGZvcm0gZWxlbWVudC5cblx0ICogSWYgbm8gZm9ybSBlbGVtZW50IGlzIHBhc3NlZCwgcmVtb3ZlcyB0aGUgYGZvcm1gIGF0dHJpYnV0ZS5cblx0ICpcblx0ICogQHBhcmFtIHtIVE1MRm9ybUVsZW1lbnR9IGZvcm0gLSBUaGUgZm9ybSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBjb250cm9sXG5cdCAqL1xuXHRmb3JtQXNzb2NpYXRlZENhbGxiYWNrKGZvcm0pIHtcblx0XHRpZiAoZm9ybSkge1xuXHRcdFx0aWYgKGZvcm0uaWQpIHtcblx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoXCJmb3JtXCIsIGZvcm0uaWQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImZvcm1cIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgb3IgcmVtb3ZlcyB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUgb2YgdGhlIGN1c3RvbSBjb250cm9sIGJhc2VkIG9uIHRoZSBwYXNzZWQgdmFsdWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZGlzYWJsZWQgLSBXaGV0aGVyIG9yIG5vdCB0aGUgY29udHJvbCBzaG91bGQgYmUgZGlzYWJsZWRcblx0ICovXG5cdGZvcm1EaXNhYmxlZENhbGxiYWNrKGRpc2FibGVkKSB7XG5cdFx0aWYgKGRpc2FibGVkKSB7XG5cdFx0XHRpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikpIHtcblx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBcIlwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlXG5cdCAqL1xuXHRmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soc3RhdGUsIG1vZGUpIHt9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRmb3JtUmVzZXRDYWxsYmFjaygpIHtcblx0XHR0aGlzLnZhbHVlID0gXCJcIjtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3NhcnlcbiAqIEB0aGlzIEN1c3RvbUNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZ2V0SW50ZXJuYWwoKSB7XG5cdGlmICghKGF0dGFjaGVkSW50ZXJuYWxTeW1ib2wgaW4gdGhpcykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcIkVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3NhcnlcIixcblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXNbYXR0YWNoZWRJbnRlcm5hbFN5bWJvbF07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEB0aGlzIEN1c3RvbUNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gaW5pdE9ic2VydmVyKCkge1xuXHQvLyB2YWx1ZVxuXHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtcInZhbHVlXCJdID0gKCkgPT4ge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdGhpcy5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSk7XG5cdH07XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQnV0dG9uU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQnV0dG9uU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdEJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgYnV0dG9uIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeSwubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5LC5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9Omhvc3QobW9uc3Rlci1idXR0b24pe2Rpc3BsYXk6ZmxleH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWxpZ24taXRlbXM6c3RyZXRjaDtkaXNwbGF5OmZsZXh9YnV0dG9ue3dpZHRoOjEwMCV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFJpcHBsZVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFJpcHBsZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRSaXBwbGVTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHJpcHBsZSB7IFxuc3Bhbi5tb25zdGVyLWZ4LXJpcHBsZXthbmltYXRpb246bW9uc3Rlci1meC1yaXBwbGUgLjZzIGxpbmVhcjtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC43KTtib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06c2NhbGUoMCl9QGtleWZyYW1lcyBtb25zdGVyLWZ4LXJpcHBsZXt0b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDQpfX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21Db250cm9sIH0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21jb250cm9sLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0JVVFRPTl9DTEFTUyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFJpcHBsZVN0eWxlU2hlZXQgfSBmcm9tIFwiLi4vc3R5bGVzaGVldC9yaXBwbGUubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcblxuZXhwb3J0IHsgQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmV4cG9ydCBjb25zdCBidXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBBIGJ1dHRvblxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vYnV0dG9uL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vYnV0dG9uLXNpbXBsZVxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9idXR0b24td2l0aC1jbGljay1ldmVudFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGJlYXV0aWZ1bCBidXR0b24gdGhhdCBjYW4gbWFrZSB5b3VyIGxpZmUgZWFzaWVyIGFuZCBhbHNvIGxvb2tzIGdvb2QuXG4gKiBAZmlyZXMgbW9uc3Rlci1idXR0b24tY2xpY2tlZCB0aGlzIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZC4gSXQgY29udGFpbnMgdGhlIGZpZWxkIHtidXR0b259IHdpdGggdGhlIGJ1dHRvbiBpbnN0YW5jZS5cbiAqL1xuY2xhc3MgQnV0dG9uIGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPmluc3RhbmNlb2Y8L2NvZGU+IG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vYnV0dG9uQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtCdXR0b259XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgPGNvZGU+QnV0dG9uLmNsaWNrKCk8L2NvZGU+IG1ldGhvZCBzaW11bGF0ZXMgYSBjbGljayBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2NsaWNrfVxuXHQgKi9cblx0Y2xpY2soKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2spXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uZm9jdXMoKSBtZXRob2Qgc2V0cyBmb2N1cyBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2ZvY3VzfVxuXHQgKi9cblx0Zm9jdXMob3B0aW9ucykge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5ibHVyKCkgbWV0aG9kIHJlbW92ZXMgZm9jdXMgZnJvbSB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqL1xuXHRibHVyKCkge1xuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5ibHVyKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5ibHVyKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hpY2ggYXR0cmlidXRlcyBhcmUgdG8gYmUgbW9uaXRvcmVkIGJ5IGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKWAuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ1tdfVxuXHQgKi9cblx0c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG5cdFx0Y29uc3QgYXR0cmlidXRlcyA9IHN1cGVyLm9ic2VydmVkQXR0cmlidXRlcztcblx0XHRhdHRyaWJ1dGVzLnB1c2goQVRUUklCVVRFX0JVVFRPTl9DTEFTUyk7XG5cdFx0cmV0dXJuIGF0dHJpYnV0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2F0dGFjaEludGVybmFsc31cblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBnZXQgZm9ybUFzc29jaWF0ZWQoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGJ1dHRvbi5cblx0ICpcblx0ICogYGBgamF2YXNjcmlwdFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1idXR0b24nKTtcblx0ICogY29uc29sZS5sb2coZS52YWx1ZSlcblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHZhbHVlIG9mIHRoZSBidXR0b25cblx0ICovXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHZhbHVlIG9mIHRoZSBidXR0b24uXG5cdCAqXG5cdCAqIGBgYGphdmFzY3JpcHRcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItYnV0dG9uJyk7XG5cdCAqIGUudmFsdWU9MVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqL1xuXHRzZXQgdmFsdWUodmFsdWUpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHZhbHVlKTtcblx0XHR0cnkge1xuXHRcdFx0dGhpcz8uc2V0Rm9ybVZhbHVlKHRoaXMudmFsdWUpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzIExhYmVsc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmJ1dHRvbj1cIjxzbG90Pjwvc2xvdD5cIiBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGFjdGlvbnMgQ2FsbGJhY2tzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb25zLmNsaWNrPVwidGhyb3cgRXJyb3JcIiBDYWxsYmFjayB3aGVuIGNsaWNrZWRcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXMgQ1NTIGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuYnV0dG9uPVwibW9uc3Rlci1idXR0b24tcHJpbWFyeVwiIENTUyBjbGFzcyBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRpc2FibGVkPWZhbHNlIERpc2FibGVkIHN0YXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlZmZlY3RzIEVmZmVjdHNcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBlZmZlY3RzLnJpcHBsZT10cnVlIFJpcHBsZSBlZmZlY3Rcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGU9XCJidXR0b25cIiBUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgYnV0dG9uLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBzdWJtaXQsIHJlc2V0LCBidXR0b25cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0fSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIm1vbnN0ZXItYnV0dG9uLXByaW1hcnlcIixcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZmFsc2UsXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdGNsaWNrOiAoKSA9PiB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGNsaWNrIGFjdGlvbiBpcyBub3QgZGVmaW5lZFwiKTtcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRlZmZlY3RzOiB7XG5cdFx0XHRcdHJpcHBsZTogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR2YWx1ZTogbnVsbCxcblx0XHRcdHR5cGU6IFwiYnV0dG9uXCIsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWJ1dHRvblwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbUmlwcGxlU3R5bGVTaGVldCwgQnV0dG9uU3R5bGVTaGVldF07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50SGFuZGxlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdGNvbnN0IGJ1dHRvbiA9IHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF07XG5cblx0Y29uc3QgdHlwZSA9IFwiY2xpY2tcIjtcblxuXHRidXR0b24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRjb25zdCBjYWxsYmFjayA9IHNlbGYuZ2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiKTtcblxuXHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItYnV0dG9uLWNsaWNrZWRcIiwge1xuXHRcdFx0YnV0dG9uOiBzZWxmLFxuXHRcdH0pO1xuXG5cdFx0aWYgKCFpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcImNvbnRyb2xcIixcblx0XHQpO1xuXG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIE5vZGUgJiYgc2VsZi5oYXNOb2RlKGVsZW1lbnQpKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNhbGxiYWNrLmNhbGwoc2VsZiwgZXZlbnQpO1xuXHR9KTtcblxuXHRpZiAoc2VsZi5nZXRPcHRpb24oXCJlZmZlY3RzLnJpcHBsZVwiKSkge1xuXHRcdGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgY3JlYXRlUmlwcGxlLmJpbmQoc2VsZikpO1xuXHR9XG5cblx0Ly8gZGF0YS1tb25zdGVyLW9wdGlvbnNcblx0c2VsZlthdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX0JVVFRPTl9DTEFTU10gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRzZWxmLnNldE9wdGlvbihcImNsYXNzZXMuYnV0dG9uXCIsIHZhbHVlKTtcblx0fTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxidXR0b24gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgaWY6dHJ1ZSwgY2xhc3MgcGF0aDpjbGFzc2VzLmJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSBwYXRoOnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmJ1dHRvblwiPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSaXBwbGUoZXZlbnQpIHtcblx0Y29uc3QgYnV0dG9uID0gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXTtcblxuXHRjb25zdCBjaXJjbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcblx0Y29uc3QgZGlhbWV0ZXIgPSBNYXRoLm1heChidXR0b24uY2xpZW50V2lkdGgsIGJ1dHRvbi5jbGllbnRIZWlnaHQpO1xuXHRjb25zdCByYWRpdXMgPSBkaWFtZXRlciAvIDI7XG5cblx0Y2lyY2xlLnN0eWxlLndpZHRoID0gY2lyY2xlLnN0eWxlLmhlaWdodCA9IGAke2RpYW1ldGVyfXB4YDtcblx0Y2lyY2xlLnN0eWxlLmxlZnQgPSBgJHtldmVudC5jbGllbnRYIC0gYnV0dG9uLm9mZnNldExlZnQgLSByYWRpdXN9cHhgO1xuXHRjaXJjbGUuc3R5bGUudG9wID0gYCR7ZXZlbnQuY2xpZW50WSAtIGJ1dHRvbi5vZmZzZXRUb3AgLSByYWRpdXN9cHhgO1xuXHRjaXJjbGUuY2xhc3NMaXN0LmFkZChcIm1vbnN0ZXItZngtcmlwcGxlXCIpO1xuXG5cdGNvbnN0IHJpcHBsZXMgPSBidXR0b24uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm1vbnN0ZXItZngtcmlwcGxlXCIpO1xuXHRmb3IgKGNvbnN0IHJpcHBsZSBvZiByaXBwbGVzKSB7XG5cdFx0cmlwcGxlLnJlbW92ZSgpO1xuXHR9XG5cblx0YnV0dG9uLmFwcGVuZENoaWxkKGNpcmNsZSk7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChCdXR0b24pO1xuIiwgIi8qKlxuICogQ3VzdG9tIHBvc2l0aW9uaW5nIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3ZpcnR1YWwtZWxlbWVudHNcbiAqL1xuXG5jb25zdCBzaWRlcyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J107XG5jb25zdCBhbGlnbm1lbnRzID0gWydzdGFydCcsICdlbmQnXTtcbmNvbnN0IHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovc2lkZXMucmVkdWNlKChhY2MsIHNpZGUpID0+IGFjYy5jb25jYXQoc2lkZSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1swXSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1sxXSksIFtdKTtcbmNvbnN0IG1pbiA9IE1hdGgubWluO1xuY29uc3QgbWF4ID0gTWF0aC5tYXg7XG5jb25zdCByb3VuZCA9IE1hdGgucm91bmQ7XG5jb25zdCBmbG9vciA9IE1hdGguZmxvb3I7XG5jb25zdCBjcmVhdGVDb29yZHMgPSB2ID0+ICh7XG4gIHg6IHYsXG4gIHk6IHZcbn0pO1xuY29uc3Qgb3Bwb3NpdGVTaWRlTWFwID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuY29uc3Qgb3Bwb3NpdGVBbGlnbm1lbnRNYXAgPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZnVuY3Rpb24gY2xhbXAoc3RhcnQsIHZhbHVlLCBlbmQpIHtcbiAgcmV0dXJuIG1heChzdGFydCwgbWluKHZhbHVlLCBlbmQpKTtcbn1cbmZ1bmN0aW9uIGV2YWx1YXRlKHZhbHVlLCBwYXJhbSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUocGFyYW0pIDogdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRTaWRlKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBeGlzTGVuZ3RoKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbn1cbmZ1bmN0aW9uIGdldFNpZGVBeGlzKHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5jbHVkZXMoZ2V0U2lkZShwbGFjZW1lbnQpKSA/ICd5JyA6ICd4Jztcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiBnZXRPcHBvc2l0ZUF4aXMoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSk7XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpIHtcbiAgaWYgKHJ0bCA9PT0gdm9pZCAwKSB7XG4gICAgcnRsID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudEF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XG4gIGxldCBtYWluQWxpZ25tZW50U2lkZSA9IGFsaWdubWVudEF4aXMgPT09ICd4JyA/IGFsaWdubWVudCA9PT0gKHJ0bCA/ICdlbmQnIDogJ3N0YXJ0JykgPyAncmlnaHQnIDogJ2xlZnQnIDogYWxpZ25tZW50ID09PSAnc3RhcnQnID8gJ2JvdHRvbScgOiAndG9wJztcbiAgaWYgKHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdID4gcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXSkge1xuICAgIG1haW5BbGlnbm1lbnRTaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpO1xuICB9XG4gIHJldHVybiBbbWFpbkFsaWdubWVudFNpZGUsIGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKV07XG59XG5mdW5jdGlvbiBnZXRFeHBhbmRlZFBsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGNvbnN0IG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBhbGlnbm1lbnQgPT4gb3Bwb3NpdGVBbGlnbm1lbnRNYXBbYWxpZ25tZW50XSk7XG59XG5mdW5jdGlvbiBnZXRTaWRlTGlzdChzaWRlLCBpc1N0YXJ0LCBydGwpIHtcbiAgY29uc3QgbHIgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbiAgY29uc3QgcmwgPSBbJ3JpZ2h0JywgJ2xlZnQnXTtcbiAgY29uc3QgdGIgPSBbJ3RvcCcsICdib3R0b20nXTtcbiAgY29uc3QgYnQgPSBbJ2JvdHRvbScsICd0b3AnXTtcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgaWYgKHJ0bCkgcmV0dXJuIGlzU3RhcnQgPyBybCA6IGxyO1xuICAgICAgcmV0dXJuIGlzU3RhcnQgPyBsciA6IHJsO1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gdGIgOiBidDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKHBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZGlyZWN0aW9uLCBydGwpIHtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGxldCBsaXN0ID0gZ2V0U2lkZUxpc3QoZ2V0U2lkZShwbGFjZW1lbnQpLCBkaXJlY3Rpb24gPT09ICdzdGFydCcsIHJ0bCk7XG4gIGlmIChhbGlnbm1lbnQpIHtcbiAgICBsaXN0ID0gbGlzdC5tYXAoc2lkZSA9PiBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnQpO1xuICAgIGlmIChmbGlwQWxpZ25tZW50KSB7XG4gICAgICBsaXN0ID0gbGlzdC5jb25jYXQobGlzdC5tYXAoZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpc3Q7XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgc2lkZSA9PiBvcHBvc2l0ZVNpZGVNYXBbc2lkZV0pO1xufVxuZnVuY3Rpb24gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC4uLnBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4gdHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSA6IHtcbiAgICB0b3A6IHBhZGRpbmcsXG4gICAgcmlnaHQ6IHBhZGRpbmcsXG4gICAgYm90dG9tOiBwYWRkaW5nLFxuICAgIGxlZnQ6IHBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gcmVjdDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIGxlZnQ6IHgsXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmV4cG9ydCB7IGFsaWdubWVudHMsIGNsYW1wLCBjcmVhdGVDb29yZHMsIGV2YWx1YXRlLCBleHBhbmRQYWRkaW5nT2JqZWN0LCBmbG9vciwgZ2V0QWxpZ25tZW50LCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0QXhpc0xlbmd0aCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBeGlzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0UGFkZGluZ09iamVjdCwgZ2V0U2lkZSwgZ2V0U2lkZUF4aXMsIG1heCwgbWluLCBwbGFjZW1lbnRzLCByZWN0VG9DbGllbnRSZWN0LCByb3VuZCwgc2lkZXMgfTtcbiIsICJpbXBvcnQgeyBnZXRTaWRlQXhpcywgZ2V0QWxpZ25tZW50QXhpcywgZ2V0QXhpc0xlbmd0aCwgZ2V0U2lkZSwgZ2V0QWxpZ25tZW50LCBldmFsdWF0ZSwgZ2V0UGFkZGluZ09iamVjdCwgcmVjdFRvQ2xpZW50UmVjdCwgbWluLCBjbGFtcCwgcGxhY2VtZW50cywgZ2V0QWxpZ25tZW50U2lkZXMsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50LCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBzaWRlcywgbWF4LCBnZXRPcHBvc2l0ZUF4aXMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuZXhwb3J0IHsgcmVjdFRvQ2xpZW50UmVjdCB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5cbmZ1bmN0aW9uIGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KF9yZWYsIHBsYWNlbWVudCwgcnRsKSB7XG4gIGxldCB7XG4gICAgcmVmZXJlbmNlLFxuICAgIGZsb2F0aW5nXG4gIH0gPSBfcmVmO1xuICBjb25zdCBzaWRlQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudEF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWduTGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IHNpZGVBeGlzID09PSAneSc7XG4gIGNvbnN0IGNvbW1vblggPSByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCAvIDIgLSBmbG9hdGluZy53aWR0aCAvIDI7XG4gIGNvbnN0IGNvbW1vblkgPSByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQgLyAyIC0gZmxvYXRpbmcuaGVpZ2h0IC8gMjtcbiAgY29uc3QgY29tbW9uQWxpZ24gPSByZWZlcmVuY2VbYWxpZ25MZW5ndGhdIC8gMiAtIGZsb2F0aW5nW2FsaWduTGVuZ3RoXSAvIDI7XG4gIGxldCBjb29yZHM7XG4gIHN3aXRjaCAoc2lkZSkge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55IC0gZmxvYXRpbmcuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGZsb2F0aW5nLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG4gIHN3aXRjaCAoZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkpIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICBjb29yZHNbYWxpZ25tZW50QXhpc10gLT0gY29tbW9uQWxpZ24gKiAocnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZW5kJzpcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSArPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gY29vcmRzO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyB0aGF0IHdpbGwgcGxhY2UgdGhlIGZsb2F0aW5nIGVsZW1lbnRcbiAqIG5leHQgdG8gYSBnaXZlbiByZWZlcmVuY2UgZWxlbWVudC5cbiAqXG4gKiBUaGlzIGV4cG9ydCBkb2VzIG5vdCBoYXZlIGFueSBgcGxhdGZvcm1gIGludGVyZmFjZSBsb2dpYy4gWW91IHdpbGwgbmVlZCB0b1xuICogd3JpdGUgb25lIGZvciB0aGUgcGxhdGZvcm0geW91IGFyZSB1c2luZyBGbG9hdGluZyBVSSB3aXRoLlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSBhc3luYyAocmVmZXJlbmNlLCBmbG9hdGluZywgY29uZmlnKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBwbGFjZW1lbnQgPSAnYm90dG9tJyxcbiAgICBzdHJhdGVneSA9ICdhYnNvbHV0ZScsXG4gICAgbWlkZGxld2FyZSA9IFtdLFxuICAgIHBsYXRmb3JtXG4gIH0gPSBjb25maWc7XG4gIGNvbnN0IHZhbGlkTWlkZGxld2FyZSA9IG1pZGRsZXdhcmUuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGZsb2F0aW5nKSk7XG4gIGxldCByZWN0cyA9IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgcmVmZXJlbmNlLFxuICAgIGZsb2F0aW5nLFxuICAgIHN0cmF0ZWd5XG4gIH0pO1xuICBsZXQge1xuICAgIHgsXG4gICAgeVxuICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHBsYWNlbWVudCwgcnRsKTtcbiAgbGV0IHN0YXRlZnVsUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICBsZXQgbWlkZGxld2FyZURhdGEgPSB7fTtcbiAgbGV0IHJlc2V0Q291bnQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbGlkTWlkZGxld2FyZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHtcbiAgICAgIG5hbWUsXG4gICAgICBmblxuICAgIH0gPSB2YWxpZE1pZGRsZXdhcmVbaV07XG4gICAgY29uc3Qge1xuICAgICAgeDogbmV4dFgsXG4gICAgICB5OiBuZXh0WSxcbiAgICAgIGRhdGEsXG4gICAgICByZXNldFxuICAgIH0gPSBhd2FpdCBmbih7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIGluaXRpYWxQbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudDogc3RhdGVmdWxQbGFjZW1lbnQsXG4gICAgICBzdHJhdGVneSxcbiAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgcmVjdHMsXG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgZmxvYXRpbmdcbiAgICAgIH1cbiAgICB9KTtcbiAgICB4ID0gbmV4dFggIT0gbnVsbCA/IG5leHRYIDogeDtcbiAgICB5ID0gbmV4dFkgIT0gbnVsbCA/IG5leHRZIDogeTtcbiAgICBtaWRkbGV3YXJlRGF0YSA9IHtcbiAgICAgIC4uLm1pZGRsZXdhcmVEYXRhLFxuICAgICAgW25hbWVdOiB7XG4gICAgICAgIC4uLm1pZGRsZXdhcmVEYXRhW25hbWVdLFxuICAgICAgICAuLi5kYXRhXG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAocmVzZXQgJiYgcmVzZXRDb3VudCA8PSA1MCkge1xuICAgICAgcmVzZXRDb3VudCsrO1xuICAgICAgaWYgKHR5cGVvZiByZXNldCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJlc2V0LnBsYWNlbWVudCkge1xuICAgICAgICAgIHN0YXRlZnVsUGxhY2VtZW50ID0gcmVzZXQucGxhY2VtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNldC5yZWN0cykge1xuICAgICAgICAgIHJlY3RzID0gcmVzZXQucmVjdHMgPT09IHRydWUgPyBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgICAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICAgICAgZmxvYXRpbmcsXG4gICAgICAgICAgICBzdHJhdGVneVxuICAgICAgICAgIH0pIDogcmVzZXQucmVjdHM7XG4gICAgICAgIH1cbiAgICAgICAgKHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHlcbiAgICAgICAgfSA9IGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KHJlY3RzLCBzdGF0ZWZ1bFBsYWNlbWVudCwgcnRsKSk7XG4gICAgICB9XG4gICAgICBpID0gLTE7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5LFxuICAgIHBsYWNlbWVudDogc3RhdGVmdWxQbGFjZW1lbnQsXG4gICAgc3RyYXRlZ3ksXG4gICAgbWlkZGxld2FyZURhdGFcbiAgfTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX2F3YWl0JHBsYXRmb3JtJGlzRWxlO1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhdGZvcm0sXG4gICAgcmVjdHMsXG4gICAgZWxlbWVudHMsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IHN0YXRlO1xuICBjb25zdCB7XG4gICAgYm91bmRhcnkgPSAnY2xpcHBpbmdBbmNlc3RvcnMnLFxuICAgIHJvb3RCb3VuZGFyeSA9ICd2aWV3cG9ydCcsXG4gICAgZWxlbWVudENvbnRleHQgPSAnZmxvYXRpbmcnLFxuICAgIGFsdEJvdW5kYXJ5ID0gZmFsc2UsXG4gICAgcGFkZGluZyA9IDBcbiAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gIGNvbnN0IGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/ICdyZWZlcmVuY2UnIDogJ2Zsb2F0aW5nJztcbiAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2FsdEJvdW5kYXJ5ID8gYWx0Q29udGV4dCA6IGVsZW1lbnRDb250ZXh0XTtcbiAgY29uc3QgY2xpcHBpbmdDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChhd2FpdCBwbGF0Zm9ybS5nZXRDbGlwcGluZ1JlY3Qoe1xuICAgIGVsZW1lbnQ6ICgoX2F3YWl0JHBsYXRmb3JtJGlzRWxlID0gYXdhaXQgKHBsYXRmb3JtLmlzRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNFbGVtZW50KGVsZW1lbnQpKSkgIT0gbnVsbCA/IF9hd2FpdCRwbGF0Zm9ybSRpc0VsZSA6IHRydWUpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgKGF3YWl0IChwbGF0Zm9ybS5nZXREb2N1bWVudEVsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudChlbGVtZW50cy5mbG9hdGluZykpKSxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgc3RyYXRlZ3lcbiAgfSkpO1xuICBjb25zdCByZWN0ID0gZWxlbWVudENvbnRleHQgPT09ICdmbG9hdGluZycgPyB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoOiByZWN0cy5mbG9hdGluZy53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3RzLmZsb2F0aW5nLmhlaWdodFxuICB9IDogcmVjdHMucmVmZXJlbmNlO1xuICBjb25zdCBvZmZzZXRQYXJlbnQgPSBhd2FpdCAocGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQoZWxlbWVudHMuZmxvYXRpbmcpKTtcbiAgY29uc3Qgb2Zmc2V0U2NhbGUgPSAoYXdhaXQgKHBsYXRmb3JtLmlzRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNFbGVtZW50KG9mZnNldFBhcmVudCkpKSA/IChhd2FpdCAocGxhdGZvcm0uZ2V0U2NhbGUgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldFNjYWxlKG9mZnNldFBhcmVudCkpKSB8fCB7XG4gICAgeDogMSxcbiAgICB5OiAxXG4gIH0gOiB7XG4gICAgeDogMSxcbiAgICB5OiAxXG4gIH07XG4gIGNvbnN0IGVsZW1lbnRDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChwbGF0Zm9ybS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCA/IGF3YWl0IHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KHtcbiAgICBlbGVtZW50cyxcbiAgICByZWN0LFxuICAgIG9mZnNldFBhcmVudCxcbiAgICBzdHJhdGVneVxuICB9KSA6IHJlY3QpO1xuICByZXR1cm4ge1xuICAgIHRvcDogKGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCkgLyBvZmZzZXRTY2FsZS55LFxuICAgIGJvdHRvbTogKGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSkgLyBvZmZzZXRTY2FsZS55LFxuICAgIGxlZnQ6IChjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQpIC8gb2Zmc2V0U2NhbGUueCxcbiAgICByaWdodDogKGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodCkgLyBvZmZzZXRTY2FsZS54XG4gIH07XG59XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gb3B0aW9ucyA9PiAoe1xuICBuYW1lOiAnYXJyb3cnLFxuICBvcHRpb25zLFxuICBhc3luYyBmbihzdGF0ZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgcGxhY2VtZW50LFxuICAgICAgcmVjdHMsXG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgbWlkZGxld2FyZURhdGFcbiAgICB9ID0gc3RhdGU7XG4gICAgLy8gU2luY2UgYGVsZW1lbnRgIGlzIHJlcXVpcmVkLCB3ZSBkb24ndCBQYXJ0aWFsPD4gdGhlIHR5cGUuXG4gICAgY29uc3Qge1xuICAgICAgZWxlbWVudCxcbiAgICAgIHBhZGRpbmcgPSAwXG4gICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKSB8fCB7fTtcbiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xuICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgIHgsXG4gICAgICB5XG4gICAgfTtcbiAgICBjb25zdCBheGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICAgIGNvbnN0IGxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYXhpcyk7XG4gICAgY29uc3QgYXJyb3dEaW1lbnNpb25zID0gYXdhaXQgcGxhdGZvcm0uZ2V0RGltZW5zaW9ucyhlbGVtZW50KTtcbiAgICBjb25zdCBpc1lBeGlzID0gYXhpcyA9PT0gJ3knO1xuICAgIGNvbnN0IG1pblByb3AgPSBpc1lBeGlzID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgY29uc3QgbWF4UHJvcCA9IGlzWUF4aXMgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgY29uc3QgY2xpZW50UHJvcCA9IGlzWUF4aXMgPyAnY2xpZW50SGVpZ2h0JyA6ICdjbGllbnRXaWR0aCc7XG4gICAgY29uc3QgZW5kRGlmZiA9IHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdICsgcmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gY29vcmRzW2F4aXNdIC0gcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXTtcbiAgICBjb25zdCBzdGFydERpZmYgPSBjb29yZHNbYXhpc10gLSByZWN0cy5yZWZlcmVuY2VbYXhpc107XG4gICAgY29uc3QgYXJyb3dPZmZzZXRQYXJlbnQgPSBhd2FpdCAocGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkpO1xuICAgIGxldCBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBhcnJvd09mZnNldFBhcmVudFtjbGllbnRQcm9wXSA6IDA7XG5cbiAgICAvLyBET00gcGxhdGZvcm0gY2FuIHJldHVybiBgd2luZG93YCBhcyB0aGUgYG9mZnNldFBhcmVudGAuXG4gICAgaWYgKCFjbGllbnRTaXplIHx8ICEoYXdhaXQgKHBsYXRmb3JtLmlzRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNFbGVtZW50KGFycm93T2Zmc2V0UGFyZW50KSkpKSB7XG4gICAgICBjbGllbnRTaXplID0gZWxlbWVudHMuZmxvYXRpbmdbY2xpZW50UHJvcF0gfHwgcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXTtcbiAgICB9XG4gICAgY29uc3QgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7XG5cbiAgICAvLyBJZiB0aGUgcGFkZGluZyBpcyBsYXJnZSBlbm91Z2ggdGhhdCBpdCBjYXVzZXMgdGhlIGFycm93IHRvIG5vIGxvbmdlciBiZVxuICAgIC8vIGNlbnRlcmVkLCBtb2RpZnkgdGhlIHBhZGRpbmcgc28gdGhhdCBpdCBpcyBjZW50ZXJlZC5cbiAgICBjb25zdCBsYXJnZXN0UG9zc2libGVQYWRkaW5nID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgLSAxO1xuICAgIGNvbnN0IG1pblBhZGRpbmcgPSBtaW4ocGFkZGluZ09iamVjdFttaW5Qcm9wXSwgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyk7XG4gICAgY29uc3QgbWF4UGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21heFByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgZmxvYXRpbmcgZWxlbWVudCBpZiB0aGUgY2VudGVyXG4gICAgLy8gcG9pbnQgaXMgb3V0c2lkZSB0aGUgZmxvYXRpbmcgZWxlbWVudCdzIGJvdW5kcy5cbiAgICBjb25zdCBtaW4kMSA9IG1pblBhZGRpbmc7XG4gICAgY29uc3QgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC0gbWF4UGFkZGluZztcbiAgICBjb25zdCBjZW50ZXIgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiArIGNlbnRlclRvUmVmZXJlbmNlO1xuICAgIGNvbnN0IG9mZnNldCA9IGNsYW1wKG1pbiQxLCBjZW50ZXIsIG1heCk7XG5cbiAgICAvLyBJZiB0aGUgcmVmZXJlbmNlIGlzIHNtYWxsIGVub3VnaCB0aGF0IHRoZSBhcnJvdydzIHBhZGRpbmcgY2F1c2VzIGl0IHRvXG4gICAgLy8gdG8gcG9pbnQgdG8gbm90aGluZyBmb3IgYW4gYWxpZ25lZCBwbGFjZW1lbnQsIGFkanVzdCB0aGUgb2Zmc2V0IG9mIHRoZVxuICAgIC8vIGZsb2F0aW5nIGVsZW1lbnQgaXRzZWxmLiBUbyBlbnN1cmUgYHNoaWZ0KClgIGNvbnRpbnVlcyB0byB0YWtlIGFjdGlvbixcbiAgICAvLyBhIHNpbmdsZSByZXNldCBpcyBwZXJmb3JtZWQgd2hlbiB0aGlzIGlzIHRydWUuXG4gICAgY29uc3Qgc2hvdWxkQWRkT2Zmc2V0ID0gIW1pZGRsZXdhcmVEYXRhLmFycm93ICYmIGdldEFsaWdubWVudChwbGFjZW1lbnQpICE9IG51bGwgJiYgY2VudGVyICE9PSBvZmZzZXQgJiYgcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gLyAyIC0gKGNlbnRlciA8IG1pbiQxID8gbWluUGFkZGluZyA6IG1heFBhZGRpbmcpIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyIDwgMDtcbiAgICBjb25zdCBhbGlnbm1lbnRPZmZzZXQgPSBzaG91bGRBZGRPZmZzZXQgPyBjZW50ZXIgPCBtaW4kMSA/IGNlbnRlciAtIG1pbiQxIDogY2VudGVyIC0gbWF4IDogMDtcbiAgICByZXR1cm4ge1xuICAgICAgW2F4aXNdOiBjb29yZHNbYXhpc10gKyBhbGlnbm1lbnRPZmZzZXQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIFtheGlzXTogb2Zmc2V0LFxuICAgICAgICBjZW50ZXJPZmZzZXQ6IGNlbnRlciAtIG9mZnNldCAtIGFsaWdubWVudE9mZnNldCxcbiAgICAgICAgLi4uKHNob3VsZEFkZE9mZnNldCAmJiB7XG4gICAgICAgICAgYWxpZ25tZW50T2Zmc2V0XG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgcmVzZXQ6IHNob3VsZEFkZE9mZnNldFxuICAgIH07XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBnZXRQbGFjZW1lbnRMaXN0KGFsaWdubWVudCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIHtcbiAgY29uc3QgYWxsb3dlZFBsYWNlbWVudHNTb3J0ZWRCeUFsaWdubWVudCA9IGFsaWdubWVudCA/IFsuLi5hbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldEFsaWdubWVudChwbGFjZW1lbnQpID09PSBhbGlnbm1lbnQpLCAuLi5hbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldEFsaWdubWVudChwbGFjZW1lbnQpICE9PSBhbGlnbm1lbnQpXSA6IGFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0U2lkZShwbGFjZW1lbnQpID09PSBwbGFjZW1lbnQpO1xuICByZXR1cm4gYWxsb3dlZFBsYWNlbWVudHNTb3J0ZWRCeUFsaWdubWVudC5maWx0ZXIocGxhY2VtZW50ID0+IHtcbiAgICBpZiAoYWxpZ25tZW50KSB7XG4gICAgICByZXR1cm4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCB8fCAoYXV0b0FsaWdubWVudCA/IGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCkgIT09IHBsYWNlbWVudCA6IGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xufVxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgY2hvb3NpbmcgdGhlIHBsYWNlbWVudFxuICogdGhhdCBoYXMgdGhlIG1vc3Qgc3BhY2UgYXZhaWxhYmxlIGF1dG9tYXRpY2FsbHksIHdpdGhvdXQgbmVlZGluZyB0byBzcGVjaWZ5IGFcbiAqIHByZWZlcnJlZCBwbGFjZW1lbnQuIEFsdGVybmF0aXZlIHRvIGBmbGlwYC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvUGxhY2VtZW50XG4gKi9cbmNvbnN0IGF1dG9QbGFjZW1lbnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2F1dG9QbGFjZW1lbnQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXV0b1AsIF9taWRkbGV3YXJlRGF0YSRhdXRvUDIsIF9wbGFjZW1lbnRzVGhhdEZpdE9uRTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBjcm9zc0F4aXMgPSBmYWxzZSxcbiAgICAgICAgYWxpZ25tZW50LFxuICAgICAgICBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMsXG4gICAgICAgIGF1dG9BbGlnbm1lbnQgPSB0cnVlLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBwbGFjZW1lbnRzJDEgPSBhbGlnbm1lbnQgIT09IHVuZGVmaW5lZCB8fCBhbGxvd2VkUGxhY2VtZW50cyA9PT0gcGxhY2VtZW50cyA/IGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50IHx8IG51bGwsIGF1dG9BbGlnbm1lbnQsIGFsbG93ZWRQbGFjZW1lbnRzKSA6IGFsbG93ZWRQbGFjZW1lbnRzO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9ICgoX21pZGRsZXdhcmVEYXRhJGF1dG9QID0gbWlkZGxld2FyZURhdGEuYXV0b1BsYWNlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRhdXRvUC5pbmRleCkgfHwgMDtcbiAgICAgIGNvbnN0IGN1cnJlbnRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4XTtcbiAgICAgIGlmIChjdXJyZW50UGxhY2VtZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgY29uc3QgYWxpZ25tZW50U2lkZXMgPSBnZXRBbGlnbm1lbnRTaWRlcyhjdXJyZW50UGxhY2VtZW50LCByZWN0cywgYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKTtcblxuICAgICAgLy8gTWFrZSBgY29tcHV0ZUNvb3Jkc2Agc3RhcnQgZnJvbSB0aGUgcmlnaHQgcGxhY2UuXG4gICAgICBpZiAocGxhY2VtZW50ICE9PSBjdXJyZW50UGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50cyQxWzBdXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudE92ZXJmbG93cyA9IFtvdmVyZmxvd1tnZXRTaWRlKGN1cnJlbnRQbGFjZW1lbnQpXSwgb3ZlcmZsb3dbYWxpZ25tZW50U2lkZXNbMF1dLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1sxXV1dO1xuICAgICAgY29uc3QgYWxsT3ZlcmZsb3dzID0gWy4uLigoKF9taWRkbGV3YXJlRGF0YSRhdXRvUDIgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QMi5vdmVyZmxvd3MpIHx8IFtdKSwge1xuICAgICAgICBwbGFjZW1lbnQ6IGN1cnJlbnRQbGFjZW1lbnQsXG4gICAgICAgIG92ZXJmbG93czogY3VycmVudE92ZXJmbG93c1xuICAgICAgfV07XG4gICAgICBjb25zdCBuZXh0UGxhY2VtZW50ID0gcGxhY2VtZW50cyQxW2N1cnJlbnRJbmRleCArIDFdO1xuXG4gICAgICAvLyBUaGVyZSBhcmUgbW9yZSBwbGFjZW1lbnRzIHRvIGNoZWNrLlxuICAgICAgaWYgKG5leHRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBpbmRleDogY3VycmVudEluZGV4ICsgMSxcbiAgICAgICAgICAgIG92ZXJmbG93czogYWxsT3ZlcmZsb3dzXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBuZXh0UGxhY2VtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlID0gYWxsT3ZlcmZsb3dzLm1hcChkID0+IHtcbiAgICAgICAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KGQucGxhY2VtZW50KTtcbiAgICAgICAgcmV0dXJuIFtkLnBsYWNlbWVudCwgYWxpZ25tZW50ICYmIGNyb3NzQXhpcyA/XG4gICAgICAgIC8vIENoZWNrIGFsb25nIHRoZSBtYWluQXhpcyBhbmQgbWFpbiBjcm9zc0F4aXMgc2lkZS5cbiAgICAgICAgZC5vdmVyZmxvd3Muc2xpY2UoMCwgMikucmVkdWNlKChhY2MsIHYpID0+IGFjYyArIHYsIDApIDpcbiAgICAgICAgLy8gQ2hlY2sgb25seSB0aGUgbWFpbkF4aXMuXG4gICAgICAgIGQub3ZlcmZsb3dzWzBdLCBkLm92ZXJmbG93c107XG4gICAgICB9KS5zb3J0KChhLCBiKSA9PiBhWzFdIC0gYlsxXSk7XG4gICAgICBjb25zdCBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGUgPSBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UuZmlsdGVyKGQgPT4gZFsyXS5zbGljZSgwLFxuICAgICAgLy8gQWxpZ25lZCBwbGFjZW1lbnRzIHNob3VsZCBub3QgY2hlY2sgdGhlaXIgb3Bwb3NpdGUgY3Jvc3NBeGlzXG4gICAgICAvLyBzaWRlLlxuICAgICAgZ2V0QWxpZ25tZW50KGRbMF0pID8gMiA6IDMpLmV2ZXJ5KHYgPT4gdiA8PSAwKSk7XG4gICAgICBjb25zdCByZXNldFBsYWNlbWVudCA9ICgoX3BsYWNlbWVudHNUaGF0Rml0T25FID0gcGxhY2VtZW50c1RoYXRGaXRPbkVhY2hTaWRlWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX3BsYWNlbWVudHNUaGF0Rml0T25FWzBdKSB8fCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2VbMF1bMF07XG4gICAgICBpZiAocmVzZXRQbGFjZW1lbnQgIT09IHBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IHJlc2V0UGxhY2VtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGZsaXBwaW5nIHRoZSBgcGxhY2VtZW50YFxuICogaW4gb3JkZXIgdG8ga2VlcCBpdCBpbiB2aWV3IHdoZW4gdGhlIHByZWZlcnJlZCBwbGFjZW1lbnQocykgd2lsbCBvdmVyZmxvdyB0aGVcbiAqIGNsaXBwaW5nIGJvdW5kYXJ5LiBBbHRlcm5hdGl2ZSB0byBgYXV0b1BsYWNlbWVudGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZmxpcFxuICovXG5jb25zdCBmbGlwID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdmbGlwJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGFycm93LCBfbWlkZGxld2FyZURhdGEkZmxpcDtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIGluaXRpYWxQbGFjZW1lbnQsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSB0cnVlLFxuICAgICAgICBmYWxsYmFja1BsYWNlbWVudHM6IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyxcbiAgICAgICAgZmFsbGJhY2tTdHJhdGVneSA9ICdiZXN0Rml0JyxcbiAgICAgICAgZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiA9ICdub25lJyxcbiAgICAgICAgZmxpcEFsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcblxuICAgICAgLy8gSWYgYSByZXNldCBieSB0aGUgYXJyb3cgd2FzIGNhdXNlZCBkdWUgdG8gYW4gYWxpZ25tZW50IG9mZnNldCBiZWluZ1xuICAgICAgLy8gYWRkZWQsIHdlIHNob3VsZCBza2lwIGFueSBsb2dpYyBub3cgc2luY2UgYGZsaXAoKWAgaGFzIGFscmVhZHkgZG9uZSBpdHNcbiAgICAgIC8vIHdvcmsuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzI1NDkjaXNzdWVjb21tZW50LTE3MTk2MDE2NDNcbiAgICAgIGlmICgoX21pZGRsZXdhcmVEYXRhJGFycm93ID0gbWlkZGxld2FyZURhdGEuYXJyb3cpICE9IG51bGwgJiYgX21pZGRsZXdhcmVEYXRhJGFycm93LmFsaWdubWVudE9mZnNldCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaW5pdGlhbFNpZGVBeGlzID0gZ2V0U2lkZUF4aXMoaW5pdGlhbFBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpc0Jhc2VQbGFjZW1lbnQgPSBnZXRTaWRlKGluaXRpYWxQbGFjZW1lbnQpID09PSBpbml0aWFsUGxhY2VtZW50O1xuICAgICAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICAgICAgY29uc3QgZmFsbGJhY2tQbGFjZW1lbnRzID0gc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8IChpc0Jhc2VQbGFjZW1lbnQgfHwgIWZsaXBBbGlnbm1lbnQgPyBbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQoaW5pdGlhbFBsYWNlbWVudCldIDogZ2V0RXhwYW5kZWRQbGFjZW1lbnRzKGluaXRpYWxQbGFjZW1lbnQpKTtcbiAgICAgIGNvbnN0IGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gPSBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uICE9PSAnbm9uZSc7XG4gICAgICBpZiAoIXNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyAmJiBoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uKSB7XG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50cy5wdXNoKC4uLmdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiwgcnRsKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzID0gW2luaXRpYWxQbGFjZW1lbnQsIC4uLmZhbGxiYWNrUGxhY2VtZW50c107XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dzID0gW107XG4gICAgICBsZXQgb3ZlcmZsb3dzRGF0YSA9ICgoX21pZGRsZXdhcmVEYXRhJGZsaXAgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAub3ZlcmZsb3dzKSB8fCBbXTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIG92ZXJmbG93cy5wdXNoKG92ZXJmbG93W3NpZGVdKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICBjb25zdCBzaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKHBsYWNlbWVudCwgcmVjdHMsIHJ0bCk7XG4gICAgICAgIG92ZXJmbG93cy5wdXNoKG92ZXJmbG93W3NpZGVzWzBdXSwgb3ZlcmZsb3dbc2lkZXNbMV1dKTtcbiAgICAgIH1cbiAgICAgIG92ZXJmbG93c0RhdGEgPSBbLi4ub3ZlcmZsb3dzRGF0YSwge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG92ZXJmbG93c1xuICAgICAgfV07XG5cbiAgICAgIC8vIE9uZSBvciBtb3JlIHNpZGVzIGlzIG92ZXJmbG93aW5nLlxuICAgICAgaWYgKCFvdmVyZmxvd3MuZXZlcnkoc2lkZSA9PiBzaWRlIDw9IDApKSB7XG4gICAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkZmxpcDIsIF9vdmVyZmxvd3NEYXRhJGZpbHRlcjtcbiAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gKCgoX21pZGRsZXdhcmVEYXRhJGZsaXAyID0gbWlkZGxld2FyZURhdGEuZmxpcCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRmbGlwMi5pbmRleCkgfHwgMCkgKyAxO1xuICAgICAgICBjb25zdCBuZXh0UGxhY2VtZW50ID0gcGxhY2VtZW50c1tuZXh0SW5kZXhdO1xuICAgICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICAgIC8vIFRyeSBuZXh0IHBsYWNlbWVudCBhbmQgcmUtcnVuIHRoZSBsaWZlY3ljbGUuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgaW5kZXg6IG5leHRJbmRleCxcbiAgICAgICAgICAgICAgb3ZlcmZsb3dzOiBvdmVyZmxvd3NEYXRhXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiBuZXh0UGxhY2VtZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcnN0LCBmaW5kIHRoZSBjYW5kaWRhdGVzIHRoYXQgZml0IG9uIHRoZSBtYWluQXhpcyBzaWRlIG9mIG92ZXJmbG93LFxuICAgICAgICAvLyB0aGVuIGZpbmQgdGhlIHBsYWNlbWVudCB0aGF0IGZpdHMgdGhlIGJlc3Qgb24gdGhlIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGxldCByZXNldFBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IGQub3ZlcmZsb3dzWzBdIDw9IDApLnNvcnQoKGEsIGIpID0+IGEub3ZlcmZsb3dzWzFdIC0gYi5vdmVyZmxvd3NbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyLnBsYWNlbWVudDtcblxuICAgICAgICAvLyBPdGhlcndpc2UgZmFsbGJhY2suXG4gICAgICAgIGlmICghcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZhbGxiYWNrU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jlc3RGaXQnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIF9vdmVyZmxvd3NEYXRhJGZpbHRlcjI7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlcjIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTaWRlQXhpcyA9IGdldFNpZGVBeGlzKGQucGxhY2VtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTaWRlQXhpcyA9PT0gaW5pdGlhbFNpZGVBeGlzIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGJpYXMgdG8gdGhlIGB5YCBzaWRlIGF4aXMgZHVlIHRvIGhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhZGluZyBkaXJlY3Rpb25zIGZhdm9yaW5nIGdyZWF0ZXIgd2lkdGguXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTaWRlQXhpcyA9PT0gJ3knO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSkubWFwKGQgPT4gW2QucGxhY2VtZW50LCBkLm92ZXJmbG93cy5maWx0ZXIob3ZlcmZsb3cgPT4gb3ZlcmZsb3cgPiAwKS5yZWR1Y2UoKGFjYywgb3ZlcmZsb3cpID0+IGFjYyArIG92ZXJmbG93LCAwKV0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlcjJbMF07XG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpbml0aWFsUGxhY2VtZW50JzpcbiAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBpbml0aWFsUGxhY2VtZW50O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBsYWNlbWVudCAhPT0gcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQsXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoXG4gIH07XG59XG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIHNpZGVzLnNvbWUoc2lkZSA9PiBvdmVyZmxvd1tzaWRlXSA+PSAwKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdoaWRlJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0cmF0ZWd5ID0gJ3JlZmVyZW5jZUhpZGRlbicsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgICAgY2FzZSAncmVmZXJlbmNlSGlkZGVuJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW5PZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbjogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdlc2NhcGVkJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5mbG9hdGluZyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZE9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgZXNjYXBlZDogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3RzKSB7XG4gIGNvbnN0IG1pblggPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gIGNvbnN0IG1pblkgPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC50b3ApKTtcbiAgY29uc3QgbWF4WCA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gIGNvbnN0IG1heFkgPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5ib3R0b20pKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBtaW5YLFxuICAgIHk6IG1pblksXG4gICAgd2lkdGg6IG1heFggLSBtaW5YLFxuICAgIGhlaWdodDogbWF4WSAtIG1pbllcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFJlY3RzQnlMaW5lKHJlY3RzKSB7XG4gIGNvbnN0IHNvcnRlZFJlY3RzID0gcmVjdHMuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiBhLnkgLSBiLnkpO1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgbGV0IHByZXZSZWN0ID0gbnVsbDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRSZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJlY3QgPSBzb3J0ZWRSZWN0c1tpXTtcbiAgICBpZiAoIXByZXZSZWN0IHx8IHJlY3QueSAtIHByZXZSZWN0LnkgPiBwcmV2UmVjdC5oZWlnaHQgLyAyKSB7XG4gICAgICBncm91cHMucHVzaChbcmVjdF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDFdLnB1c2gocmVjdCk7XG4gICAgfVxuICAgIHByZXZSZWN0ID0gcmVjdDtcbiAgfVxuICByZXR1cm4gZ3JvdXBzLm1hcChyZWN0ID0+IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KHJlY3QpKSk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGltcHJvdmVkIHBvc2l0aW9uaW5nIGZvciBpbmxpbmUgcmVmZXJlbmNlIGVsZW1lbnRzIHRoYXQgY2FuIHNwYW5cbiAqIG92ZXIgbXVsdGlwbGUgbGluZXMsIHN1Y2ggYXMgaHlwZXJsaW5rcyBvciByYW5nZSBzZWxlY3Rpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2lubGluZVxuICovXG5jb25zdCBpbmxpbmUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2lubGluZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICAvLyBBIE1vdXNlRXZlbnQncyBjbGllbnR7WCxZfSBjb29yZHMgY2FuIGJlIHVwIHRvIDIgcGl4ZWxzIG9mZiBhXG4gICAgICAvLyBDbGllbnRSZWN0J3MgYm91bmRzLCBkZXNwaXRlIHRoZSBldmVudCBsaXN0ZW5lciBiZWluZyB0cmlnZ2VyZWQuIEFcbiAgICAgIC8vIHBhZGRpbmcgb2YgMiBzZWVtcyB0byBoYW5kbGUgdGhpcyBpc3N1ZS5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGFkZGluZyA9IDIsXG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBuYXRpdmVDbGllbnRSZWN0cyA9IEFycmF5LmZyb20oKGF3YWl0IChwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMoZWxlbWVudHMucmVmZXJlbmNlKSkpIHx8IFtdKTtcbiAgICAgIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0UmVjdHNCeUxpbmUobmF0aXZlQ2xpZW50UmVjdHMpO1xuICAgICAgY29uc3QgZmFsbGJhY2sgPSByZWN0VG9DbGllbnRSZWN0KGdldEJvdW5kaW5nUmVjdChuYXRpdmVDbGllbnRSZWN0cykpO1xuICAgICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgICBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVjdHMgYW5kIHRoZXkgYXJlIGRpc2pvaW5lZC5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA9PT0gMiAmJiBjbGllbnRSZWN0c1swXS5sZWZ0ID4gY2xpZW50UmVjdHNbMV0ucmlnaHQgJiYgeCAhPSBudWxsICYmIHkgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJlY3QgaW4gd2hpY2ggdGhlIHBvaW50IGlzIGZ1bGx5IGluc2lkZS5cbiAgICAgICAgICByZXR1cm4gY2xpZW50UmVjdHMuZmluZChyZWN0ID0+IHggPiByZWN0LmxlZnQgLSBwYWRkaW5nT2JqZWN0LmxlZnQgJiYgeCA8IHJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0ICYmIHkgPiByZWN0LnRvcCAtIHBhZGRpbmdPYmplY3QudG9wICYmIHkgPCByZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSB8fCBmYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZXJlIGFyZSAyIG9yIG1vcmUgY29ubmVjdGVkIHJlY3RzLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICBpZiAoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RSZWN0ID0gY2xpZW50UmVjdHNbY2xpZW50UmVjdHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBpc1RvcCA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ3RvcCc7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSBmaXJzdFJlY3QudG9wO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gbGFzdFJlY3QuYm90dG9tO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGlzVG9wID8gZmlyc3RSZWN0LmxlZnQgOiBsYXN0UmVjdC5sZWZ0O1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBpc1RvcCA/IGZpcnN0UmVjdC5yaWdodCA6IGxhc3RSZWN0LnJpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXNMZWZ0U2lkZSA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ2xlZnQnO1xuICAgICAgICAgIGNvbnN0IG1heFJpZ2h0ID0gbWF4KC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgICAgICAgICBjb25zdCBtaW5MZWZ0ID0gbWluKC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xuICAgICAgICAgIGNvbnN0IG1lYXN1cmVSZWN0cyA9IGNsaWVudFJlY3RzLmZpbHRlcihyZWN0ID0+IGlzTGVmdFNpZGUgPyByZWN0LmxlZnQgPT09IG1pbkxlZnQgOiByZWN0LnJpZ2h0ID09PSBtYXhSaWdodCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gbWVhc3VyZVJlY3RzWzBdLnRvcDtcbiAgICAgICAgICBjb25zdCBib3R0b20gPSBtZWFzdXJlUmVjdHNbbWVhc3VyZVJlY3RzLmxlbmd0aCAtIDFdLmJvdHRvbTtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gbWluTGVmdDtcbiAgICAgICAgICBjb25zdCByaWdodCA9IG1heFJpZ2h0O1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNldFJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgcmVmZXJlbmNlOiB7XG4gICAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gICAgICAgIH0sXG4gICAgICAgIGZsb2F0aW5nOiBlbGVtZW50cy5mbG9hdGluZyxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlY3RzLnJlZmVyZW5jZS54ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS54IHx8IHJlY3RzLnJlZmVyZW5jZS55ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS55IHx8IHJlY3RzLnJlZmVyZW5jZS53aWR0aCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2Uud2lkdGggfHwgcmVjdHMucmVmZXJlbmNlLmhlaWdodCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiByZXNldFJlY3RzXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8vIEZvciB0eXBlIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5LCB0aGUgYE9mZnNldE9wdGlvbnNgIHR5cGUgd2FzIGFsc29cbi8vIERlcml2YWJsZS5cblxuYXN5bmMgZnVuY3Rpb24gY29udmVydFZhbHVlVG9Db29yZHMoc3RhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCxcbiAgICBwbGF0Zm9ybSxcbiAgICBlbGVtZW50c1xuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKTtcbiAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGNvbnN0IGlzVmVydGljYWwgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneSc7XG4gIGNvbnN0IG1haW5BeGlzTXVsdGkgPSBbJ2xlZnQnLCAndG9wJ10uaW5jbHVkZXMoc2lkZSkgPyAtMSA6IDE7XG4gIGNvbnN0IGNyb3NzQXhpc011bHRpID0gcnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDE7XG4gIGNvbnN0IHJhd1ZhbHVlID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgbGV0IHtcbiAgICBtYWluQXhpcyxcbiAgICBjcm9zc0F4aXMsXG4gICAgYWxpZ25tZW50QXhpc1xuICB9ID0gdHlwZW9mIHJhd1ZhbHVlID09PSAnbnVtYmVyJyA/IHtcbiAgICBtYWluQXhpczogcmF3VmFsdWUsXG4gICAgY3Jvc3NBeGlzOiAwLFxuICAgIGFsaWdubWVudEF4aXM6IG51bGxcbiAgfSA6IHtcbiAgICBtYWluQXhpczogcmF3VmFsdWUubWFpbkF4aXMgfHwgMCxcbiAgICBjcm9zc0F4aXM6IHJhd1ZhbHVlLmNyb3NzQXhpcyB8fCAwLFxuICAgIGFsaWdubWVudEF4aXM6IHJhd1ZhbHVlLmFsaWdubWVudEF4aXNcbiAgfTtcbiAgaWYgKGFsaWdubWVudCAmJiB0eXBlb2YgYWxpZ25tZW50QXhpcyA9PT0gJ251bWJlcicpIHtcbiAgICBjcm9zc0F4aXMgPSBhbGlnbm1lbnQgPT09ICdlbmQnID8gYWxpZ25tZW50QXhpcyAqIC0xIDogYWxpZ25tZW50QXhpcztcbiAgfVxuICByZXR1cm4gaXNWZXJ0aWNhbCA/IHtcbiAgICB4OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aSxcbiAgICB5OiBtYWluQXhpcyAqIG1haW5BeGlzTXVsdGlcbiAgfSA6IHtcbiAgICB4OiBtYWluQXhpcyAqIG1haW5BeGlzTXVsdGksXG4gICAgeTogY3Jvc3NBeGlzICogY3Jvc3NBeGlzTXVsdGlcbiAgfTtcbn1cblxuLyoqXG4gKiBNb2RpZmllcyB0aGUgcGxhY2VtZW50IGJ5IHRyYW5zbGF0aW5nIHRoZSBmbG9hdGluZyBlbGVtZW50IGFsb25nIHRoZVxuICogc3BlY2lmaWVkIGF4ZXMuXG4gKiBBIG51bWJlciAoc2hvcnRoYW5kIGZvciBgbWFpbkF4aXNgIG9yIGRpc3RhbmNlKSwgb3IgYW4gYXhlcyBjb25maWd1cmF0aW9uXG4gKiBvYmplY3QgbWF5IGJlIHBhc3NlZC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9vZmZzZXRcbiAqL1xuY29uc3Qgb2Zmc2V0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSAwO1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ29mZnNldCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJGFycm93O1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCBkaWZmQ29vcmRzID0gYXdhaXQgY29udmVydFZhbHVlVG9Db29yZHMoc3RhdGUsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBJZiB0aGUgcGxhY2VtZW50IGlzIHRoZSBzYW1lIGFuZCB0aGUgYXJyb3cgY2F1c2VkIGFuIGFsaWdubWVudCBvZmZzZXRcbiAgICAgIC8vIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgdGhlIHBvc2l0aW9uaW5nIGNvb3JkaW5hdGVzLlxuICAgICAgaWYgKHBsYWNlbWVudCA9PT0gKChfbWlkZGxld2FyZURhdGEkb2Zmc2UgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UucGxhY2VtZW50KSAmJiAoX21pZGRsZXdhcmVEYXRhJGFycm93ID0gbWlkZGxld2FyZURhdGEuYXJyb3cpICE9IG51bGwgJiYgX21pZGRsZXdhcmVEYXRhJGFycm93LmFsaWdubWVudE9mZnNldCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiB4ICsgZGlmZkNvb3Jkcy54LFxuICAgICAgICB5OiB5ICsgZGlmZkNvb3Jkcy55LFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgLi4uZGlmZkNvb3JkcyxcbiAgICAgICAgICBwbGFjZW1lbnRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBzaGlmdGluZyBpdCBpbiBvcmRlciB0b1xuICoga2VlcCBpdCBpbiB2aWV3IHdoZW4gaXQgd2lsbCBvdmVyZmxvdyB0aGUgY2xpcHBpbmcgYm91bmRhcnkuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvc2hpZnRcbiAqL1xuY29uc3Qgc2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NoaWZ0JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudFxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSBmYWxzZSxcbiAgICAgICAgbGltaXRlciA9IHtcbiAgICAgICAgICBmbjogX3JlZiA9PiB7XG4gICAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9ID0gX3JlZjtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0U2lkZUF4aXMoZ2V0U2lkZShwbGFjZW1lbnQpKTtcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIGNvbnN0IG1pblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgICAgIGNvbnN0IG1heFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgICAgICBjb25zdCBtaW4gPSBtYWluQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XG4gICAgICAgIGNvbnN0IG1heCA9IG1haW5BeGlzQ29vcmQgLSBvdmVyZmxvd1ttYXhTaWRlXTtcbiAgICAgICAgbWFpbkF4aXNDb29yZCA9IGNsYW1wKG1pbiwgbWFpbkF4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICBjb25zdCBtaW5TaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IGNyb3NzQXhpcyA9PT0gJ3knID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgICAgICBjb25zdCBtaW4gPSBjcm9zc0F4aXNDb29yZCArIG92ZXJmbG93W21pblNpZGVdO1xuICAgICAgICBjb25zdCBtYXggPSBjcm9zc0F4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBjcm9zc0F4aXNDb29yZCA9IGNsYW1wKG1pbiwgY3Jvc3NBeGlzQ29vcmQsIG1heCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsaW1pdGVkQ29vcmRzID0gbGltaXRlci5mbih7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBbbWFpbkF4aXNdOiBtYWluQXhpc0Nvb3JkLFxuICAgICAgICBbY3Jvc3NBeGlzXTogY3Jvc3NBeGlzQ29vcmRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubGltaXRlZENvb3JkcyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHg6IGxpbWl0ZWRDb29yZHMueCAtIHgsXG4gICAgICAgICAgeTogbGltaXRlZENvb3Jkcy55IC0geSxcbiAgICAgICAgICBlbmFibGVkOiB7XG4gICAgICAgICAgICBbbWFpbkF4aXNdOiBjaGVja01haW5BeGlzLFxuICAgICAgICAgICAgW2Nyb3NzQXhpc106IGNoZWNrQ3Jvc3NBeGlzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG4vKipcbiAqIEJ1aWx0LWluIGBsaW1pdGVyYCB0aGF0IHdpbGwgc3RvcCBgc2hpZnQoKWAgYXQgYSBjZXJ0YWluIHBvaW50LlxuICovXG5jb25zdCBsaW1pdFNoaWZ0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG9wdGlvbnMsXG4gICAgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGFcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgb2Zmc2V0ID0gMCxcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gdHJ1ZVxuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNyb3NzQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBtYWluQXhpcyA9IGdldE9wcG9zaXRlQXhpcyhjcm9zc0F4aXMpO1xuICAgICAgbGV0IG1haW5BeGlzQ29vcmQgPSBjb29yZHNbbWFpbkF4aXNdO1xuICAgICAgbGV0IGNyb3NzQXhpc0Nvb3JkID0gY29vcmRzW2Nyb3NzQXhpc107XG4gICAgICBjb25zdCByYXdPZmZzZXQgPSBldmFsdWF0ZShvZmZzZXQsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvbXB1dGVkT2Zmc2V0ID0gdHlwZW9mIHJhd09mZnNldCA9PT0gJ251bWJlcicgPyB7XG4gICAgICAgIG1haW5BeGlzOiByYXdPZmZzZXQsXG4gICAgICAgIGNyb3NzQXhpczogMFxuICAgICAgfSA6IHtcbiAgICAgICAgbWFpbkF4aXM6IDAsXG4gICAgICAgIGNyb3NzQXhpczogMCxcbiAgICAgICAgLi4ucmF3T2Zmc2V0XG4gICAgICB9O1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICAgICAgY29uc3QgbGltaXRNaW4gPSByZWN0cy5yZWZlcmVuY2VbbWFpbkF4aXNdIC0gcmVjdHMuZmxvYXRpbmdbbGVuXSArIGNvbXB1dGVkT2Zmc2V0Lm1haW5BeGlzO1xuICAgICAgICBjb25zdCBsaW1pdE1heCA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gKyByZWN0cy5yZWZlcmVuY2VbbGVuXSAtIGNvbXB1dGVkT2Zmc2V0Lm1haW5BeGlzO1xuICAgICAgICBpZiAobWFpbkF4aXNDb29yZCA8IGxpbWl0TWluKSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWluO1xuICAgICAgICB9IGVsc2UgaWYgKG1haW5BeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIG1haW5BeGlzQ29vcmQgPSBsaW1pdE1heDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkb2Zmc2UsIF9taWRkbGV3YXJlRGF0YSRvZmZzZTI7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgICAgIGNvbnN0IGlzT3JpZ2luU2lkZSA9IFsndG9wJywgJ2xlZnQnXS5pbmNsdWRlcyhnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVtjcm9zc0F4aXNdIC0gcmVjdHMuZmxvYXRpbmdbbGVuXSArIChpc09yaWdpblNpZGUgPyAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZVtjcm9zc0F4aXNdKSB8fCAwIDogMCkgKyAoaXNPcmlnaW5TaWRlID8gMCA6IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gKyByZWN0cy5yZWZlcmVuY2VbbGVuXSArIChpc09yaWdpblNpZGUgPyAwIDogKChfbWlkZGxld2FyZURhdGEkb2Zmc2UyID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlMltjcm9zc0F4aXNdKSB8fCAwKSAtIChpc09yaWdpblNpZGUgPyBjb21wdXRlZE9mZnNldC5jcm9zc0F4aXMgOiAwKTtcbiAgICAgICAgaWYgKGNyb3NzQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBjcm9zc0F4aXNDb29yZCA9IGxpbWl0TWluO1xuICAgICAgICB9IGVsc2UgaWYgKGNyb3NzQXhpc0Nvb3JkID4gbGltaXRNYXgpIHtcbiAgICAgICAgICBjcm9zc0F4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbbWFpbkF4aXNdOiBtYWluQXhpc0Nvb3JkLFxuICAgICAgICBbY3Jvc3NBeGlzXTogY3Jvc3NBeGlzQ29vcmRcbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRoYXQgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgXHUyMDE0XG4gKiBmb3IgaW5zdGFuY2UsIHByZXZlbnQgaXQgZnJvbSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgYm91bmRhcnkgb3IgbWF0Y2ggdGhlXG4gKiB3aWR0aCBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvc2l6ZVxuICovXG5jb25zdCBzaXplID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzaXplJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX3N0YXRlJG1pZGRsZXdhcmVEYXRhLCBfc3RhdGUkbWlkZGxld2FyZURhdGEyO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYXBwbHkgPSAoKSA9PiB7fSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzWUF4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneSc7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgIH0gPSByZWN0cy5mbG9hdGluZztcbiAgICAgIGxldCBoZWlnaHRTaWRlO1xuICAgICAgbGV0IHdpZHRoU2lkZTtcbiAgICAgIGlmIChzaWRlID09PSAndG9wJyB8fCBzaWRlID09PSAnYm90dG9tJykge1xuICAgICAgICBoZWlnaHRTaWRlID0gc2lkZTtcbiAgICAgICAgd2lkdGhTaWRlID0gYWxpZ25tZW50ID09PSAoKGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKSkgPyAnc3RhcnQnIDogJ2VuZCcpID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpZHRoU2lkZSA9IHNpZGU7XG4gICAgICAgIGhlaWdodFNpZGUgPSBhbGlnbm1lbnQgPT09ICdlbmQnID8gJ3RvcCcgOiAnYm90dG9tJztcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1heGltdW1DbGlwcGluZ0hlaWdodCA9IGhlaWdodCAtIG92ZXJmbG93LnRvcCAtIG92ZXJmbG93LmJvdHRvbTtcbiAgICAgIGNvbnN0IG1heGltdW1DbGlwcGluZ1dpZHRoID0gd2lkdGggLSBvdmVyZmxvdy5sZWZ0IC0gb3ZlcmZsb3cucmlnaHQ7XG4gICAgICBjb25zdCBvdmVyZmxvd0F2YWlsYWJsZUhlaWdodCA9IG1pbihoZWlnaHQgLSBvdmVyZmxvd1toZWlnaHRTaWRlXSwgbWF4aW11bUNsaXBwaW5nSGVpZ2h0KTtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlV2lkdGggPSBtaW4od2lkdGggLSBvdmVyZmxvd1t3aWR0aFNpZGVdLCBtYXhpbXVtQ2xpcHBpbmdXaWR0aCk7XG4gICAgICBjb25zdCBub1NoaWZ0ID0gIXN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0O1xuICAgICAgbGV0IGF2YWlsYWJsZUhlaWdodCA9IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0O1xuICAgICAgbGV0IGF2YWlsYWJsZVdpZHRoID0gb3ZlcmZsb3dBdmFpbGFibGVXaWR0aDtcbiAgICAgIGlmICgoX3N0YXRlJG1pZGRsZXdhcmVEYXRhID0gc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQpICE9IG51bGwgJiYgX3N0YXRlJG1pZGRsZXdhcmVEYXRhLmVuYWJsZWQueCkge1xuICAgICAgICBhdmFpbGFibGVXaWR0aCA9IG1heGltdW1DbGlwcGluZ1dpZHRoO1xuICAgICAgfVxuICAgICAgaWYgKChfc3RhdGUkbWlkZGxld2FyZURhdGEyID0gc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQpICE9IG51bGwgJiYgX3N0YXRlJG1pZGRsZXdhcmVEYXRhMi5lbmFibGVkLnkpIHtcbiAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gbWF4aW11bUNsaXBwaW5nSGVpZ2h0O1xuICAgICAgfVxuICAgICAgaWYgKG5vU2hpZnQgJiYgIWFsaWdubWVudCkge1xuICAgICAgICBjb25zdCB4TWluID0gbWF4KG92ZXJmbG93LmxlZnQsIDApO1xuICAgICAgICBjb25zdCB4TWF4ID0gbWF4KG92ZXJmbG93LnJpZ2h0LCAwKTtcbiAgICAgICAgY29uc3QgeU1pbiA9IG1heChvdmVyZmxvdy50b3AsIDApO1xuICAgICAgICBjb25zdCB5TWF4ID0gbWF4KG92ZXJmbG93LmJvdHRvbSwgMCk7XG4gICAgICAgIGlmIChpc1lBeGlzKSB7XG4gICAgICAgICAgYXZhaWxhYmxlV2lkdGggPSB3aWR0aCAtIDIgKiAoeE1pbiAhPT0gMCB8fCB4TWF4ICE9PSAwID8geE1pbiArIHhNYXggOiBtYXgob3ZlcmZsb3cubGVmdCwgb3ZlcmZsb3cucmlnaHQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBoZWlnaHQgLSAyICogKHlNaW4gIT09IDAgfHwgeU1heCAhPT0gMCA/IHlNaW4gKyB5TWF4IDogbWF4KG92ZXJmbG93LnRvcCwgb3ZlcmZsb3cuYm90dG9tKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IGFwcGx5KHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGF2YWlsYWJsZVdpZHRoLFxuICAgICAgICBhdmFpbGFibGVIZWlnaHRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbmV4dERpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnRzLmZsb2F0aW5nKTtcbiAgICAgIGlmICh3aWR0aCAhPT0gbmV4dERpbWVuc2lvbnMud2lkdGggfHwgaGVpZ2h0ICE9PSBuZXh0RGltZW5zaW9ucy5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcmVjdHM6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IHsgYXJyb3csIGF1dG9QbGFjZW1lbnQsIGNvbXB1dGVQb3NpdGlvbiwgZGV0ZWN0T3ZlcmZsb3csIGZsaXAsIGhpZGUsIGlubGluZSwgbGltaXRTaGlmdCwgb2Zmc2V0LCBzaGlmdCwgc2l6ZSB9O1xuIiwgImZ1bmN0aW9uIGhhc1dpbmRvdygpIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZU5hbWUobm9kZSkge1xuICBpZiAoaXNOb2RlKG5vZGUpKSB7XG4gICAgcmV0dXJuIChub2RlLm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIC8vIE1vY2tlZCBub2RlcyBpbiB0ZXN0aW5nIGVudmlyb25tZW50cyBtYXkgbm90IGJlIGluc3RhbmNlcyBvZiBOb2RlLiBCeVxuICAvLyByZXR1cm5pbmcgYCNkb2N1bWVudGAgYW4gaW5maW5pdGUgbG9vcCB3b24ndCBvY2N1ci5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8yMzE3XG4gIHJldHVybiAnI2RvY3VtZW50Jztcbn1cbmZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50O1xuICByZXR1cm4gKG5vZGUgPT0gbnVsbCB8fCAoX25vZGUkb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9ub2RlJG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIHx8IHdpbmRvdztcbn1cbmZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChub2RlKSB7XG4gIHZhciBfcmVmO1xuICByZXR1cm4gKF9yZWYgPSAoaXNOb2RlKG5vZGUpID8gbm9kZS5vd25lckRvY3VtZW50IDogbm9kZS5kb2N1bWVudCkgfHwgd2luZG93LmRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX3JlZi5kb2N1bWVudEVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc05vZGUodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOb2RlIHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5Ob2RlO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuSFRNTEVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3QodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSB8fCB0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU2hhZG93Um9vdCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuU2hhZG93Um9vdDtcbn1cbmZ1bmN0aW9uIGlzT3ZlcmZsb3dFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3Qge1xuICAgIG92ZXJmbG93LFxuICAgIG92ZXJmbG93WCxcbiAgICBvdmVyZmxvd1ksXG4gICAgZGlzcGxheVxuICB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbnxjbGlwLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKSAmJiAhWydpbmxpbmUnLCAnY29udGVudHMnXS5pbmNsdWRlcyhkaXNwbGF5KTtcbn1cbmZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmNsdWRlcyhnZXROb2RlTmFtZShlbGVtZW50KSk7XG59XG5mdW5jdGlvbiBpc1RvcExheWVyKGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsnOnBvcG92ZXItb3BlbicsICc6bW9kYWwnXS5zb21lKHNlbGVjdG9yID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBpc0NvbnRhaW5pbmdCbG9jayhlbGVtZW50T3JDc3MpIHtcbiAgY29uc3Qgd2Via2l0ID0gaXNXZWJLaXQoKTtcbiAgY29uc3QgY3NzID0gaXNFbGVtZW50KGVsZW1lbnRPckNzcykgPyBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnRPckNzcykgOiBlbGVtZW50T3JDc3M7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgcmV0dXJuIGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCAoY3NzLmNvbnRhaW5lclR5cGUgPyBjc3MuY29udGFpbmVyVHlwZSAhPT0gJ25vcm1hbCcgOiBmYWxzZSkgfHwgIXdlYmtpdCAmJiAoY3NzLmJhY2tkcm9wRmlsdGVyID8gY3NzLmJhY2tkcm9wRmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgIXdlYmtpdCAmJiAoY3NzLmZpbHRlciA/IGNzcy5maWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZScsICdmaWx0ZXInXS5zb21lKHZhbHVlID0+IChjc3Mud2lsbENoYW5nZSB8fCAnJykuaW5jbHVkZXModmFsdWUpKSB8fCBbJ3BhaW50JywgJ2xheW91dCcsICdzdHJpY3QnLCAnY29udGVudCddLnNvbWUodmFsdWUgPT4gKGNzcy5jb250YWluIHx8ICcnKS5pbmNsdWRlcyh2YWx1ZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgbGV0IGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSBpZiAoaXNUb3BMYXllcihjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gaXNXZWJLaXQoKSB7XG4gIGlmICh0eXBlb2YgQ1NTID09PSAndW5kZWZpbmVkJyB8fCAhQ1NTLnN1cHBvcnRzKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBDU1Muc3VwcG9ydHMoJy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyJywgJ25vbmUnKTtcbn1cbmZ1bmN0aW9uIGlzTGFzdFRyYXZlcnNhYmxlTm9kZShub2RlKSB7XG4gIHJldHVybiBbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmNsdWRlcyhnZXROb2RlTmFtZShub2RlKSk7XG59XG5mdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KSB7XG4gIGlmIChpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbFgsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICBjb25zdCBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnQod2luKTtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgZnJhbWVFbGVtZW50ICYmIHRyYXZlcnNlSWZyYW1lcyA/IGdldE92ZXJmbG93QW5jZXN0b3JzKGZyYW1lRWxlbWVudCkgOiBbXSk7XG4gIH1cbiAgcmV0dXJuIGxpc3QuY29uY2F0KHNjcm9sbGFibGVBbmNlc3RvciwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoc2Nyb2xsYWJsZUFuY2VzdG9yLCBbXSwgdHJhdmVyc2VJZnJhbWVzKSk7XG59XG5mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnQod2luKSB7XG4gIHJldHVybiB3aW4ucGFyZW50ICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih3aW4ucGFyZW50KSA/IHdpbi5mcmFtZUVsZW1lbnQgOiBudWxsO1xufVxuXG5leHBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBnZXRDb250YWluaW5nQmxvY2ssIGdldERvY3VtZW50RWxlbWVudCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciwgZ2V0Tm9kZU5hbWUsIGdldE5vZGVTY3JvbGwsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBnZXRXaW5kb3csIGlzQ29udGFpbmluZ0Jsb2NrLCBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNOb2RlLCBpc092ZXJmbG93RWxlbWVudCwgaXNTaGFkb3dSb290LCBpc1RhYmxlRWxlbWVudCwgaXNUb3BMYXllciwgaXNXZWJLaXQgfTtcbiIsICJpbXBvcnQgeyByZWN0VG9DbGllbnRSZWN0LCBkZXRlY3RPdmVyZmxvdyBhcyBkZXRlY3RPdmVyZmxvdyQxLCBvZmZzZXQgYXMgb2Zmc2V0JDEsIGF1dG9QbGFjZW1lbnQgYXMgYXV0b1BsYWNlbWVudCQxLCBzaGlmdCBhcyBzaGlmdCQxLCBmbGlwIGFzIGZsaXAkMSwgc2l6ZSBhcyBzaXplJDEsIGhpZGUgYXMgaGlkZSQxLCBhcnJvdyBhcyBhcnJvdyQxLCBpbmxpbmUgYXMgaW5saW5lJDEsIGxpbWl0U2hpZnQgYXMgbGltaXRTaGlmdCQxLCBjb21wdXRlUG9zaXRpb24gYXMgY29tcHV0ZVBvc2l0aW9uJDEgfSBmcm9tICdAZmxvYXRpbmctdWkvY29yZSc7XG5pbXBvcnQgeyByb3VuZCwgY3JlYXRlQ29vcmRzLCBtYXgsIG1pbiwgZmxvb3IgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0Q29tcHV0ZWRTdHlsZSwgaXNIVE1MRWxlbWVudCwgaXNFbGVtZW50LCBnZXRXaW5kb3csIGlzV2ViS2l0LCBnZXRGcmFtZUVsZW1lbnQsIGdldE5vZGVTY3JvbGwsIGdldERvY3VtZW50RWxlbWVudCwgaXNUb3BMYXllciwgZ2V0Tm9kZU5hbWUsIGlzT3ZlcmZsb3dFbGVtZW50LCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc0NvbnRhaW5pbmdCbG9jaywgaXNUYWJsZUVsZW1lbnQsIGdldENvbnRhaW5pbmdCbG9jayB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuZXhwb3J0IHsgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcblxuZnVuY3Rpb24gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIC8vIEluIHRlc3RpbmcgZW52aXJvbm1lbnRzLCB0aGUgYHdpZHRoYCBhbmQgYGhlaWdodGAgcHJvcGVydGllcyBhcmUgZW1wdHlcbiAgLy8gc3RyaW5ncyBmb3IgU1ZHIGVsZW1lbnRzLCByZXR1cm5pbmcgTmFOLiBGYWxsYmFjayB0byBgMGAgaW4gdGhpcyBjYXNlLlxuICBsZXQgd2lkdGggPSBwYXJzZUZsb2F0KGNzcy53aWR0aCkgfHwgMDtcbiAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoY3NzLmhlaWdodCkgfHwgMDtcbiAgY29uc3QgaGFzT2Zmc2V0ID0gaXNIVE1MRWxlbWVudChlbGVtZW50KTtcbiAgY29uc3Qgb2Zmc2V0V2lkdGggPSBoYXNPZmZzZXQgPyBlbGVtZW50Lm9mZnNldFdpZHRoIDogd2lkdGg7XG4gIGNvbnN0IG9mZnNldEhlaWdodCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IDogaGVpZ2h0O1xuICBjb25zdCBzaG91bGRGYWxsYmFjayA9IHJvdW5kKHdpZHRoKSAhPT0gb2Zmc2V0V2lkdGggfHwgcm91bmQoaGVpZ2h0KSAhPT0gb2Zmc2V0SGVpZ2h0O1xuICBpZiAoc2hvdWxkRmFsbGJhY2spIHtcbiAgICB3aWR0aCA9IG9mZnNldFdpZHRoO1xuICAgIGhlaWdodCA9IG9mZnNldEhlaWdodDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICAkOiBzaG91bGRGYWxsYmFja1xuICB9O1xufVxuXG5mdW5jdGlvbiB1bndyYXBFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuICFpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50LmNvbnRleHRFbGVtZW50IDogZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZ2V0U2NhbGUoZWxlbWVudCkge1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGRvbUVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNvb3JkcygxKTtcbiAgfVxuICBjb25zdCByZWN0ID0gZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3Qge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICAkXG4gIH0gPSBnZXRDc3NEaW1lbnNpb25zKGRvbUVsZW1lbnQpO1xuICBsZXQgeCA9ICgkID8gcm91bmQocmVjdC53aWR0aCkgOiByZWN0LndpZHRoKSAvIHdpZHRoO1xuICBsZXQgeSA9ICgkID8gcm91bmQocmVjdC5oZWlnaHQpIDogcmVjdC5oZWlnaHQpIC8gaGVpZ2h0O1xuXG4gIC8vIDAsIE5hTiwgb3IgSW5maW5pdHkgc2hvdWxkIGFsd2F5cyBmYWxsYmFjayB0byAxLlxuXG4gIGlmICgheCB8fCAhTnVtYmVyLmlzRmluaXRlKHgpKSB7XG4gICAgeCA9IDE7XG4gIH1cbiAgaWYgKCF5IHx8ICFOdW1iZXIuaXNGaW5pdGUoeSkpIHtcbiAgICB5ID0gMTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5jb25zdCBub09mZnNldHMgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29vcmRzKDApO1xuZnVuY3Rpb24gZ2V0VmlzdWFsT2Zmc2V0cyhlbGVtZW50KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKCFpc1dlYktpdCgpIHx8ICF3aW4udmlzdWFsVmlld3BvcnQpIHtcbiAgICByZXR1cm4gbm9PZmZzZXRzO1xuICB9XG4gIHJldHVybiB7XG4gICAgeDogd2luLnZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQsXG4gICAgeTogd2luLnZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcFxuICB9O1xufVxuZnVuY3Rpb24gc2hvdWxkQWRkVmlzdWFsT2Zmc2V0cyhlbGVtZW50LCBpc0ZpeGVkLCBmbG9hdGluZ09mZnNldFBhcmVudCkge1xuICBpZiAoaXNGaXhlZCA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZCA9IGZhbHNlO1xuICB9XG4gIGlmICghZmxvYXRpbmdPZmZzZXRQYXJlbnQgfHwgaXNGaXhlZCAmJiBmbG9hdGluZ09mZnNldFBhcmVudCAhPT0gZ2V0V2luZG93KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc0ZpeGVkO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3ksIG9mZnNldFBhcmVudCkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgZG9tRWxlbWVudCA9IHVud3JhcEVsZW1lbnQoZWxlbWVudCk7XG4gIGxldCBzY2FsZSA9IGNyZWF0ZUNvb3JkcygxKTtcbiAgaWYgKGluY2x1ZGVTY2FsZSkge1xuICAgIGlmIChvZmZzZXRQYXJlbnQpIHtcbiAgICAgIGlmIChpc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjYWxlID0gZ2V0U2NhbGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHZpc3VhbE9mZnNldHMgPSBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGRvbUVsZW1lbnQsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSA/IGdldFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIGxldCB4ID0gKGNsaWVudFJlY3QubGVmdCArIHZpc3VhbE9mZnNldHMueCkgLyBzY2FsZS54O1xuICBsZXQgeSA9IChjbGllbnRSZWN0LnRvcCArIHZpc3VhbE9mZnNldHMueSkgLyBzY2FsZS55O1xuICBsZXQgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGUueDtcbiAgbGV0IGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGUueTtcbiAgaWYgKGRvbUVsZW1lbnQpIHtcbiAgICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZG9tRWxlbWVudCk7XG4gICAgY29uc3Qgb2Zmc2V0V2luID0gb2Zmc2V0UGFyZW50ICYmIGlzRWxlbWVudChvZmZzZXRQYXJlbnQpID8gZ2V0V2luZG93KG9mZnNldFBhcmVudCkgOiBvZmZzZXRQYXJlbnQ7XG4gICAgbGV0IGN1cnJlbnRXaW4gPSB3aW47XG4gICAgbGV0IGN1cnJlbnRJRnJhbWUgPSBnZXRGcmFtZUVsZW1lbnQoY3VycmVudFdpbik7XG4gICAgd2hpbGUgKGN1cnJlbnRJRnJhbWUgJiYgb2Zmc2V0UGFyZW50ICYmIG9mZnNldFdpbiAhPT0gY3VycmVudFdpbikge1xuICAgICAgY29uc3QgaWZyYW1lU2NhbGUgPSBnZXRTY2FsZShjdXJyZW50SUZyYW1lKTtcbiAgICAgIGNvbnN0IGlmcmFtZVJlY3QgPSBjdXJyZW50SUZyYW1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50SUZyYW1lKTtcbiAgICAgIGNvbnN0IGxlZnQgPSBpZnJhbWVSZWN0LmxlZnQgKyAoY3VycmVudElGcmFtZS5jbGllbnRMZWZ0ICsgcGFyc2VGbG9hdChjc3MucGFkZGluZ0xlZnQpKSAqIGlmcmFtZVNjYWxlLng7XG4gICAgICBjb25zdCB0b3AgPSBpZnJhbWVSZWN0LnRvcCArIChjdXJyZW50SUZyYW1lLmNsaWVudFRvcCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdUb3ApKSAqIGlmcmFtZVNjYWxlLnk7XG4gICAgICB4ICo9IGlmcmFtZVNjYWxlLng7XG4gICAgICB5ICo9IGlmcmFtZVNjYWxlLnk7XG4gICAgICB3aWR0aCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgaGVpZ2h0ICo9IGlmcmFtZVNjYWxlLnk7XG4gICAgICB4ICs9IGxlZnQ7XG4gICAgICB5ICs9IHRvcDtcbiAgICAgIGN1cnJlbnRXaW4gPSBnZXRXaW5kb3coY3VycmVudElGcmFtZSk7XG4gICAgICBjdXJyZW50SUZyYW1lID0gZ2V0RnJhbWVFbGVtZW50KGN1cnJlbnRXaW4pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdFRvQ2xpZW50UmVjdCh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9KTtcbn1cblxuLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuLy8gaW5jb3JyZWN0IGZvciBSVEwuXG5mdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQsIHJlY3QpIHtcbiAgY29uc3QgbGVmdFNjcm9sbCA9IGdldE5vZGVTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbiAgaWYgKCFyZWN0KSB7XG4gICAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBsZWZ0U2Nyb2xsO1xuICB9XG4gIHJldHVybiByZWN0LmxlZnQgKyBsZWZ0U2Nyb2xsO1xufVxuXG5mdW5jdGlvbiBnZXRIVE1MT2Zmc2V0KGRvY3VtZW50RWxlbWVudCwgc2Nyb2xsLCBpZ25vcmVTY3JvbGxiYXJYKSB7XG4gIGlmIChpZ25vcmVTY3JvbGxiYXJYID09PSB2b2lkIDApIHtcbiAgICBpZ25vcmVTY3JvbGxiYXJYID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgaHRtbFJlY3QgPSBkb2N1bWVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHggPSBodG1sUmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSAoaWdub3JlU2Nyb2xsYmFyWCA/IDAgOlxuICAvLyBSVEwgPGJvZHk+IHNjcm9sbGJhci5cbiAgZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQsIGh0bWxSZWN0KSk7XG4gIGNvbnN0IHkgPSBodG1sUmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wO1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGlzRml4ZWQgPSBzdHJhdGVneSA9PT0gJ2ZpeGVkJztcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IHRvcExheWVyID0gZWxlbWVudHMgPyBpc1RvcExheWVyKGVsZW1lbnRzLmZsb2F0aW5nKSA6IGZhbHNlO1xuICBpZiAob2Zmc2V0UGFyZW50ID09PSBkb2N1bWVudEVsZW1lbnQgfHwgdG9wTGF5ZXIgJiYgaXNGaXhlZCkge1xuICAgIHJldHVybiByZWN0O1xuICB9XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBjb25zdCBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCk7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCwgdHJ1ZSkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHJlY3Qud2lkdGggKiBzY2FsZS54LFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQgKiBzY2FsZS55LFxuICAgIHg6IHJlY3QueCAqIHNjYWxlLnggLSBzY3JvbGwuc2Nyb2xsTGVmdCAqIHNjYWxlLnggKyBvZmZzZXRzLnggKyBodG1sT2Zmc2V0LngsXG4gICAgeTogcmVjdC55ICogc2NhbGUueSAtIHNjcm9sbC5zY3JvbGxUb3AgKiBzY2FsZS55ICsgb2Zmc2V0cy55ICsgaHRtbE9mZnNldC55XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5nZXRDbGllbnRSZWN0cygpKTtcbn1cblxuLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZS5cbmZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHNjcm9sbCA9IGdldE5vZGVTY3JvbGwoZWxlbWVudCk7XG4gIGNvbnN0IGJvZHkgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgY29uc3Qgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgYm9keS5jbGllbnRXaWR0aCk7XG4gIGNvbnN0IGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5LmNsaWVudEhlaWdodCk7XG4gIGxldCB4ID0gLXNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgY29uc3QgeSA9IC1zY3JvbGwuc2Nyb2xsVG9wO1xuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5KS5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgeCArPSBtYXgoaHRtbC5jbGllbnRXaWR0aCwgYm9keS5jbGllbnRXaWR0aCkgLSB3aWR0aDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3QgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIGxldCB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIGxldCBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgbGV0IHggPSAwO1xuICBsZXQgeSA9IDA7XG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIGNvbnN0IHZpc3VhbFZpZXdwb3J0QmFzZWQgPSBpc1dlYktpdCgpO1xuICAgIGlmICghdmlzdWFsVmlld3BvcnRCYXNlZCB8fCB2aXN1YWxWaWV3cG9ydEJhc2VkICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG4vLyBSZXR1cm5zIHRoZSBpbm5lciBjbGllbnQgcmVjdCwgc3VidHJhY3Rpbmcgc2Nyb2xsYmFycyBpZiBwcmVzZW50LlxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgY2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCB0cnVlLCBzdHJhdGVneSA9PT0gJ2ZpeGVkJyk7XG4gIGNvbnN0IHRvcCA9IGNsaWVudFJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIGNvbnN0IGxlZnQgPSBjbGllbnRSZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIGNvbnN0IHNjYWxlID0gaXNIVE1MRWxlbWVudChlbGVtZW50KSA/IGdldFNjYWxlKGVsZW1lbnQpIDogY3JlYXRlQ29vcmRzKDEpO1xuICBjb25zdCB3aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGggKiBzY2FsZS54O1xuICBjb25zdCBoZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodCAqIHNjYWxlLnk7XG4gIGNvbnN0IHggPSBsZWZ0ICogc2NhbGUueDtcbiAgY29uc3QgeSA9IHRvcCAqIHNjYWxlLnk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KSB7XG4gIGxldCByZWN0O1xuICBpZiAoY2xpcHBpbmdBbmNlc3RvciA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgIHJlY3QgPSBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpO1xuICB9IGVsc2UgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICdkb2N1bWVudCcpIHtcbiAgICByZWN0ID0gZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSk7XG4gIH0gZWxzZSBpZiAoaXNFbGVtZW50KGNsaXBwaW5nQW5jZXN0b3IpKSB7XG4gICAgcmVjdCA9IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB2aXN1YWxPZmZzZXRzID0gZ2V0VmlzdWFsT2Zmc2V0cyhlbGVtZW50KTtcbiAgICByZWN0ID0ge1xuICAgICAgeDogY2xpcHBpbmdBbmNlc3Rvci54IC0gdmlzdWFsT2Zmc2V0cy54LFxuICAgICAgeTogY2xpcHBpbmdBbmNlc3Rvci55IC0gdmlzdWFsT2Zmc2V0cy55LFxuICAgICAgd2lkdGg6IGNsaXBwaW5nQW5jZXN0b3Iud2lkdGgsXG4gICAgICBoZWlnaHQ6IGNsaXBwaW5nQW5jZXN0b3IuaGVpZ2h0XG4gICAgfTtcbiAgfVxuICByZXR1cm4gcmVjdFRvQ2xpZW50UmVjdChyZWN0KTtcbn1cbmZ1bmN0aW9uIGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihlbGVtZW50LCBzdG9wTm9kZSkge1xuICBjb25zdCBwYXJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgaWYgKHBhcmVudE5vZGUgPT09IHN0b3BOb2RlIHx8ICFpc0VsZW1lbnQocGFyZW50Tm9kZSkgfHwgaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKHBhcmVudE5vZGUpLnBvc2l0aW9uID09PSAnZml4ZWQnIHx8IGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihwYXJlbnROb2RlLCBzdG9wTm9kZSk7XG59XG5cbi8vIEEgXCJjbGlwcGluZyBhbmNlc3RvclwiIGlzIGFuIGBvdmVyZmxvd2AgZWxlbWVudCB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgY2hpbGQgZWxlbWVudHMuIFRoaXMgcmV0dXJucyBhbGwgY2xpcHBpbmcgYW5jZXN0b3JzXG4vLyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCB1cCB0aGUgdHJlZS5cbmZ1bmN0aW9uIGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCBjYWNoZSkge1xuICBjb25zdCBjYWNoZWRSZXN1bHQgPSBjYWNoZS5nZXQoZWxlbWVudCk7XG4gIGlmIChjYWNoZWRSZXN1bHQpIHtcbiAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICB9XG4gIGxldCByZXN1bHQgPSBnZXRPdmVyZmxvd0FuY2VzdG9ycyhlbGVtZW50LCBbXSwgZmFsc2UpLmZpbHRlcihlbCA9PiBpc0VsZW1lbnQoZWwpICYmIGdldE5vZGVOYW1lKGVsKSAhPT0gJ2JvZHknKTtcbiAgbGV0IGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgY29uc3QgZWxlbWVudElzRml4ZWQgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnO1xuICBsZXQgY3VycmVudE5vZGUgPSBlbGVtZW50SXNGaXhlZCA/IGdldFBhcmVudE5vZGUoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIHdoaWxlIChpc0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudE5vZGUpO1xuICAgIGNvbnN0IGN1cnJlbnROb2RlSXNDb250YWluaW5nID0gaXNDb250YWluaW5nQmxvY2soY3VycmVudE5vZGUpO1xuICAgIGlmICghY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgY29tcHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCBzaG91bGREcm9wQ3VycmVudE5vZGUgPSBlbGVtZW50SXNGaXhlZCA/ICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiAhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgOiAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgY29tcHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycgJiYgISFjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSAmJiBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5jbHVkZXMoY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUucG9zaXRpb24pIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIGN1cnJlbnROb2RlKTtcbiAgICBpZiAoc2hvdWxkRHJvcEN1cnJlbnROb2RlKSB7XG4gICAgICAvLyBEcm9wIG5vbi1jb250YWluaW5nIGJsb2Nrcy5cbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoYW5jZXN0b3IgPT4gYW5jZXN0b3IgIT09IGN1cnJlbnROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVjb3JkIGxhc3QgY29udGFpbmluZyBibG9jayBmb3IgbmV4dCBpdGVyYXRpb24uXG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IGNvbXB1dGVkU3R5bGU7XG4gICAgfVxuICAgIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShjdXJyZW50Tm9kZSk7XG4gIH1cbiAgY2FjaGUuc2V0KGVsZW1lbnQsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIGFuY2VzdG9ycy5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudCxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGVsZW1lbnRDbGlwcGluZ0FuY2VzdG9ycyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdBbmNlc3RvcnMnID8gaXNUb3BMYXllcihlbGVtZW50KSA/IFtdIDogZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIHRoaXMuX2MpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgY29uc3QgY2xpcHBpbmdBbmNlc3RvcnMgPSBbLi4uZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzLCByb290Qm91bmRhcnldO1xuICBjb25zdCBmaXJzdENsaXBwaW5nQW5jZXN0b3IgPSBjbGlwcGluZ0FuY2VzdG9yc1swXTtcbiAgY29uc3QgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdBbmNlc3RvcnMucmVkdWNlKChhY2NSZWN0LCBjbGlwcGluZ0FuY2VzdG9yKSA9PiB7XG4gICAgY29uc3QgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcCxcbiAgICB4OiBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICB5OiBjbGlwcGluZ1JlY3QudG9wXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERpbWVuc2lvbnMoZWxlbWVudCkge1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH0gPSBnZXRDc3NEaW1lbnNpb25zKGVsZW1lbnQpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChlbGVtZW50LCBvZmZzZXRQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgaXNGaXhlZCA9IHN0cmF0ZWd5ID09PSAnZml4ZWQnO1xuICBjb25zdCByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIGlzRml4ZWQsIG9mZnNldFBhcmVudCk7XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGNyZWF0ZUNvb3JkcygwKTtcbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlLCBpc0ZpeGVkLCBvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAvLyBJZiB0aGUgPGJvZHk+IHNjcm9sbGJhciBhcHBlYXJzIG9uIHRoZSBsZWZ0IChlLmcuIFJUTCBzeXN0ZW1zKS4gVXNlXG4gICAgICAvLyBGaXJlZm94IHdpdGggbGF5b3V0LnNjcm9sbGJhci5zaWRlID0gMyBpbiBhYm91dDpjb25maWcgdG8gdGVzdCB0aGlzLlxuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICBjb25zdCBodG1sT2Zmc2V0ID0gZG9jdW1lbnRFbGVtZW50ICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCA/IGdldEhUTUxPZmZzZXQoZG9jdW1lbnRFbGVtZW50LCBzY3JvbGwpIDogY3JlYXRlQ29vcmRzKDApO1xuICBjb25zdCB4ID0gcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLnggLSBodG1sT2Zmc2V0Lng7XG4gIGNvbnN0IHkgPSByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnkgLSBodG1sT2Zmc2V0Lnk7XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNTdGF0aWNQb3NpdGlvbmVkKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnO1xufVxuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHBvbHlmaWxsKSB7XG4gICAgcmV0dXJuIHBvbHlmaWxsKGVsZW1lbnQpO1xuICB9XG4gIGxldCByYXdPZmZzZXRQYXJlbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcblxuICAvLyBGaXJlZm94IHJldHVybnMgdGhlIDxodG1sPiBlbGVtZW50IGFzIHRoZSBvZmZzZXRQYXJlbnQgaWYgaXQncyBub24tc3RhdGljLFxuICAvLyB3aGlsZSBDaHJvbWUgYW5kIFNhZmFyaSByZXR1cm4gdGhlIDxib2R5PiBlbGVtZW50LiBUaGUgPGJvZHk+IGVsZW1lbnQgbXVzdFxuICAvLyBiZSB1c2VkIHRvIHBlcmZvcm0gdGhlIGNvcnJlY3QgY2FsY3VsYXRpb25zIGV2ZW4gaWYgdGhlIDxodG1sPiBlbGVtZW50IGlzXG4gIC8vIG5vbi1zdGF0aWMuXG4gIGlmIChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkgPT09IHJhd09mZnNldFBhcmVudCkge1xuICAgIHJhd09mZnNldFBhcmVudCA9IHJhd09mZnNldFBhcmVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cbiAgcmV0dXJuIHJhd09mZnNldFBhcmVudDtcbn1cblxuLy8gR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBwb3NpdGlvbmVkIGVsZW1lbnQuIEhhbmRsZXMgc29tZSBlZGdlIGNhc2VzLFxuLy8gc3VjaCBhcyB0YWJsZSBhbmNlc3RvcnMgYW5kIGNyb3NzIGJyb3dzZXIgYnVncy5cbmZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGlmIChpc1RvcExheWVyKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHdpbjtcbiAgfVxuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBsZXQgc3ZnT2Zmc2V0UGFyZW50ID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgICB3aGlsZSAoc3ZnT2Zmc2V0UGFyZW50ICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoc3ZnT2Zmc2V0UGFyZW50KSkge1xuICAgICAgaWYgKGlzRWxlbWVudChzdmdPZmZzZXRQYXJlbnQpICYmICFpc1N0YXRpY1Bvc2l0aW9uZWQoc3ZnT2Zmc2V0UGFyZW50KSkge1xuICAgICAgICByZXR1cm4gc3ZnT2Zmc2V0UGFyZW50O1xuICAgICAgfVxuICAgICAgc3ZnT2Zmc2V0UGFyZW50ID0gZ2V0UGFyZW50Tm9kZShzdmdPZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGxldCBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKTtcbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzU3RhdGljUG9zaXRpb25lZChvZmZzZXRQYXJlbnQpKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQsIHBvbHlmaWxsKTtcbiAgfVxuICBpZiAob2Zmc2V0UGFyZW50ICYmIGlzTGFzdFRyYXZlcnNhYmxlTm9kZShvZmZzZXRQYXJlbnQpICYmIGlzU3RhdGljUG9zaXRpb25lZChvZmZzZXRQYXJlbnQpICYmICFpc0NvbnRhaW5pbmdCbG9jayhvZmZzZXRQYXJlbnQpKSB7XG4gICAgcmV0dXJuIHdpbjtcbiAgfVxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW47XG59XG5cbmNvbnN0IGdldEVsZW1lbnRSZWN0cyA9IGFzeW5jIGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnN0IGdldE9mZnNldFBhcmVudEZuID0gdGhpcy5nZXRPZmZzZXRQYXJlbnQgfHwgZ2V0T2Zmc2V0UGFyZW50O1xuICBjb25zdCBnZXREaW1lbnNpb25zRm4gPSB0aGlzLmdldERpbWVuc2lvbnM7XG4gIGNvbnN0IGZsb2F0aW5nRGltZW5zaW9ucyA9IGF3YWl0IGdldERpbWVuc2lvbnNGbihkYXRhLmZsb2F0aW5nKTtcbiAgcmV0dXJuIHtcbiAgICByZWZlcmVuY2U6IGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGRhdGEucmVmZXJlbmNlLCBhd2FpdCBnZXRPZmZzZXRQYXJlbnRGbihkYXRhLmZsb2F0aW5nKSwgZGF0YS5zdHJhdGVneSksXG4gICAgZmxvYXRpbmc6IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwLFxuICAgICAgd2lkdGg6IGZsb2F0aW5nRGltZW5zaW9ucy53aWR0aCxcbiAgICAgIGhlaWdodDogZmxvYXRpbmdEaW1lbnNpb25zLmhlaWdodFxuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGlzUlRMKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZGlyZWN0aW9uID09PSAncnRsJztcbn1cblxuY29uc3QgcGxhdGZvcm0gPSB7XG4gIGNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0LFxuICBnZXREb2N1bWVudEVsZW1lbnQsXG4gIGdldENsaXBwaW5nUmVjdCxcbiAgZ2V0T2Zmc2V0UGFyZW50LFxuICBnZXRFbGVtZW50UmVjdHMsXG4gIGdldENsaWVudFJlY3RzLFxuICBnZXREaW1lbnNpb25zLFxuICBnZXRTY2FsZSxcbiAgaXNFbGVtZW50LFxuICBpc1JUTFxufTtcblxuLy8gaHR0cHM6Ly9zYW10aG9yLmF1LzIwMjEvb2JzZXJ2aW5nLWRvbS9cbmZ1bmN0aW9uIG9ic2VydmVNb3ZlKGVsZW1lbnQsIG9uTW92ZSkge1xuICBsZXQgaW8gPSBudWxsO1xuICBsZXQgdGltZW91dElkO1xuICBjb25zdCByb290ID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIHZhciBfaW87XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgKF9pbyA9IGlvKSA9PSBudWxsIHx8IF9pby5kaXNjb25uZWN0KCk7XG4gICAgaW8gPSBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIHJlZnJlc2goc2tpcCwgdGhyZXNob2xkKSB7XG4gICAgaWYgKHNraXAgPT09IHZvaWQgMCkge1xuICAgICAgc2tpcCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhyZXNob2xkID09PSB2b2lkIDApIHtcbiAgICAgIHRocmVzaG9sZCA9IDE7XG4gICAgfVxuICAgIGNsZWFudXAoKTtcbiAgICBjb25zdCB7XG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAoIXNraXApIHtcbiAgICAgIG9uTW92ZSgpO1xuICAgIH1cbiAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zZXRUb3AgPSBmbG9vcih0b3ApO1xuICAgIGNvbnN0IGluc2V0UmlnaHQgPSBmbG9vcihyb290LmNsaWVudFdpZHRoIC0gKGxlZnQgKyB3aWR0aCkpO1xuICAgIGNvbnN0IGluc2V0Qm90dG9tID0gZmxvb3Iocm9vdC5jbGllbnRIZWlnaHQgLSAodG9wICsgaGVpZ2h0KSk7XG4gICAgY29uc3QgaW5zZXRMZWZ0ID0gZmxvb3IobGVmdCk7XG4gICAgY29uc3Qgcm9vdE1hcmdpbiA9IC1pbnNldFRvcCArIFwicHggXCIgKyAtaW5zZXRSaWdodCArIFwicHggXCIgKyAtaW5zZXRCb3R0b20gKyBcInB4IFwiICsgLWluc2V0TGVmdCArIFwicHhcIjtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdE1hcmdpbixcbiAgICAgIHRocmVzaG9sZDogbWF4KDAsIG1pbigxLCB0aHJlc2hvbGQpKSB8fCAxXG4gICAgfTtcbiAgICBsZXQgaXNGaXJzdFVwZGF0ZSA9IHRydWU7XG4gICAgZnVuY3Rpb24gaGFuZGxlT2JzZXJ2ZShlbnRyaWVzKSB7XG4gICAgICBjb25zdCByYXRpbyA9IGVudHJpZXNbMF0uaW50ZXJzZWN0aW9uUmF0aW87XG4gICAgICBpZiAocmF0aW8gIT09IHRocmVzaG9sZCkge1xuICAgICAgICBpZiAoIWlzRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgICByZXR1cm4gcmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmF0aW8pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgcmVmZXJlbmNlIGlzIGNsaXBwZWQsIHRoZSByYXRpbyBpcyAwLiBUaHJvdHRsZSB0aGUgcmVmcmVzaFxuICAgICAgICAgIC8vIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBvZiB1cGRhdGVzLlxuICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVmcmVzaChmYWxzZSwgMWUtNyk7XG4gICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmcmVzaChmYWxzZSwgcmF0aW8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpc0ZpcnN0VXBkYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT2xkZXIgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCBhIGBkb2N1bWVudGAgYXMgdGhlIHJvb3QgYW5kIHdpbGwgdGhyb3cgYW5cbiAgICAvLyBlcnJvci5cbiAgICB0cnkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAvLyBIYW5kbGUgPGlmcmFtZT5zXG4gICAgICAgIHJvb3Q6IHJvb3Qub3duZXJEb2N1bWVudFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlvLm9ic2VydmUoZWxlbWVudCk7XG4gIH1cbiAgcmVmcmVzaCh0cnVlKTtcbiAgcmV0dXJuIGNsZWFudXA7XG59XG5cbi8qKlxuICogQXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCB3aGVuIG5lY2Vzc2FyeS5cbiAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzIG1vdW50ZWQgb24gdGhlIERPTSBvclxuICogdmlzaWJsZSBvbiB0aGUgc2NyZWVuLlxuICogQHJldHVybnMgY2xlYW51cCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBpbnZva2VkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXNcbiAqIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIGhpZGRlbiBmcm9tIHRoZSBzY3JlZW4uXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1VwZGF0ZVxuICovXG5mdW5jdGlvbiBhdXRvVXBkYXRlKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHVwZGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBhbmNlc3RvclNjcm9sbCA9IHRydWUsXG4gICAgYW5jZXN0b3JSZXNpemUgPSB0cnVlLFxuICAgIGVsZW1lbnRSZXNpemUgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgbGF5b3V0U2hpZnQgPSB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgYW5pbWF0aW9uRnJhbWUgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVmZXJlbmNlRWwgPSB1bndyYXBFbGVtZW50KHJlZmVyZW5jZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGFuY2VzdG9yU2Nyb2xsIHx8IGFuY2VzdG9yUmVzaXplID8gWy4uLihyZWZlcmVuY2VFbCA/IGdldE92ZXJmbG93QW5jZXN0b3JzKHJlZmVyZW5jZUVsKSA6IFtdKSwgLi4uZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZmxvYXRpbmcpXSA6IFtdO1xuICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgfSk7XG4gIGNvbnN0IGNsZWFudXBJbyA9IHJlZmVyZW5jZUVsICYmIGxheW91dFNoaWZ0ID8gb2JzZXJ2ZU1vdmUocmVmZXJlbmNlRWwsIHVwZGF0ZSkgOiBudWxsO1xuICBsZXQgcmVvYnNlcnZlRnJhbWUgPSAtMTtcbiAgbGV0IHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgaWYgKGVsZW1lbnRSZXNpemUpIHtcbiAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihfcmVmID0+IHtcbiAgICAgIGxldCBbZmlyc3RFbnRyeV0gPSBfcmVmO1xuICAgICAgaWYgKGZpcnN0RW50cnkgJiYgZmlyc3RFbnRyeS50YXJnZXQgPT09IHJlZmVyZW5jZUVsICYmIHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIFByZXZlbnQgdXBkYXRlIGxvb3BzIHdoZW4gdXNpbmcgdGhlIGBzaXplYCBtaWRkbGV3YXJlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzE3NDBcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVvYnNlcnZlRnJhbWUpO1xuICAgICAgICByZW9ic2VydmVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9yZXNpemVPYnNlcnZlcjtcbiAgICAgICAgICAoX3Jlc2l6ZU9ic2VydmVyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIGlmIChyZWZlcmVuY2VFbCAmJiAhYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocmVmZXJlbmNlRWwpO1xuICAgIH1cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAobmV4dFJlZlJlY3QueCAhPT0gcHJldlJlZlJlY3QueCB8fCBuZXh0UmVmUmVjdC55ICE9PSBwcmV2UmVmUmVjdC55IHx8IG5leHRSZWZSZWN0LndpZHRoICE9PSBwcmV2UmVmUmVjdC53aWR0aCB8fCBuZXh0UmVmUmVjdC5oZWlnaHQgIT09IHByZXZSZWZSZWN0LmhlaWdodCkpIHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH1cbiAgICBwcmV2UmVmUmVjdCA9IG5leHRSZWZSZWN0O1xuICAgIGZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnJhbWVMb29wKTtcbiAgfVxuICB1cGRhdGUoKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICB2YXIgX3Jlc2l6ZU9ic2VydmVyMjtcbiAgICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgICBhbmNlc3RvclNjcm9sbCAmJiBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGUpO1xuICAgICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgICB9KTtcbiAgICBjbGVhbnVwSW8gPT0gbnVsbCB8fCBjbGVhbnVwSW8oKTtcbiAgICAoX3Jlc2l6ZU9ic2VydmVyMiA9IHJlc2l6ZU9ic2VydmVyKSA9PSBudWxsIHx8IF9yZXNpemVPYnNlcnZlcjIuZGlzY29ubmVjdCgpO1xuICAgIHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgICBpZiAoYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lSWQpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBvZiBvdmVyZmxvdyBzaWRlIG9mZnNldHMgdGhhdCBkZXRlcm1pbmUgaG93IG11Y2ggdGhlXG4gKiBlbGVtZW50IGlzIG92ZXJmbG93aW5nIGEgZ2l2ZW4gY2xpcHBpbmcgYm91bmRhcnkgb24gZWFjaCBzaWRlLlxuICogLSBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBib3VuZGFyeSBieSB0aGF0IG51bWJlciBvZiBwaXhlbHNcbiAqIC0gbmVnYXRpdmUgPSBob3cgbWFueSBwaXhlbHMgbGVmdCBiZWZvcmUgaXQgd2lsbCBvdmVyZmxvd1xuICogLSAwID0gbGllcyBmbHVzaCB3aXRoIHRoZSBib3VuZGFyeVxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2RldGVjdE92ZXJmbG93XG4gKi9cbmNvbnN0IGRldGVjdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3ckMTtcblxuLyoqXG4gKiBNb2RpZmllcyB0aGUgcGxhY2VtZW50IGJ5IHRyYW5zbGF0aW5nIHRoZSBmbG9hdGluZyBlbGVtZW50IGFsb25nIHRoZVxuICogc3BlY2lmaWVkIGF4ZXMuXG4gKiBBIG51bWJlciAoc2hvcnRoYW5kIGZvciBgbWFpbkF4aXNgIG9yIGRpc3RhbmNlKSwgb3IgYW4gYXhlcyBjb25maWd1cmF0aW9uXG4gKiBvYmplY3QgbWF5IGJlIHBhc3NlZC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9vZmZzZXRcbiAqL1xuY29uc3Qgb2Zmc2V0ID0gb2Zmc2V0JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGNob29zaW5nIHRoZSBwbGFjZW1lbnRcbiAqIHRoYXQgaGFzIHRoZSBtb3N0IHNwYWNlIGF2YWlsYWJsZSBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IG5lZWRpbmcgdG8gc3BlY2lmeSBhXG4gKiBwcmVmZXJyZWQgcGxhY2VtZW50LiBBbHRlcm5hdGl2ZSB0byBgZmxpcGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1BsYWNlbWVudFxuICovXG5jb25zdCBhdXRvUGxhY2VtZW50ID0gYXV0b1BsYWNlbWVudCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBzaGlmdGluZyBpdCBpbiBvcmRlciB0b1xuICoga2VlcCBpdCBpbiB2aWV3IHdoZW4gaXQgd2lsbCBvdmVyZmxvdyB0aGUgY2xpcHBpbmcgYm91bmRhcnkuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvc2hpZnRcbiAqL1xuY29uc3Qgc2hpZnQgPSBzaGlmdCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBmbGlwcGluZyB0aGUgYHBsYWNlbWVudGBcbiAqIGluIG9yZGVyIHRvIGtlZXAgaXQgaW4gdmlldyB3aGVuIHRoZSBwcmVmZXJyZWQgcGxhY2VtZW50KHMpIHdpbGwgb3ZlcmZsb3cgdGhlXG4gKiBjbGlwcGluZyBib3VuZGFyeS4gQWx0ZXJuYXRpdmUgdG8gYGF1dG9QbGFjZW1lbnRgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2ZsaXBcbiAqL1xuY29uc3QgZmxpcCA9IGZsaXAkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRoYXQgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgXHUyMDE0XG4gKiBmb3IgaW5zdGFuY2UsIHByZXZlbnQgaXQgZnJvbSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgYm91bmRhcnkgb3IgbWF0Y2ggdGhlXG4gKiB3aWR0aCBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvc2l6ZVxuICovXG5jb25zdCBzaXplID0gc2l6ZSQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gaGlkZSB0aGUgZmxvYXRpbmcgZWxlbWVudCBpbiBhcHBsaWNhYmxlIHNpdHVhdGlvbnMsIHN1Y2ggYXNcbiAqIHdoZW4gaXQgaXMgbm90IGluIHRoZSBzYW1lIGNsaXBwaW5nIGNvbnRleHQgYXMgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2hpZGVcbiAqL1xuY29uc3QgaGlkZSA9IGhpZGUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBhcnJvdyQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGltcHJvdmVkIHBvc2l0aW9uaW5nIGZvciBpbmxpbmUgcmVmZXJlbmNlIGVsZW1lbnRzIHRoYXQgY2FuIHNwYW5cbiAqIG92ZXIgbXVsdGlwbGUgbGluZXMsIHN1Y2ggYXMgaHlwZXJsaW5rcyBvciByYW5nZSBzZWxlY3Rpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2lubGluZVxuICovXG5jb25zdCBpbmxpbmUgPSBpbmxpbmUkMTtcblxuLyoqXG4gKiBCdWlsdC1pbiBgbGltaXRlcmAgdGhhdCB3aWxsIHN0b3AgYHNoaWZ0KClgIGF0IGEgY2VydGFpbiBwb2ludC5cbiAqL1xuY29uc3QgbGltaXRTaGlmdCA9IGxpbWl0U2hpZnQkMTtcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgdGhhdCB3aWxsIHBsYWNlIHRoZSBmbG9hdGluZyBlbGVtZW50XG4gKiBuZXh0IHRvIGEgZ2l2ZW4gcmVmZXJlbmNlIGVsZW1lbnQuXG4gKi9cbmNvbnN0IGNvbXB1dGVQb3NpdGlvbiA9IChyZWZlcmVuY2UsIGZsb2F0aW5nLCBvcHRpb25zKSA9PiB7XG4gIC8vIFRoaXMgY2FjaGVzIHRoZSBleHBlbnNpdmUgYGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9yc2AgZnVuY3Rpb24gc28gdGhhdFxuICAvLyBtdWx0aXBsZSBsaWZlY3ljbGUgcmVzZXRzIHJlLXVzZSB0aGUgc2FtZSByZXN1bHQuIEl0IG9ubHkgbGl2ZXMgZm9yIGFcbiAgLy8gc2luZ2xlIGNhbGwuIElmIG90aGVyIGZ1bmN0aW9ucyBiZWNvbWUgZXhwZW5zaXZlLCB3ZSBjYW4gYWRkIHRoZW0gYXMgd2VsbC5cbiAgY29uc3QgY2FjaGUgPSBuZXcgTWFwKCk7XG4gIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSB7XG4gICAgcGxhdGZvcm0sXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuICBjb25zdCBwbGF0Zm9ybVdpdGhDYWNoZSA9IHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLnBsYXRmb3JtLFxuICAgIF9jOiBjYWNoZVxuICB9O1xuICByZXR1cm4gY29tcHV0ZVBvc2l0aW9uJDEocmVmZXJlbmNlLCBmbG9hdGluZywge1xuICAgIC4uLm1lcmdlZE9wdGlvbnMsXG4gICAgcGxhdGZvcm06IHBsYXRmb3JtV2l0aENhY2hlXG4gIH0pO1xufTtcblxuZXhwb3J0IHsgYXJyb3csIGF1dG9QbGFjZW1lbnQsIGF1dG9VcGRhdGUsIGNvbXB1dGVQb3NpdGlvbiwgZGV0ZWN0T3ZlcmZsb3csIGZsaXAsIGhpZGUsIGlubGluZSwgbGltaXRTaGlmdCwgb2Zmc2V0LCBwbGF0Zm9ybSwgc2hpZnQsIHNpemUgfTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhcnJvdyxcblx0YXV0b1BsYWNlbWVudCxcblx0YXV0b1VwZGF0ZSxcblx0ZGV0ZWN0T3ZlcmZsb3csXG5cdGNvbXB1dGVQb3NpdGlvbixcblx0b2Zmc2V0LFxuXHRmbGlwLFxuXHRzaXplLFxuXHRzaGlmdCxcbn0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcbmltcG9ydCB7IFByb2Nlc3NpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZywgaXNBcnJheSwgaXNPYmplY3QsIGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5cbmV4cG9ydCB7IHBvc2l0aW9uUG9wcGVyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBjb250cm9sRWxlbWVudFxuICogQHBhcmFtIHBvcHBlckVsZW1lbnRcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJuIHtQcm9taXNlfCp9XG4gKi9cbmZ1bmN0aW9uIHBvc2l0aW9uUG9wcGVyKGNvbnRyb2xFbGVtZW50LCBwb3BwZXJFbGVtZW50LCBvcHRpb25zKSB7XG5cdGNvbnN0IGJvZHkgPSBnZXREb2N1bWVudCgpLmJvZHk7XG5cblx0cmV0dXJuIG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRjb25zdCBhcnJvd0VsZW1lbnQgPSBjb250cm9sRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3ddXCIsXG5cdFx0KTtcblxuXHRcdGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHtcblx0XHRcdFx0cGxhY2VtZW50OiBcInRvcFwiLFxuXHRcdFx0fSxcblx0XHRcdG9wdGlvbnMsXG5cdFx0KTtcblxuXHRcdGNvbnN0IG1pZGRsZXdhcmUgPSBjb25maWc/LltcIm1pZGRsZXdhcmVcIl07XG5cdFx0aWYgKCFpc0FycmF5KG1pZGRsZXdhcmUpKSB7XG5cdFx0XHRpZiAoaXNTdHJpbmcobWlkZGxld2FyZSkpIHtcblx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXSA9IG1pZGRsZXdhcmUuc3BsaXQoXCIsXCIpLmZpbHRlcigobGluZSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBsaW5lLnRyaW0oKS5sZW5ndGggPiAwO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl0gPSBbXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiBtaWRkbGV3YXJlKSB7XG5cdFx0XHRjb25zdCBsaW5lID0gbWlkZGxld2FyZVtrZXldO1xuXHRcdFx0aWYgKGlzRnVuY3Rpb24obGluZSkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc09iamVjdChsaW5lKSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFpc1N0cmluZyhsaW5lKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0YE1pZGRsZXdhcmUgbXVzdCBiZSBhIHN0cmluZywgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QuIEdvdCAke3R5cGVvZiBsaW5lfWAsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGt2ID0gbGluZS5zcGxpdChcIjpcIik7XG5cdFx0XHRjb25zdCBmbiA9IGt2LnNoaWZ0KCk7XG5cblx0XHRcdHN3aXRjaCAoZm4pIHtcblx0XHRcdFx0Y2FzZSBcImZsaXBcIjpcblx0XHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdW2tleV0gPSBmbGlwKCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJzaGlmdFwiOlxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IHNoaWZ0KCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJhdXRvUGxhY2VtZW50XCI6XG5cdFx0XHRcdFx0bGV0IGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cyA9IFtcInRvcFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIiwgXCJyaWdodFwiXTtcblxuXHRcdFx0XHRcdGNvbnN0IGRlZlBsYWNlbWVudCA9IGt2Py5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmIChpc1N0cmluZyhkZWZQbGFjZW1lbnQpICYmIGRlZlBsYWNlbWVudC50cmltKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0ZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzID0gZGVmUGxhY2VtZW50XG5cdFx0XHRcdFx0XHRcdC5zcGxpdChcIixcIilcblx0XHRcdFx0XHRcdFx0LmZpbHRlcigobGluZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBsaW5lLnRyaW0oKS5sZW5ndGggPiAwO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzLmluY2x1ZGVzKGNvbmZpZy5wbGFjZW1lbnQpKSB7XG5cdFx0XHRcdFx0XHRkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMuc3BsaWNlKFxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMuaW5kZXhPZihjb25maWcucGxhY2VtZW50KSxcblx0XHRcdFx0XHRcdFx0MSxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cy51bnNoaWZ0KGNvbmZpZy5wbGFjZW1lbnQpO1xuXG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gYXV0b1BsYWNlbWVudCh7XG5cdFx0XHRcdFx0XHRjcm9zc0F4aXM6IHRydWUsXG5cdFx0XHRcdFx0XHRhdXRvQWxpZ25tZW50OiB0cnVlLFxuXHRcdFx0XHRcdFx0YWxsb3dlZFBsYWNlbWVudHM6IGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cyxcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiZGV0ZWN0T3ZlcmZsb3dcIjpcblx0XHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdW2tleV0gPSBkZXRlY3RPdmVyZmxvdygpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiYXJyb3dcIjpcblx0XHRcdFx0XHRpZiAoYXJyb3dFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdW2tleV0gPSBhcnJvdyh7IGVsZW1lbnQ6IGFycm93RWxlbWVudCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJzaXplXCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gc2l6ZSh7XG5cdFx0XHRcdFx0XHRhcHBseSh7IGF2YWlsYWJsZVdpZHRoLCBhdmFpbGFibGVIZWlnaHQsIGVsZW1lbnRzIH0pIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWF4V2lkdGggPSBib2R5LmNsaWVudFdpZHRoO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBtYXhIZWlnaHQgPSBib2R5LmNsaWVudEhlaWdodDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoYXZhaWxhYmxlV2lkdGggPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXZhaWxhYmxlV2lkdGggPSAwO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKGF2YWlsYWJsZUhlaWdodCA8IDApIHtcblx0XHRcdFx0XHRcdFx0XHRhdmFpbGFibGVIZWlnaHQgPSAwO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKGF2YWlsYWJsZVdpZHRoID4gbWF4V2lkdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRhdmFpbGFibGVXaWR0aCA9IG1heFdpZHRoO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKGF2YWlsYWJsZUhlaWdodCA+IG1heEhlaWdodCkge1xuXHRcdFx0XHRcdFx0XHRcdGF2YWlsYWJsZUhlaWdodCA9IG1heEhlaWdodDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oZWxlbWVudHMuZmxvYXRpbmcuc3R5bGUsIHtcblx0XHRcdFx0XHRcdFx0XHRib3hTaXppbmc6IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRcdFx0XHRcdG1heFdpZHRoOiBgJHthdmFpbGFibGVXaWR0aH1weGAsXG5cdFx0XHRcdFx0XHRcdFx0bWF4SGVpZ2h0OiBgJHthdmFpbGFibGVIZWlnaHR9cHhgLFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJvZmZzZXRcIjpcblx0XHRcdFx0XHRjb25zdCBvID0ga3Y/LnNoaWZ0KCk7XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gb2Zmc2V0KHBhcnNlSW50KG8pIHx8IDEwKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImhpZGVcIjpcblx0XHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdW2tleV0gPSBoaWRlKCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZ1bmN0aW9uOiAke2ZufWApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHBvcHBlckVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ2aXNpYmlsaXR5XCIpO1xuXHRcdHBvcHBlckVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuXHRcdGF1dG9VcGRhdGUoY29udHJvbEVsZW1lbnQsIHBvcHBlckVsZW1lbnQsICgpID0+IHtcblx0XHRcdGNvbXB1dGVQb3NpdGlvbihjb250cm9sRWxlbWVudCwgcG9wcGVyRWxlbWVudCwgY29uZmlnKS50aGVuKFxuXHRcdFx0XHQoeyB4LCB5LCBwbGFjZW1lbnQsIG1pZGRsZXdhcmVEYXRhIH0pID0+IHtcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKHBvcHBlckVsZW1lbnQuc3R5bGUsIHtcblx0XHRcdFx0XHRcdHRvcDogXCIwXCIsXG5cdFx0XHRcdFx0XHRsZWZ0OiBcIjBcIixcblx0XHRcdFx0XHRcdHRyYW5zZm9ybTogYHRyYW5zbGF0ZSgke3JvdW5kQnlEUFIoeCl9cHgsJHtyb3VuZEJ5RFBSKHkpfXB4KWAsXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRpZiAobWlkZGxld2FyZURhdGEuYXJyb3cpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNpZGUgPSBwbGFjZW1lbnQuc3BsaXQoXCItXCIpWzBdO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBzdGF0aWNTaWRlID0ge1xuXHRcdFx0XHRcdFx0XHR0b3A6IFwiYm90dG9tXCIsXG5cdFx0XHRcdFx0XHRcdHJpZ2h0OiBcImxlZnRcIixcblx0XHRcdFx0XHRcdFx0Ym90dG9tOiBcInRvcFwiLFxuXHRcdFx0XHRcdFx0XHRsZWZ0OiBcInJpZ2h0XCIsXG5cdFx0XHRcdFx0XHR9W3NpZGVdO1xuXG5cdFx0XHRcdFx0XHQvLyBtb25zdGVyLWJvcmRlci13aWR0aCA9ICsgNCAoMioyKSAoc2hvdWxkIGNvbWUgZnJvbSBjc3MpXG5cdFx0XHRcdFx0XHRjb25zdCBhcnJvd0xlbiA9IGFycm93RWxlbWVudC5vZmZzZXRXaWR0aCArIDQ7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGJvcmRlclN0eWxlID0ge1xuXHRcdFx0XHRcdFx0XHRib3JkZXJMZWZ0OiBcInRyYW5zcGFyZW50XCIsXG5cdFx0XHRcdFx0XHRcdGJvcmRlclJpZ2h0OiBcInRyYW5zcGFyZW50XCIsXG5cdFx0XHRcdFx0XHRcdGJvcmRlckJvdHRvbTogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJUb3A6IFwidHJhbnNwYXJlbnRcIixcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGNvbnN0IGRlZmF1bHRCb3JkZXIgPVxuXHRcdFx0XHRcdFx0XHRcInZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpXCI7XG5cblx0XHRcdFx0XHRcdHN3aXRjaCAoc2lkZSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwidG9wXCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyUmlnaHQgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlckJvdHRvbSA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBcImJvdHRvbVwiOlxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclRvcCA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyTGVmdCA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBcImxlZnRcIjpcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJSaWdodCA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyVG9wID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIFwicmlnaHRcIjpcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJCb3R0b20gPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlckxlZnQgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb25zdCB7IHgsIHkgfSA9IG1pZGRsZXdhcmVEYXRhLmFycm93O1xuXG5cdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdFx0XHRhcnJvd0VsZW1lbnQuc3R5bGUsXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsZWZ0OiB4ICE9IG51bGwgPyBgJHt4fXB4YCA6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0dG9wOiB5ICE9IG51bGwgPyBgJHt5fXB4YCA6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRW5zdXJlIHRoZSBzdGF0aWMgc2lkZSBnZXRzIHVuc2V0IHdoZW5cblx0XHRcdFx0XHRcdFx0XHQvLyBmbGlwcGluZyB0byBvdGhlciBwbGFjZW1lbnRzJyBheGVzLlxuXHRcdFx0XHRcdFx0XHRcdHJpZ2h0OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdGJvdHRvbTogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRbc3RhdGljU2lkZV06IGAkey1hcnJvd0xlbiAvIDJ9cHhgLFxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zZm9ybTogXCJyb3RhdGUoNDVkZWcpXCIsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9KS5ydW4oKTtcbn1cblxuZnVuY3Rpb24gcm91bmRCeURQUih2YWx1ZSkge1xuXHRjb25zdCBkcHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuXHRyZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIGRwcikgLyBkcHI7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0YXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdGluaXRNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRk9STV9SRUxPQUQsIEFUVFJJQlVURV9GT1JNX1VSTCB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGxvYWRBbmRBc3NpZ25Db250ZW50IH0gZnJvbSBcIi4vdXRpbC9mZXRjaC5tanNcIjtcblxuZXhwb3J0IHsgUmVsb2FkIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWQgPSBTeW1ib2woXCJ3YXNJbml0aWFsaXplZFwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgcmVsb2FkcyB0aGUgY29udGVudCBvZiBhIHVybCBhbmQgZW1iZWRzIGl0IGludG8gdGhlIGRvbS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3JlbG9hZC5wbmdcIj5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci1yZWxvYWQgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcmVsb2FkJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcmVsb2FkPjwvbW9uc3Rlci1yZWxvYWQ+XG4gKlxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge1JlbG9hZH0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3JlbG9hZC5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXJlbG9hZCcpO1xuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBBIHNpbXBsZSBjb25maWd1cmF0aW9uIGNhbiBsb29rIGxpa2UgdGhpc1xuICpcbiAqIGBgYGh0bWxcbiAqIDxzY3JpcHQgaWQ9XCJjb25maWdcIlxuICogICAgICAgICB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxuICogICAgIHtcbiAqICAgICAgICAgXCJ1cmxcIjogXCIuL2NvbnRlbnQuaHRtbFwiLFxuICogICAgIH1cbiAqIDwvc2NyaXB0PlxuICpcbiAqIDxtb25zdGVyLXJlbG9hZCBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3Rvcj1cIiNjb25maWdcIj5cbiAqIDwvbW9uc3Rlci1yZWxvYWQ+XG4gKiBgYGBcbiAqXG4gKiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IGEgbG9hZGVyLCB5b3UgY2FuIGluc2VydCBhIGRpdiB3aXRoIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCJgLlxuICogVGhlIGNvbnRlbnQgb2YgdGhpcyBkaXYgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgbG9hZGVkIGNvZGUuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcmVsb2FkIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yPVwiI2NvbmZpZ1wiPlxuICogPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICogTE9BREVSIC4uLlxuICogPC9kaXY+XG4gKiA8L21vbnN0ZXItcmVsb2FkPlxuICogYGBgXG4gKlxuICogSWYgeW91IG5lZWQgYWRkaXRpb25hbCBzdHJ1Y3R1cmUsIHlvdSBjYW4gc2ltcGx5IHNwZWNpZnkgaXQuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcmVsb2FkIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yPVwiI2NvbmZpZ1wiPlxuICogPGRpdiBjbGFzcz1cInJvd1wiPlxuICogICA8ZGl2IGNsYXNzPVwiY29sXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAqICAgICAgIExPQURFUiAuLi5cbiAqICAgPC9kaXY+XG4gKiA8L2Rpdj5cbiAqIDwvbW9uc3Rlci1yZWxvYWQ+XG4gKiBgYGBcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3JlbG9hZC9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3JlbG9hZC1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgcmVsb2FkIGNvbnRyb2xcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqL1xuY2xhc3MgUmVsb2FkIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3JlbG9hZFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHVybD11bmRlZmluZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbG9hZD11bmRlZmluZWQgY3VycmVudGx5IHRoZSB2YWx1ZXMgZGVmaW5lZCBhcmUgYG9uc2hvd2AgYW5kIGBhbHdheXNgLiBUaGUgZGVmYXVsdCBgb25zaG93YCByZW1vdmVzIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb250ZW50IGlzIG9ubHkgbG9hZGVkIG9uY2UuIHJlbG9hZGluZyBvZiB0aGUgY29udGVudCBkb2VzIG5vdCBvY2N1ci5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbHRlcj11bmRlZmluZWQgZG9tIHNlbGVjdG9ycyB0byBzZWFyY2ggZm9yIGVsZW1lbnRzLCBpZiB1bmRlZmluZWQgdGhlbiBldmVyeXRoaW5nIGlzIHRha2VuXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUHJvY2Vzc29yW119IHByb2Nlc3NvcnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoIEZldGNoIFtzZWUgVXNpbmcgRmV0Y2ggbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkvVXNpbmdfRmV0Y2gpXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1lcnJvclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoLmhlYWRlcnM9e1wiYWNjZXB0XCI6XCJ0ZXh0L2h0bWxcIn19XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZS5jYWxsKHRoaXMpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaGFkb3dNb2RlOiBudWxsLFxuXHRcdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRcdHJlbG9hZDogXCJvbnNob3dcIixcblx0XHRcdFx0ZmlsdGVyOiBudWxsLFxuXHRcdFx0XHRmZXRjaDoge1xuXHRcdFx0XHRcdHJlZGlyZWN0OiBcImVycm9yXCIsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0XHRcdGFjY2VwdDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cy5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBsaXN0ID0gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzO1xuXHRcdGxpc3QucHVzaChBVFRSSUJVVEVfRk9STV9VUkwpO1xuXHRcdHJldHVybiBsaXN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRbaW5pdE1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbaW5pdE1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdC8vIGRhdGEtbW9uc3Rlci1vcHRpb25zXG5cdFx0dGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX0ZPUk1fVVJMXSA9ICh1cmwpID0+IHtcblx0XHRcdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwidXJsXCIsIG5ldyBVUkwodXJsLCBkb2N1bWVudC5sb2NhdGlvbikudG9TdHJpbmcoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcInVybFwiLCB1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSByZXF1ZXN0IGZhaWxlZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcblx0ICogQGZpcmVzIG1vbnN0ZXItZmV0Y2hlZFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Gb3JtfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItcmVsb2FkXCI7XG5cdH1cblxuXHQvKipcblx0ICogbG9hZCBjb250ZW50IGZyb20gdXJsXG5cdCAqXG5cdCAqIEl0IGlzIGltcG9ydGFudCB0byBrbm93IHRoYXQgd2l0aCB0aGlzIGZ1bmN0aW9uIHRoZSBsb2FkaW5nIGlzIGV4ZWN1dGVkXG5cdCAqIGRpcmVjdGx5LiBpdCBpcyBsb2FkZWQgYXMgd2VsbCB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCB2aXNpYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHVybFxuXHQgKi9cblx0ZmV0Y2godXJsKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHVybCkgfHwgdXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwsIGAke3VybH1gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbG9hZENvbnRlbnQuY2FsbCh0aGlzKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhpcyBzZWxlY3QuXG4gKlxuICogYGBgXG4gKiA8bW9uc3Rlci1zZWxlY3QgZGF0YS1tb25zdGVyLXVybD1cImh0dHBzOi8vZXhhbXBsZS5jb20vXCI+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cblx0aWYgKGlzU3RyaW5nKHVybCkpIHtcblx0XHRvcHRpb25zW1widXJsXCJdID0gbmV3IFVSTCh1cmwsIGRvY3VtZW50LmxvY2F0aW9uKS50b1N0cmluZygpO1xuXHR9XG5cblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1JFTE9BRCkpIHtcblx0XHRvcHRpb25zW1wicmVsb2FkXCJdID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKS50b0xvd2VyQ2FzZSgpO1xuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG4gKi9cbmZ1bmN0aW9uIGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW2ludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWRdID0gdHJ1ZTtcblxuXHRjb25zdCBvcHRpb25zID0ge1xuXHRcdHRocmVzaG9sZDogWzAuNV0sXG5cdH07XG5cblx0Y29uc3QgY2FsbGJhY2sgPSAoZW50cmllcywgb2JzZXJ2ZXIpID0+IHtcblx0XHRmb3IgKGNvbnN0IFssIGVudHJ5XSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nID09PSB0cnVlKSB7XG5cdFx0XHRcdC8vIHVuZGVmaW5lZCBvciBhbHdheXMgZG8gdGhlIHNhbWVcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwicmVsb2FkXCIpID09PSBcIm9uc2hvd1wiKSB7XG5cdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRsb2FkQ29udGVudC5jYWxsKHRoaXMpLmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihjYWxsYmFjaywgb3B0aW9ucyk7XG5cdG9ic2VydmVyLm9ic2VydmUodGhpcyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gY2xpZW50IGVycm9yXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKi9cbmZ1bmN0aW9uIGxvYWRDb250ZW50KCkge1xuXHRjb25zdCB1cmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiLCB1bmRlZmluZWQpO1xuXHRpZiAoIWlzU3RyaW5nKHVybCkgfHwgdXJsID09PSBcIlwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyB1cmxcIik7XG5cdH1cblxuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSk7XG5cblx0bGV0IHBhcmVudE5vZGUgPSB0aGlzO1xuXHRpZiAodGhpcy5zaGFkb3dSb290KSB7XG5cdFx0cGFyZW50Tm9kZSA9IHRoaXMuc2hhZG93Um9vdDtcblx0fVxuXG5cdGxldCBjb250YWluZXIgPSBwYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoYFske0FUVFJJQlVURV9ST0xFfT1jb250YWluZXJdYCk7XG5cdGxldCBjdXJyZW50RGlzcGxheU1vZGUgPSBjb250YWluZXI/LnN0eWxlPy5kaXNwbGF5O1xuXG5cdGlmIChjdXJyZW50RGlzcGxheU1vZGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdGN1cnJlbnREaXNwbGF5TW9kZSA9IFwiaW5oZXJpdFwiO1xuXHR9XG5cblx0aWYgKCEoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRjb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRcdGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUsIFwiY29udGFpbmVyXCIpO1xuXHRcdHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblx0fVxuXG5cdHJldHVybiBsb2FkQW5kQXNzaWduQ29udGVudChjb250YWluZXIsIHVybCwgb3B0aW9ucywgdGhpcy5nZXRPcHRpb24oXCJmaWx0ZXJcIikpXG5cdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0aWYgKGN1cnJlbnREaXNwbGF5TW9kZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gY3VycmVudERpc3BsYXlNb2RlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHR0aHJvdyBlO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHRyZXR1cm4gdGhpcy5pbm5lckhUTUw7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChSZWxvYWQpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFN0YXRlQnV0dG9uU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgU3RhdGVCdXR0b25TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0U3RhdGVCdXR0b25TdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHN0YXRlYnV0dG9uIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JheS0xOiNmNmY2ZjY7LS1tb25zdGVyLWNvbG9yLWdyYXktMjojZTJlMmUyOy0tbW9uc3Rlci1jb2xvci1ncmF5LTM6IzhiOGI4YjstLW1vbnN0ZXItY29sb3ItZ3JheS00OiM2ZjZmNmY7LS1tb25zdGVyLWNvbG9yLWdyYXktNTojM2UzZTNlOy0tbW9uc3Rlci1jb2xvci1ncmF5LTY6IzIyMjstLW1vbnN0ZXItY29sb3Itcm9zZS0xOiNmZmY3Zjk7LS1tb25zdGVyLWNvbG9yLXJvc2UtMjojZmZkY2U1Oy0tbW9uc3Rlci1jb2xvci1yb3NlLTM6I2ZmM2I4ZDstLW1vbnN0ZXItY29sb3Itcm9zZS00OiNkYjAwNzI7LS1tb25zdGVyLWNvbG9yLXJvc2UtNTojODAwMDQwOy0tbW9uc3Rlci1jb2xvci1yb3NlLTY6IzRjMDAyMzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTE6I2ZmZjhmODstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTI6I2ZmZGRkZjstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTM6I2ZmNDI2YzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTQ6I2RlMDA1MTstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTU6IzgyMDAyYzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTY6IzUxMDAxODstLW1vbnN0ZXItY29sb3ItcmVkLTE6I2ZmZjhmNjstLW1vbnN0ZXItY29sb3ItcmVkLTI6I2ZmZGRkODstLW1vbnN0ZXItY29sb3ItcmVkLTM6I2ZmNDY0NzstLW1vbnN0ZXItY29sb3ItcmVkLTQ6I2UwMDAyYjstLW1vbnN0ZXItY29sb3ItcmVkLTU6IzgzMDAxNDstLW1vbnN0ZXItY29sb3ItcmVkLTY6IzUzMDAwMzstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTE6I2ZmZjhmNTstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTI6I2ZmZGVkMTstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTM6I2ZkNGQwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQ6I2NkM2MwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTU6Izc1MjEwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTY6IzQwMTYwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMTojZmZmOGYzOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0yOiNmZmRmYzY7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTM6I2Q1NzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNDojYWM1YzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi01OiM2MzMzMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTY6IzM3MWQwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItMTojZmZmOGVmOy0tbW9uc3Rlci1jb2xvci1hbWJlci0yOiNmZmUwYjI7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTM6I2I5ODMwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNDojOTI2NzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci01OiM1MjM4MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTY6IzMwMjEwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTE6I2ZmZjllNTstLW1vbnN0ZXItY29sb3IteWVsbG93LTI6I2ZmZTUzZTstLW1vbnN0ZXItY29sb3IteWVsbG93LTM6IzljOGIwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTQ6IzdkNmYwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTU6IzQ2M2QwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTY6IzI5MjMwMDstLW1vbnN0ZXItY29sb3ItbGltZS0xOiNmN2ZmYWM7LS1tb25zdGVyLWNvbG9yLWxpbWUtMjojZDVmMjAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTM6IzgxOTMwMDstLW1vbnN0ZXItY29sb3ItbGltZS00OiM2Nzc2MDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNTojMzk0MTAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTY6IzIyMjYwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0xOiNlNWZmYzM7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMjojOThmYjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTM6IzVjOWIwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS00OiM0OTdjMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNTojMjY0NTAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTY6IzE4MjYwMDstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMTojZTBmZmQ5Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi0yOiM3MmZmNmM7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTM6IzAwYTIxZjstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNDojMDA4MjE3Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi01OiMwMDQ5MDg7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTY6IzA2MjgwMDstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0xOiNkY2ZmZTY7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMjojNWRmZmEyOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTM6IzAwYTA1YTstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC00OiMwMDgxNDc7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNTojMDA0ODI1Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTY6IzAwMjgxMjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0xOiNkYWZmZWY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMjojNDJmZmM2Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTM6IzAwOWY3ODstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS00OiMwMDdmNWY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNTojMDA0NzM0Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTY6IzAwMjgxYjstLW1vbnN0ZXItY29sb3ItdGVhbC0xOiNkN2ZmZjc7LS1tb25zdGVyLWNvbG9yLXRlYWwtMjojMDBmZmU0Oy0tbW9uc3Rlci1jb2xvci10ZWFsLTM6IzAwOWU4YzstLW1vbnN0ZXItY29sb3ItdGVhbC00OiMwMDdjNmU7LS1tb25zdGVyLWNvbG9yLXRlYWwtNTojMDA0NDNjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTY6IzAwMjcyMjstLW1vbnN0ZXItY29sb3ItY3lhbi0xOiNjNGZmZmU7LS1tb25zdGVyLWNvbG9yLWN5YW4tMjojMDBmYWZiOy0tbW9uc3Rlci1jb2xvci1jeWFuLTM6IzAwOTk5YTstLW1vbnN0ZXItY29sb3ItY3lhbi00OiMwMDdhN2I7LS1tb25zdGVyLWNvbG9yLWN5YW4tNTojMDA0MzQ0Oy0tbW9uc3Rlci1jb2xvci1jeWFuLTY6IzAwMjUyNTstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTE6I2RhZmFmZjstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTI6IzhkZjBmZjstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTM6IzAwOThhOTstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTQ6IzAwNzk4NzstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTU6IzAwNDA0ODstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTY6IzAwMjIyNzstLW1vbnN0ZXItY29sb3Itc2t5LTE6I2UzZjdmZjstLW1vbnN0ZXItY29sb3Itc2t5LTI6I2FlZTlmZjstLW1vbnN0ZXItY29sb3Itc2t5LTM6IzAwOTRiNDstLW1vbnN0ZXItY29sb3Itc2t5LTQ6IzAwNzU5MDstLW1vbnN0ZXItY29sb3Itc2t5LTU6IzAwNDA0ZjstLW1vbnN0ZXItY29sb3Itc2t5LTY6IzAwMWYyODstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMTojZThmNmZmOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0yOiNiOWUzZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTM6IzAwOTJjNTstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNDojMDA3NDlkOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi01OiMwMDNjNTQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTY6IzAwMWQyYTstLW1vbnN0ZXItY29sb3ItYXp1cmUtMTojZThmMmZmOy0tbW9uc3Rlci1jb2xvci1henVyZS0yOiNjNmUwZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTM6IzAwOGZkYjstLW1vbnN0ZXItY29sb3ItYXp1cmUtNDojMDA3MWFmOy0tbW9uc3Rlci1jb2xvci1henVyZS01OiMwMDNiNWU7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTY6IzAwMWMzMDstLW1vbnN0ZXItY29sb3ItYmx1ZS0xOiNmMGY0ZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMjojZDRlMGZmOy0tbW9uc3Rlci1jb2xvci1ibHVlLTM6IzAwODlmYzstLW1vbnN0ZXItY29sb3ItYmx1ZS00OiMwMDZkY2E7LS1tb25zdGVyLWNvbG9yLWJsdWUtNTojMDAzODZkOy0tbW9uc3Rlci1jb2xvci1ibHVlLTY6IzAwMWEzOTstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTE6I2YzZjNmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTI6I2RlZGRmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTM6IzY1N2VmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTQ6IzAwNjFmYzstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTU6IzAwMzI4YTstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTY6IzAwMTY0OTstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTE6I2Y3ZjFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTI6I2U4ZGFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTM6IzliNzBmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTQ6Izc5NGFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTU6IzJkMGZiZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTY6IzBiMDA3NDstLW1vbnN0ZXItY29sb3ItcHVycGxlLTE6I2ZkZjRmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTI6I2Y3ZDlmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTM6I2QxNTBmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTQ6I2IwMWZlMzstLW1vbnN0ZXItY29sb3ItcHVycGxlLTU6IzY2MDA4NzstLW1vbnN0ZXItY29sb3ItcHVycGxlLTY6IzNhMDA0ZjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xOiNmZmYzZmM7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMjojZmZkN2Y2Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTM6I2Y5MTFlMDstLW1vbnN0ZXItY29sb3ItbWFnZW50YS00OiNjYTAwYjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNTojNzQwMDY4Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTY6IzQ0MDAzYzstLW1vbnN0ZXItY29sb3ItcGluay0xOiNmZmY3ZmI7LS1tb25zdGVyLWNvbG9yLXBpbmstMjojZmZkY2VjOy0tbW9uc3Rlci1jb2xvci1waW5rLTM6I2ZmMmZiMjstLW1vbnN0ZXItY29sb3ItcGluay00OiNkMjAwOGY7LS1tb25zdGVyLWNvbG9yLXBpbmstNTojNzkwMDUxOy0tbW9uc3Rlci1jb2xvci1waW5rLTY6IzRiMDAzMDstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTE6I2U1Yjg3NTstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTI6I2Q5YTM2MjstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTM6I2MwOGE0ZTstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTQ6I2E3NzEzYjstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTU6IzhmNWEyODstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTY6IzM2MDUwNTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMTojZjdmNWVmOy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yOiNlNWUyZDk7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTM6I2NiYzZiMzstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNDojYTE5ZDhhOy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC01OiM3YTc1NjY7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTY6IzUxNGQzZn1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2hlaWdodDoxMDAlfWJ1dHRvbnt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25de2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjt0cmFuc2l0aW9uOndpZHRoIDEwcyBlYXNlLWluLW91dH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9bGFiZWxde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1zZWxmOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O3RyYW5zaXRpb246d2lkdGggMTJzIGVhc2UtaW4tb3V0fVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+aW1nLFtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3Zne21hcmdpbi1sZWZ0Oi4zZW19W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmcuc3VjY2Vzc2Z1bHthbmltYXRpb246Ym91bmN5IC41cyBsaW5lYXIgZm9yd2FyZHM7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzZnVsKX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdPnN2Zy5hY3Rpdml0eXthbmltYXRpb246Ym91bmN5IC41cyBsaW5lYXIgZm9yd2FyZHM7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1hY3Rpdml0eSl9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmcuZmFpbGVke2FuaW1hdGlvbjpib3VuY3kgLjVzIGxpbmVhciBmb3J3YXJkcztjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWZhaWxlZCl9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmcuYWN0aXZpdHl7YW5pbWF0aW9uLWR1cmF0aW9uOjFzO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGU7YW5pbWF0aW9uLW5hbWU6YWN0aXZpdHk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwwLC4yLDEpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0uc3RhdGVsZXNze2Rpc3BsYXk6bm9uZX1Aa2V5ZnJhbWVzIGFjdGl2aXR5ezAle3RyYW5zZm9ybTpzY2FsZSgxKX01MCV7dHJhbnNmb3JtOnNjYWxlKC4xKX10b3t0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgYm91bmN5ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjEpfTgwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEuMTUpfTkwJXt0cmFuc2Zvcm06c2NhbGUoLjkpfXRve3RyYW5zZm9ybTpzY2FsZSgxKX19IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBTdGF0ZSwgZ2V0U3RhdGVJbnN0YW5jZUZvciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbFN5bWJvbCA9IFN5bWJvbChcImludGVybmFsU3ltYm9sXCIpO1xuXG4vKipcbiAqIFRoaXMgU3RhdGUgY2xhc3MgcmVwcmVzZW50IGEgU3RhdGUgd2l0aCBwcmVzZW50YXRpb25cbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIFN0YXRlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZXNlbnRhdGlvblxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0Y29uc3RydWN0b3Ioc3RhdGUsIHByZXNlbnRhdGlvbikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7fTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5zdGF0ZSA9IHZhbGlkYXRlU3RyaW5nKHN0YXRlKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5wcmVzZW50YXRpb24gPSB2YWxpZGF0ZVN0cmluZyhwcmVzZW50YXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzdGF0ZVxuXHQgKi9cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5zdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gcHJlc2VudGF0aW9uXG5cdCAqL1xuXHRnZXQgcHJlc2VudGF0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5wcmVzZW50YXRpb247XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFN0YXRlKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uc3RhdGUsXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5wcmVzZW50YXRpb24sXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEBzaW5jZSAxLjUuMFxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX1cbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdGVJbnN0YW5jZUZvcihzdGF0ZSkge1xuXHRzd2l0Y2ggKHN0YXRlKSB7XG5cdFx0Y2FzZSBcInN0YXRlbGVzc1wiOlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShcInN0YXRlbGVzc1wiLCBcIlwiKTtcblx0XHRjYXNlIFwic3VjY2Vzc2Z1bFwiOlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShcblx0XHRcdFx0XCJzdWNjZXNzZnVsXCIsXG5cdFx0XHRcdCc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJzdWNjZXNzZnVsXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPjxwYXRoIGQ9XCJNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0em0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNnpcIi8+PHBhdGggZD1cIk0xMC45NyA0Ljk3YS4yMzUuMjM1IDAgMCAwLS4wMi4wMjJMNy40NzcgOS40MTcgNS4zODQgNy4zMjNhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNXpcIi8+PC9zdmc+Jyxcblx0XHRcdCk7XG5cdFx0Y2FzZSBcImFjdGl2aXR5XCI6XG5cdFx0XHRyZXR1cm4gbmV3IFN0YXRlKFxuXHRcdFx0XHRcImFjdGl2aXR5XCIsXG5cdFx0XHRcdCc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJhY3Rpdml0eVwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj48Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCI4XCIvPjwvc3ZnPicsXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJmYWlsZWRcIjogLy8gaHR0cHM6Ly9pY29ucy5nZXRib290c3RyYXAuY29tL2ljb25zL2V4Y2xhbWF0aW9uLWNpcmNsZS9cblx0XHRcdHJldHVybiBuZXcgU3RhdGUoXG5cdFx0XHRcdFwiZmFpbGVkXCIsXG5cdFx0XHRcdCc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJmYWlsZWRcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+PHBhdGggZD1cIk04IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTR6bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2elwiLz48cGF0aCBkPVwiTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgMHpNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDBMNy4xIDQuOTk1elwiLz48L3N2Zz4nLFxuXHRcdFx0KTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShzdGF0ZSwgXCJcIik7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyByZWdpc3RlckN1c3RvbUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgZ2V0U3RhdGVJbnN0YW5jZUZvciwgU3RhdGUgfSBmcm9tIFwiLi90eXBlcy9zdGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgU3RhdGVCdXR0b24gfTtcblxuLyoqXG4gKiBBIHN0YXRlIGJ1dHRvbiB3aXRoIGljb25zXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24vXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24tc2ltcGxlXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgYnV0dG9uIHdpdGggaWNvbnNcbiAqL1xuY2xhc3MgU3RhdGVCdXR0b24gZXh0ZW5kcyBCdXR0b24ge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3N0YXRlLWJ1dHRvbkBAaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gc3RhdGVzIEF2YWlsYWJsZSBzdGF0dXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX0gc3RhdGVzLnN1Y2Nlc3NmdWw9IHN1Y2Nlc3NmdWxcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX0gc3RhdGVzLmFjdGl2aXR5PSBhY3Rpdml0eVxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfSBzdGF0ZXMuZmFpbGVkPSBmYWlsZWRcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX0gY3VycmVudCBjdXJyZW50IHN0YXR1c1xuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja30gYWN0aW9ucy5jbGlja1xuXHQgKiBAZXh0ZW5kcyB7QnV0dG9ufVxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vdHdicy9pY29ucy9ibG9iL21haW4vTElDRU5TRS5tZHxCb290c3RyYXAgaWNvbnMgbGljZW5zZX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdHN0YXRlczoge1xuXHRcdFx0XHRzdWNjZXNzZnVsOiBnZXRTdGF0ZUluc3RhbmNlRm9yKFwic3VjY2Vzc2Z1bFwiKSxcblx0XHRcdFx0YWN0aXZpdHk6IGdldFN0YXRlSW5zdGFuY2VGb3IoXCJhY3Rpdml0eVwiKSxcblx0XHRcdFx0ZmFpbGVkOiBnZXRTdGF0ZUluc3RhbmNlRm9yKFwiZmFpbGVkXCIpLFxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnQ6IGdldFN0YXRlSW5zdGFuY2VGb3IoXCJzdGF0ZWxlc3NcIiksXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYnV0dG9uLlxuXHQgKiBJZiBhIHRpbWVvdXQgaXMgc2V0LCB0aGUgc3RhdGUgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIGFmdGVyIHRoZVxuXHQgKiBzcGVjaWZpZWQgdGltZS5cblx0ICpcblx0ICogQHNpbmNlIDMuMTguMCBhIHByZXZpb3VzbHkgc2V0IHRpbWVvdXQgaXMgY2xlYXJlZFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uU3RhdGVCdXR0b259XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlXG5cdCAqL1xuXHRzZXRTdGF0ZShzdGF0ZSwgdGltZW91dCkge1xuXHRcdGNvbnN0IHRpbWVvdXRTeW1ib2wgPSBTeW1ib2wuZm9yKFwidGltZW91dFwiKTtcblx0XHRpZiAodGhpc1t0aW1lb3V0U3ltYm9sXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpc1t0aW1lb3V0U3ltYm9sXSk7XG5cdFx0XHRkZWxldGUgdGhpc1t0aW1lb3V0U3ltYm9sXTtcblx0XHR9XG5cblx0XHRjb25zdCBvYmogPSB0aGlzLmdldE9wdGlvbihgc3RhdGVzLiR7dmFsaWRhdGVTdHJpbmcoc3RhdGUpfWApO1xuXHRcdGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm90IGZvdW5kXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0T3B0aW9uKFwiY3VycmVudFwiLCB2YWxpZGF0ZUluc3RhbmNlKG9iaiwgU3RhdGUpKTtcblxuXHRcdGlmIChpc0ludGVnZXIodGltZW91dCkgJiYgdGltZW91dCA+IDApIHtcblx0XHRcdHRoaXNbdGltZW91dFN5bWJvbF0gPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZW1vdmVTdGF0ZSgpO1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lb3V0U3ltYm9sXTtcblx0XHRcdH0sIHRpbWVvdXQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlN0YXRlQnV0dG9ufVxuXHQgKi9cblx0cmVtb3ZlU3RhdGUoKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJjdXJyZW50XCIsIGdldFN0YXRlSW5zdGFuY2VGb3IoXCJzdGF0ZWxlc3NcIikpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldFN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcImN1cnJlbnRcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXN0YXRlLWJ1dHRvblwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0FycmF5PENTU1N0eWxlU2hlZXQ+fVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0Y29uc3Qgc3R5bGVzID0gQnV0dG9uLmdldENTU1N0eWxlU2hlZXQoKTtcblx0XHRzdHlsZXMucHVzaChTdGF0ZUJ1dHRvblN0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBzdHlsZXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICA8YnV0dG9uIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGlzYWJsZWQgcGF0aDpkaXNhYmxlZCB8IGlmOnRydWUsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5idXR0b25cIlxuICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiPlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwibGFiZWxcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmJ1dHRvblwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhdGVcIlxuXHRcdFx0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjdXJyZW50LnN0YXRlXCJcblx0XHRcdCBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y3VycmVudC5wcmVzZW50YXRpb25cIj48L2Rpdj5cbiAgICA8L2J1dHRvbj5cbjwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChTdGF0ZUJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHsgREVMSU1JVEVSLCBQYXRoZmluZGVyLCBXSUxEQ0FSRCB9IGZyb20gXCIuL3BhdGhmaW5kZXIubWpzXCI7XG5cbmV4cG9ydCB7IGJ1aWxkTWFwLCBQQVJFTlQsIGFzc2VtYmxlUGFydHMgfTtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBQQVJFTlQgPSBcIl5cIjtcblxuLyoqXG4gKiBNYXBzIGNhbiBiZSBlYXNpbHkgY3JlYXRlZCBmcm9tIGRhdGEgb2JqZWN0cyB3aXRoIHRoZSBoZWxwIG9mIHRoZSBmdW5jdGlvbiBgYnVpbGRNYXAoKWAuXG4gKlxuICogVGhlIHBhdGggY2FuIGJlIHNwZWNpZmllZCBhcyBlaXRoZXIgYSBzaW1wbGUgZGVmaW5pdGlvbiBhLmIuYyBvciBhIHRlbXBsYXRlICR7YS5iLmN9LlxuICogS2V5IGFuZCB2YWx1ZSBjYW4gYmUgZWl0aGVyIGEgZGVmaW5pdGlvbiBvciBhIHRlbXBsYXRlLiBUaGUga2V5IGRvZXMgbm90IGhhdmUgdG8gYmUgZGVmaW5lZC5cbiAqIFRoZSB0ZW1wbGF0ZXMgZGV0ZXJtaW5lIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBrZXlzIGFuZCB0aGUgdmFsdWUgb2YgdGhlIG1hcC4gRWl0aGVyIGEgc2luZ2xlIHZhbHVlXG4gKiBpZCBjYW4gYmUgdGFrZW4gb3IgYSBjb21wb3NpdGUga2V5ICR7aWR9ICR7bmFtZX0gY2FuIGJlIHVzZWQuXG4gKlxuICogSWYgeW91IHdhbnQgdG8gYWNjZXNzIHRoZSB2YWx1ZXMgb2YgdGhlIHBhcmVudCBkYXRhIHNldCwgeW91IGhhdmUgdG8gdXNlIHRoZSBeIGNoYXJhY3RlciwgZm9yIGV4YW1wbGUsICR7aWR9ICR7Xi5uYW1lfS5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvZGF0YS9idWlsZG1hcC5tanNcbiAqXG4gKiBAcGFyYW0geyp9IHN1YmplY3QgLSBUaGUgZGF0YSBvYmplY3QgZnJvbSB3aGljaCB0aGUgbWFwIHdpbGwgYmUgY3JlYXRlZFxuICogQHBhcmFtIHtzdHJpbmd8TW9uc3Rlci5EYXRhfmV4YW1wbGVTZWxlY3RvckNhbGxiYWNrfSBzZWxlY3RvciAtIFRoZSBwYXRoIHRvIHRoZSBkYXRhIG9iamVjdCwgb3IgYSBjYWxsYmFjayB0aGF0IHJldHVybnMgYSBtYXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlVGVtcGxhdGVdIC0gQSB0ZW1wbGF0ZSBmb3IgdGhlIHZhbHVlIG9mIHRoZSBtYXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleVRlbXBsYXRlXSAtIEEgdGVtcGxhdGUgZm9yIHRoZSBrZXkgb2YgdGhlIG1hcC5cbiAqIEBwYXJhbSB7TW9uc3Rlci5EYXRhfmV4YW1wbGVGaWx0ZXJDYWxsYmFja30gW2ZpbHRlcl0gLSBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGZpbHRlciBvdXQgdmFsdWVzLlxuICogQHJldHVybiB7Kn0gLSBUaGUgY3JlYXRlZCBtYXAuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IC0gSWYgdGhlIHZhbHVlIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGEgZnVuY3Rpb24uXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IC0gSWYgdGhlIHNlbGVjdG9yIGNhbGxiYWNrIGRvZXMgbm90IHJldHVybiBhIG1hcC5cbiAqKi9cbmZ1bmN0aW9uIGJ1aWxkTWFwKHN1YmplY3QsIHNlbGVjdG9yLCB2YWx1ZVRlbXBsYXRlLCBrZXlUZW1wbGF0ZSwgZmlsdGVyKSB7XG5cdHJldHVybiBhc3NlbWJsZVBhcnRzKHN1YmplY3QsIHNlbGVjdG9yLCBmaWx0ZXIsIGZ1bmN0aW9uICh2LCBrLCBtKSB7XG5cdFx0ayA9IGJ1aWxkKHYsIGtleVRlbXBsYXRlLCBrKTtcblx0XHR2ID0gYnVpbGQodiwgdmFsdWVUZW1wbGF0ZSk7XG5cdFx0dGhpcy5zZXQoaywgdik7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoZSBhc3NlbWJsZVBhcnRzIGZ1bmN0aW9uIGlzIGEgcHJpdmF0ZSBmdW5jdGlvbiB0aGF0IGhlbHBzIGluIGJ1aWxkaW5nIGEgbWFwIGZyb20gYSBzdWJqZWN0IG9iamVjdCBiYXNlZCBvbiBhIHByb3ZpZGVkXG4gKiBzZWxlY3Rvci4gVGhlIHNlbGVjdG9yIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcgb3IgYSBjYWxsYmFjayBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSB1c2VkIGFzIGFcbiAqIGhlbHBlciBmdW5jdGlvbiBieSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIG1vZHVsZS5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gdGFrZXMgZm91ciBwYXJhbWV0ZXJzOlxuICpcbiAqIHN1YmplY3Q6IFRoZSBzdWJqZWN0IG9iamVjdCBmcm9tIHdoaWNoIHRoZSBtYXAgaXMgdG8gYmUgYnVpbHRcbiAqIHNlbGVjdG9yOiBUaGUgc2VsZWN0b3IgdG8gZGV0ZXJtaW5lIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG1hcC4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGEgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBmaWx0ZXIgKG9wdGlvbmFsKTogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGZpbHRlciB2YWx1ZXMgYmFzZWQgb24gc29tZSBjcml0ZXJpYS5cbiAqIGNhbGxiYWNrOiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSBtYXAuXG4gKiBJZiB0aGUgc2VsZWN0b3IgcGFyYW1ldGVyIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24sIGl0IGlzIGV4ZWN1dGVkIHBhc3NpbmcgdGhlIHN1YmplY3QgYXMgaXRzIGFyZ3VtZW50LFxuICogYW5kIHRoZSByZXN1bHRpbmcgdmFsdWUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBNYXAuIE90aGVyd2lzZSwgaWYgdGhlIHNlbGVjdG9yIHBhcmFtZXRlciBpcyBhIHN0cmluZyxcbiAqIGJ1aWxkRmxhdE1hcCBpcyBjYWxsZWQgdG8gYnVpbGQgYSBmbGF0IG1hcCB3aXRoIGtleXMgYW5kIHZhbHVlcyBleHRyYWN0ZWQgZnJvbSB0aGUgc3ViamVjdCBvYmplY3QgYmFzZWQgb24gdGhlIHNlbGVjdG9yLlxuICpcbiAqIElmIHRoZSBmaWx0ZXIgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGJlIHVzZWQgdG8gZmlsdGVyIG91dCBjZXJ0YWluIGVsZW1lbnRzIGZyb20gdGhlIG1hcCwgYmFzZWQgb24gc29tZVxuICogY3JpdGVyaWEuIFRoZSBjYWxsYmFjayB3aWxsIGJlIHBhc3NlZCB0aGUgdmFsdWUsIGtleSwgYW5kIG1hcCBvYmplY3QsIGFuZCBpZiBpdCByZXR1cm5zIGZhbHNlLCB0aGUgZWxlbWVudCB3aWxsIGJlIHNraXBwZWQuXG4gKlxuICogRm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgbWFwLCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqIHY6IFRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudFxuICogazogVGhlIGtleSBvZiB0aGUgZWxlbWVudFxuICogbTogVGhlIG1hcCBvYmplY3RcbiAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IG1hcCB3aXRoIHRoZSBwcm9jZXNzZWQgdmFsdWVzLiBJZiBtYXAgaXMgbm90IGFuIGluc3RhbmNlIG9mIE1hcCwgYW4gZW1wdHkgbWFwIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogRXhhbXBsZSBVc2FnZTpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCBvYmogPSB7XG4gKiAgIG5hbWU6IFwiSm9oblwiLFxuICogICBhZ2U6IDMwLFxuICogICBhZGRyZXNzOiB7XG4gKiAgICAgY2l0eTogXCJOZXcgWW9ya1wiLFxuICogICAgIHN0YXRlOiBcIk5ZXCIsXG4gKiAgICAgY291bnRyeTogXCJVU0FcIixcbiAqICAgfSxcbiAqIH07XG4gKlxuICogY29uc3Qgc2VsZWN0b3IgPSBcImFkZHJlc3NcIjtcbiAqXG4gKiBjb25zdCBtYXAgPSBhc3NlbWJsZVBhcnRzKG9iaiwgc2VsZWN0b3IsIG51bGwsIGZ1bmN0aW9uICh2LCBrLCBtKSB7XG4gKiAgIHRoaXMuc2V0KGssIHYpO1xuICogfSk7XG4gKlxuICogY29uc29sZS5sb2cobWFwKTtcbiAqIC8vIE91dHB1dDogTWFwKDMpIHtcbiAqIC8vICAgXCJhZGRyZXNzLmNpdHlcIiA9PiBcIk5ldyBZb3JrXCIsXG4gKiAvLyAgIFwiYWRkcmVzcy5zdGF0ZVwiID0+IFwiTllcIixcbiAqIC8vICAgXCJhZGRyZXNzLmNvdW50cnlcIiA9PiBcIlVTQVwiXG4gKiAvLyB9XG4gKiBgYGBcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdCAtIFRoZSBzdWJqZWN0IG9iamVjdCBmcm9tIHdoaWNoIHRoZSBtYXAgaXMgdG8gYmUgYnVpbHQuXG4gKiBAcGFyYW0ge3N0cmluZ3xNb25zdGVyLkRhdGF+ZXhhbXBsZVNlbGVjdG9yQ2FsbGJhY2t9IHNlbGVjdG9yIC0gVGhlIHNlbGVjdG9yIHRvIGRldGVybWluZSB0aGUgc3RydWN0dXJlIG9mIHRoZSBtYXAuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNb25zdGVyLkRhdGF+ZXhhbXBsZUZpbHRlckNhbGxiYWNrfSBbZmlsdGVyXSAtIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgdmFsdWVzIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIG1hcC5cbiAqIEByZXR1cm4ge01hcH0gLSBBIG5ldyBtYXAgd2l0aCB0aGUgcHJvY2Vzc2VkIHZhbHVlcy5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gLSBXaGVuIHNlbGVjdG9yIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGEgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGFzc2VtYmxlUGFydHMoc3ViamVjdCwgc2VsZWN0b3IsIGZpbHRlciwgY2FsbGJhY2spIHtcblx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG5cdGxldCBtYXA7XG5cdGlmIChpc0Z1bmN0aW9uKHNlbGVjdG9yKSkge1xuXHRcdG1hcCA9IHNlbGVjdG9yKHN1YmplY3QpO1xuXHRcdGlmICghKG1hcCBpbnN0YW5jZW9mIE1hcCkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgc2VsZWN0b3IgY2FsbGJhY2sgbXVzdCByZXR1cm4gYSBtYXBcIik7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzU3RyaW5nKHNlbGVjdG9yKSkge1xuXHRcdG1hcCA9IG5ldyBNYXAoKTtcblx0XHRidWlsZEZsYXRNYXAuY2FsbChtYXAsIHN1YmplY3QsIHNlbGVjdG9yKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwic2VsZWN0b3IgaXMgbmVpdGhlciBhIHN0cmluZyBub3IgYSBmdW5jdGlvblwiKTtcblx0fVxuXG5cdGlmICghKG1hcCBpbnN0YW5jZW9mIE1hcCkpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0bWFwLmZvckVhY2goKHYsIGssIG0pID0+IHtcblx0XHRpZiAoaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG5cdFx0XHRpZiAoZmlsdGVyLmNhbGwobSwgdiwgaykgIT09IHRydWUpIHJldHVybjtcblx0XHR9XG5cblx0XHRjYWxsYmFjay5jYWxsKHJlc3VsdCwgdiwgaywgbSk7XG5cdH0pO1xuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzdWJqZWN0XG4gKiBAcGFyYW0gc2VsZWN0b3JcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBwYXJlbnRNYXBcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRmxhdE1hcChzdWJqZWN0LCBzZWxlY3Rvciwga2V5LCBwYXJlbnRNYXApIHtcblx0Y29uc3QgY3VycmVudE1hcCA9IG5ldyBNYXAoKTtcblxuXHRjb25zdCByZXN1bHRMZW5ndGggPSB0aGlzLnNpemU7XG5cblx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSBrZXkgPSBbXTtcblxuXHRjb25zdCBwYXJ0cyA9IHNlbGVjdG9yLnNwbGl0KERFTElNSVRFUik7XG5cdGxldCBjdXJyZW50ID0gXCJcIjtcblx0Y29uc3QgY3VycmVudFBhdGggPSBbXTtcblx0ZG8ge1xuXHRcdGN1cnJlbnQgPSBwYXJ0cy5zaGlmdCgpO1xuXHRcdGN1cnJlbnRQYXRoLnB1c2goY3VycmVudCk7XG5cblx0XHRpZiAoY3VycmVudCA9PT0gV0lMRENBUkQpIHtcblx0XHRcdGNvbnN0IGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKHN1YmplY3QpO1xuXHRcdFx0bGV0IG1hcDtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bWFwID0gZmluZGVyLmdldFZpYShjdXJyZW50UGF0aC5qb2luKERFTElNSVRFUikpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRjb25zdCBhID0gZTtcblx0XHRcdFx0bWFwID0gbmV3IE1hcCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IFtrLCBvXSBvZiBtYXApIHtcblx0XHRcdFx0Y29uc3QgY29weUtleSA9IGNsb25lKGtleSk7XG5cblx0XHRcdFx0Y3VycmVudFBhdGgubWFwKChhKSA9PiB7XG5cdFx0XHRcdFx0Y29weUtleS5wdXNoKGEgPT09IFdJTERDQVJEID8gayA6IGEpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRjb25zdCBrayA9IGNvcHlLZXkuam9pbihERUxJTUlURVIpO1xuXHRcdFx0XHRjb25zdCBzdWIgPSBidWlsZEZsYXRNYXAuY2FsbChcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdG8sXG5cdFx0XHRcdFx0cGFydHMuam9pbihERUxJTUlURVIpLFxuXHRcdFx0XHRcdGNvcHlLZXksXG5cdFx0XHRcdFx0byxcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoaXNPYmplY3Qoc3ViKSAmJiBwYXJlbnRNYXAgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHN1YltQQVJFTlRdID0gcGFyZW50TWFwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y3VycmVudE1hcC5zZXQoa2ssIHN1Yik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IHdoaWxlIChwYXJ0cy5sZW5ndGggPiAwKTtcblxuXHQvLyBubyBzZXQgaW4gY2hpbGQgcnVuXG5cdGlmIChyZXN1bHRMZW5ndGggPT09IHRoaXMuc2l6ZSkge1xuXHRcdGZvciAoY29uc3QgW2ssIG9dIG9mIGN1cnJlbnRNYXApIHtcblx0XHRcdHRoaXMuc2V0KGssIG8pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdWJqZWN0O1xufVxuXG4vKipcbiAqIFdpdGggdGhlIGhlbHAgb2YgdGhpcyBmaWx0ZXIgY2FsbGJhY2ssIHZhbHVlcyBjYW4gYmUgZmlsdGVyZWQgb3V0LiBPbmx5IGlmIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGUgdmFsdWUgaXMgdGFrZW4gZm9yIHRoZSBtYXAuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuRGF0YX5leGFtcGxlRmlsdGVyQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgIEtleVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5EYXRhLmJ1aWxkTWFwfVxuICovXG5cbi8qKlxuICogQWx0ZXJuYXRpdmVseSB0byBhIHN0cmluZyBzZWxlY3RvciBhIGNhbGxiYWNrIGNhbiBiZSBzcGVjaWZpZWQuIHRoaXMgbXVzdCByZXR1cm4gYSBtYXAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7YnVpbGRNYXB9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2RhdGEvYnVpbGRtYXAubWpzJztcbiAqXG4gKiBsZXQgb2JqID0ge1xuICogICAgICAgICAgICAgICAgXCJkYXRhXCI6IFtcbiAqICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkNhc3NhbmRyYVwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAyLCBsYWJlbDogXCJYU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCwgbGFiZWw6IFwiTFwiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJZZXNzZXkhXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIiwgcHJpY2U6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LCBsYWJlbDogXCJMXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICB9O1xuICpcbiAqIGxldCBjYWxsYmFjayA9IGZ1bmN0aW9uIChzdWJqZWN0KSB7XG4gKiAgICAgICAgICAgICAgICBsZXQgbSA9IG5ldyBNYXA7XG4gKlxuICogICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaSwgYl0gb2YgT2JqZWN0LmVudHJpZXMoc3ViamVjdC5kYXRhKSkge1xuICpcbiAqICAgICAgICAgICAgICAgICAgICBsZXQga2V5MSA9IGk7XG4gKlxuICogICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2osIGNdIG9mIE9iamVjdC5lbnRyaWVzKGIuZW5yaWNobWVudC52YXJpYW50cykpIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleTIgPSBqO1xuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgZF0gb2YgT2JqZWN0LmVudHJpZXMoYy5wcmljZSkpIHtcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5MyA9IGs7XG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5uYW1lID0gYi5uYW1lO1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5sYWJlbCA9IGMubGFiZWw7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmlkID0gW2tleTEsIGtleTIsIGtleTNdLmpvaW4oJy4nKTtcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLnNldChkLmlkLCBkKTtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgfVxuICpcbiAqICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICByZXR1cm4gbTtcbiAqICAgICAgICAgICAgfVxuICpcbiAqIGxldCBtYXAgPSBidWlsZE1hcChvYmosIGNhbGxiYWNrLCAnJHtuYW1lfSAke3ZrfScsICcke2lkfScpXG4gKlxuICogLy8gXHUyMUE2IE1hcCgzKSB7XG4gKiAvLyAgXCIwLjAuMFwiOlwiQ2Fzc2FuZHJhIDEyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4wLjFcIjpcIkNhc3NhbmRyYSAxMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMS4wXCI6XCJDYXNzYW5kcmEgMjIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjEuMVwiOlwiQ2Fzc2FuZHJhIDIyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4yLjBcIjpcIkNhc3NhbmRyYSAzMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMi4xXCI6XCJDYXNzYW5kcmEgMzIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjMuMFwiOlwiQ2Fzc2FuZHJhIDQyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4zLjFcIjpcIkNhc3NhbmRyYSA0Mi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMC4wXCI6XCJZZXNzZXkhIDEyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4wLjFcIjpcIlllc3NleSEgMTIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjEuMFwiOlwiWWVzc2V5ISAyMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMS4xXCI6XCJZZXNzZXkhIDIyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4yLjBcIjpcIlllc3NleSEgMzIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjIuMVwiOlwiWWVzc2V5ISAzMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMy4wXCI6XCJZZXNzZXkhIDQyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4zLjFcIjpcIlllc3NleSEgNDIuMTIgXHUyMEFDXCJcbiAqIC8vIH1cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5EYXRhfmV4YW1wbGVTZWxlY3RvckNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHN1YmplY3Qgc3ViamVjdFxuICogQHJldHVybiBNYXBcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTcuMFxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5EYXRhLmJ1aWxkTWFwfVxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdFxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBkZWZpbml0aW9uXG4gKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gYnVpbGQoc3ViamVjdCwgZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKSB7XG5cdGlmIChkZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWUgPyBkZWZhdWx0VmFsdWUgOiBzdWJqZWN0O1xuXHR2YWxpZGF0ZVN0cmluZyhkZWZpbml0aW9uKTtcblxuXHRjb25zdCByZWdleHAgPSAvKD88cGxhY2Vob2xkZXI+XFwkeyg/PHBhdGg+W2EtelxcXkEtWi5cXC1fMC05XSopfSkvZ207XG5cdGNvbnN0IGFycmF5ID0gWy4uLmRlZmluaXRpb24ubWF0Y2hBbGwocmVnZXhwKV07XG5cblx0Y29uc3QgZmluZGVyID0gbmV3IFBhdGhmaW5kZXIoc3ViamVjdCk7XG5cblx0aWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBmaW5kZXIuZ2V0VmlhKGRlZmluaXRpb24pO1xuXHR9XG5cblx0YXJyYXkuZm9yRWFjaCgoYSkgPT4ge1xuXHRcdGNvbnN0IGdyb3VwcyA9IGE/LltcImdyb3Vwc1wiXTtcblx0XHRjb25zdCBwbGFjZWhvbGRlciA9IGdyb3Vwcz8uW1wicGxhY2Vob2xkZXJcIl07XG5cdFx0aWYgKHBsYWNlaG9sZGVyID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuXHRcdGNvbnN0IHBhdGggPSBncm91cHM/LltcInBhdGhcIl07XG5cblx0XHRsZXQgdiA9IGZpbmRlci5nZXRWaWEocGF0aCk7XG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkgdiA9IGRlZmF1bHRWYWx1ZTtcblxuXHRcdGRlZmluaXRpb24gPSBkZWZpbml0aW9uLnJlcGxhY2VBbGwocGxhY2Vob2xkZXIsIHYpO1xuXHR9KTtcblxuXHRyZXR1cm4gZGVmaW5pdGlvbjtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBTZWxlY3RTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBTZWxlY3RTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0U2VsZWN0U3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBzZWxlY3QgeyBcbi5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja30ubW9uc3Rlci1iYWRnZS1wcmltYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LC5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LC5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LC5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUsLm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3N7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MsLm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZ3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZywubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1lcnJvcntwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3IsLm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7ZmxleDo0IDAgOTAlO21pbi1oZWlnaHQ6MS40ZW07b3ZlcmZsb3c6YXV0bztzY3JvbGxiYXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtzY3JvbGxiYXItd2lkdGg6dGhpbjt3aWR0aDoxMDAlfS5kLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250YWluZXJdLm9wZW57LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTcuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwbDYgNmEuNS41IDAgMCAxLS43MDguNzA4TDggNS43MDdsLTUuNjQ2IDUuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNy42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA1LjcwN2wtNS42NDYgNS42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0uY2xlYXIsW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0ub3BlbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyIGNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOi44ZW07bWFzay1zaXplOi44ZW19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0uY2xlYXJ7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWNjZW50LWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKTstby1ib3JkZXItaW1hZ2U6aW5pdGlhbDtib3JkZXItaW1hZ2U6aW5pdGlhbDtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGgpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjEwMCU7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6LjRyZW0gLjZyZW07d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpmaWxsLWF2YWlsYWJsZX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHh9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXTpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1zZWxlY3Rpb25de2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2dhcDo1cHg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bWFyZ2luOjVweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uLWNvbnRyb2xde21hcmdpbi1yaWdodDo4cHh9W2RhdGEtbW9uc3Rlci1yb2xlPWJhZGdlXXtkaXNwbGF5OmlubGluZS1mbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1iYWRnZS1sYWJlbF17YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7Z2FwOjdweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn1bZGF0YS1tb25zdGVyLXJvbGU9ZmlsdGVyXSxbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLWZpbHRlcl17ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoyMDA7b3JkZXI6OTk5OTk5OTk7dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWZpbHRlcl0uYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JvcmRlcjowO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTttaW4td2lkdGg6NDAlO291dGxpbmU6bm9uZTt2aXNpYmlsaXR5OnZpc2libGV9LmFjdGl2ZVtkYXRhLW1vbnN0ZXItcm9sZT1maWx0ZXJdW25hbWU9cG9wcGVyLWZpbHRlcl17aGVpZ2h0OjEuNWVtO21hcmdpbjoyLjVlbTtwYWRkaW5nOjJweDt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkqMil9Lm9wdGlvbi1maWx0ZXItY29udHJvbHthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7ZGlzcGxheTpmbGV4O2hlaWdodDoyLjVlbTttYXJnaW46LTEuMWVtIC0xLjFlbSAuM2VtfVtkYXRhLW1vbnN0ZXItcm9sZT1yZW1vdmUtYmFkZ2Vde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2hlaWdodDoxNnB4O21hcmdpbi1sZWZ0OjVweDstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO29yZGVyOjJ9W2RhdGEtbW9uc3Rlci1yb2xlPXJlbW92ZS1iYWRnZV0sW2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXXstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyIGNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOi44ZW07bWFzay1zaXplOi44ZW07bWluLWhlaWdodDoxNnB4O3dpZHRoOjE2cHh9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTEuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggMTAuMjkzbDUuNjQ2LTUuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhsLTYgNmEuNS41IDAgMCAxLS43MDggMGwtNi02YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xLjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDEwLjI5M2w1LjY0Ni01LjY0N2EuNS41IDAgMCAxIC43MDguNzA4bC02IDZhLjUuNSAwIDAgMS0uNzA4IDBsLTYtNmEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5vcGVuW2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNy42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA1LjcwN2wtNS42NDYgNS42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J003LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDUuNzA3bC01LjY0NiA1LjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOHonLyUzRSUzQy9zdmclM0VcXFwiKX0uZW1wdHlbZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktZGFzaC1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQgOGEuNS41IDAgMCAxIC41LS41aDdhLjUuNSAwIDAgMSAwIDFoLTdBLjUuNSAwIDAgMSA0IDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1kYXNoLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5jbGVhcltkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKX0uZXJyb3JbZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpfS5sb2FkaW5nW2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXXthbmltYXRpb24tZHVyYXRpb246MXM7YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDppbmZpbml0ZTthbmltYXRpb24tbmFtZTphY3Rpdml0eTthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLDAsLjIsMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdhY3Rpdml0eScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ2NpcmNsZSBjeD0nOCcgY3k9JzgnIHI9JzgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdhY3Rpdml0eScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ2NpcmNsZSBjeD0nOCcgY3k9JzgnIHI9JzgnLyUzRSUzQy9zdmclM0VcXFwiKX1Aa2V5ZnJhbWVzIGFjdGl2aXR5ezAle3RyYW5zZm9ybTpzY2FsZSgxKX01MCV7dHJhbnNmb3JtOnNjYWxlKC4xKX10b3t0cmFuc2Zvcm06c2NhbGUoMSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MTtzY3JvbGxiYXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtzY3JvbGxiYXItd2lkdGg6dGhpbn1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjZweCA1cHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0gbGFiZWx7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXSBsYWJlbD5kaXZ7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW5vLW9wdGlvbnNde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2JvcmRlci1yYWRpdXM6LjJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCk7bWFyZ2luOjEuMWVtIDEuMWVtIDA7cGFkZGluZzouM2VtIC44ZW19LnNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV0sW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9aGlkZGVuXXtkaXNwbGF5Om5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWZvY3VzZWQ9dHJ1ZV17b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpO291dGxpbmUtb2Zmc2V0Oi0ycHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0+aW5wdXQ6Zm9jdXMsW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0+bGFiZWw6Zm9jdXN7b3V0bGluZTpub25lfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBidWlsZE1hcCB9IGZyb20gXCIuLi8uLi9kYXRhL2J1aWxkbWFwLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IHBvc2l0aW9uUG9wcGVyIH0gZnJvbSBcIi4vdXRpbC9mbG9hdGluZy11aS5tanNcIjtcbmltcG9ydCB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuLFxuXHRmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlLFxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbixcbn0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udHJvbCB9IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tY29udHJvbC5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHtcblx0ZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQsXG5cdGZpcmVDdXN0b21FdmVudCxcblx0ZmlyZUV2ZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgRm9ybWF0dGVyIH0gZnJvbSBcIi4uLy4uL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IElEIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHtcblx0aXNBcnJheSxcblx0aXNGdW5jdGlvbixcblx0aXNJbnRlZ2VyLFxuXHRpc0l0ZXJhYmxlLFxuXHRpc09iamVjdCxcblx0aXNQcmltaXRpdmUsXG5cdGlzU3RyaW5nLFxufSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQXJyYXksIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgUHJvY2Vzc2luZyB9IGZyb20gXCIuLi8uLi91dGlsL3Byb2Nlc3NpbmcubWpzXCI7XG5pbXBvcnQgeyBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBTZWxlY3RTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9zZWxlY3QubWpzXCI7XG5pbXBvcnQge1xuXHRnZXREb2N1bWVudFRyYW5zbGF0aW9ucyxcblx0VHJhbnNsYXRpb25zLFxufSBmcm9tIFwiLi4vLi4vaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmV4cG9ydCB7XG5cdFNlbGVjdCxcblx0cG9wcGVyRWxlbWVudFN5bWJvbCxcblx0Z2V0U3VtbWFyeVRlbXBsYXRlLFxuXHRnZXRTZWxlY3Rpb25UZW1wbGF0ZSxcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IG5vT3B0aW9uc0F2YWlsYWJsZU1lc3NhZ2UgPSBcIk5vIG9wdGlvbnMgYXZhaWxhYmxlLlwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBjbGlja1RvTG9hZE9wdGlvbnNNZXNzYWdlID0gXCJDbGljayB0byBsb2FkIG9wdGlvbnMuXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBrZXlGaWx0ZXJFdmVudFN5bWJvbCA9IFN5bWJvbChcImtleUZpbHRlckV2ZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBsYXp5TG9hZERvbmVTeW1ib2wgPSBTeW1ib2woXCJsYXp5TG9hZERvbmVcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGlzTG9hZGluZ1N5bWJvbCA9IFN5bWJvbChcImlzTG9hZGluZ1wiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBjbG9zZUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNsb3NlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGNsZWFyT3B0aW9uRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xlYXJPcHRpb25FdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBrZXlFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJrZXlFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgbGFzdEZldGNoZWREYXRhU3ltYm9sID0gU3ltYm9sKFwibGFzdEZldGNoZWREYXRhXCIpO1xuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBpbnB1dEV2ZW50SGFuZGxlciA9IFN5bWJvbChcImlucHV0RXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGNoYW5nZUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNoYW5nZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHNlbGVjdGlvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzZWxlY3Rpb25FbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRhaW5lckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250YWluZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGlubGluZUZpbHRlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJpbmxpbmVGaWx0ZXJFbGVtZW50XCIpO1xuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRmlsdGVyRWxlbWVudFwiKTtcbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcblx0XCJwb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50XCIsXG4pO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IG9wdGlvbnNFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwib3B0aW9uc0VsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qgbm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm5vT3B0aW9uc0F2YWlsYWJsZUVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qgc3RhdHVzT3JSZW1vdmVCYWRnZXNFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic3RhdHVzT3JSZW1vdmVCYWRnZXNFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbCA9IFN5bWJvbChcIkBAYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRpc2FibGVkUmVxdWVzdE1hcmtlciA9IFN5bWJvbChcIkBAZGlzYWJsZWRSZXF1ZXN0TWFya2VyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBGT0NVU19ESVJFQ1RJT05fVVAgPSAxO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgRk9DVVNfRElSRUNUSU9OX0RPV04gPSAyO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBGSUxURVJfTU9ERV9SRU1PVEUgPSBcInJlbW90ZVwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBGSUxURVJfTU9ERV9PUFRJT05TID0gXCJvcHRpb25zXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9NT0RFX0RJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBGSUxURVJfUE9TSVRJT05fUE9QUEVSID0gXCJwb3BwZXJcIjtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9QT1NJVElPTl9JTkxJTkUgPSBcImlubGluZVwiO1xuXG4vKipcbiAqIEEgc2VsZWN0IGNvbnRyb2wgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWxlY3Qgb25lIG9yIG1vcmUgb3B0aW9ucyBmcm9tIGEgbGlzdC5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC13aXRoLW9wdGlvbnMgU2VsZWN0IHdpdGggb3B0aW9uc1xuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QtbXVsdGlwbGUgTXVsdGlwbGUgc2VsZWN0aW9uXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC1maWx0ZXIgRmlsdGVyXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC1mZXRjaCBGZXRjaCBvcHRpb25zXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC1sYXp5IExhenkgbG9hZFxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QtcmVtb3RlLWZpbHRlciBSZW1vdGUgZmlsdGVyXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHNlbGVjdCBjb250cm9sIHRoYXQgY2FuIG1ha2UgeW91ciBsaWZlIGVhc2llciBhbmQgYWxzbyBsb29rcyBnb29kLlxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VkXG4gKi9cbmNsYXNzIFNlbGVjdCBleHRlbmRzIEN1c3RvbUNvbnRyb2wge1xuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0aW5pdE9wdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge1N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3NlbGVjdEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9mIHRoZSBTZWxlY3Rcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBjb25zb2xlLmxvZyhlLnZhbHVlKVxuXHQgKiAvLyBcdTIxQTYgMVxuXHQgKiAvLyBcdTIxQTYgWycxJywnMiddXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXQgdmFsdWUoKSB7XG5cdFx0cmV0dXJuIGNvbnZlcnRTZWxlY3Rpb25Ub1ZhbHVlLmNhbGwodGhpcywgdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIikpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9hdHRhY2hJbnRlcm5hbHN9XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IGZvcm1Bc3NvY2lhdGVkKCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBzZWxlY3Rpb25cblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBlLnZhbHVlPTFcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fSB2YWx1ZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1zZWxlY3RlZCB0aGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBzZXRcblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRWYWx1ZVRvU2VsZWN0aW9uLmNhbGwodGhpcywgdmFsdWUpO1xuXHRcdHNldFNlbGVjdGlvblxuXHRcdFx0LmNhbGwodGhpcywgcmVzdWx0LnNlbGVjdGlvbilcblx0XHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0b2dnbGVFdmVudFR5cGU9Y2xpY2ssdG91Y2ggTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgZHJvcGRvd25cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkZWxlZ2F0ZXNGb2N1cz1mYWxzZSBsb3JlbSBbc2VlIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU2hhZG93Um9vdC9kZWxlZ2F0ZXNGb2N1cylcblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gb3B0aW9ucyBTZWxlY3Rpb24gb2Yga2V5IGlkZW50aWZpZXIgcGFpcnMgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24gYW5kIGRpc3BsYXllZCBpbiB0aGUgZHJvcGRvd24uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvcHRpb25zW10ubGFiZWxcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG9wdGlvbnNbXS52YWx1ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gb3B0aW9uc1tdLnZpc2liaWxpdHkgaGlkZGVuIG9yIHZpc2libGVcblx0ICogQHByb3BlcnR5IHtBcnJheX0gc2VsZWN0aW9uIFNlbGVjdGVkIG9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtJbnRlZ2VyfSBzaG93TWF4T3B0aW9ucz0xMCBNYXhpbXVtIG51bWJlciBvZiB2aXNpYmxlIG9wdGlvbnMgYmVmb3JlIGEgc2Nyb2xsIGJhciBzaG91bGQgYmUgZGlzcGxheWVkLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZT1yYWRpbyBNdWx0aXBsZSAoY2hlY2tib3gpIG9yIHNpbmdsZSBzZWxlY3Rpb24gKHJhZGlvKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZT0ocmFuZG9tIGlkKSBOYW1lIG9mIHRoZSBmb3JtIGZpZWxkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmwgTG9hZCBvcHRpb25zIGZyb20gc2VydmVyIHBlciB1cmxcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGxvb2t1cCBMb2FkIG9wdGlvbnMgZnJvbSBzZXJ2ZXIgcGVyIHVybFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbG9va3VwLnVybD1udWxsIExvYWQgb3B0aW9ucyBmcm9tIHNlcnZlciBwZXIgdXJsXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbG9va3VwLmdyb3VwaW5nPWZhbHNlIExvYWQgYWxsIHNlbGVjdGVkIG9wdGlvbnMgZnJvbSBzZXJ2ZXIgcGVyIHVybCBhdCBvbmNlICh0cnVlKSBvciBvbmUgYnkgb25lIChmYWxzZSlcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoIEZldGNoIFtzZWUgVXNpbmcgRmV0Y2ggbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkvVXNpbmdfRmV0Y2gpXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1lcnJvclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoLmhlYWRlcnM9e1wiYWNjZXB0XCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuY2Fubm90LWJlLWxvYWRlZCBjYW5ub3QgYmUgbG9hZGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMubm8tb3B0aW9ucy1hdmFpbGFibGUgbm8gb3B0aW9ucyBhdmFpbGFibGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5zZWxlY3QtYW4tb3B0aW9uIHNlbGVjdCBhbiBvcHRpb25cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5uby1vcHRpb24gbm8gb3B0aW9uIGluIHRoZSBsaXN0LCBtYXliZSB5b3UgaGF2ZSB0byBjaGFuZ2UgdGhlIGZpbHRlclxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgTGlzdCB3aXRoIGZlYXR1cmVzXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMuY2xlYXJBbGw9dHJ1ZSBEaXNwbGF5IG9mIGEgZGVsZXRlIGJ1dHRvbiB0byBkZWxldGUgdGhlIGVudGlyZSBzZWxlY3Rpb25cblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5jbGVhcj10cnVlIERpc3BsYXkgb2YgYSBkZWxldGUga2V5IGZvciBkZWxldGluZyB0aGUgc3BlY2lmaWMgc2VsZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMubGF6eUxvYWQ9ZmFsc2UgTG9hZCBvcHRpb25zIHdoZW4gZmlyc3Qgb3BlbmluZyB0aGUgZHJvcGRvd24uIChIaW50OyBsYXp5bExvYWQgaXMgbm90IHN1cHBvcnRlZCB3aXRoIHJlbW90ZSBmaWx0ZXIpXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMuY2xvc2VPblNlbGVjdD1mYWxzZSBDbG9zZSB0aGUgZHJvcGRvd24gd2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQgKHNpbmNlIDMuNTQuMClcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5lbXB0eVZhbHVlSWZOb09wdGlvbnM9ZmFsc2UgSWYgbm8gb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB0aGUgc2VsZWN0aW9uIGlzIHNldCB0byBhbiBlbXB0eSBhcnJheVxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZlYXR1cmVzLnN0b3JlRmV0Y2hlZERhdGE9ZmFsc2UgU3RvcmUgZmV0Y2hlZCBkYXRhIGluIHRoZSBvYmplY3Rcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy51c2VTdHJpY3RWYWx1ZUNvbXBhcmlzb249dHJ1ZSBVc2Ugc3RyaWN0IHZhbHVlIGNvbXBhcmlzb24gZm9yIHRoZSBzZWxlY3Rpb25cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbHRlci5kZWZhdWx0VmFsdWU9bnVsbCBEZWZhdWx0IGZpbHRlciB2YWx1ZSwgaWYgdGhlIGZpbHRlciBpcyBlbXB0eSwgaWYgdGhlIGRlZmF1bHQgdmFsdWUgaXMgbnVsbCwgdGhlbiBubyByZXF1ZXN0IGlzIG1hZGVcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmaWx0ZXIubW9kZT1vcHRpb25zIEZpbHRlciBtb2RlLCB2YWx1ZXM6IG9wdGlvbnMsIHJlbW90ZSwgZGlzYWJsZWQgKEhpbnQ7IGxhenlsTG9hZCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggcmVtb3RlIGZpbHRlciwgaWYgeW91IHVzZSByZW1vdGUgZmlsdGVyLCB0aGUgbGF6eUxvYWQgaXMgZGlzYWJsZWQpXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlTWFwcGluZyBNYXBwaW5nIG9mIHRoZSB0ZW1wbGF0ZSBwbGFjZWhvbGRlcnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlTWFwcGluZy5zZWxlY3RlZCBTZWxlY3RlZCBUZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcG9wcGVyIFtQb3BwZXJKUyBPcHRpb25zXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3BwZXIucGxhY2VtZW50PWJvdHRvbSBQb3BwZXJKUyBwbGFjZW1lbnRcblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gbW9kaWZpZXJzPXtuYW1lOm9mZnNldH0gUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBtYXBwaW5nXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnNlbGVjdG9yPSogUGF0aCB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcubGFiZWxUZW1wbGF0ZT1cIlwiIHRlbXBsYXRlIHdpdGggdGhlIGxhYmVsIHBsYWNlaG9sZGVycyBpbiB0aGUgZm9ybSAke25hbWV9LCB3aGVyZSBuYW1lIGlzIHRoZSBrZXkgKCoqKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy52YWx1ZVRlbXBsYXRlPVwiXCIgdGVtcGxhdGUgd2l0aCB0aGUgdmFsdWUgcGxhY2Vob2xkZXJzIGluIHRoZSBmb3JtICR7bmFtZX0sIHdoZXJlIG5hbWUgaXMgdGhlIGtleVxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVGaWx0ZXJDYWxsYmFja3x1bmRlZmluZWR9IG1hcHBpbmcuZmlsdGVyIEZpbHRlcmluZyBvZiB2YWx1ZXMgdmlhIGEgZnVuY3Rpb25cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZvcm1hdHRlclxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmZvcm1hdHRlclNlbGVjdGlvbkNhbGxiYWNrfHVuZGVmaW5lZH0gZm9ybWF0dGVyLnNlbGVjdGlvbiBmb3JtYXQgc2VsZWN0aW9uIGxhYmVsXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHR0b2dnbGVFdmVudFR5cGU6IFtcImNsaWNrXCIsIFwidG91Y2hcIl0sXG5cdFx0XHRcdGRlbGVnYXRlc0ZvY3VzOiBmYWxzZSxcblx0XHRcdFx0b3B0aW9uczogW10sXG5cdFx0XHRcdHNlbGVjdGlvbjogW10sXG5cdFx0XHRcdHNob3dNYXhPcHRpb25zOiAxMCxcblx0XHRcdFx0dHlwZTogXCJyYWRpb1wiLFxuXHRcdFx0XHRuYW1lOiBuZXcgSUQoXCJzXCIpLnRvU3RyaW5nKCksXG5cdFx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdFx0Y2xlYXJBbGw6IHRydWUsXG5cdFx0XHRcdFx0Y2xlYXI6IHRydWUsXG5cdFx0XHRcdFx0bGF6eUxvYWQ6IGZhbHNlLFxuXHRcdFx0XHRcdGNsb3NlT25TZWxlY3Q6IGZhbHNlLFxuXHRcdFx0XHRcdGVtcHR5VmFsdWVJZk5vT3B0aW9uczogZmFsc2UsXG5cdFx0XHRcdFx0c3RvcmVGZXRjaGVkRGF0YTogZmFsc2UsXG5cdFx0XHRcdFx0dXNlU3RyaWN0VmFsdWVDb21wYXJpc29uOiBmYWxzZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0dXJsOiBudWxsLFxuXHRcdFx0XHRsb29rdXA6IHtcblx0XHRcdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRcdFx0Z3JvdXBpbmc6IGZhbHNlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0XHRcImNhbm5vdC1iZS1sb2FkZWRcIjogXCJDYW5ub3QgYmUgbG9hZGVkXCIsXG5cdFx0XHRcdFx0XCJuby1vcHRpb25zLWF2YWlsYWJsZVwiOiBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlLFxuXHRcdFx0XHRcdFwiY2xpY2stdG8tbG9hZC1vcHRpb25zXCI6IGNsaWNrVG9Mb2FkT3B0aW9uc01lc3NhZ2UsXG5cdFx0XHRcdFx0XCJzZWxlY3QtYW4tb3B0aW9uXCI6IFwiU2VsZWN0IGFuIG9wdGlvblwiLFxuXHRcdFx0XHRcdFwic3VtbWFyeS10ZXh0XCI6IHtcblx0XHRcdFx0XHRcdHplcm86IFwiTm8gZW50cmllcyB3ZXJlIHNlbGVjdGVkXCIsXG5cdFx0XHRcdFx0XHRvbmU6ICc8c3BhbiBjbGFzcz1cIm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxsXCI+MTwvc3Bhbj4gZW50cnkgd2FzIHNlbGVjdGVkJyxcblx0XHRcdFx0XHRcdG90aGVyOlxuXHRcdFx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCJtb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbFwiPiR7Y291bnR9PC9zcGFuPiBlbnRyaWVzIHdlcmUgc2VsZWN0ZWQnLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJuby1vcHRpb25zXCI6XG5cdFx0XHRcdFx0XHRcIlVuZm9ydHVuYXRlbHksIHRoZXJlIGFyZSBubyBvcHRpb25zIGF2YWlsYWJsZSBpbiB0aGUgbGlzdC5cIixcblx0XHRcdFx0XHRcIm5vLW9wdGlvbnMtZm91bmRcIjpcblx0XHRcdFx0XHRcdFwiTm8gb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBsaXN0LiBQbGVhc2UgY29uc2lkZXIgbW9kaWZ5aW5nIHRoZSBmaWx0ZXIuXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1lc3NhZ2VzOiB7XG5cdFx0XHRcdFx0Y29udHJvbDogbnVsbCxcblx0XHRcdFx0XHRzZWxlY3RlZDogbnVsbCxcblx0XHRcdFx0XHRlbXB0eU9wdGlvbnM6IG51bGwsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdFx0cmVkaXJlY3Q6IFwiZXJyb3JcIixcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0bW9kZTogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdFx0YWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmaWx0ZXI6IHtcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWU6IG51bGwsXG5cdFx0XHRcdFx0bW9kZTogRklMVEVSX01PREVfRElTQUJMRUQsXG5cdFx0XHRcdFx0cG9zaXRpb246IEZJTFRFUl9QT1NJVElPTl9JTkxJTkUsXG5cdFx0XHRcdFx0bWFya2VyOiB7XG5cdFx0XHRcdFx0XHRvcGVuOiBcIntcIixcblx0XHRcdFx0XHRcdGNsb3NlOiBcIn1cIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdFx0YmFkZ2U6IFwibW9uc3Rlci1iYWRnZS1wcmltYXJ5XCIsXG5cdFx0XHRcdFx0c3RhdHVzT3JSZW1vdmVCYWRnZTogXCJlbXB0eVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdFx0c2VsZWN0b3I6IFwiKlwiLFxuXHRcdFx0XHRcdGxhYmVsVGVtcGxhdGU6IFwiXCIsXG5cdFx0XHRcdFx0dmFsdWVUZW1wbGF0ZTogXCJcIixcblx0XHRcdFx0XHRmaWx0ZXI6IG51bGwsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZvcm1hdHRlcjoge1xuXHRcdFx0XHRcdHNlbGVjdGlvbjogYnVpbGRTZWxlY3Rpb25MYWJlbCxcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGVNYXBwaW5nOiB7XG5cdFx0XHRcdFx0LyoqIHdpdGggdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXNlbGVjdGVkLXRlbXBsYXRlYCB0aGUgdGVtcGxhdGUgZm9yIHRoZSBzZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBkZWZpbmVkLiAqL1xuXHRcdFx0XHRcdHNlbGVjdGVkOiBnZXRTZWxlY3Rpb25UZW1wbGF0ZSgpLFxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdHBvcHBlcjoge1xuXHRcdFx0XHRcdHBsYWNlbWVudDogXCJib3R0b21cIixcblx0XHRcdFx0XHRtaWRkbGV3YXJlOiBbXCJmbGlwXCIsIFwib2Zmc2V0OjFcIl0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTZWxlY3R9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwoc2VsZik7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHNlbGYpO1xuXG5cdFx0bGV0IGxhenlMb2FkRmxhZyA9IHNlbGYuZ2V0T3B0aW9uKFwiZmVhdHVyZXMubGF6eUxvYWRcIiwgZmFsc2UpO1xuXHRcdGxldCByZW1vdGVGaWx0ZXJGbGFnID0gZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9SRU1PVEU7XG5cblx0XHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9SRU1PVEUpIHtcblx0XHRcdHNlbGYuZ2V0T3B0aW9uKFwiZmVhdHVyZXMubGF6eUxvYWRcIiwgZmFsc2UpO1xuXHRcdFx0aWYgKGxhenlMb2FkRmxhZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XCJsYXp5TG9hZCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggcmVtb3RlIGZpbHRlclwiLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRsYXp5TG9hZEZsYWcgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoc2VsZi5oYXNBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSkge1xuXHRcdFx0bmV3IFByb2Nlc3NpbmcoMTAsICgpID0+IHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIik7XG5cdFx0XHR9KVxuXHRcdFx0XHQucnVuKClcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwidXJsXCIpICE9PSBudWxsKSB7XG5cdFx0XHRpZiAobGF6eUxvYWRGbGFnIHx8IHJlbW90ZUZpbHRlckZsYWcpIHtcblx0XHRcdFx0bG9va3VwU2VsZWN0aW9uLmNhbGwoc2VsZik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmZldGNoKCkuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgbGFzdFZhbHVlID0gc2VsZi52YWx1ZTtcblx0XHRzZWxmW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihcblx0XHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChpc09iamVjdCh0aGlzKSAmJiB0aGlzIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcikge1xuXHRcdFx0XHRcdGNvbnN0IG4gPSB0aGlzLmdldFN1YmplY3QoKT8ub3B0aW9ucz8udmFsdWU7XG5cblx0XHRcdFx0XHRpZiAobGFzdFZhbHVlICE9PSBuKSB7XG5cdFx0XHRcdFx0XHRsYXN0VmFsdWUgPSBuO1xuXHRcdFx0XHRcdFx0c2V0U2VsZWN0aW9uXG5cdFx0XHRcdFx0XHRcdC5jYWxsKHNlbGYsIG4pXG5cdFx0XHRcdFx0XHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdFx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdCk7XG5cblx0XHRhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdC5jYWxsKHNlbGYpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICogQHRocm93cyB7RXJyb3J9IHN0b3JlRmV0Y2hlZERhdGEgaXMgbm90IGVuYWJsZWRcblx0ICogQHNpbmNlIDMuNjYuMFxuXHQgKi9cblx0Z2V0TGFzdEZldGNoZWREYXRhKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnN0b3JlRmV0Y2hlZERhdGFcIikgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzdG9yZUZldGNoZWREYXRhIGlzIG5vdCBlbmFibGVkXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzPy5bbGFzdEZldGNoZWREYXRhU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmNsaWNrKCkgbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uZm9jdXMoKSBtZXRob2Qgc2V0cyBmb2N1cyBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2ZvY3VzfVxuXHQgKi9cblx0Zm9jdXMob3B0aW9ucykge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdFx0Z2F0aGVyU3RhdGUuY2FsbCh0aGlzKTtcblx0XHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdFx0fSlcblx0XHRcdC5ydW4oKVxuXHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2JsdXJcblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdFx0Z2F0aGVyU3RhdGUuY2FsbCh0aGlzKTtcblx0XHRcdGJsdXJGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHR9KVxuXHRcdFx0LnJ1bigpXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIElmIG5vIHVybCBpcyBzcGVjaWZpZWQsIHRoZSBvcHRpb25zIGFyZSB0YWtlbiBmcm9tIHRoZSBDb21wb25lbnQgaXRzZWxmLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybCBVUkwgdG8gZmV0Y2ggdGhlIG9wdGlvbnNcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGZldGNoKHVybCkge1xuXHRcdHJldHVybiBmZXRjaEl0LmNhbGwodGhpcywgdXJsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0cGFyc2VTbG90c1RvT3B0aW9ucy5jYWxsKHRoaXMpO1xuXHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cblx0XHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRnYXRoZXJTdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHR9KVxuXHRcdFx0LnJ1bigpXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0ZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogSW1wb3J0IFNlbGVjdCBPcHRpb25zIGZyb20gZGF0YXNldFxuXHQgKiBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0aGUgY29udHJvbCBkZWZhdWx0cy9vcHRpb25zXG5cdCAqXG5cdCAqIEBwYXJhbSB7YXJyYXl8b2JqZWN0fE1hcHxTZXR9IGRhdGFcblx0ICogQHJldHVybiB7U2VsZWN0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWFwIGlzIG5vdCBpdGVyYWJsZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBsYWJlbCBjb25maWd1cmF0aW9uXG5cdCAqIEBmaXJlcyBtb25zdGVyLW9wdGlvbnMtc2V0IHRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgb3B0aW9ucyBhcmUgc2V0XG5cdCAqL1xuXHRpbXBvcnRPcHRpb25zKGRhdGEpIHtcblx0XHRjb25zdCBtYXBwaW5nT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZ1wiLCB7fSk7XG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSBtYXBwaW5nT3B0aW9ucz8uW1wic2VsZWN0b3JcIl07XG5cdFx0Y29uc3QgbGFiZWxUZW1wbGF0ZSA9IG1hcHBpbmdPcHRpb25zPy5bXCJsYWJlbFRlbXBsYXRlXCJdO1xuXHRcdGNvbnN0IHZhbHVlVGVtcGxhdGUgPSBtYXBwaW5nT3B0aW9ucz8uW1widmFsdWVUZW1wbGF0ZVwiXTtcblx0XHRjb25zdCBmaWx0ZXIgPSBtYXBwaW5nT3B0aW9ucz8uW1wiZmlsdGVyXCJdO1xuXG5cdFx0bGV0IGZsYWcgPSBmYWxzZTtcblx0XHRpZiAobGFiZWxUZW1wbGF0ZSA9PT0gXCJcIikge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgXCJlbXB0eSBsYWJlbCB0ZW1wbGF0ZVwiKTtcblx0XHRcdGZsYWcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZVRlbXBsYXRlID09PSBcIlwiKSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBcImVtcHR5IHZhbHVlIHRlbXBsYXRlXCIpO1xuXHRcdFx0ZmxhZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGZsYWcgPT09IHRydWUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgbGFiZWwgY29uZmlndXJhdGlvblwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBtYXAgPSBidWlsZE1hcChkYXRhLCBzZWxlY3RvciwgbGFiZWxUZW1wbGF0ZSwgdmFsdWVUZW1wbGF0ZSwgZmlsdGVyKTtcblxuXHRcdGNvbnN0IG9wdGlvbnMgPSBbXTtcblxuXHRcdGlmICghaXNJdGVyYWJsZShtYXApKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYXAgaXMgbm90IGl0ZXJhYmxlXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblxuXHRcdG1hcC5mb3JFYWNoKChsYWJlbCwgdmFsdWUpID0+IHtcblx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRsYWJlbCxcblx0XHRcdFx0dmlzaWJpbGl0eSxcblx0XHRcdFx0ZGF0YTogbWFwLmdldCh2YWx1ZSksXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJ1bkFzT3B0aW9uTGVuZ3RoQ2hhbmdlZC5jYWxsKHRoaXMsIG1hcC5zaXplKTtcblx0XHR0aGlzLnNldE9wdGlvbihcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW9wdGlvbnMtc2V0XCIsIHtcblx0XHRcdG9wdGlvbnMsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcmV0dXJuIHtTZWxlY3R9XG5cdCAqL1xuXHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbigpIHtcblx0XHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1zZWxlY3RcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1NlbGVjdFN0eWxlU2hlZXRdO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9va3VwU2VsZWN0aW9uKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRjb25zdCBzZWxlY3Rpb24gPSBzZWxmLmdldE9wdGlvbihcInNlbGVjdGlvblwiKTtcblx0XHRpZiAoc2VsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChzZWxmW2lzTG9hZGluZ1N5bWJvbF0gPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoc2VsZltsYXp5TG9hZERvbmVTeW1ib2xdID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHVybCA9IHNlbGYuZ2V0T3B0aW9uKFwidXJsXCIpO1xuXHRcdGxldCBsb29rdXBVcmwgPSBzZWxmLmdldE9wdGlvbihcImxvb2t1cC51cmxcIik7XG5cdFx0aWYgKGxvb2t1cFVybCAhPT0gbnVsbCkge1xuXHRcdFx0dXJsID0gbG9va3VwVXJsO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImxvb2t1cC5ncm91cGluZ1wiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0ZmlsdGVyRnJvbVJlbW90ZUJ5VmFsdWVcblx0XHRcdFx0LmNhbGwoXG5cdFx0XHRcdFx0c2VsZixcblx0XHRcdFx0XHR1cmwsXG5cdFx0XHRcdFx0c2VsZWN0aW9uLm1hcCgocykgPT4gcz8uW1widmFsdWVcIl0pLFxuXHRcdFx0XHQpXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHNlbGYsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgcyBvZiBzZWxlY3Rpb24pIHtcblx0XHRcdGlmIChzPy5bXCJ2YWx1ZVwiXSkge1xuXHRcdFx0XHRmaWx0ZXJGcm9tUmVtb3RlQnlWYWx1ZS5jYWxsKHNlbGYsIHVybCwgcz8uW1widmFsdWVcIl0pLmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCAxMDApO1xufVxuXG5mdW5jdGlvbiBmZXRjaEl0KHVybCwgY29udHJvbE9wdGlvbnMpIHtcblx0aWYgKHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHR9XG5cblx0aWYgKHVybCAhPT0gdW5kZWZpbmVkICYmIHVybCAhPT0gbnVsbCkge1xuXHRcdHVybCA9IHZhbGlkYXRlU3RyaW5nKHVybCk7XG5cdH0gZWxzZSB7XG5cdFx0dXJsID0gdGhpcy5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdFx0aWYgKHVybCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHVybCBkZWZpbmVkXCIpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJsb2FkaW5nXCIpO1xuXG5cdFx0bmV3IFByb2Nlc3NpbmcoMTAsICgpID0+IHtcblx0XHRcdGZldGNoRGF0YVxuXHRcdFx0XHQuY2FsbCh0aGlzLCB1cmwpXG5cdFx0XHRcdC50aGVuKChtYXApID0+IHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRpc09iamVjdChtYXApIHx8XG5cdFx0XHRcdFx0XHRpc0FycmF5KG1hcCkgfHxcblx0XHRcdFx0XHRcdG1hcCBpbnN0YW5jZW9mIFNldCB8fFxuXHRcdFx0XHRcdFx0bWFwIGluc3RhbmNlb2YgTWFwXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmltcG9ydE9wdGlvbnMobWFwKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImVycm9yXCIpO1xuXHRcdFx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpc1tsYXN0RmV0Y2hlZERhdGFTeW1ib2xdID0gbWFwO1xuXG5cdFx0XHRcdFx0XHRsZXQgcmVzdWx0O1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cdFx0XHRcdFx0XHRsZXQgbmV3VmFsdWUgPSBbXTtcblx0XHRcdFx0XHRcdGlmIChzZWxlY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0bmV3VmFsdWUgPSBzZWxlY3Rpb247XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuaGFzQXR0cmlidXRlKFwidmFsdWVcIikpIHtcblx0XHRcdFx0XHRcdFx0bmV3VmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBzZXRTZWxlY3Rpb24uY2FsbCh0aGlzLCBuZXdWYWx1ZSk7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjaGVja09wdGlvblN0YXRlLmNhbGwodGhpcyk7XG5cdFx0XHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJjbG9zZWRcIik7XG5cdFx0XHRcdFx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlcnJvclwiKTtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiaW52YWxpZCByZXNwb25zZVwiKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlcnJvclwiKTtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH0pO1xuXHRcdH0pXG5cdFx0XHQucnVuKClcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZXJyb3JcIik7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIGBgYFxuICogPG1vbnN0ZXItc2VsZWN0IGRhdGEtbW9uc3Rlci11cmw9XCJodHRwczovL2V4YW1wbGUuY29tL1wiPjwvbW9uc3Rlci1zZWxlY3Q+XG4gKiBgYGBcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGRlcHJlY2F0ZWQgMjAyNC0wMS0yMSAoeW91IHNob3VsZCB1c2UgZGF0YS1tb25zdGVyLW9wdGlvbi0uLi4pXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHRlbXBsYXRlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItc2VsZWN0ZWQtdGVtcGxhdGVcIik7XG5cdGlmIChpc1N0cmluZyh0ZW1wbGF0ZSkpIHtcblx0XHRpZiAoIW9wdGlvbnNbXCJ0ZW1wbGF0ZU1hcHBpbmdcIl0pIG9wdGlvbnNbXCJ0ZW1wbGF0ZU1hcHBpbmdcIl0gPSB7fTtcblxuXHRcdHN3aXRjaCAodGVtcGxhdGUpIHtcblx0XHRcdGNhc2UgXCJzdW1tYXJ5XCI6XG5cdFx0XHRjYXNlIFwiZGVmYXVsdFwiOlxuXHRcdFx0XHRvcHRpb25zW1widGVtcGxhdGVNYXBwaW5nXCJdW1wic2VsZWN0ZWRcIl0gPSBnZXRTdW1tYXJ5VGVtcGxhdGUoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic2VsZWN0ZWRcIjpcblx0XHRcdFx0b3B0aW9uc1tcInRlbXBsYXRlTWFwcGluZ1wiXVtcInNlbGVjdGVkXCJdID0gZ2V0U2VsZWN0aW9uVGVtcGxhdGUoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XCJpbnZhbGlkIHRlbXBsYXRlLCB1c2Ugc3VtbWFyeSBvciBzZWxlY3RlZFwiLFxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpcy5wYXJlbnRFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25UZW1wbGF0ZSgpIHtcblx0cmV0dXJuIGA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic2VsZWN0aW9uXCIgcGFydD1cInNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJzZWxlY3Rpb24gcGF0aDpzZWxlY3Rpb25cIiByb2xlPVwic2VhcmNoXCJcbiAgICAgICAgICAgID48aW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwic2VhcmNoYm94XCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImlubGluZS1maWx0ZXJcIiBuYW1lPVwiaW5saW5lLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgID48ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5jb250cm9sXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gO1xufVxuXG5mdW5jdGlvbiBnZXRTdW1tYXJ5VGVtcGxhdGUoKSB7XG5cdHJldHVybiBgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInNlbGVjdGlvblwiIHJvbGU9XCJzZWFyY2hcIiBwYXJ0PVwic3VtbWFyeVwiPlxuICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHJvbGU9XCJzZWFyY2hib3hcIlxuICAgICAgICAgICBwYXJ0PVwiaW5saW5lLWZpbHRlclwiIG5hbWU9XCJpbmxpbmUtZmlsdGVyXCJcbiAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgID5cbiAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5zZWxlY3RlZFwiPjwvZGl2PiAgICBcbjwvZGl2PmA7XG59XG5cbi8qKlxuICogQHJldHVybiB7dm9pZH1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2xvdHNUb09wdGlvbnMoKSB7XG5cdGxldCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRpZiAoIWlzSXRlcmFibGUob3B0aW9ucykpIHtcblx0XHRvcHRpb25zID0gW107XG5cdH1cblxuXHRsZXQgY291bnRlciA9IDE7XG5cdGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIFwiZGl2XCIpLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRsZXQgdmFsdWUgPSAoY291bnRlcisrKS50b1N0cmluZygpO1xuXHRcdGxldCB2aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XG5cblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItdmFsdWVcIikpIHtcblx0XHRcdHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItdmFsdWVcIik7XG5cdFx0fVxuXG5cdFx0aWYgKG5vZGUuc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIpIHtcblx0XHRcdHZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxhYmVsID0gbm9kZS5vdXRlckhUTUw7XG5cblx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0dmFsdWUsXG5cdFx0XHRsYWJlbCxcblx0XHRcdHZpc2liaWxpdHksXG5cdFx0fSk7XG5cdH0pO1xuXG5cdHJ1bkFzT3B0aW9uTGVuZ3RoQ2hhbmdlZC5jYWxsKHRoaXMsIG9wdGlvbnMubGVuZ3RoKTtcblx0dGhpcy5zZXRPcHRpb24oXCJvcHRpb25zXCIsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIHdhaXQgdW50aWwgYWxsIG9wdGlvbnMgYXJlIGZpbmlzaGVkIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2ludH0gdGFyZ2V0TGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIHJ1bkFzT3B0aW9uTGVuZ3RoQ2hhbmdlZCh0YXJnZXRMZW5ndGgpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKCFzZWxmW29wdGlvbnNFbGVtZW50U3ltYm9sXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGNhbGxiYWNrID0gZnVuY3Rpb24gKG11dGF0aW9uc0xpc3QsIG9ic2VydmVyKSB7XG5cdFx0Y29uc3QgcnVuID0gZmFsc2U7XG5cdFx0Zm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnNMaXN0KSB7XG5cdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJjaGlsZExpc3RcIikge1xuXHRcdFx0XHRjb25zdCBydW4gPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocnVuID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBub2RlcyA9IHNlbGZbb3B0aW9uc0VsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0XHRcdGBkaXZbJHtBVFRSSUJVVEVfUk9MRX09b3B0aW9uXWAsXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAobm9kZXMubGVuZ3RoID09PSB0YXJnZXRMZW5ndGgpIHtcblx0XHRcdFx0Y2hlY2tPcHRpb25TdGF0ZS5jYWxsKHNlbGYpO1xuXHRcdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuXHRvYnNlcnZlci5vYnNlcnZlKHNlbGZbb3B0aW9uc0VsZW1lbnRTeW1ib2xdLCB7XG5cdFx0YXR0cmlidXRlczogZmFsc2UsXG5cdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdHN1YnRyZWU6IHRydWUsXG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBidWlsZFNlbGVjdGlvbkxhYmVsKHZhbHVlKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0bGV0IG8gPSBvcHRpb25zPy5baV07XG5cdFx0bGV0IGwsIHYsIHYyO1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMudXNlU3RyaWN0VmFsdWVDb21wYXJpc29uXCIpID09PSB0cnVlKSB7XG5cdFx0XHR2ID0gdmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHYgPSBgJHt2YWx1ZX1gO1xuXHRcdH1cblxuXHRcdGlmIChpc1ByaW1pdGl2ZShvKSAmJiBvID09PSB2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIG87XG5cdFx0fSBlbHNlIGlmICghaXNPYmplY3QobykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnVzZVN0cmljdFZhbHVlQ29tcGFyaXNvblwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0bCA9IG8/LltcImxhYmVsXCJdO1xuXHRcdFx0djIgPSBvPy5bXCJ2YWx1ZVwiXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bCA9IGAke28/LltcImxhYmVsXCJdfWA7XG5cdFx0XHR2MiA9IGAke28/LltcInZhbHVlXCJdfWA7XG5cdFx0fVxuXG5cdFx0aWYgKHYyID09PSB2KSB7XG5cdFx0XHRyZXR1cm4gbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gdmFsdWUgZm91bmRcbiAqL1xuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uTGFiZWwodmFsdWUpIHtcblx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcImZvcm1hdHRlci5zZWxlY3Rpb25cIik7XG5cdGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdGNvbnN0IGxhYmVsID0gY2FsbGJhY2suY2FsbCh0aGlzLCB2YWx1ZSk7XG5cdFx0aWYgKGlzU3RyaW5nKGxhYmVsKSkgcmV0dXJuIGxhYmVsO1xuXHR9XG5cblx0aWYgKGlzU3RyaW5nKHZhbHVlKSB8fCBpc0ludGVnZXIodmFsdWUpKSB7XG5cdFx0cmV0dXJuIGAke3ZhbHVlfWA7XG5cdH1cblxuXHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMuY2Fubm90LWJlLWxvYWRlZFwiLCB2YWx1ZSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZUtleWJvYXJkRXZlbnRzKGV2ZW50KSB7XG5cdHN3aXRjaCAoZXZlbnQ/LltcImNvZGVcIl0pIHtcblx0XHRjYXNlIFwiRXNjYXBlXCI6XG5cdFx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiU3BhY2VcIjpcblx0XHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJBcnJvd0Rvd25cIjpcblx0XHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQXJyb3dVcFwiOlxuXHRcdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHR9XG59XG5cbi8qKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNS4wXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uT2JzZXJ2ZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdHNlbGYuYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0bmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblx0XHRcdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzZWxmLnVwZGF0ZUkxOG4oKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XG5cdFx0XHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwoc2VsZiwgXCJlcnJvclwiKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGFyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0LmNhbGwoc2VsZik7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGUpO1xuXHRcdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHNlbGYsIFwiZXJyb3JcIik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzZXRTdW1tYXJ5QW5kQ29udHJvbFRleHQuY2FsbChzZWxmKTtcblx0XHRcdH0pLnJ1bigpO1xuXHRcdH0pLFxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0VHJhbnNsYXRpb24oKSB7XG5cdGNvbnN0IHRyYW5zbGF0aW9uID0gbmV3IFRyYW5zbGF0aW9ucyhcImVuXCIpLmFzc2lnblRyYW5zbGF0aW9ucyhcblx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVsc1wiLCB7fSksXG5cdCk7XG5cblx0dHJ5IHtcblx0XHRjb25zdCBkb2MgPSBnZXREb2N1bWVudFRyYW5zbGF0aW9ucygpO1xuXHRcdHRyYW5zbGF0aW9uLmxvY2FsZSA9IGRvYy5sb2NhbGU7XG5cdH0gY2F0Y2ggKGUpIHt9XG5cblx0cmV0dXJuIHRyYW5zbGF0aW9uO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd8Kn1cbiAqL1xuZnVuY3Rpb24gc2V0U3VtbWFyeUFuZENvbnRyb2xUZXh0KCkge1xuXHRjb25zdCB0cmFuc2xhdGlvbnMgPSBnZXREZWZhdWx0VHJhbnNsYXRpb24uY2FsbCh0aGlzKTtcblx0Y29uc3Qgc2VsZWN0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXG5cdGNvbnN0IHRleHQgPSB0cmFuc2xhdGlvbnMuZ2V0UGx1cmFsUnVsZVRleHQoXG5cdFx0XCJzdW1tYXJ5LXRleHRcIixcblx0XHRzZWxlY3Rpb25zLmxlbmd0aCxcblx0XHRcIlwiLFxuXHQpO1xuXG5cdGNvbnN0IHNlbGVjdGVkVGV4dCA9IG5ldyBGb3JtYXR0ZXIoe1xuXHRcdGNvdW50OiBTdHJpbmcoc2VsZWN0aW9ucy5sZW5ndGgpLFxuXHR9KS5mb3JtYXQodGV4dCk7XG5cblx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5zZWxlY3RlZFwiLCBzZWxlY3RlZFRleHQpO1xuXG5cdGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldE9wdGlvbihcIm1lc3NhZ2VzLmNvbnRyb2xcIik7XG5cdGNvbnN0IG1zZyA9IHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLnNlbGVjdC1hbi1vcHRpb25cIik7XG5cblx0aWYgKFxuXHRcdGN1cnJlbnQgPT09IFwiXCIgfHxcblx0XHRjdXJyZW50ID09PSB1bmRlZmluZWQgfHxcblx0XHRjdXJyZW50ID09PSBtc2cgfHxcblx0XHRjdXJyZW50ID09PSBudWxsXG5cdCkge1xuXHRcdGlmIChzZWxlY3Rpb25zID09PSB1bmRlZmluZWQgfHwgc2VsZWN0aW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZXMuY29udHJvbFwiLCBtc2cpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLmNvbnRyb2xcIiwgXCJcIik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge05vZGVMaXN0fVxuICovXG5mdW5jdGlvbiBnZXRPcHRpb25FbGVtZW50cygpIHtcblx0cmV0dXJuIHRoaXNbb3B0aW9uc0VsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCxcblx0KTtcbn1cblxuLyoqXG4gKiBXaXRoIHRoZSBoZWxwIG9mIHRoaXMgZmlsdGVyIGNhbGxiYWNrLCB2YWx1ZXMgY2FuIGJlIGZpbHRlcmVkIG91dC4gT25seSBpZiB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgdGhlIHZhbHVlIGlzIHRha2VuIGZvciB0aGUgbWFwLlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlRmlsdGVyQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgIEtleVxuICogQHNlZSBNb25zdGVyLkRhdGEuYnVpbGRNYXBcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1+Zm9ybWF0dGVyU2VsZWN0aW9uQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKiBAc2VlIE1vbnN0ZXIuRGF0YS5idWlsZE1hcFxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2FsY0FuZFNldE9wdGlvbnNEaW1lbnNpb24oKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25FbGVtZW50cy5jYWxsKHRoaXMpO1xuXHRjb25zdCBjb250YWluZXIgPSB0aGlzW29wdGlvbnNFbGVtZW50U3ltYm9sXTtcblx0aWYgKCEoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgb3B0aW9ucyBpbnN0YW5jZW9mIE5vZGVMaXN0KSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGxldCB2aXNpYmxlID0gMDtcblx0bGV0IG9wdGlvbkhlaWdodCA9IDA7XG5cdGNvbnN0IG1heCA9IHRoaXMuZ2V0T3B0aW9uKFwic2hvd01heE9wdGlvbnNcIiwgMTApO1xuXG5cdGxldCBzY3JvbGxGbGFnID0gZmFsc2U7XG5cdGZvciAoY29uc3QgWywgb3B0aW9uXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zKSkge1xuXHRcdGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRHbG9iYWwoKS5nZXRDb21wdXRlZFN0eWxlKG9wdGlvbik7XG5cdFx0aWYgKGNvbXB1dGVkU3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIpIGNvbnRpbnVlO1xuXG5cdFx0bGV0IGggPSBvcHRpb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuXHRcdGggKz0gcGFyc2VJbnQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLXRvcFwiKSwgMTApO1xuXHRcdGggKz0gcGFyc2VJbnQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLWJvdHRvbVwiKSwgMTApO1xuXHRcdG9wdGlvbkhlaWdodCArPSBoO1xuXG5cdFx0dmlzaWJsZSsrO1xuXG5cdFx0aWYgKHZpc2libGUgPiBtYXgpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGlmICh2aXNpYmxlID4gbWF4KSB7XG5cdFx0dmlzaWJsZSA9IG1heDtcblx0XHRzY3JvbGxGbGFnID0gdHJ1ZTtcblx0fVxuXG5cdGlmICh2aXNpYmxlID09PSAwKSB7XG5cdFx0aWYgKGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSA9PT0gRklMVEVSX01PREVfRElTQUJMRUQpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFxuXHRcdFx0XHRcIm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiLFxuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVscy5uby1vcHRpb25zLWF2YWlsYWJsZVwiKSxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFxuXHRcdFx0XHRcIm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiLFxuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVscy5uby1vcHRpb25zLWZvdW5kXCIpLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0dGhpc1tub09wdGlvbnNBdmFpbGFibGVFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXNbbm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0fVxuXG5cdGNvbnN0IHN0eWxlcyA9IGdldEdsb2JhbCgpLmdldENvbXB1dGVkU3R5bGUodGhpc1tvcHRpb25zRWxlbWVudFN5bWJvbF0pO1xuXHRsZXQgcGFkZGluZyA9IHBhcnNlSW50KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy10b3BcIiksIDEwKTtcblx0cGFkZGluZyArPSBwYXJzZUludChzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmctYm90dG9tXCIpLCAxMCk7XG5cblx0bGV0IG1hcmdpbiA9IHBhcnNlSW50KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLXRvcFwiKSwgMTApO1xuXHRtYXJnaW4gKz0gcGFyc2VJbnQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoXCJtYXJnaW4tYm90dG9tXCIpLCAxMCk7XG5cblx0Y29uc3QgY29udGFpbmVySGVpZ2h0ID0gb3B0aW9uSGVpZ2h0ICsgcGFkZGluZyArIG1hcmdpbjtcblx0Y29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGAke2NvbnRhaW5lckhlaWdodH1weGA7XG5cblx0aWYgKHNjcm9sbEZsYWcgPT09IHRydWUpIHtcblx0XHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dZID0gXCJzY3JvbGxcIjtcblx0fSBlbHNlIHtcblx0XHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dZID0gXCJhdXRvXCI7XG5cdH1cblxuXHRjb25zdCBkb21SZWN0ID0gdGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS53aWR0aCA9IGAke2RvbVJlY3Qud2lkdGh9cHhgO1xuXHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dYID0gXCJhdXRvXCI7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJlY3Rpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGFjdGl2YXRlQ3VycmVudE9wdGlvbihkaXJlY3Rpb24pIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0bGV0IGZvY3VzZWQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkXWApO1xuXG5cdGlmIChcblx0XHQhKGZvY3VzZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHxcblx0XHRmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9aGlkZGVuXVwiKVxuXHQpIHtcblx0XHRmb3IgKGNvbnN0IFssIGVdIG9mIE9iamVjdC5lbnRyaWVzKFxuXHRcdFx0dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCksXG5cdFx0KSkge1xuXHRcdFx0aWYgKGUubWF0Y2hlcyhcIltkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT12aXNpYmxlXVwiKSkge1xuXHRcdFx0XHRmb2N1c2VkID0gZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChkaXJlY3Rpb24gPT09IEZPQ1VTX0RJUkVDVElPTl9ET1dOKSB7XG5cdFx0XHR3aGlsZSAoZm9jdXNlZC5uZXh0U2libGluZykge1xuXHRcdFx0XHRmb2N1c2VkID0gZm9jdXNlZC5uZXh0U2libGluZztcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Zm9jdXNlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpID09PSBcIm9wdGlvblwiICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5tYXRjaGVzKFwiW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PXZpc2libGVdXCIpICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5tYXRjaGVzKFwiOm5vdChbZGF0YS1tb25zdGVyLWZpbHRlcmVkPXRydWVdKVwiKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgZm91bmQgPSBmYWxzZTtcblx0XHRcdHdoaWxlIChmb2N1c2VkLnByZXZpb3VzU2libGluZykge1xuXHRcdFx0XHRmb2N1c2VkID0gZm9jdXNlZC5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRmb2N1c2VkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwib3B0aW9uXCIgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9dmlzaWJsZV1cIikgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCI6bm90KFtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV0pXCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGZvdW5kID09PSBmYWxzZSkge1xuXHRcdFx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRpZiAoZm9jdXNlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3Rcblx0XHRcdFx0LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0FUVFJJQlVURV9QUkVGSVh9Zm9jdXNlZF1gKVxuXHRcdFx0XHQuZm9yRWFjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGUucmVtb3ZlQXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9Zm9jdXNlZGApO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0Zm9jdXNlZC5mb2N1cygpO1xuXHRcdFx0Zm9jdXNlZC5zZXRBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkYCwgdHJ1ZSk7XG5cdFx0fVxuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBmaWx0ZXJPcHRpb25zKCkge1xuXHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0bGV0IGZpbHRlclZhbHVlO1xuXG5cdFx0c3dpdGNoICh0aGlzLmdldE9wdGlvbihcImZpbHRlci5wb3NpdGlvblwiKSkge1xuXHRcdFx0Y2FzZSBGSUxURVJfUE9TSVRJT05fSU5MSU5FOlxuXHRcdFx0XHRpZiAodGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0ZmlsdGVyVmFsdWUgPSB0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIEZJTFRFUl9QT1NJVElPTl9QT1BQRVI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRcdGZvciAoY29uc3QgW2ksIG9wdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMob3B0aW9ucykpIHtcblx0XHRcdGlmIChvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbHVlKSA9PT0gLTEpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtpfS5maWx0ZXJlZGAsIFwidHJ1ZVwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKGBvcHRpb25zLiR7aX0uZmlsdGVyZWRgLCB1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSlcblx0XHQucnVuKClcblx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRuZXcgUHJvY2Vzc2luZygxMDAsICgpID0+IHtcblx0XHRcdFx0Y2FsY0FuZFNldE9wdGlvbnNEaW1lbnNpb24uY2FsbCh0aGlzKTtcblx0XHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHRcdH0pXG5cdFx0XHRcdC5ydW4oKVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9KTtcblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gaGFuZGxlRmlsdGVyS2V5Ym9hcmRFdmVudHMoZXZlbnQpIHtcblx0Y29uc3Qgc2hpZnRLZXkgPSBldmVudD8uW1wic2hpZnRLZXlcIl07XG5cblx0c3dpdGNoIChldmVudD8uW1wiY29kZVwiXSkge1xuXHRcdGNhc2UgXCJUYWJcIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRXNjYXBlXCI6XG5cdFx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVGFiXCIgJiYgc2hpZnRLZXkgPT09IHRydWU6XG5cdFx0Y2FzZSBcIkFycm93VXBcIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9VUCk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlRhYlwiICYmICFzaGlmdEtleTpcblx0XHRjYXNlIFwiQXJyb3dEb3duXCI6XG5cdFx0XHRhY3RpdmF0ZUN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBGT0NVU19ESVJFQ1RJT05fRE9XTik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGlmIChcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHR0aGlzW2xhenlMb2FkRG9uZVN5bWJvbF0gIT09IHRydWVcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLmNsaWNrKCk7XG5cdFx0XHR9XG5cblx0XHRcdGhhbmRsZUZpbHRlcktleUV2ZW50cy5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogTWV0aG9kIGhhbmRsZUZpbHRlcktleUV2ZW50cyBpcyB1c2VkIHRvIGhhbmRsZSBmaWx0ZXIga2V5IGV2ZW50cy5cbiAqIERlYm91bmNlIGlzIHVzZWQgdG8gcHJldmVudCBtdWx0aXBsZSBjYWxscy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIGhhbmRsZUZpbHRlcktleUV2ZW50c1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHt2b2lkfSBUaGlzIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUZpbHRlcktleUV2ZW50cygpIHtcblx0aWYgKHRoaXNba2V5RmlsdGVyRXZlbnRTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHR0cnkge1xuXHRcdFx0dGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF0udG91Y2goKTtcblx0XHRcdHJldHVybjtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRkZWxldGUgdGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF07XG5cdFx0fVxuXHR9XG5cblx0dGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0aWYgKGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSAhPT0gRklMVEVSX01PREVfUkVNT1RFKSB7XG5cdFx0XHRmaWx0ZXJPcHRpb25zLmNhbGwodGhpcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZpbHRlckZyb21SZW1vdGUuY2FsbCh0aGlzKS5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIHRoaXNba2V5RmlsdGVyRXZlbnRTeW1ib2xdO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBmaWx0ZXJGcm9tUmVtb3RlKCkge1xuXHRpZiAoXG5cdFx0ISh0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpICYmXG5cdFx0ISh0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpXG5cdCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHNob3cuY2FsbCh0aGlzKTtcblxuXHRjb25zdCB1cmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiKTtcblx0aWYgKCF1cmwpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdHRoaXMsXG5cdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XCJNaXNzaW5nIFVSTCBmb3IgUmVtb3RlIEZpbHRlci5cIixcblx0XHQpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGxldCBmaWx0ZXJWYWx1ZTtcblxuXHRzd2l0Y2ggKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLnBvc2l0aW9uXCIpKSB7XG5cdFx0Y2FzZSBGSUxURVJfUE9TSVRJT05fSU5MSU5FOlxuXHRcdFx0aWYgKHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdH1cblxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBGSUxURVJfUE9TSVRJT05fUE9QUEVSOlxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRpZiAodGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdFx0ZmlsdGVyVmFsdWUgPSB0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmlsdGVyRnJvbVJlbW90ZUJ5VmFsdWUuY2FsbCh0aGlzLCB1cmwsIGZpbHRlclZhbHVlKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVJMKHVybCwgdmFsdWUpIHtcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcblx0XHR2YWx1ZSA9IHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLmRlZmF1bHRWYWx1ZVwiKTtcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0dmFsdWUgPSBkaXNhYmxlZFJlcXVlc3RNYXJrZXIudG9TdHJpbmcoKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHsgZmlsdGVyOiBlbmNvZGVVUkkodmFsdWUpIH0pO1xuXHRjb25zdCBvcGVuTWFya2VyID0gdGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIubWFya2VyLm9wZW5cIik7XG5cdGxldCBjbG9zZU1hcmtlciA9IHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLm1hcmtlci5jbG9zZVwiKTtcblx0aWYgKCFjbG9zZU1hcmtlcikge1xuXHRcdGNsb3NlTWFya2VyID0gb3Blbk1hcmtlcjtcblx0fVxuXG5cdGlmIChvcGVuTWFya2VyICYmIGNsb3NlTWFya2VyKSB7XG5cdFx0Zm9ybWF0dGVyLnNldE1hcmtlcihvcGVuTWFya2VyLCBjbG9zZU1hcmtlcik7XG5cdH1cblxuXHRyZXR1cm4gZm9ybWF0dGVyLmZvcm1hdCh1cmwpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb3B0aW9uVXJsXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5mdW5jdGlvbiBmaWx0ZXJGcm9tUmVtb3RlQnlWYWx1ZShvcHRpb25VcmwsIHZhbHVlKSB7XG5cdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0bGV0IHVybCA9IGZvcm1hdFVSTC5jYWxsKHRoaXMsIG9wdGlvblVybCwgdmFsdWUpO1xuXHRcdGlmICh1cmwuaW5kZXhPZihkaXNhYmxlZFJlcXVlc3RNYXJrZXIudG9TdHJpbmcoKSkgIT09IC0xKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZmV0Y2hJdFxuXHRcdFx0LmNhbGwodGhpcywgdXJsLCB7XG5cdFx0XHRcdGRpc2FibGVIaWRpbmc6IHRydWUsXG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRjaGVja09wdGlvblN0YXRlLmNhbGwodGhpcyk7XG5cdFx0XHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdH0pO1xuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMoZXZlbnQpIHtcblx0Y29uc3Qgc2hpZnRLZXkgPSBldmVudD8uW1wic2hpZnRLZXlcIl07XG5cblx0c3dpdGNoIChldmVudD8uW1wiY29kZVwiXSkge1xuXHRcdGNhc2UgXCJFc2NhcGVcIjpcblx0XHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFbnRlclwiOlxuXHRcdGNhc2UgXCJTcGFjZVwiOlxuXHRcdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdFx0Y29uc3QgZWxlbWVudCA9IHBhdGg/LlswXTtcblx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0Y29uc3QgaW5wdXQgPSBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIik7XG5cdFx0XHRcdGlmICghaW5wdXQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0ZmlyZUV2ZW50KGlucHV0LCBcImNsaWNrXCIpO1xuXHRcdFx0fVxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIlRhYlwiICYmIHNoaWZ0S2V5ID09PSB0cnVlOlxuXHRcdGNhc2UgXCJBcnJvd1VwXCI6XG5cdFx0XHRhY3RpdmF0ZUN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBGT0NVU19ESVJFQ1RJT05fVVApO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIlRhYlwiICYmICFzaGlmdEtleTpcblx0XHRjYXNlIFwiQXJyb3dMZWZ0XCI6XG5cdFx0Y2FzZSBcIkFycm93UmlnaHRcIjpcblx0XHRcdC8vIGhhbmRsZWQgYnkgdHJlZSBzZWxlY3Rcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJBcnJvd0Rvd25cIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0Y29uc3QgcCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdFx0aWYgKHA/LlswXSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHRcdGJyZWFrO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0RmlsdGVyTW9kZSgpIHtcblx0c3dpdGNoICh0aGlzLmdldE9wdGlvbihcImZpbHRlci5tb2RlXCIpKSB7XG5cdFx0Y2FzZSBGSUxURVJfTU9ERV9PUFRJT05TOlxuXHRcdFx0cmV0dXJuIEZJTFRFUl9NT0RFX09QVElPTlM7XG5cdFx0Y2FzZSBGSUxURVJfTU9ERV9SRU1PVEU6XG5cdFx0XHRyZXR1cm4gRklMVEVSX01PREVfUkVNT1RFO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gRklMVEVSX01PREVfRElTQUJMRUQ7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBibHVyRmlsdGVyKCkge1xuXHRpZiAoISh0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSA9PT0gRklMVEVSX01PREVfRElTQUJMRUQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uYmx1cigpO1xuXG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5ibHVyKCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmb2N1c09wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZm9jdXNQb3BwZXJGaWx0ZXIoZm9jdXNPcHRpb25zKSB7XG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImQtbm9uZVwiKTtcblx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblxuXHRpZiAoISh0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHR0aGlzLFxuXHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFwiTWlzc2luZyBQb3BwZXIgRmlsdGVyIEVsZW1lbnQuXCIsXG5cdFx0KTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyB2aXNpYmlsaXR5IGlzIHNldCB0byB2aXNpYmxlLCBiZWNhdXNlIGZvY3VzKCkgZG9lcyBub3Qgd29yayBvbiBpbnZpc2libGUgZWxlbWVudHNcblx0Ly8gYW5kIHRoZSBjbGFzcyBkZWZpbml0aW9uIGlzIGFzc2lnbmVkIGxhdGVyIGluIHRoZSBwcm9jZXNzaW5nXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGlmIChmb2N1c09wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBmb2N1c09wdGlvbnMgPT09IG51bGwpIHtcblx0XHRcdHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0uZm9jdXMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS5mb2N1cyhmb2N1c09wdGlvbnMpO1xuXHRcdH1cblx0fSwgMTAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZvY3VzT3B0aW9uc1xuICovXG5mdW5jdGlvbiBmb2N1c0lubGluZUZpbHRlcihmb2N1c09wdGlvbnMpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcblx0aWYgKFxuXHRcdCghaXNBcnJheShvcHRpb25zKSB8fCBvcHRpb25zLmxlbmd0aCA9PT0gMCkgJiZcblx0XHRnZXRGaWx0ZXJNb2RlLmNhbGwodGhpcykgIT09IEZJTFRFUl9NT0RFX1JFTU9URVxuXHQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJkLW5vbmVcIik7XG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuXG5cdC8vIHZpc2liaWxpdHkgaXMgc2V0IHRvIHZpc2libGUsIGJlY2F1c2UgZm9jdXMoKSBkb2VzIG5vdCB3b3JrIG9uIGludmlzaWJsZSBlbGVtZW50c1xuXHQvLyBhbmQgdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgYXNzaWduZWQgbGF0ZXIgaW4gdGhlIHByb2Nlc3Npbmdcblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0aWYgKGZvY3VzT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IGZvY3VzT3B0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5mb2N1cygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmZvY3VzKGZvY3VzT3B0aW9ucyk7XG5cdFx0fVxuXHR9LCAxMDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZvY3VzRmlsdGVyKGZvY3VzT3B0aW9ucykge1xuXHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9ESVNBQkxFRCkge1xuXHRcdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0XHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJkLW5vbmVcIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLnBvc2l0aW9uXCIpID09PSBGSUxURVJfUE9TSVRJT05fSU5MSU5FKSB7XG5cdFx0cmV0dXJuIGZvY3VzSW5saW5lRmlsdGVyLmNhbGwodGhpcywgZm9jdXNPcHRpb25zKTtcblx0fVxuXG5cdHJldHVybiBmb2N1c1BvcHBlckZpbHRlci5jYWxsKHRoaXMsIGZvY3VzT3B0aW9ucyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2FycmF5fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKi9cbmZ1bmN0aW9uIGdhdGhlclN0YXRlKCkge1xuXHRjb25zdCB0eXBlID0gdGhpcy5nZXRPcHRpb24oXCJ0eXBlXCIpO1xuXHRpZiAoW1wicmFkaW9cIiwgXCJjaGVja2JveFwiXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHR5cGVcIik7XG5cdH1cblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCBzZWxlY3Rpb24gPSBbXTtcblx0Y29uc3QgZWxlbWVudHMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcblx0XHRgaW5wdXRbdHlwZT0ke3R5cGV9XTpjaGVja2VkYCxcblx0KTtcblxuXHRmb3IgKGNvbnN0IGUgb2YgZWxlbWVudHMpIHtcblx0XHRzZWxlY3Rpb24ucHVzaCh7XG5cdFx0XHRsYWJlbDogZ2V0U2VsZWN0aW9uTGFiZWwuY2FsbCh0aGlzLCBlLnZhbHVlKSxcblx0XHRcdHZhbHVlOiBlLnZhbHVlLFxuXHRcdH0pO1xuXHR9XG5cblx0c2V0U2VsZWN0aW9uXG5cdFx0LmNhbGwodGhpcywgc2VsZWN0aW9uKVxuXHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHR9KTtcblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5jbG9zZU9uU2VsZWN0XCIpID09PSB0cnVlKSB7XG5cdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uKCkge1xuXHRjb25zdCB0eXBlID0gdGhpcy5nZXRPcHRpb24oXCJ0eXBlXCIpO1xuXHRpZiAoW1wicmFkaW9cIiwgXCJjaGVja2JveFwiXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHR5cGVcIik7XG5cdH1cblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRzZXRTZWxlY3Rpb25cblx0XHQuY2FsbCh0aGlzLCBbXSlcblx0XHQudGhlbigoKSA9PiB7fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXQoKSB7XG5cdC8vIHByZXZlbnQgbXVsdGlwbGUgY2FsbHNcblx0aWYgKHRoaXNbYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHR0aGlzW2FyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0U3ltYm9sXSA9IDA7XG5cdH1cblxuXHRpZiAodGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0gPiAwKSB7XG5cdFx0dGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0tLTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHRoaXNbYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2xdKys7XG5cblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcblxuXHRpZiAoXG5cdFx0b3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0b3B0aW9ucyA9PT0gbnVsbCB8fFxuXHRcdChpc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubGVuZ3RoID09PSAwKVxuXHQpIHtcblx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZW1wdHlcIik7XG5cblx0XHQvLyBoaWRlLmNhbGwodGhpcyk7XG5cblx0XHRsZXQgbXNnID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMubm8tb3B0aW9ucy1hdmFpbGFibGVcIik7XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcInVybFwiKSAhPT0gbnVsbCAmJlxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0dGhpc1tsYXp5TG9hZERvbmVTeW1ib2xdICE9PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHRtc2cgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5jbGljay10by1sb2FkLW9wdGlvbnNcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIsIG1zZyk7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5zdW1tYXJ5XCIsIFwiXCIpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuZW1wdHlWYWx1ZUlmTm9PcHRpb25zXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnZhbHVlID0gXCJcIjtcblx0XHR9XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgbm9PcHRpb25zQXZhaWxhYmxlTWVzc2FnZSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Y29uc3Qgc2VsZWN0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRpZiAoXG5cdFx0c2VsZWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0c2VsZWN0aW9ucyA9PT0gbnVsbCB8fFxuXHRcdHNlbGVjdGlvbnMubGVuZ3RoID09PSAwXG5cdCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFxuXHRcdFx0XCJtZXNzYWdlcy5jb250cm9sXCIsXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVscy5zZWxlY3QtYW4tb3B0aW9uXCIpLFxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIsIFwiXCIpO1xuXHR9XG5cblx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5zdW1tYXJ5XCIsIHNldFN1bW1hcnlBbmRDb250cm9sVGV4dC5jYWxsKHRoaXMpKTtcblxuXHRsZXQgdXBkYXRlZCA9IGZhbHNlO1xuXHRsZXQgdmFsdWVDb3VudGVyID0gMTtcblx0Zm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuXHRcdGlmIChvcHRpb24/LnZpc2liaWxpdHkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0b3B0aW9uLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb24/LnZhbHVlID09PSB1bmRlZmluZWQgJiYgb3B0aW9uPy5sYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24udmFsdWUgPSBgJHt2YWx1ZUNvdW50ZXIrK31gO1xuXHRcdFx0b3B0aW9uLmxhYmVsID0gb3B0aW9uLnZhbHVlO1xuXHRcdFx0dXBkYXRlZCA9IHRydWU7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9uPy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24udmFsdWUgPSBvcHRpb24ubGFiZWw7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9uPy5sYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24ubGFiZWwgPSBvcHRpb24udmFsdWU7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRpZiAodXBkYXRlZCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcblx0fVxuXG5cdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcyk7XG5cblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgbm9PcHRpb25zQXZhaWxhYmxlTWVzc2FnZSk7XG5cdHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBjaGVja09wdGlvblN0YXRlKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCBlbGVtZW50cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09b3B0aW9uXSBpbnB1dGAsXG5cdCk7XG5cblx0bGV0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRpZiAoIWlzQXJyYXkoc2VsZWN0aW9uKSkge1xuXHRcdHNlbGVjdGlvbiA9IFtdO1xuXHR9XG5cblx0Y29uc3QgY2hlY2tlZFZhbHVlcyA9IHNlbGVjdGlvbi5tYXAoKGEpID0+IHtcblx0XHRyZXR1cm4gYS52YWx1ZTtcblx0fSk7XG5cblx0Zm9yIChjb25zdCBlIG9mIGVsZW1lbnRzKSB7XG5cdFx0aWYgKGNoZWNrZWRWYWx1ZXMuaW5kZXhPZihlLnZhbHVlKSAhPT0gLTEpIHtcblx0XHRcdGlmIChlLmNoZWNrZWQgIT09IHRydWUpIGUuY2hlY2tlZCA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChlLmNoZWNrZWQgIT09IGZhbHNlKSBlLmNoZWNrZWQgPSBmYWxzZTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBjb252ZXJ0VmFsdWVUb1NlbGVjdGlvbih2YWx1ZSkge1xuXHRjb25zdCBzZWxlY3Rpb24gPSBbXTtcblxuXHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZVxuXHRcdFx0LnNwbGl0KFwiLFwiKVxuXHRcdFx0Lm1hcCgoYSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYS50cmltKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigoYSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYSAhPT0gXCJcIjtcblx0XHRcdH0pO1xuXHR9XG5cblx0aWYgKGlzU3RyaW5nKHZhbHVlKSB8fCBpc0ludGVnZXIodmFsdWUpKSB7XG5cdFx0c2VsZWN0aW9uLnB1c2goe1xuXHRcdFx0bGFiZWw6IGdldFNlbGVjdGlvbkxhYmVsLmNhbGwodGhpcywgdmFsdWUpLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0Zm9yIChjb25zdCB2IG9mIHZhbHVlKSB7XG5cdFx0XHRzZWxlY3Rpb24ucHVzaCh7XG5cdFx0XHRcdGxhYmVsOiBnZXRTZWxlY3Rpb25MYWJlbC5jYWxsKHRoaXMsIHYpLFxuXHRcdFx0XHR2YWx1ZTogdixcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHZhbHVlID0gdmFsdWUuam9pbihcIixcIik7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0c2VsZWN0aW9uOiBzZWxlY3Rpb24sXG5cdFx0dmFsdWU6IHZhbHVlLFxuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2FycmF5fSBzZWxlY3Rpb25cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29udmVydFNlbGVjdGlvblRvVmFsdWUoc2VsZWN0aW9uKSB7XG5cdGNvbnN0IHZhbHVlID0gW107XG5cblx0aWYgKGlzQXJyYXkoc2VsZWN0aW9uKSkge1xuXHRcdGZvciAoY29uc3Qgb2JqIG9mIHNlbGVjdGlvbikge1xuXHRcdFx0Y29uc3QgdiA9IG9iaj8uW1widmFsdWVcIl07XG5cdFx0XHRpZiAodiAhPT0gdW5kZWZpbmVkKSB2YWx1ZS5wdXNoKHYpO1xuXHRcdH1cblx0fVxuXG5cdGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gdmFsdWUucG9wKCk7XG5cdH1cblxuXHRyZXR1cm4gdmFsdWUuam9pbihcIixcIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7YXJyYXl9IHNlbGVjdGlvblxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pIHtcblx0aWYgKGlzU3RyaW5nKHNlbGVjdGlvbikpIHtcblx0XHRjb25zdCByZXN1bHQgPSBjb252ZXJ0VmFsdWVUb1NlbGVjdGlvbi5jYWxsKHRoaXMsIHNlbGVjdGlvbik7XG5cdFx0c2VsZWN0aW9uID0gcmVzdWx0Py5zZWxlY3Rpb247XG5cdH0gZWxzZSBpZiAoc2VsZWN0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRzZWxlY3Rpb24gPSBbXTtcblx0fVxuXG5cdHZhbGlkYXRlQXJyYXkoc2VsZWN0aW9uKTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbi5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBsID0gZ2V0U2VsZWN0aW9uTGFiZWwuY2FsbCh0aGlzLCBzZWxlY3Rpb25baV0udmFsdWUpO1xuXHRcdGlmIChsID09PSBzZWxlY3Rpb25baV0udmFsdWUpIHtcblx0XHRcdGwgPSBzZWxlY3Rpb25baV0ubGFiZWw7XG5cdFx0fVxuXG5cdFx0c2VsZWN0aW9uW2ldID0ge1xuXHRcdFx0bGFiZWw6IGwsXG5cdFx0XHR2YWx1ZTogc2VsZWN0aW9uW2ldLnZhbHVlLFxuXHRcdH07XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcInNlbGVjdGlvblwiLCBzZWxlY3Rpb24pO1xuXHRjaGVja09wdGlvblN0YXRlLmNhbGwodGhpcyk7XG5cblx0dHJ5IHtcblx0XHR0aGlzPy5zZXRGb3JtVmFsdWUodGhpcy52YWx1ZSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHR9XG5cblx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1zZWxlY3RlZFwiLCB7XG5cdFx0c2VsZWN0aW9uLFxuXHR9KTtcblxuXHRyZXR1cm4gbmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGNvbnN0IENMQVNTTkFNRSA9IFwic2VsZWN0ZWRcIjtcblxuXHRcdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5vdFNlbGVjdGVkID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6bm90KDpjaGVja2VkKVwiKTtcblxuXHRcdGlmIChub3RTZWxlY3RlZCkge1xuXHRcdFx0bm90U2VsZWN0ZWQuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXJlbnQgPSBub2RlLmNsb3Nlc3QoYFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCk7XG5cdFx0XHRcdGlmIChwYXJlbnQpIHtcblx0XHRcdFx0XHRwYXJlbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU05BTUUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFwiOmNoZWNrZWRcIik7XG5cdFx0aWYgKHNlbGVjdGVkKSB7XG5cdFx0XHRzZWxlY3RlZC5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IG5vZGUuY2xvc2VzdChgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gKTtcblx0XHRcdFx0aWYgKHBhcmVudCkge1xuXHRcdFx0XHRcdHBhcmVudC5jbGFzc0xpc3QuYWRkKENMQVNTTkFNRSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSlcblx0XHQucnVuKClcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHRoZSByZXN1bHQgY2Fubm90IGJlIHBhcnNlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCByZXNwb25zZVxuICovXG5mdW5jdGlvbiBmZXRjaERhdGEodXJsKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRpZiAoIXVybCkgdXJsID0gdGhpcy5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdGlmICghdXJsKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0Y29uc3QgZmV0Y2hPcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSk7XG5cblx0bGV0IGRlbGF5V2F0Y2ggPSBmYWxzZTtcblxuXHQvLyBpZiBmZXRjaCBzaG9ydCB0aW1lLCBkbyBub3Qgc2hvdyBsb2FkaW5nIGJhZGdlLCBiZWNhdXNlIG9mIGZsaWNrZXJpbmdcblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRpZiAoZGVsYXlXYXRjaCA9PT0gdHJ1ZSkgcmV0dXJuO1xuXHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJsb2FkaW5nXCIpO1xuXHRcdGRlbGF5V2F0Y2ggPSB0cnVlO1xuXHR9KTtcblxuXHR1cmwgPSBmb3JtYXRVUkwuY2FsbCh0aGlzLCB1cmwpO1xuXG5cdHNlbGZbaXNMb2FkaW5nU3ltYm9sXSA9IHRydWU7XG5cdGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXHRyZXR1cm4gZ2xvYmFsXG5cdFx0LmZldGNoKHVybCwgZmV0Y2hPcHRpb25zKVxuXHRcdC50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdFx0c2VsZltpc0xvYWRpbmdTeW1ib2xdID0gZmFsc2U7XG5cdFx0XHRkZWxheVdhdGNoID0gdHJ1ZTtcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG5cdFx0XHRpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5kZXhPZihcImFwcGxpY2F0aW9uL2pzb25cIikgIT09IC0xKSB7XG5cdFx0XHRcdHJldHVybiByZXNwb25zZS50ZXh0KCk7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHJlc3BvbnNlICR7Y29udGVudFR5cGV9YCk7XG5cdFx0fSlcblx0XHQudGhlbigodGV4dCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShKU09OLnBhcnNlKFN0cmluZyh0ZXh0KSkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidGhlIHJlc3VsdCBjYW5ub3QgYmUgcGFyc2VkLCBjaGVjayB0aGUgVVJMXCIpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRzZWxmW2lzTG9hZGluZ1N5bWJvbF0gPSBmYWxzZTtcblx0XHRcdGRlbGF5V2F0Y2ggPSB0cnVlO1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoaWRlKCkge1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImNsb3NlZFwiKTtcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4odGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sIFwiY2xhc3NcIiwgXCJvcGVuXCIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNob3coKSB7XG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIHVuZGVmaW5lZCkgPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXG5cdGNvbnN0IGxhenlMb2FkRmxhZyA9XG5cdFx0dGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiKSAmJiB0aGlzW2xhenlMb2FkRG9uZVN5bWJvbF0gIT09IHRydWU7XG5cblx0aWYgKGxhenlMb2FkRmxhZyA9PT0gdHJ1ZSkge1xuXHRcdHRoaXNbbGF6eUxvYWREb25lU3ltYm9sXSA9IHRydWU7XG5cdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImxvYWRpbmdcIik7XG5cblx0XHRuZXcgUHJvY2Vzc2luZygyMDAsICgpID0+IHtcblx0XHRcdHRoaXMuZmV0Y2goKVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0Y2hlY2tPcHRpb25TdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRzaG93LmNhbGwodGhpcyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImVycm9yXCIpO1xuXHRcdFx0XHR9KTtcblx0XHR9KVxuXHRcdFx0LnJ1bigpXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImVycm9yXCIpO1xuXHRcdFx0fSk7XG5cblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBoYXNQb3BwZXJGaWx0ZXJGbGFnID1cblx0XHR0aGlzLmdldE9wdGlvbihcImZpbHRlci5wb3NpdGlvblwiKSA9PT0gRklMVEVSX1BPU0lUSU9OX1BPUFBFUiAmJlxuXHRcdGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSAhPT0gRklMVEVSX01PREVfRElTQUJMRUQ7XG5cblx0Y29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbkVsZW1lbnRzLmNhbGwodGhpcyk7XG5cdGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCAmJiBoYXNQb3BwZXJGaWx0ZXJGbGFnID09PSBmYWxzZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSztcblx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcIm9wZW5cIik7XG5cblx0YWRkQXR0cmlidXRlVG9rZW4odGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sIFwiY2xhc3NcIiwgXCJvcGVuXCIpO1xuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuXHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cdFx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInZpc2liaWxpdHlcIik7XG5cdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdH0pXG5cdFx0LnJ1bigpXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZSgpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHR9IGVsc2Uge1xuXHRcdHNob3cuY2FsbCh0aGlzKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAZmlyZXMgbW9uc3Rlci1zZWxlY3Rpb24tcmVtb3ZlZFxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0aW9uLWNsZWFyZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHRzZWxmW2NsZWFyT3B0aW9uRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcInJlbW92ZS1iYWRnZVwiLFxuXHRcdCk7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRjb25zdCBiYWRnZSA9IGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZWxlbWVudCwgQVRUUklCVVRFX1JPTEUsIFwiYmFkZ2VcIik7XG5cdFx0XHRpZiAoYmFkZ2UgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGJhZGdlLmdldEF0dHJpYnV0ZShgJHtBVFRSSUJVVEVfUFJFRklYfXZhbHVlYCk7XG5cblx0XHRcdFx0bGV0IHNlbGVjdGlvbiA9IHNlbGYuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRcdFx0XHRzZWxlY3Rpb24gPSBzZWxlY3Rpb24uZmlsdGVyKChiKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlICE9PSBiLnZhbHVlO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRzZXRTZWxlY3Rpb25cblx0XHRcdFx0XHQuY2FsbChzZWxmLCBzZWxlY3Rpb24pXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1zZWxlY3Rpb24tcmVtb3ZlZFwiLCB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHNlbGYsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0c2VsZltjbG9zZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHBhdGgpKSB7XG5cdFx0XHRpZiAoZWxlbWVudCA9PT0gc2VsZikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGhpZGUuY2FsbChzZWxmKTtcblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHNlbGZbaW5wdXRFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBwYXRoPy5bMF07XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSAmJlxuXHRcdFx0XHRlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwib3B0aW9uLWNvbnRyb2xcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItY2hhbmdlXCIsIHtcblx0XHRcdFx0XHR0eXBlOiBldmVudC50eXBlLFxuXHRcdFx0XHRcdHZhbHVlOiBlbGVtZW50LnZhbHVlLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IGVsZW1lbnQuY2hlY2tlZCxcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcblx0XHRcdFx0ZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpID09PSBcImZpbHRlclwiXG5cdFx0XHQpIHtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHRzZWxmW2NoYW5nZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRnYXRoZXJTdGF0ZS5jYWxsKHNlbGYpO1xuXHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItY2hhbmdlZFwiLCBldmVudD8uZGV0YWlsKTtcblx0fTtcblxuXHRzZWxmW2tleUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHBhdGguc2hpZnQoKTtcblxuXHRcdGxldCByb2xlO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0aWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSkge1xuXHRcdFx0XHRyb2xlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpO1xuXHRcdFx0fSBlbHNlIGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRcdFx0Ly8gZm9jdXNGaWx0ZXIuY2FsbChzZWxmKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGUgPSBlbGVtZW50LmNsb3Nlc3QoYFske0FUVFJJQlVURV9ST0xFfV1gKTtcblx0XHRcdFx0aWYgKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkpIHtcblx0XHRcdFx0XHRyb2xlID0gZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRzd2l0Y2ggKHJvbGUpIHtcblx0XHRcdGNhc2UgXCJmaWx0ZXJcIjpcblx0XHRcdFx0aGFuZGxlRmlsdGVyS2V5Ym9hcmRFdmVudHMuY2FsbChzZWxmLCBldmVudCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIm9wdGlvbi1sYWJlbFwiOlxuXHRcdFx0Y2FzZSBcIm9wdGlvbi1jb250cm9sXCI6XG5cdFx0XHRjYXNlIFwib3B0aW9uXCI6XG5cdFx0XHRcdGhhbmRsZU9wdGlvbktleWJvYXJkRXZlbnRzLmNhbGwoc2VsZiwgZXZlbnQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb250cm9sXCI6XG5cdFx0XHRjYXNlIFwidG9nZ2xlXCI6XG5cdFx0XHRcdGhhbmRsZVRvZ2dsZUtleWJvYXJkRXZlbnRzLmNhbGwoc2VsZiwgZXZlbnQpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH07XG5cblx0Y29uc3QgdHlwZXMgPSBzZWxmLmdldE9wdGlvbihcInRvZ2dsZUV2ZW50VHlwZVwiLCBbXCJjbGlja1wiXSk7XG5cblx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyh0eXBlcykpIHtcblx0XHRzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXVxuXHRcdFx0LnF1ZXJ5U2VsZWN0b3IoYFske0FUVFJJQlVURV9ST0xFfT1cImNvbnRhaW5lclwiXWApXG5cdFx0XHQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XHRcdFwicmVtb3ZlLWJhZGdlXCIsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0b2dnbGUuY2FsbChzZWxmKTtcblx0XHRcdH0pO1xuXG5cdFx0c2VsZltjb250cm9sRWxlbWVudFN5bWJvbF1cblx0XHRcdC5xdWVyeVNlbGVjdG9yKGBbJHtBVFRSSUJVVEVfUk9MRX09XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiXWApXG5cdFx0XHQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgdW5kZWZpbmVkKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IHBhdGg/LlswXTtcblx0XHRcdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRyb2wgPSBlbGVtZW50LmNsb3Nlc3QoXG5cdFx0XHRcdFx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIl1gLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRyb2wuY2xhc3NMaXN0LmNvbnRhaW5zKFwiY2xlYXJcIikpIHtcblx0XHRcdFx0XHRcdFx0Y2xlYXJTZWxlY3Rpb24uY2FsbChzZWxmKTtcblxuXHRcdFx0XHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXNlbGVjdGlvbi1jbGVhcmVkXCIsIHt9KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdFx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRcdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFx0XHRcdFx0XHRcInJlbW92ZS1iYWRnZVwiLFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dG9nZ2xlLmNhbGwoc2VsZik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdC8vIGJhZGdlLCBzZWxlY3Rpb25cblx0XHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgc2VsZltjbGVhck9wdGlvbkV2ZW50SGFuZGxlcl0pO1xuXHR9XG5cblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwibW9uc3Rlci1jaGFuZ2VcIiwgc2VsZltjaGFuZ2VFdmVudEhhbmRsZXJdKTtcblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgc2VsZltpbnB1dEV2ZW50SGFuZGxlcl0pO1xuXHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHNlbGZba2V5RXZlbnRIYW5kbGVyXSk7XG5cblx0cmV0dXJuIHNlbGY7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqL1xuZnVuY3Rpb24gc2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMoc3VnZ2VzdGlvbikge1xuXHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXG5cdFx0Y29uc3QgY2xlYXJBbGxGbGFnID1cblx0XHRcdGlzQXJyYXkoc2VsZWN0aW9uKSAmJlxuXHRcdFx0c2VsZWN0aW9uLmxlbmd0aCA+IDAgJiZcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuY2xlYXJBbGxcIikgPT09IHRydWU7XG5cblx0XHRjb25zdCBjdXJyZW50ID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIik7XG5cblx0XHRpZiAoc3VnZ2VzdGlvbiA9PT0gXCJlcnJvclwiKSB7XG5cdFx0XHRpZiAoY3VycmVudCAhPT0gXCJlcnJvclwiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwiZXJyb3JcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXNbaXNMb2FkaW5nU3ltYm9sXSA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwibG9hZGluZ1wiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwibG9hZGluZ1wiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoc3VnZ2VzdGlvbiA9PT0gXCJsb2FkaW5nXCIpIHtcblx0XHRcdGlmIChjdXJyZW50ICE9PSBcImxvYWRpbmdcIikge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcImxvYWRpbmdcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGNsZWFyQWxsRmxhZykge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwiY2xlYXJcIikge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcImNsZWFyXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJvcGVuXCIpKSB7XG5cdFx0XHRpZiAoY3VycmVudCAhPT0gXCJvcGVuXCIpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJvcGVuXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG5cdFx0aWYgKFxuXHRcdFx0b3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRvcHRpb25zID09PSBudWxsIHx8XG5cdFx0XHQoaXNBcnJheShvcHRpb25zKSAmJiBvcHRpb25zLmxlbmd0aCA9PT0gMClcblx0XHQpIHtcblx0XHRcdGlmIChjdXJyZW50ICE9PSBcImVtcHR5XCIpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJlbXB0eVwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoc3VnZ2VzdGlvbikge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IHN1Z2dlc3Rpb24pIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgc3VnZ2VzdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udHJvbF1gLFxuXHQpO1xuXHR0aGlzW3NlbGVjdGlvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1zZWxlY3Rpb25dYCxcblx0KTtcblx0dGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udGFpbmVyXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXBvcHBlcl1gLFxuXHQpO1xuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1maWx0ZXJdW25hbWU9XCJpbmxpbmUtZmlsdGVyXCJdYCxcblx0KTtcblx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09ZmlsdGVyXVtuYW1lPVwicG9wcGVyLWZpbHRlclwiXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0gPVxuXHRcdHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0ucGFyZW50RWxlbWVudDtcblx0dGhpc1tvcHRpb25zRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbnNdYCxcblx0KTtcblx0dGhpc1tub09wdGlvbnNBdmFpbGFibGVFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09XCJuby1vcHRpb25zXCJdYCxcblx0KTtcblx0dGhpc1tzdGF0dXNPclJlbW92ZUJhZGdlc0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc11gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVBvcHBlcigpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSAhPT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGNhbGNBbmRTZXRPcHRpb25zRGltZW5zaW9uLmNhbGwodGhpcyk7XG5cdFx0cG9zaXRpb25Qb3BwZXIuY2FsbChcblx0XHRcdHRoaXMsXG5cdFx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSxcblx0XHRcdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0sXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcInBvcHBlclwiLCB7fSksXG5cdFx0KTtcblx0fSlcblx0XHQucnVuKClcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvblwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItZmlsdGVyZWQgcGF0aDpvcHRpb25zLmZpbHRlcmVkLFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eSBwYXRoOm9wdGlvbnMudmlzaWJpbGl0eVwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBwYXJ0PVwib3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvbi1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICB0eXBlIHBhdGg6dHlwZSxcbiAgICAgICAgICAgIHJvbGUgcGF0aDpyb2xlLFxuICAgICAgICAgICAgdmFsdWUgcGF0aDpvcHRpb25zIHwgaW5kZXg6dmFsdWUsIFxuICAgICAgICAgICAgbmFtZSBwYXRoOm5hbWUsIFxuICAgICAgICAgICAgcGFydCBwYXRoOnR5cGUgfCBwcmVmaXg6b3B0aW9uLSB8IHN1ZmZpeDogZm9ybSxcbiAgICAgICAgICAgIGNsYXNzIHBhdGg6b3B0aW9ucy5jbGFzcyBcbiAgICAgICAgICAgIFwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6b3B0aW9ucyB8IGluZGV4OmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0PVwib3B0aW9uLWxhYmVsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDx0ZW1wbGF0ZSBpZD1cInNlbGVjdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImJhZGdlXCJcbiAgICAgICAgICAgICAgICAgcGFydD1cImJhZGdlXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXZhbHVlIHBhdGg6c2VsZWN0aW9uIHwgaW5kZXg6dmFsdWUsIFxuICAgICAgICAgICAgICAgICBjbGFzcyBwYXRoOmNsYXNzZXMgfCBpbmRleDpiYWRnZSwgXG4gICAgICAgIHBhcnQgcGF0aDp0eXBlIHwgc3VmZml4Oi1vcHRpb24gfCBwcmVmaXg6IGZvcm0tXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOnNlbGVjdGlvbiB8IGluZGV4OmxhYmVsXCIgcGFydD1cImJhZGdlLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYmFkZ2UtbGFiZWxcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJyZW1vdmUtYmFkZ2VcIiBkYXRhLW1vbnN0ZXItc2VsZWN0LXRoaXNcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpmZWF0dXJlcy5jbGVhciB8ID86OmhpZGRlbiBcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJyZW1vdmUtYmFkZ2VcIiB0YWJpbmRleD1cIi0xXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8c2xvdCBjbGFzcz1cImhpZGRlblwiPjwvc2xvdD5cblxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgXFwke3NlbGVjdGVkfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uLWZpbHRlci1jb250cm9sXCIgcm9sZT1cInNlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwic2VhcmNoYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJwb3BwZXItZmlsdGVyXCIgbmFtZT1cInBvcHBlci1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cImNvbnRlbnRcIiBjbGFzcz1cImZsZXhcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJvcHRpb25zXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJvcHRpb25zXCIgZGF0YS1tb25zdGVyLWluc2VydD1cIm9wdGlvbnMgcGF0aDpvcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwibm8tb3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwibm8tb3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bWVzc2FnZXMuZW1wdHlPcHRpb25zXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgcGFydD1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFNlbGVjdCk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUG9wcGVyU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgUG9wcGVyU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdFBvcHBlclN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgcG9wcGVyIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbixcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4sXG59IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9ST0xFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyB9IGZyb20gXCIuLi9mb3JtL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHBvc2l0aW9uUG9wcGVyIH0gZnJvbSBcIi4uL2Zvcm0vdXRpbC9mbG9hdGluZy11aS5tanNcIjtcbmltcG9ydCB7IFBvcHBlclN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3BvcHBlci5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5cbmV4cG9ydCB7IFBvcHBlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGFycm93RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImFycm93RWxlbWVudFwiKTtcblxuLyoqXG4gKiBBIFBvcHBlciBpcyBhIGZsb2F0aW5nIFVJIGVsZW1lbnQgdGhhdCBjYW4gYmUgc2hvd24gb3IgaGlkZGVuLlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2xheW91dC9wb3BwZXIvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L3BvcHBlci1zaW1wbGVcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9wb3BwZXItY2xpY2tcbiAqXG4gKiBAc2luY2UgMS42NS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgcG9wcGVyIHRoYXQgY2FuIG1ha2UgeW91ciBsaWZlIGVhc2llciBhbmQgYWxzbyBsb29rcyBnb29kLlxuICogQGZpcmVzIG1vbnN0ZXItcG9wcGVyLWhpZGUgZmlyZWQgd2hlbiB0aGUgcG9wcGVyIGlzIGhpZGUuXG4gKiBAZmlyZXMgbW9uc3Rlci1wb3BwZXItaGlkZGVuIGZpcmVkIHdoZW4gdGhlIHBvcHBlciBpcyBoaWRkZW4uXG4gKiBAZmlyZXMgbW9uc3Rlci1wb3BwZXItb3BlbiBmaXJlZCB3aGVuIHRoZSBwb3BwZXIgaXMgb3Blbi5cbiAqIEBmaXJlcyBtb25zdGVyLXBvcHBlci1vcGVuZWQgZmlyZWQgd2hlbiB0aGUgcG9wcGVyIGlzIG9wZW5lZC5cbiAqL1xuY2xhc3MgUG9wcGVyIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2xheW91dC9wb3BwZXJAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUaGUgdGVtcGxhdGVzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIFRoZSBtYWluIHRlbXBsYXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbW9kZSBUaGUgbW9kZSBvZiB0aGUgcG9wcGVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGBjbGlja2AsIGBlbnRlcmAsIGBtYW51YWxgLCBgZm9jdXNgLCBcImF1dG9cIiBvciBhIGNvbWJpbmF0aW9uIG9mIHRoZW0uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250ZW50IFRoZSBjb250ZW50IG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwb3BwZXIgVGhlIHBvcHBlciBvcHRpb25zLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcG9wcGVyLnBsYWNlbWVudCBUaGUgcGxhY2VtZW50IG9mIHRoZSBwb3BwZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmUgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAgYW5kIGByaWdodGAuXG5cdCAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb25bXX0gcG9wcGVyLm1pZGRsZXdhcmUgVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyBUaGUgZmVhdHVyZXMgb2YgdGhlIHBvcHBlci5cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudCBQcmV2ZW50cyB0aGUgb3BlbiBldmVudCBmcm9tIGJlaW5nIHNlbnQuXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRtb2RlOiBcImF1dG8gZm9jdXNcIixcblx0XHRcdGNvbnRlbnQ6IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0cG9wcGVyOiB7XG5cdFx0XHRcdHBsYWNlbWVudDogXCJ0b3BcIixcblx0XHRcdFx0bWlkZGxld2FyZTogW1wiYXV0b1BsYWNlbWVudFwiLCBcInNoaWZ0XCIsIFwib2Zmc2V0OjE1XCIsIFwiYXJyb3dcIl0sXG5cdFx0XHR9LFxuXHRcdFx0ZmVhdHVyZXM6IHtcblx0XHRcdFx0cHJldmVudE9wZW5FdmVudFNlbnQ6IGZhbHNlLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBjb25uZWN0ZWRDYWxsYmFja2AgbWV0aG9kIG9uIHRoZSBmaXJzdCBjYWxsLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtWb2lkfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdGFnIG5hbWUgb2YgdGhlIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1wb3BwZXJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjc3Mgc3R5bGVzIG9mIHRoZSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1BvcHBlclN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGNvbm5lY3RlZCB0byB0aGUgZG9tLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHRhdHRhY2hSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBkb20uXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHRkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaXRoIHRoaXMgbWV0aG9kIHlvdSBjYW4gc2hvdyB0aGUgcG9wcGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQb3BwZXJ9XG5cdCAqL1xuXHRzaG93RGlhbG9nKCkge1xuXHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBXaXRoIHRoaXMgbWV0aG9kIHlvdSBjYW4gaGlkZSB0aGUgcG9wcGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQb3BwZXJ9XG5cdCAqL1xuXHRoaWRlRGlhbG9nKCkge1xuXHRcdGhpZGUuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBXaXRoIHRoaXMgbWV0aG9kIHlvdSBjYW4gdG9nZ2xlIHRoZSBwb3BwZXIuXG5cdCAqXG5cdCAqIEByZXR1cm4ge1BvcHBlcn1cblx0ICovXG5cdHRvZ2dsZURpYWxvZygpIHtcblx0XHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRcdHRoaXMuaGlkZURpYWxvZygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNob3dEaWFsb2coKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UG9wcGVyfVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuXHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMocGF0aCkpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHR9O1xuXG5cdGxldCBtb2RlcyA9IG51bGw7XG5cdGNvbnN0IG1vZGVPcHRpb24gPSB0aGlzLmdldE9wdGlvbihcIm1vZGVcIik7XG5cblx0aWYgKHR5cGVvZiBtb2RlT3B0aW9uID09PSBcInN0cmluZ1wiKSB7XG5cdFx0bW9kZXMgPSBtb2RlT3B0aW9uLnNwbGl0KFwiIFwiKTtcblx0fVxuXG5cdGlmIChcblx0XHRtb2RlcyA9PT0gbnVsbCB8fFxuXHRcdG1vZGVzID09PSB1bmRlZmluZWQgfHxcblx0XHRpc0FycmF5KG1vZGVzKSA9PT0gZmFsc2UgfHxcblx0XHRtb2Rlcy5sZW5ndGggPT09IDBcblx0KSB7XG5cdFx0bW9kZXMgPSBbXCJtYW51YWxcIl07XG5cdH1cblxuXHRmb3IgKGNvbnN0IFssIG1vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG1vZGVzKSkge1xuXHRcdGluaXRFdmVudEhhbmRsZXJCeU1vZGUuY2FsbCh0aGlzLCBtb2RlKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gbW9kZVxuICogQHJldHVybiB7UG9wcGVyfVxuICogQHRocm93cyBFcnJvclxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyQnlNb2RlKG1vZGUpIHtcblx0c3dpdGNoIChtb2RlKSB7XG5cdFx0Y2FzZSBcIm1hbnVhbFwiOlxuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiZm9jdXNcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zaG93RGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiY2xpY2tcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy50b2dnbGVEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImVudGVyXCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zaG93RGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImF1dG9cIjogLy8gaXMgaG92ZXJcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnNob3dEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuaGlkZURpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG1vZGUgJHttb2RlfWApO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVzaXplT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpcy5wYXJlbnRFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGhpZGUoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLWhpZGVcIiwge1xuXHRcdHNlbGYsXG5cdH0pO1xuXG5cdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbihzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXSwgXCJjbGFzc1wiLCBcIm9wZW5cIik7XG5cblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1wb3BwZXItaGlkZGVuXCIsIHtcblx0XHRcdHNlbGYsXG5cdFx0fSk7XG5cdH0sIDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNob3coKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmIChzZWxmLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmIChzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLW9wZW5cIiwge1xuXHRcdHNlbGYsXG5cdH0pO1xuXG5cdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSztcblxuXHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXSwgXCJjbGFzc1wiLCBcIm9wZW5cIik7XG5cdHVwZGF0ZVBvcHBlci5jYWxsKHNlbGYpO1xuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLW9wZW5lZFwiLCB7XG5cdFx0XHRzZWxmLFxuXHRcdH0pO1xuXHR9LCAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgIT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHBvc2l0aW9uUG9wcGVyLmNhbGwoXG5cdFx0dGhpcyxcblx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSxcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwicG9wcGVyXCIsIHt9KSxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UG9wcGVyfVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250cm9sXWAsXG5cdCk7XG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblx0dGhpc1thcnJvd0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1hcnJvd11gLFxuXHQpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8c2xvdCBuYW1lPVwiYnV0dG9uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIj48L3Nsb3Q+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoUG9wcGVyKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBQb3BwZXIgYXMgTmV3UG9wcGVyIH0gZnJvbSBcIi4uL2xheW91dC9wb3BwZXIubWpzXCI7XG5cbmV4cG9ydCB7IFBvcHBlciB9O1xuXG4vKipcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjY1LjBcbiAqL1xuY2xhc3MgUG9wcGVyIGV4dGVuZHMgTmV3UG9wcGVyIHt9XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUG9wcGVyQnV0dG9uU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgUG9wcGVyQnV0dG9uU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdFBvcHBlckJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgcG9wcGVyYnV0dG9uIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX0ubW9uc3Rlci1idXR0b24tcHJpbWFyeSxidXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeSwubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH1idXR0b246YWN0aXZlLGJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWJ1dHRvbjphY3RpdmV7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9Lm1vbnN0ZXItYnV0dG9uLWJhciwubW9uc3Rlci1idXR0b24tZ3JvdXB7YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6c3RyZXRjaDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2JveC1zaXppbmc6Ym9yZGVyLWJveDtnYXA6MDttYXJnaW46MXJlbSAwfS5tb25zdGVyLWJ1dHRvbi1ncm91cD46bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkqLTEpfS5tb25zdGVyLWJ1dHRvbi1ncm91cCA6aG92ZXJ7Ym94LXNoYWRvdzpub25lfWJ1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe2J1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfX1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gYnV0dG9ue3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWJ1dHRvbl17d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17aGVpZ2h0OjEwMCV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IFBvcHBlciB9IGZyb20gXCIuL3BvcHBlci5tanNcIjtcbmltcG9ydCB7IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3BvcHBlci1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBwb3NpdGlvblBvcHBlciB9IGZyb20gXCIuL3V0aWwvZmxvYXRpbmctdWkubWpzXCI7XG5pbXBvcnQgXCIuL2J1dHRvbi5tanNcIjtcblxuZXhwb3J0IHsgUG9wcGVyQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2xvc2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbG9zZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlckVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXJyb3dFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYXJyb3dFbGVtZW50XCIpO1xuXG4vKipcbiAqIFRoaXMgYWN0aW9uIGNhbGxiYWNrIGV4ZWN1dGVzIHRoZSBhY3Rpb25zIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZC5cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUFjdGlvbkNhbGxiYWNrXG4gKiBAcGFyYW0ge0V2ZW50fSBlIEV2ZW50XG4gKiBAdGhpcyB7Q3VzdG9tQ29udHJvbH1cbiAqL1xuXG4vKipcbiAqIFRoZSBQb3BwZXJCdXR0b24gaXMgYSBidXR0b24gdGhhdCBvcGVucyBhIHBvcHBlciBlbGVtZW50LlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvcG9wcGVyLWJ1dHRvbi5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqIGFzIHdlbGwgYXMgW3Bvb3BlcmpzXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItcG9wcGVyLWJ1dHRvbiAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1wb3BwZXItYnV0dG9uJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcG9wcGVyLWJ1dHRvbj48L21vbnN0ZXItcG9wcGVyLWJ1dHRvbj5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge1BvcHBlckJ1dHRvbn0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3BvcHBlci1idXR0b24uanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1wb3BwZXItYnV0dG9uJyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgYGRhdGEtbW9uc3Rlci1vcHRpb24tY2xhc3Nlcy1idXR0b25gIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIENTUyBjbGFzcyBvZiB0aGUgYnV0dG9uLlxuICpcbiAqIEBzdGFydHVtbCBwb3BwZXItYnV0dG9uLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIFBvcHBlclxuICogUG9wcGVyIDx8LS0gUG9wcGVyQnV0dG9uXG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgcG9wcGVyIGJ1dHRvblxuICovXG5cbi8qKlxuICogQSBiZWF1dGlmdWwgcG9wcGVyIGJ1dHRvbiB0aGF0IGNhbiBtYWtlIHlvdXIgbGlmZSBlYXNpZXIgYW5kIGFsc28gbG9va3MgZ29vZC5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3BvcHBlci1idXR0b24vXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9wb3BwZXItYnV0dG9uLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHBvcHBlciBidXR0b25cbiAqIEBmaXJlcyBtb25zdGVyLW9wdGlvbnMtc2V0XG4gKiBAZmlyZXMgbW9uc3Rlci1zZWxlY3RlZFxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VkXG4gKi9cbmNsYXNzIFBvcHBlckJ1dHRvbiBleHRlbmRzIFBvcHBlciB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vcG9wcGVyLWJ1dHRvbkBAaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyAtIFRoZSB0ZW1wbGF0ZXMgZm9yIHRoZSBjb250cm9sLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gLSBUaGUgbWFpbiB0ZW1wbGF0ZS5cblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGxhYmVscyAtIFRoZSBsYWJlbHMgZm9yIHRoZSBjb250cm9sLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmJ1dHRvbiAtIFRoZSBsYWJlbCBmb3IgdGhlIGJ1dHRvbi5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRlbnQgLSBUaGUgY29udGVudCBvZiB0aGUgcG9wcGVyLlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gcG9wcGVyIC0gVGhlIHBvcHBlciBvcHRpb25zLlxuXHQgKiBAZXh0ZW5kcyB7QnV0dG9uLmRlZmF1bHRzfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0YWN0aW9uczoge1xuXHRcdFx0XHRjbGljazogKGUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnRvZ2dsZURpYWxvZygpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIm1vbnN0ZXItYnV0dG9uXCIsXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdGJ1dHRvbjogJzxzbG90IG5hbWU9XCJidXR0b25cIj48L3Nsb3Q+Jyxcblx0XHRcdH0sXG5cdFx0XHRtb2RlOiBcImNsaWNrXCIsXG5cdFx0XHR2YWx1ZTogbnVsbCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b259XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1wb3BwZXItYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0Y29uc3Qgc3R5bGVzID0gc3VwZXIuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdHN0eWxlcy5wdXNoKFBvcHBlckJ1dHRvblN0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBzdHlsZXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0YXR0YWNoUmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0ZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5jbGljaygpIG1ldGhvZCBzaW11bGF0ZXMgYSBjbGljayBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2NsaWNrfVxuXHQgKi9cblx0Y2xpY2soKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2spXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uZm9jdXMoKSBtZXRob2Qgc2V0cyBmb2N1cyBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2ZvY3VzfVxuXHQgKi9cblx0Zm9jdXMob3B0aW9ucykge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5ibHVyKCkgbWV0aG9kIHJlbW92ZXMgZm9jdXMgZnJvbSB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqL1xuXHRibHVyKCkge1xuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5ibHVyKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5ibHVyKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9hdHRhY2hJbnRlcm5hbHN9XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IGZvcm1Bc3NvY2lhdGVkKCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBjdXJyZW50IHNlbGVjdGlvbiBvZiB0aGUgU2VsZWN0XG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1zZWxlY3QnKTtcblx0ICogY29uc29sZS5sb2coZS52YWx1ZSlcblx0ICogLy8gXHUyMUE2IDFcblx0ICogLy8gXHUyMUE2IFsnMScsJzInXVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd8YXJyYXl9XG5cdCAqL1xuXHRnZXQgdmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHNlbGVjdGlvblxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGUudmFsdWU9MVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd8YXJyYXl9IHZhbHVlXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqL1xuXHRzZXQgdmFsdWUodmFsdWUpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHZhbHVlKTtcblx0XHR0cnkge1xuXHRcdFx0dGhpcz8uc2V0Rm9ybVZhbHVlKHRoaXMudmFsdWUpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2luaXRFdmVudEhhbmRsZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyhwYXRoKSkge1xuXHRcdFx0aWYgKGVsZW1lbnQgPT09IHRoaXMpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0fTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhdHRhY2hSZXNpemVPYnNlcnZlcigpIHtcblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXMucGFyZW50RWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdIGluc3RhbmNlb2YgUmVzaXplT2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgIT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHBvc2l0aW9uUG9wcGVyLmNhbGwoXG5cdFx0dGhpcyxcblx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSxcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwicG9wcGVyXCIsIHt9KSxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250cm9sXWAsXG5cdCk7XG5cblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YnV0dG9uXWAsXG5cdCk7XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09cG9wcGVyXWAsXG5cdCk7XG5cblx0dGhpc1thcnJvd0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1hcnJvd11gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxidXR0b24gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgaWY6dHJ1ZSwgY2xhc3MgcGF0aDpjbGFzc2VzLmJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuYnV0dG9uXCI+PC9idXR0b24+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoUG9wcGVyQnV0dG9uKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBDb25maXJtQnV0dG9uU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRDb25maXJtQnV0dG9uU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBjb25maXJtYnV0dG9uIHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YWxpZ24tY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xlZnQ6MDtwYWRkaW5nOjEuMWVtO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJdIGRpdltkYXRhLW1vbnN0ZXItcm9sZT1hcnJvd117YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7aGVpZ2h0OmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTt6LWluZGV4Oi0xfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1kZWNpc2lvbl17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtZXZlbmx5O21hcmdpbjoxcmVtIDAgLjRyZW07d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17aGVpZ2h0OjEwMCU7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudH1idXR0b257d2lkdGg6MTAwJX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdE1lc3NhZ2VTdGF0ZUJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgbWVzc2FnZXN0YXRlYnV0dG9uIHsgXG5AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25de3dpZHRoOjEwMCV9YnV0dG9ue3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnR9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9ST0xFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgUG9wcGVyIH0gZnJvbSBcIi4vcG9wcGVyLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvbWVzc2FnZS1zdGF0ZS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCBcIi4vc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIEEgc2VsZWN0IGNvbnRyb2wgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWxlY3Qgb25lIG9yIG1vcmUgb3B0aW9ucyBmcm9tIGEgbGlzdC5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL21lc3NhZ2Utc3RhdGUtYnV0dG9uL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vbWVzc2FnZS1zdGF0ZS1idXR0b24tc2ltcGxlXG4gKlxuICogQHNpbmNlIDIuMTEuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHNlbGVjdCBjb250cm9sIHRoYXQgY2FuIG1ha2UgeW91ciBsaWZlIGVhc2llciBhbmQgYWxzbyBsb29rcyBnb29kLlxuICogQGZpcmVzIG1vbnN0ZXItb3B0aW9ucy1zZXRcbiAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGVkXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZWRcbiAqL1xuY2xhc3MgTWVzc2FnZVN0YXRlQnV0dG9uIGV4dGVuZHMgUG9wcGVyIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL21lc3NhZ2Utc3RhdGUtYnV0dG9uQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLk1lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Vcblx0ICovXG5cdHNldFN0YXRlKHN0YXRlLCB0aW1lb3V0KSB7XG5cdFx0cmV0dXJuIHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0U3RhdGUoc3RhdGUsIHRpbWVvdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLk1lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHJlbW92ZVN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLnJlbW92ZVN0YXRlKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0U3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZ2V0U3RhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVscyBMYWJlbCBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmJ1dHRvbiBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IG1vZGUgTW9kZSBkZWZpbml0aW9ucyAobWFudWFsLCBzdWJtaXQpXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRtZXNzYWdlOiB7XG5cdFx0XHRcdHRpdGxlOiB1bmRlZmluZWQsXG5cdFx0XHRcdGNvbnRlbnQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0aWNvbjogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdG1vZGU6IFwibWFudWFsXCIsXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdH0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJtb25zdGVyLWJ1dHRvbi1wcmltYXJ5XCIsXG5cdFx0XHR9LFxuXHRcdFx0YWN0aW9uczoge1xuXHRcdFx0XHRjbGljazogKGUpID0+IHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgY2xpY2sgYWN0aW9uIGlzIG5vdCBkZWZpbmVkXCIpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdGRpc2FibGVCdXR0b246IGZhbHNlLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblxuXHRcdGxldCBtb2RlcyA9IG51bGw7XG5cdFx0Y29uc3QgbW9kZU9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwibW9kZVwiKTtcblx0XHRpZiAodHlwZW9mIG1vZGVPcHRpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdG1vZGVzID0gbW9kZU9wdGlvbi5zcGxpdChcIiBcIik7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0bW9kZXMgPT09IG51bGwgfHxcblx0XHRcdG1vZGVzID09PSB1bmRlZmluZWQgfHxcblx0XHRcdGlzQXJyYXkobW9kZXMpID09PSBmYWxzZSB8fFxuXHRcdFx0bW9kZXMubGVuZ3RoID09PSAwXG5cdFx0KSB7XG5cdFx0XHRtb2RlcyA9IFtcIm1hbnVhbFwiXTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFssIG1vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG1vZGVzKSkge1xuXHRcdFx0aW5pdEV2ZW50SGFuZGxlckJ5TW9kZS5jYWxsKHRoaXMsIG1vZGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1lc3NhZ2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8SFRNTEVsZW1lbnR9bWVzc2FnZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IGljb25cblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uTWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0c2V0TWVzc2FnZShtZXNzYWdlLCB0aXRsZSwgaWNvbikge1xuXHRcdGlmIChpc1N0cmluZyhtZXNzYWdlKSkge1xuXHRcdFx0aWYgKG1lc3NhZ2UgPT09IFwiXCIpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcIm1lc3NhZ2UgbXVzdCBub3QgYmUgZW1wdHlcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGNvbnRhaW5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRjb25zdCBtZXNzYWdlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdGNvbnN0IHRpdGxlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdHRpdGxlRGl2LnNldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1yb2xlXCIsIFwibWVzc2FnZS10aXRsZS1ib3hcIik7XG5cblx0XHRcdGxldCB0aXRsZUVsZW1lbnQsIGljb25FbGVtZW50O1xuXHRcdFx0aWYgKHRpdGxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGl0bGUgPSB2YWxpZGF0ZVN0cmluZyh0aXRsZSk7XG5cdFx0XHRcdHRpdGxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRcdHRpdGxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcIlwiKTtcblx0XHRcdFx0dGl0bGVFbGVtZW50LmlubmVySFRNTCA9IHRpdGxlO1xuXHRcdFx0XHR0aXRsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXJvbGVcIiwgXCJtZXNzYWdlLXRpdGxlXCIpO1xuXHRcdFx0XHR0aXRsZURpdi5hcHBlbmRDaGlsZCh0aXRsZUVsZW1lbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaWNvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGljb24gPSB2YWxpZGF0ZVN0cmluZyhpY29uKTtcblx0XHRcdFx0aWNvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0XHRpY29uRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcIlwiKTtcblx0XHRcdFx0aWNvbkVsZW1lbnQuaW5uZXJIVE1MID0gaWNvbjtcblx0XHRcdFx0aWNvbkVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXJvbGVcIiwgXCJtZXNzYWdlLWljb25cIik7XG5cdFx0XHRcdHRpdGxlRGl2LmFwcGVuZENoaWxkKGljb25FbGVtZW50KTtcblx0XHRcdH1cblxuXHRcdFx0bWVzc2FnZURpdi5pbm5lckhUTUwgPSBtZXNzYWdlO1xuXHRcdFx0Y29udGFpbmVyRGl2LmFwcGVuZENoaWxkKHRpdGxlRGl2KTtcblx0XHRcdGNvbnRhaW5lckRpdi5hcHBlbmRDaGlsZChtZXNzYWdlRGl2KTtcblxuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlLmNvbnRlbnRcIiwgY29udGFpbmVyRGl2KTtcblx0XHR9IGVsc2UgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlLmNvbnRlbnRcIiwgbWVzc2FnZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcdFwibWVzc2FnZSBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XCIsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGNsZWFycyB0aGUgTWVzc2FnZVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5NZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHRjbGVhck1lc3NhZ2UoKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlLnRpdGxlXCIsIHVuZGVmaW5lZCk7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlLmNvbnRlbnRcIiwgdW5kZWZpbmVkKTtcblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2UuaWNvblwiLCB1bmRlZmluZWQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpdGggdGhpcyBtZXRob2QgeW91IGNhbiBzaG93IHRoZSBwb3BwZXIgd2l0aCB0aW1lb3V0IGZlYXR1cmUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG5cdCAqIEByZXR1cm4ge01lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHNob3dNZXNzYWdlKHRpbWVvdXQpIHtcblx0XHR0aGlzLnNob3dEaWFsb2cuY2FsbCh0aGlzKTtcblxuXHRcdGlmICh0aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRzdXBlci5oaWRlRGlhbG9nKCk7XG5cdFx0XHR9LCB0aW1lb3V0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBXaXRoIHRoaXMgbWV0aG9kIHlvdSBjYW4gc2hvdyB0aGUgcG9wcGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHRzaG93RGlhbG9nKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcIm1lc3NhZ2UuY29udGVudFwiKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHN1cGVyLnNob3dEaWFsb2coKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5NZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHRoaWRlTWVzc2FnZSgpIHtcblx0XHRzdXBlci5oaWRlRGlhbG9nKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uTWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0dG9nZ2xlTWVzc2FnZSgpIHtcblx0XHRzdXBlci50b2dnbGVEaWFsb2coKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdCAqL1xuXHRnZXRNZXNzYWdlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcIm1lc3NhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLW1lc3NhZ2Utc3RhdGUtYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBzdHlsZXMgPSBQb3BwZXIuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdHN0eWxlcy5wdXNoKFN0YXRlQnV0dG9uU3R5bGVTaGVldCk7XG5cdFx0c3R5bGVzLnB1c2goTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCk7XG5cdFx0cmV0dXJuIHN0eWxlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmNsaWNrKCkgbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2soKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5mb2N1cygpIG1ldGhvZCBzZXRzIGZvY3VzIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvZm9jdXN9XG5cdCAqL1xuXHRmb2N1cyhvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlckJ5TW9kZShtb2RlKSB7XG5cdHN3aXRjaCAobW9kZSkge1xuXHRcdGNhc2UgXCJtYW51YWxcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiLCAoZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiKTtcblx0XHRcdFx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwic3VibWl0XCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcImFjdGlvbnMuY2xpY2tcIiwgKGUpID0+IHtcblx0XHRcdFx0Y29uc3QgZm9ybSA9IHRoaXMuZm9ybTtcblxuXHRcdFx0XHRpZiAoZm9ybSBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCkge1xuXHRcdFx0XHRcdGZvcm0ucmVxdWVzdFN1Ym1pdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cblxuICAgICAgICAgICAgPG1vbnN0ZXItc3RhdGUtYnV0dG9uIGV4cG9ydHBhcnRzPVwiYnV0dG9uOmJ1dHRvbi1idXR0b24sY29udHJvbDpidXR0b24tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItb3B0aW9uLWNsYXNzZXMtYnV0dG9uIHBhdGg6Y2xhc3Nlcy5idXR0b24sIGRpc2FibGVkIHBhdGg6ZmVhdHVyZXMuZGlzYWJsZUJ1dHRvbiB8IGlmOnRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L3NwYW4+XG4gICAgICAgICAgICA8L21vbnN0ZXItc3RhdGUtYnV0dG9uPlxuXG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwibWVzc2FnZVwiIHBhcnQ9XCJtZXNzYWdlXCIgY2xhc3M9XCJmbGV4XCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlLmNvbnRlbnRcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE1lc3NhZ2VTdGF0ZUJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IHR5cGVPZiB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlb2YubWpzXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi9idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXJCdXR0b24gfSBmcm9tIFwiLi9wb3BwZXItYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2NvbmZpcm0tYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5cbmltcG9ydCBcIi4vYnV0dG9uLm1qc1wiO1xuaW1wb3J0IFwiLi9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3BvcHBlci1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanNcIjtcblxuZXhwb3J0IHsgQ29uZmlybUJ1dHRvbiB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbmZpcm1CdXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY2FuY2VsQnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBUaGlzIGFjdGlvbiBjYWxsYmFjayBleGVjdXRlcyB0aGUgYWN0aW9ucyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja1xuICogQHBhcmFtIHtFdmVudH0gZSBFdmVudFxuICogQHRoaXMge0N1c3RvbUNvbnRyb2x9XG4gKi9cblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIGNvbmZpcm0gYnV0dG9uIGVsZW1lbnQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2NvbmZpcm0tYnV0dG9uLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICogYXMgd2VsbCBhcyBbcG9vcGVyanNdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyLykuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1jb25maXJtLWJ1dHRvbiAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jb25maXJtLWJ1dHRvbicpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLWNvbmZpcm0tYnV0dG9uPjwvbW9uc3Rlci1jb25maXJtLWJ1dHRvbj5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge0NvbmZpcm1CdXR0b259IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9jb25maXJtLWJ1dHRvbi5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7XG4gKiBgYGBcbiAqIFRoZSBgZGF0YS1tb25zdGVyLWJ1dHRvbi1jbGFzc2AgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgQ1NTIGNsYXNzIG9mIHRoZSBidXR0b24uXG4gKlxuICogQHN0YXJ0dW1sIGNvbmZpcm0tYnV0dG9uLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIEJ1dHRvblxuICogQnV0dG9uIDx8LS0gUG9wcGVyQnV0dG9uXG4gKiBQb3BwZXJCdXR0b24gPHwtLSBDb25maXJtQnV0dG9uXG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgY29uZmlybSBidXR0b25cbiAqL1xuXG4vKipcbiAqIEEgY29uZmlybSBidXR0b24gY29udHJvbC5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL2NvbmZpcm0tYnV0dG9uL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vY29uZmlybS1idXR0b24tc2ltcGxlXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25maXJtIGJ1dHRvbiBjb250cm9sXG4gKi9cbmNsYXNzIENvbmZpcm1CdXR0b24gZXh0ZW5kcyBQb3BwZXJCdXR0b24ge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL2NvbmZpcm0tYnV0dG9uQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdG9nZ2xlRXZlbnRUeXBlPWNsaWNrLHRvdWNoIExpc3Qgb2YgZXZlbnQgdHlwZXMgdG8gYmUgb2JzZXJ2ZWQgZm9yIG9wZW5pbmcgdGhlIGNvbmZpcm0gbWVzc2FnZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuYnV0dG9uPSc8c2xvdCBuYW1lPVwiYnV0dG9uXCI+PC9zbG90PicgQnV0dG9uIGxhYmVsXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMubWVzc2FnZT0nPHNsb3Q+U2hvdWxkIEkgU3RheSBvciBTaG91bGQgSSBHbz88L3Nsb3Q+JyBNZXNzYWdlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuY29uZmlybT0nPHNsb3QgbmFtZT1cImNvbmZpcm1cIj5Db25maXJtPC9zbG90PicgQ29uZmlybSBidXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5jYW5jZWw9JzxzbG90IG5hbWU9XCJjYW5jZWxcIj5DYW5jZWw8L3Nsb3Q+JyBDYW5jZWwgYnV0dG9uIGxhYmVsXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUFjdGlvbkNhbGxiYWNrfSBhY3Rpb25zLmNvbmZpcm1cblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlQWN0aW9uQ2FsbGJhY2t9IGFjdGlvbnMuY2FuY2VsIExpc3Qgb2YgZXZlbnQgdHlwZXMgdG8gYmUgb2JzZXJ2ZWQgZm9yIG9wZW5pbmcgdGhlIGRyb3Bkb3duXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBwb3BwZXIgW1BvcHBlckpTIE9wdGlvbnNdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyLylcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBvcHBlci5wbGFjZW1lbnQ9dG9wIFBvcHBlckpTIHBsYWNlbWVudFxuXHQgKiBAZXh0ZW5kcyB7UG9wcGVyQnV0dG9ufVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdGNvbnN0IG9iaiA9IE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiAnPHNsb3QgbmFtZT1cImJ1dHRvblwiPjwvc2xvdD4nLFxuXHRcdFx0XHRtZXNzYWdlOiBcIjxzbG90PlNob3VsZCBJIFN0YXkgb3IgU2hvdWxkIEkgR28/PC9zbG90PlwiLFxuXHRcdFx0XHRjb25maXJtOiAnPHNsb3QgbmFtZT1cImNvbmZpcm1cIj5Db25maXJtPC9zbG90PicsXG5cdFx0XHRcdGNhbmNlbDogJzxzbG90IG5hbWU9XCJjYW5jZWxcIj5DYW5jZWw8L3Nsb3Q+Jyxcblx0XHRcdH0sXG5cdFx0fSk7XG5cblx0XHRvYmpbXCJjbGFzc2VzXCJdW1wiY29uZmlybUJ1dHRvblwiXSA9IFwibW9uc3Rlci1idXR0b24tcHJpbWFyeVwiO1xuXHRcdG9ialtcImNsYXNzZXNcIl1bXCJjYW5jZWxCdXR0b25cIl0gPSBcIm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeVwiO1xuXHRcdG9ialtcImFjdGlvbnNcIl1bXCJjYW5jZWxcIl0gPSAoZSkgPT4ge1xuXHRcdFx0dGhpcy5oaWRlRGlhbG9nKCk7XG5cdFx0fTtcblxuXHRcdG9ialtcImFjdGlvbnNcIl1bXCJjb25maXJtXCJdID0gKGUpID0+IHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgY2FsbGJhY2sgbXVzdCBiZSBpbXBsZW1lbnRlZFwiKTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdGhpZGVEaWFsb2coKSB7XG5cdFx0c3VwZXIuaGlkZURpYWxvZygpO1xuXHRcdHRoaXNbY29uZmlybUJ1dHRvbkVsZW1lbnRTeW1ib2xdLnJlbW92ZVN0YXRlKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyQnV0dG9ufVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRoYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWNvbmZpcm0tYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7QXJyYXl9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBzdHlsZXMgPSBQb3BwZXJCdXR0b24uZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdHN0eWxlcy5wdXNoKENvbmZpcm1CdXR0b25TdHlsZVNoZWV0KTtcblx0XHRyZXR1cm4gc3R5bGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlckJ1dHRvbn1cblx0ICovXG5cdHNob3dEaWFsb2coKSB7XG5cdFx0Y29uc3QgY29uZmlybUJ1dHRvbkNsYXNzID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmNvbmZpcm1CdXR0b25cIik7XG5cdFx0aWYgKGNvbmZpcm1CdXR0b25DbGFzcykge1xuXHRcdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFxuXHRcdFx0XHRcImNsYXNzZXMuYnV0dG9uXCIsXG5cdFx0XHRcdGNvbmZpcm1CdXR0b25DbGFzcyxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2FuY2VsQnV0dG9uQ2xhc3MgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuY2FuY2VsQnV0dG9uXCIpO1xuXHRcdGlmIChjYW5jZWxCdXR0b25DbGFzcykge1xuXHRcdFx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XHRcdFwiY2xhc3Nlcy5idXR0b25cIixcblx0XHRcdFx0Y2FuY2VsQnV0dG9uQ2xhc3MsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBzdXBlci5zaG93RGlhbG9nKCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBjb25maXJtIGJ1dHRvbiBzdGF0ZVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uQ29uZmlybUJ1dHRvbn1cblx0ICovXG5cdHNldENvbmZpcm1CdXR0b25TdGF0ZShzdGF0ZSwgdGltZW91dCkge1xuXHRcdHRoaXNbY29uZmlybUJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNldFN0YXRlKHN0YXRlLCB0aW1lb3V0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgYW5kIHNob3cgdGhlIGNvbmZpcm0gYnV0dG9uIG1lc3NhZ2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uQ29uZmlybUJ1dHRvbn1cblx0ICovXG5cdHNob3dDb25maXJtQnV0dG9uTWVzc2FnZShtZXNzYWdlLCB0aW1lb3V0KSB7XG5cdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0TWVzc2FnZShtZXNzYWdlKTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXNbY29uZmlybUJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNob3dNZXNzYWdlKHRpbWVvdXQpO1xuXHRcdH0sIDApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB0eXBlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9uKHR5cGUpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGNvbnN0IGNhbGxiYWNrID0gc2VsZi5nZXRPcHRpb24oYGFjdGlvbnMuJHt0eXBlfWApO1xuXHRcdGlmICh0eXBlT2YoY2FsbGJhY2spICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTtcblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50aGFuZGxlcn1cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b24jbW9uc3Rlci1jb25maXJtXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyQnV0dG9uI21vbnN0ZXItY29uZmlybWVkXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudGhhbmRsZXIoKSB7XG5cdHRoaXNbY2FuY2VsQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFxuXHRcdFwiY2xpY2tFdmVudFR5cGVcIixcblx0XHR0aGlzLmdldE9wdGlvbihcImNsaWNrRXZlbnRUeXBlXCIsIFtcImNsaWNrXCJdKSxcblx0KTtcblx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XCJhY3Rpb25zLmNsaWNrXCIsXG5cdFx0Z2V0QWN0aW9uLmNhbGwodGhpcywgXCJjYW5jZWxcIiksXG5cdCk7XG5cblx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFxuXHRcdFwiY2xpY2tFdmVudFR5cGVcIixcblx0XHR0aGlzLmdldE9wdGlvbihcImNsaWNrRXZlbnRUeXBlXCIsIFtcImNsaWNrXCJdKSxcblx0KTtcblx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiLCAoKSA9PiB7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBnZXRBY3Rpb24uY2FsbCh0aGlzLCBcImNvbmZpcm1cIik7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1jb25maXJtXCIsIHt9KTtcblx0XHRjYWxsYmFjay5jYWxsKHRoaXMpO1xuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItY29uZmlybWVkXCIsIHt9KTtcblx0fSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29uZmlybV1gLFxuXHQpO1xuXHR0aGlzW2NhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jYW5jZWxdYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxidXR0b24gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgaWY6dHJ1ZSwgY2xhc3MgcGF0aDpjbGFzc2VzLmJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuYnV0dG9uXCI+PC9idXR0b24+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJtZXNzYWdlXCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5tZXNzYWdlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImRlY2lzaW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLW1lc3NhZ2Utc3RhdGUtYnV0dG9uIGV4cG9ydHBhcnRzPVwibW9uc3Rlci1zdGF0ZS1idXR0b246Y29uZmlybS1idXR0b24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sOmNvbmZpcm0tY29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi1idXR0b246Y29uZmlybS1jb250cm9sLWJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi1jb250cm9sOmNvbmZpcm0tYnV0dG9uLWNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BwZXI6Y29uZmlybS1wb3BwZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOmNvbmZpcm0tcG9wcGVyLW1lc3NhZ2UtbWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246Y29uZmlybS1wb3BwZXItbWVzc2FnZS1pY29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6Y29uZmlybS1wb3BwZXItbWVzc2FnZS10aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGF0YS1tb25zdGVyLWJ1dHRvbi1jbGFzcyBwYXRoOmNsYXNzZXMuY29uZmlybUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY29uZmlybVwiIHBhcnQ9XCJjb25maXJtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmNvbmZpcm1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbW9uc3Rlci1tZXNzYWdlLXN0YXRlLWJ1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICA8bW9uc3Rlci1idXR0b24gZXhwb3J0cGFydHM9XCJidXR0b246Y2FuY2VsLWJ1dHRvbixjb250cm9sOmNhbmNlbC1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGF0YS1tb25zdGVyLWJ1dHRvbi1jbGFzcyBwYXRoOmNsYXNzZXMuY2FuY2VsQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY2FuY2VsXCIgcGFydD1cImNhbmNlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5jYW5jZWxcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbW9uc3Rlci1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KENvbmZpcm1CdXR0b24pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHBhcnNlRGF0YVVSTCB9IGZyb20gXCIuLi90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi9wYXRoZmluZGVyLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhc291cmNlIH07XG5cbi8qKlxuICogVGhpcyBjYWxsYmFjayBjYW4gYmUgcGFzc2VkIHRvIGEgZGF0YXNvdXJjZSBhbmQgaXMgdXNlZCB0byBhZGFwdCBkYXRhIHN0cnVjdHVyZXMuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlfmV4YW1wbGVDYWxsYmFja1xuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAgS2V5XG4gKiBAc2VlIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlXG4gKi9cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBpbnRlcm5hbERhdGFTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL0BAZGF0YVwiLFxuKTtcblxuLyoqXG4gKiBUaGUgZGF0YXNvdXJjZSBjbGFzcyBpcyB0aGUgYmFzaXMgZm9yIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgZGF0YSBzb3VyY2VzLlxuICogSXQgcHJvdmlkZXMgYSB1bmlmaWVkIGludGVyZmFjZSBmb3IgYWNjZXNzaW5nIGRhdGFcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kYXRhL2RhdGFzb3VyY2UubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgZGF0YXNvdXJjZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIERhdGFzb3VyY2UgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIGNyZWF0ZXMgYSBuZXcgZGF0YXNvdXJjZVxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gbmV3IFByb3h5T2JzZXJ2ZXIoe1xuXHRcdFx0b3B0aW9uczogZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRzKSxcblx0XHR9KTtcblxuXHRcdHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBhdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICovXG5cdGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tpbnRlcm5hbERhdGFTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBkZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXS5jb250YWluc09ic2VydmVyKG9ic2VydmVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXJpdmVkIGNsYXNzZXMgY2FuIG92ZXJyaWRlIGFuZCBleHRlbmQgdGhpcyBtZXRob2QgYXMgZm9sbG93cy5cblx0ICpcblx0ICogYGBgXG5cdCAqIGdldCBkZWZhdWx0cygpIHtcblx0ICogICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdCAqICAgICAgICBteVZhbHVlOnRydWVcblx0ICogICAgfSk7XG5cdCAqIH1cblx0ICogYGBgXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBvcHRpb25cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0c2V0T3B0aW9uKHBhdGgsIHZhbHVlKSB7XG5cdFx0bmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSkuc2V0VmlhKFxuXHRcdFx0cGF0aCxcblx0XHRcdHZhbHVlLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge0RhdGFzb3VyY2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqL1xuXHRzZXRPcHRpb25zKG9wdGlvbnMpIHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSBwYXJzZU9wdGlvbnNKU09OKG9wdGlvbnMpO1xuXHRcdH1cblx0XHRleHRlbmQoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuXHRcdFx0dGhpcy5kZWZhdWx0cyxcblx0XHRcdG9wdGlvbnMsXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRnZXRPcHRpb24ocGF0aCwgZGVmYXVsdFZhbHVlKSB7XG5cdFx0bGV0IHZhbHVlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhbHVlID0gbmV3IFBhdGhmaW5kZXIoXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuXHRcdFx0KS5nZXRWaWEocGF0aCk7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlcy5cblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgcmVhbCBvYmplY3Rcblx0ICpcblx0ICogQHJldHVybiB7T2JqZWN0fEFycmF5fVxuXHQgKi9cblx0Z2V0KCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdHxBcnJheX0gZGF0YVxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0c2V0KGRhdGEpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uc2V0U3ViamVjdChkYXRhKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlXCIpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuICovXG5mdW5jdGlvbiBwYXJzZU9wdGlvbnNKU09OKGRhdGEpIHtcblx0aWYgKGlzU3RyaW5nKGRhdGEpKSB7XG5cdFx0Ly8gdGhlIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHNwZWNpZmllZCBhcyBhIGRhdGEgdXJsLlxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkYXRhVXJsID0gcGFyc2VEYXRhVVJMKGRhdGEpO1xuXHRcdFx0ZGF0YSA9IGRhdGFVcmwuY29udGVudDtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XG5cdFx0XHR2YWxpZGF0ZU9iamVjdChvYmopO1xuXHRcdFx0cmV0dXJuIG9iajtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uIChhY3R1YWw6ICR7ZGF0YX0pLmAsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7fTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBVFRSSUJVVEVfUFJFRklYIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbi8qKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgPSBcImJsb2NrXCI7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1kYXRhc291cmNlYCBjYW4gYmUgdXNlZCB0byBwYXNzIGEgZGF0YXNvdXJjZS5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfREFUQVNPVVJDRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9ZGF0YXNvdXJjZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFTT1VSQ0VfU0VMRUNUT1IgPSBgJHtBVFRSSUJVVEVfREFUQVNPVVJDRX0tc2VsZWN0b3JgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EQVRBVEFCTEVfR1JJRF9URU1QTEFURSA9IGAke0FUVFJJQlVURV9QUkVGSVh9Z3JpZC10ZW1wbGF0ZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9IRUFEID0gYCR7QVRUUklCVVRFX1BSRUZJWH1oZWFkYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfREFUQVRBQkxFX0FMSUdOID0gYCR7QVRUUklCVVRFX1BSRUZJWH1hbGlnbmA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9TT1JUQUJMRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9c29ydGFibGVgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EQVRBVEFCTEVfSU5ERVggPSBgJHtBVFRSSUJVVEVfUFJFRklYfWluZGV4YDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfREFUQVRBQkxFX01PREUgPSBgJHtBVFRSSUJVVEVfUFJFRklYfW1vZGVgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EQVRBVEFCTEVfUkVTUE9OU0lWRV9CUkVBS1BPSU5UID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yZXNwb25zaXZlLWJyZWFrcG9pbnRgO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZS1hcmd1bWVudHNgIGNhbiBiZSB1c2VkIHRvIHBhc3MgYXJndW1lbnRzLlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EQVRBU09VUkNFX0FSR1VNRU5UUyA9IGAke0FUVFJJQlVURV9EQVRBU09VUkNFfS1hcmd1bWVudHNgO1xuXG4vKipcbiAqIENvbHVtbiBpcyBub3QgaGlkZWFibGUgYW5kIHZpc2libGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9NT0RFX0ZJWEVEID0gXCJmaXhlZFwiO1xuXG4vKipcbiAqIENvbHVtbiBpcyBoaWRkZW5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9NT0RFX0hJRERFTiA9IFwiaGlkZGVuXCI7XG5cbi8qKlxuICogQ29sdW1uIGlzIHZpc2libGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9NT0RFX1ZJU0lCTEUgPSBcInZpc2libGVcIjtcblxuZXhwb3J0IHtcblx0QVRUUklCVVRFX0RBVEFTT1VSQ0UsXG5cdEFUVFJJQlVURV9EQVRBU09VUkNFX1NFTEVDVE9SLFxuXHRBVFRSSUJVVEVfREFUQVNPVVJDRV9BUkdVTUVOVFMsXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfR1JJRF9URU1QTEFURSxcblx0QVRUUklCVVRFX0RBVEFUQUJMRV9IRUFELFxuXHRBVFRSSUJVVEVfREFUQVRBQkxFX1NPUlRBQkxFLFxuXHRBVFRSSUJVVEVfREFUQVRBQkxFX01PREUsXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfSU5ERVgsXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfQUxJR04sXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfTU9ERV9GSVhFRCxcblx0QVRUUklCVVRFX0RBVEFUQUJMRV9SRVNQT05TSVZFX0JSRUFLUE9JTlQsXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfTU9ERV9WSVNJQkxFLFxuXHRBVFRSSUJVVEVfREFUQVRBQkxFX01PREVfSElEREVOLFxuXHRTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0ssXG59O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdEN1c3RvbUVsZW1lbnQsXG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIGFzIERhdGFzb3VyY2VCYXNlIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgRGF0YXNvdXJjZSwgZGF0YVNvdXJjZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkYXRhU291cmNlU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZGF0YXNvdXJjZUBAZGF0YXNvdXJjZVwiLFxuKTtcblxuLyoqXG4gKiBUaGUgRGF0YXNvdXJjZSBjb21wb25lbnQgaXMgYSBiYXNpYyBjbGFzcyBmb3IgdGhlIGRhdGF0YWJsZSBjb21wb25lbnQuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9kYXRhc291cmNlLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIEBzdGFydHVtbCBkYXRhc291cmNlLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gRGF0YXNvdXJjZVxuICogQGVuZHVtbFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGFic3RyYWN0IGRhdGFzb3VyY2VcbiAqL1xuY2xhc3MgRGF0YXNvdXJjZSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBjbGFzc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2RhdGFTb3VyY2VTeW1ib2xdID0gbmV3IERhdGFzb3VyY2VCYXNlKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9kYXRhc291cmNlQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHt9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Gb3JtfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGRhdGEsIHdpdGhvdXQgcHJveHlcblx0ICogQHJldHVybiB7T2JqZWN0fVxuXHQgKi9cblx0Z2V0IGRhdGEoKSB7XG5cdFx0cmV0dXJuIHRoaXNbZGF0YVNvdXJjZVN5bWJvbF0uZ2V0KCk7XG5cdH1cblxuXHQvKipcblx0ICogc2V0IHRoZSBkYXRhXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG5cdCAqL1xuXHRzZXQgZGF0YShkYXRhKSB7XG5cdFx0dGhpc1tkYXRhU291cmNlU3ltYm9sXS5zZXQoZGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBkYXRhc291cmNlXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRGF0YS5EYXRhc291cmNlfVxuXHQgKi9cblx0Z2V0IGRhdGFzb3VyY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbZGF0YVNvdXJjZVN5bWJvbF07XG5cdH1cblxuXHR3cml0ZSgpIHtcblx0XHR0aGlzW2RhdGFTb3VyY2VTeW1ib2xdLndyaXRlKCk7XG5cdH1cblxuXHRyZWFkKCkge1xuXHRcdHRoaXNbZGF0YVNvdXJjZVN5bWJvbF0ucmVhZCgpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgRGF0YXNldFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IERhdGFzZXRTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0RGF0YXNldFN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgZGF0YXNldCB7IFxuOndoZXJlKGh0bWwpe2xpbmUtaGVpZ2h0OjEuMTU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1vei10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGV4dC1zaXplLWFkanVzdDoxMDAlfTp3aGVyZShoMSl7Zm9udC1zaXplOjJlbTttYXJnaW4tYmxvY2stZW5kOi42N2VtO21hcmdpbi1ibG9jay1zdGFydDouNjdlbX06d2hlcmUoZGwsb2wsdWwpIDp3aGVyZShkbCxvbCx1bCl7bWFyZ2luLWJsb2NrLWVuZDowO21hcmdpbi1ibG9jay1zdGFydDowfTp3aGVyZShocil7Ym94LXNpemluZzpjb250ZW50LWJveDtjb2xvcjppbmhlcml0O2hlaWdodDowfTp3aGVyZShhYmJyW3RpdGxlXSl7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfTp3aGVyZShiLHN0cm9uZyl7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShjb2RlLGtiZCxwcmUsc2FtcCl7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLG1vbm9zcGFjZTtmb250LXNpemU6MWVtfTp3aGVyZShzbWFsbCl7Zm9udC1zaXplOjgwJX06d2hlcmUodGFibGUpe2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3I7dGV4dC1pbmRlbnQ6MH06d2hlcmUoYnV0dG9uLGlucHV0LHNlbGVjdCl7bWFyZ2luOjB9OndoZXJlKGJ1dHRvbil7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufTp3aGVyZShwcm9ncmVzcyl7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9OndoZXJlKHNlbGVjdCl7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUodGV4dGFyZWEpe21hcmdpbjowfTp3aGVyZShpbnB1dFt0eXBlPXNlYXJjaCBpXSl7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiw6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouNTR9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyLXN0eWxlOm5vbmU7cGFkZGluZzowfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzcmluZ3tvdXRsaW5lOjFweCBkb3R0ZWQgQnV0dG9uVGV4dH06d2hlcmUoOi1tb3otdWktaW52YWxpZCl7Ym94LXNoYWRvdzpub25lfTp3aGVyZShkaWFsb2cpe2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6c29saWQ7Y29sb3I6IzAwMDtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7bGVmdDowO21hcmdpbjphdXRvO3BhZGRpbmc6MWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudH06d2hlcmUoZGlhbG9nOm5vdChbb3Blbl0pKXtkaXNwbGF5Om5vbmV9OndoZXJlKHN1bW1hcnkpe2Rpc3BsYXk6bGlzdC1pdGVtfWh0bWx7aGVpZ2h0OjEwMCV9Ym9keSxodG1se21pbi1oZWlnaHQ6Y2FsYygxMDB2aCAtIDQwcHgpfWJvZHl7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmc6MDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnksYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5LC5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9YnV0dG9uOmFjdGl2ZSxidXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31idXR0b246YWN0aXZle3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5tb25zdGVyLWJ1dHRvbi1iYXIsLm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tb25zdGVyLWJ1dHRvbi1ncm91cHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Z2FwOjA7bWFyZ2luOjFyZW0gMH0ubW9uc3Rlci1idXR0b24tZ3JvdXA+Om5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKi0xKX0ubW9uc3Rlci1idXR0b24tZ3JvdXAgOmhvdmVye2JveC1zaGFkb3c6bm9uZX1idXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtidXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja306YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlOlxcXCJDb25zb2xhc1xcXCIsXFxcIkNvdXJpZXIgTmV3XFxcIixcXFwiUm9ib3RvIE1vbm9cXFwiLFxcXCJTb3VyY2UgQ29kZSBQcm9cXFwiLFxcXCJGaXJhIE1vbm9cXFwiLG1vbm9zcGFjZTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTYpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoOjJweDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDozcHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweDstLW1vbnN0ZXItZHJhZ2dlci13aWR0aDoycHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoOjRweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0OjUwcHh9c3Bhbi5tb25zdGVyLWZ4LXJpcHBsZXthbmltYXRpb246bW9uc3Rlci1meC1yaXBwbGUgLjZzIGxpbmVhcjtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC43KTtib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06c2NhbGUoMCl9QGtleWZyYW1lcyBtb25zdGVyLWZ4LXJpcHBsZXt0b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDQpfX0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LC5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LC5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LC5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUsLm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3N7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MsLm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZ3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZywubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1lcnJvcntwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3IsLm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWluZm86YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtaW5mbzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1pbmZvOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWluZm86YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtaW5mbzpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLWluZm86YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWluZm8tY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J204LjkzIDYuNTg4LTIuMjkuMjg3LS4wODIuMzguNDUuMDgzYy4yOTQuMDcuMzUyLjE3Ni4yODguNDY5bC0uNzM4IDMuNDY4Yy0uMTk0Ljg5Ny4xMDUgMS4zMTkuODA4IDEuMzE5LjU0NSAwIDEuMTc4LS4yNTIgMS40NjUtLjU5OGwuMDg4LS40MTZjLS4yLjE3Ni0uNDkyLjI0Ni0uNjg2LjI0Ni0uMjc1IDAtLjM3NS0uMTkzLS4zMDQtLjUzM3pNOSA0LjVhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktaW5mby1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTguOTMgNi41ODgtMi4yOS4yODctLjA4Mi4zOC40NS4wODNjLjI5NC4wNy4zNTIuMTc2LjI4OC40NjlsLS43MzggMy40NjhjLS4xOTQuODk3LjEwNSAxLjMxOS44MDggMS4zMTkuNTQ1IDAgMS4xNzgtLjI1MiAxLjQ2NS0uNTk4bC4wODgtLjQxNmMtLjIuMTc2LS40OTIuMjQ2LS42ODYuMjQ2LS4yNzUgMC0uMzc1LS4xOTMtLjMwNC0uNTMzek05IDQuNWExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDAnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1pbmZvOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLWluZm86YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItaW5mbzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1pbmZvOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLWluZm86YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1pbmZvOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1pbmZvLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtOC45MyA2LjU4OC0yLjI5LjI4Ny0uMDgyLjM4LjQ1LjA4M2MuMjk0LjA3LjM1Mi4xNzYuMjg4LjQ2OWwtLjczOCAzLjQ2OGMtLjE5NC44OTcuMTA1IDEuMzE5LjgwOCAxLjMxOS41NDUgMCAxLjE3OC0uMjUyIDEuNDY1LS41OThsLjA4OC0uNDE2Yy0uMi4xNzYtLjQ5Mi4yNDYtLjY4Ni4yNDYtLjI3NSAwLS4zNzUtLjE5My0uMzA0LS41MzN6TTkgNC41YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWluZm8tY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J204LjkzIDYuNTg4LTIuMjkuMjg3LS4wODIuMzguNDUuMDgzYy4yOTQuMDcuMzUyLjE3Ni4yODguNDY5bC0uNzM4IDMuNDY4Yy0uMTk0Ljg5Ny4xMDUgMS4zMTkuODA4IDEuMzE5LjU0NSAwIDEuMTc4LS4yNTIgMS40NjUtLjU5OGwuMDg4LS40MTZjLS4yLjE3Ni0uNDkyLjI0Ni0uNjg2LjI0Ni0uMjc1IDAtLjM3NS0uMTkzLS4zMDQtLjUzM3pNOSA0LjVhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtaW5mbzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWljb24tdGVydGlhcnktMy1pbmZvOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLWluZm86YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtaW5mbzpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1pbmZvOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtaW5mbzpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktaW5mby1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTguOTMgNi41ODgtMi4yOS4yODctLjA4Mi4zOC40NS4wODNjLjI5NC4wNy4zNTIuMTc2LjI4OC40NjlsLS43MzggMy40NjhjLS4xOTQuODk3LjEwNSAxLjMxOS44MDggMS4zMTkuNTQ1IDAgMS4xNzgtLjI1MiAxLjQ2NS0uNTk4bC4wODgtLjQxNmMtLjIuMTc2LS40OTIuMjQ2LS42ODYuMjQ2LS4yNzUgMC0uMzc1LS4xOTMtLjMwNC0uNTMzek05IDQuNWExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDAnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1pbmZvLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtOC45MyA2LjU4OC0yLjI5LjI4Ny0uMDgyLjM4LjQ1LjA4M2MuMjk0LjA3LjM1Mi4xNzYuMjg4LjQ2OWwtLjczOCAzLjQ2OGMtLjE5NC44OTcuMTA1IDEuMzE5LjgwOCAxLjMxOS41NDUgMCAxLjE3OC0uMjUyIDEuNDY1LS41OThsLjA4OC0uNDE2Yy0uMi4xNzYtLjQ5Mi4yNDYtLjY4Ni4yNDYtLjI3NSAwLS4zNzUtLjE5My0uMzA0LS41MzN6TTkgNC41YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWluZm86YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtaW5mbzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1pbmZvOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWluZm86YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtaW5mbzpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LWluZm86YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWluZm8tY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J204LjkzIDYuNTg4LTIuMjkuMjg3LS4wODIuMzguNDUuMDgzYy4yOTQuMDcuMzUyLjE3Ni4yODguNDY5bC0uNzM4IDMuNDY4Yy0uMTk0Ljg5Ny4xMDUgMS4zMTkuODA4IDEuMzE5LjU0NSAwIDEuMTc4LS4yNTIgMS40NjUtLjU5OGwuMDg4LS40MTZjLS4yLjE3Ni0uNDkyLjI0Ni0uNjg2LjI0Ni0uMjc1IDAtLjM3NS0uMTkzLS4zMDQtLjUzM3pNOSA0LjVhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktaW5mby1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTguOTMgNi41ODgtMi4yOS4yODctLjA4Mi4zOC40NS4wODNjLjI5NC4wNy4zNTIuMTc2LjI4OC40NjlsLS43MzggMy40NjhjLS4xOTQuODk3LjEwNSAxLjMxOS44MDggMS4zMTkuNTQ1IDAgMS4xNzgtLjI1MiAxLjQ2NS0uNTk4bC4wODgtLjQxNmMtLjIuMTc2LS40OTIuMjQ2LS42ODYuMjQ2LS4yNzUgMC0uMzc1LS4xOTMtLjMwNC0uNTMzek05IDQuNWExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDAnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1vbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1vbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS10b2dnbGUtb24nIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J001IDNhNSA1IDAgMCAwIDAgMTBoNmE1IDUgMCAwIDAgMC0xMHptNiA5YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLXRvZ2dsZS1vbicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTUgM2E1IDUgMCAwIDAgMCAxMGg2YTUgNSAwIDAgMCAwLTEwem02IDlhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItb246YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItb246YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1vbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktdG9nZ2xlLW9uJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNSAzYTUgNSAwIDAgMCAwIDEwaDZhNSA1IDAgMCAwIDAtMTB6bTYgOWE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS10b2dnbGUtb24nIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J001IDNhNSA1IDAgMCAwIDAgMTBoNmE1IDUgMCAwIDAgMC0xMHptNiA5YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLXRvZ2dsZS1vbicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTUgM2E1IDUgMCAwIDAgMCAxMGg2YTUgNSAwIDAgMCAwLTEwem02IDlhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktdG9nZ2xlLW9uJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNSAzYTUgNSAwIDAgMCAwIDEwaDZhNSA1IDAgMCAwIDAtMTB6bTYgOWE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDgnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1vbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1vbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS10b2dnbGUtb24nIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J001IDNhNSA1IDAgMCAwIDAgMTBoNmE1IDUgMCAwIDAgMC0xMHptNiA5YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLXRvZ2dsZS1vbicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTUgM2E1IDUgMCAwIDAgMCAxMGg2YTUgNSAwIDAgMCAwLTEwem02IDlhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtb2ZmOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW9mZjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1vZmY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtb2ZmOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLW9mZjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW9mZjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMTEgNGE0IDQgMCAwIDEgMCA4SDhhNSA1IDAgMCAwIDItNCA1IDUgMCAwIDAtMi00em0tNiA4YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOE0wIDhhNSA1IDAgMCAwIDUgNWg2YTUgNSAwIDAgMCAwLTEwSDVhNSA1IDAgMCAwLTUgNScvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTExIDRhNCA0IDAgMCAxIDAgOEg4YTUgNSAwIDAgMCAyLTQgNSA1IDAgMCAwLTItNHptLTYgOGE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDhNMCA4YTUgNSAwIDAgMCA1IDVoNmE1IDUgMCAwIDAgMC0xMEg1YTUgNSAwIDAgMC01IDUnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1vZmY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItb2ZmOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLW9mZjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1vZmY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItb2ZmOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItb2ZmOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J00xMSA0YTQgNCAwIDAgMSAwIDhIOGE1IDUgMCAwIDAgMi00IDUgNSAwIDAgMC0yLTR6bS02IDhhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4TTAgOGE1IDUgMCAwIDAgNSA1aDZhNSA1IDAgMCAwIDAtMTBINWE1IDUgMCAwIDAtNSA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMTEgNGE0IDQgMCAwIDEgMCA4SDhhNSA1IDAgMCAwIDItNCA1IDUgMCAwIDAtMi00em0tNiA4YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOE0wIDhhNSA1IDAgMCAwIDUgNWg2YTUgNSAwIDAgMCAwLTEwSDVhNSA1IDAgMCAwLTUgNScvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLW9mZjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWljb24tdGVydGlhcnktMy1vZmY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtb2ZmOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLW9mZjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1vZmY6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1vZmY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTExIDRhNCA0IDAgMCAxIDAgOEg4YTUgNSAwIDAgMCAyLTQgNSA1IDAgMCAwLTItNHptLTYgOGE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDhNMCA4YTUgNSAwIDAgMCA1IDVoNmE1IDUgMCAwIDAgMC0xMEg1YTUgNSAwIDAgMC01IDUnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J00xMSA0YTQgNCAwIDAgMSAwIDhIOGE1IDUgMCAwIDAgMi00IDUgNSAwIDAgMC0yLTR6bS02IDhhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4TTAgOGE1IDUgMCAwIDAgNSA1aDZhNSA1IDAgMCAwIDAtMTBINWE1IDUgMCAwIDAtNSA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtb2ZmOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW9mZjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1vZmY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtb2ZmOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LW9mZjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW9mZjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMTEgNGE0IDQgMCAwIDEgMCA4SDhhNSA1IDAgMCAwIDItNCA1IDUgMCAwIDAtMi00em0tNiA4YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOE0wIDhhNSA1IDAgMCAwIDUgNWg2YTUgNSAwIDAgMCAwLTEwSDVhNSA1IDAgMCAwLTUgNScvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTExIDRhNCA0IDAgMCAxIDAgOEg4YTUgNSAwIDAgMCAyLTQgNSA1IDAgMCAwLTItNHptLTYgOGE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDhNMCA4YTUgNSAwIDAgMCA1IDVoNmE1IDUgMCAwIDAgMC0xMEg1YTUgNSAwIDAgMC01IDUnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1wb3NpdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLXBvc2l0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtcG9zaXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1wb3NpdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLXBvc2l0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMS1wb3NpdGl2OmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLXBvc2l0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItcG9zaXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1wb3NpdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLXBvc2l0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItcG9zaXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLXBvc2l0aXY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtcG9zaXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWljb24tdGVydGlhcnktMy1wb3NpdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLXBvc2l0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtcG9zaXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1wb3NpdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtcG9zaXRpdjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1wb3NpdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LXBvc2l0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtcG9zaXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1wb3NpdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LXBvc2l0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktNC1wb3NpdGl2OmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLW5lZ2F0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtbmVnYXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1uZWdhdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLW5lZ2F0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtbmVnYXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW5lZ2F0aXY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1uZWdhdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLW5lZ2F0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItbmVnYXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1uZWdhdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLW5lZ2F0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1uZWdhdGl2OmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtbmVnYXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWljb24tdGVydGlhcnktMy1uZWdhdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLW5lZ2F0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtbmVnYXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1uZWdhdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtbmVnYXRpdjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LW5lZ2F0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtbmVnYXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1uZWdhdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LW5lZ2F0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtbmVnYXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW5lZ2F0aXY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS13YXJuaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLXdhcm5pbmc6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtd2FybmluZzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS13YXJuaW5nOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLXdhcm5pbmc6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMS13YXJuaW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi13YXJuaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLXdhcm5pbmc6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItd2FybmluZzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi13YXJuaW5nOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLXdhcm5pbmc6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi13YXJuaW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy13YXJuaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLXdhcm5pbmc6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtd2FybmluZzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy13YXJuaW5nOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLXdhcm5pbmc6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy13YXJuaW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC13YXJuaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LXdhcm5pbmc6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtd2FybmluZzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC13YXJuaW5nOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LXdhcm5pbmc6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktNC13YXJuaW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1uZXV0cmFsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW5ldXRyYWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtbmV1dHJhbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1uZXV0cmFsOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLW5ldXRyYWw6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMS1uZXV0cmFsOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1uZXV0cmFsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLW5ldXRyYWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItbmV1dHJhbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1uZXV0cmFsOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLW5ldXRyYWw6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1uZXV0cmFsOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1uZXV0cmFsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLW5ldXRyYWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtbmV1dHJhbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1uZXV0cmFsOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLW5ldXRyYWw6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1uZXV0cmFsOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1uZXV0cmFsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW5ldXRyYWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtbmV1dHJhbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1uZXV0cmFsOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LW5ldXRyYWw6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktNC1uZXV0cmFsOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1xdWVzdGlvbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1xdWVzdGlvbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLXF1ZXN0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTUuMjU1IDUuNzg2YS4yMzcuMjM3IDAgMCAwIC4yNDEuMjQ3aC44MjVjLjEzOCAwIC4yNDgtLjExMy4yNjYtLjI1LjA5LS42NTYuNTQtMS4xMzQgMS4zNDItMS4xMzQuNjg2IDAgMS4zMTQuMzQzIDEuMzE0IDEuMTY4IDAgLjYzNS0uMzc0LjkyNy0uOTY1IDEuMzcxLS42NzMuNDg5LTEuMjA2IDEuMDYtMS4xNjggMS45ODdsLjAwMy4yMTdhLjI1LjI1IDAgMCAwIC4yNS4yNDZoLjgxMWEuMjUuMjUgMCAwIDAgLjI1LS4yNXYtLjEwNWMwLS43MTguMjczLS45MjcgMS4wMS0xLjQ4Ni42MDktLjQ2MyAxLjI0NC0uOTc3IDEuMjQ0LTIuMDU2IDAtMS41MTEtMS4yNzYtMi4yNDEtMi42NzMtMi4yNDEtMS4yNjcgMC0yLjY1NS41OS0yLjc1IDIuMjg2bTEuNTU3IDUuNzYzYzAgLjUzMy40MjUuOTI3IDEuMDEuOTI3LjYwOSAwIDEuMDI4LS4zOTQgMS4wMjgtLjkyNyAwLS41NTItLjQyLS45NC0xLjAyOS0uOTQtLjU4NCAwLTEuMDA5LjM4OC0xLjAwOS45NCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNS4yNTUgNS43ODZhLjIzNy4yMzcgMCAwIDAgLjI0MS4yNDdoLjgyNWMuMTM4IDAgLjI0OC0uMTEzLjI2Ni0uMjUuMDktLjY1Ni41NC0xLjEzNCAxLjM0Mi0xLjEzNC42ODYgMCAxLjMxNC4zNDMgMS4zMTQgMS4xNjggMCAuNjM1LS4zNzQuOTI3LS45NjUgMS4zNzEtLjY3My40ODktMS4yMDYgMS4wNi0xLjE2OCAxLjk4N2wuMDAzLjIxN2EuMjUuMjUgMCAwIDAgLjI1LjI0NmguODExYS4yNS4yNSAwIDAgMCAuMjUtLjI1di0uMTA1YzAtLjcxOC4yNzMtLjkyNyAxLjAxLTEuNDg2LjYwOS0uNDYzIDEuMjQ0LS45NzcgMS4yNDQtMi4wNTYgMC0xLjUxMS0xLjI3Ni0yLjI0MS0yLjY3My0yLjI0MS0xLjI2NyAwLTIuNjU1LjU5LTIuNzUgMi4yODZtMS41NTcgNS43NjNjMCAuNTMzLjQyNS45MjcgMS4wMS45MjcuNjA5IDAgMS4wMjgtLjM5NCAxLjAyOC0uOTI3IDAtLjU1Mi0uNDItLjk0LTEuMDI5LS45NC0uNTg0IDAtMS4wMDkuMzg4LTEuMDA5Ljk0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItcXVlc3Rpb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItcXVlc3Rpb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItcXVlc3Rpb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItcXVlc3Rpb246YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItcXVlc3Rpb246YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1xdWVzdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J001LjI1NSA1Ljc4NmEuMjM3LjIzNyAwIDAgMCAuMjQxLjI0N2guODI1Yy4xMzggMCAuMjQ4LS4xMTMuMjY2LS4yNS4wOS0uNjU2LjU0LTEuMTM0IDEuMzQyLTEuMTM0LjY4NiAwIDEuMzE0LjM0MyAxLjMxNCAxLjE2OCAwIC42MzUtLjM3NC45MjctLjk2NSAxLjM3MS0uNjczLjQ4OS0xLjIwNiAxLjA2LTEuMTY4IDEuOTg3bC4wMDMuMjE3YS4yNS4yNSAwIDAgMCAuMjUuMjQ2aC44MTFhLjI1LjI1IDAgMCAwIC4yNS0uMjV2LS4xMDVjMC0uNzE4LjI3My0uOTI3IDEuMDEtMS40ODYuNjA5LS40NjMgMS4yNDQtLjk3NyAxLjI0NC0yLjA1NiAwLTEuNTExLTEuMjc2LTIuMjQxLTIuNjczLTIuMjQxLTEuMjY3IDAtMi42NTUuNTktMi43NSAyLjI4Nm0xLjU1NyA1Ljc2M2MwIC41MzMuNDI1LjkyNyAxLjAxLjkyNy42MDkgMCAxLjAyOC0uMzk0IDEuMDI4LS45MjcgMC0uNTUyLS40Mi0uOTQtMS4wMjktLjk0LS41ODQgMC0xLjAwOS4zODgtMS4wMDkuOTQnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTUuMjU1IDUuNzg2YS4yMzcuMjM3IDAgMCAwIC4yNDEuMjQ3aC44MjVjLjEzOCAwIC4yNDgtLjExMy4yNjYtLjI1LjA5LS42NTYuNTQtMS4xMzQgMS4zNDItMS4xMzQuNjg2IDAgMS4zMTQuMzQzIDEuMzE0IDEuMTY4IDAgLjYzNS0uMzc0LjkyNy0uOTY1IDEuMzcxLS42NzMuNDg5LTEuMjA2IDEuMDYtMS4xNjggMS45ODdsLjAwMy4yMTdhLjI1LjI1IDAgMCAwIC4yNS4yNDZoLjgxMWEuMjUuMjUgMCAwIDAgLjI1LS4yNXYtLjEwNWMwLS43MTguMjczLS45MjcgMS4wMS0xLjQ4Ni42MDktLjQ2MyAxLjI0NC0uOTc3IDEuMjQ0LTIuMDU2IDAtMS41MTEtMS4yNzYtMi4yNDEtMi42NzMtMi4yNDEtMS4yNjcgMC0yLjY1NS41OS0yLjc1IDIuMjg2bTEuNTU3IDUuNzYzYzAgLjUzMy40MjUuOTI3IDEuMDEuOTI3LjYwOSAwIDEuMDI4LS4zOTQgMS4wMjgtLjkyNyAwLS41NTItLjQyLS45NC0xLjAyOS0uOTQtLjU4NCAwLTEuMDA5LjM4OC0xLjAwOS45NCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLXF1ZXN0aW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLXF1ZXN0aW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLXF1ZXN0aW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLXF1ZXN0aW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLXF1ZXN0aW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtcXVlc3Rpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNS4yNTUgNS43ODZhLjIzNy4yMzcgMCAwIDAgLjI0MS4yNDdoLjgyNWMuMTM4IDAgLjI0OC0uMTEzLjI2Ni0uMjUuMDktLjY1Ni41NC0xLjEzNCAxLjM0Mi0xLjEzNC42ODYgMCAxLjMxNC4zNDMgMS4zMTQgMS4xNjggMCAuNjM1LS4zNzQuOTI3LS45NjUgMS4zNzEtLjY3My40ODktMS4yMDYgMS4wNi0xLjE2OCAxLjk4N2wuMDAzLjIxN2EuMjUuMjUgMCAwIDAgLjI1LjI0NmguODExYS4yNS4yNSAwIDAgMCAuMjUtLjI1di0uMTA1YzAtLjcxOC4yNzMtLjkyNyAxLjAxLTEuNDg2LjYwOS0uNDYzIDEuMjQ0LS45NzcgMS4yNDQtMi4wNTYgMC0xLjUxMS0xLjI3Ni0yLjI0MS0yLjY3My0yLjI0MS0xLjI2NyAwLTIuNjU1LjU5LTIuNzUgMi4yODZtMS41NTcgNS43NjNjMCAuNTMzLjQyNS45MjcgMS4wMS45MjcuNjA5IDAgMS4wMjgtLjM5NCAxLjAyOC0uOTI3IDAtLjU1Mi0uNDItLjk0LTEuMDI5LS45NC0uNTg0IDAtMS4wMDkuMzg4LTEuMDA5Ljk0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J001LjI1NSA1Ljc4NmEuMjM3LjIzNyAwIDAgMCAuMjQxLjI0N2guODI1Yy4xMzggMCAuMjQ4LS4xMTMuMjY2LS4yNS4wOS0uNjU2LjU0LTEuMTM0IDEuMzQyLTEuMTM0LjY4NiAwIDEuMzE0LjM0MyAxLjMxNCAxLjE2OCAwIC42MzUtLjM3NC45MjctLjk2NSAxLjM3MS0uNjczLjQ4OS0xLjIwNiAxLjA2LTEuMTY4IDEuOTg3bC4wMDMuMjE3YS4yNS4yNSAwIDAgMCAuMjUuMjQ2aC44MTFhLjI1LjI1IDAgMCAwIC4yNS0uMjV2LS4xMDVjMC0uNzE4LjI3My0uOTI3IDEuMDEtMS40ODYuNjA5LS40NjMgMS4yNDQtLjk3NyAxLjI0NC0yLjA1NiAwLTEuNTExLTEuMjc2LTIuMjQxLTIuNjczLTIuMjQxLTEuMjY3IDAtMi42NTUuNTktMi43NSAyLjI4Nm0xLjU1NyA1Ljc2M2MwIC41MzMuNDI1LjkyNyAxLjAxLjkyNy42MDkgMCAxLjAyOC0uMzk0IDEuMDI4LS45MjcgMC0uNTUyLS40Mi0uOTQtMS4wMjktLjk0LS41ODQgMC0xLjAwOS4zODgtMS4wMDkuOTQnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1xdWVzdGlvbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1xdWVzdGlvbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LXF1ZXN0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTUuMjU1IDUuNzg2YS4yMzcuMjM3IDAgMCAwIC4yNDEuMjQ3aC44MjVjLjEzOCAwIC4yNDgtLjExMy4yNjYtLjI1LjA5LS42NTYuNTQtMS4xMzQgMS4zNDItMS4xMzQuNjg2IDAgMS4zMTQuMzQzIDEuMzE0IDEuMTY4IDAgLjYzNS0uMzc0LjkyNy0uOTY1IDEuMzcxLS42NzMuNDg5LTEuMjA2IDEuMDYtMS4xNjggMS45ODdsLjAwMy4yMTdhLjI1LjI1IDAgMCAwIC4yNS4yNDZoLjgxMWEuMjUuMjUgMCAwIDAgLjI1LS4yNXYtLjEwNWMwLS43MTguMjczLS45MjcgMS4wMS0xLjQ4Ni42MDktLjQ2MyAxLjI0NC0uOTc3IDEuMjQ0LTIuMDU2IDAtMS41MTEtMS4yNzYtMi4yNDEtMi42NzMtMi4yNDEtMS4yNjcgMC0yLjY1NS41OS0yLjc1IDIuMjg2bTEuNTU3IDUuNzYzYzAgLjUzMy40MjUuOTI3IDEuMDEuOTI3LjYwOSAwIDEuMDI4LS4zOTQgMS4wMjgtLjkyNyAwLS41NTItLjQyLS45NC0xLjAyOS0uOTQtLjU4NCAwLTEuMDA5LjM4OC0xLjAwOS45NCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNS4yNTUgNS43ODZhLjIzNy4yMzcgMCAwIDAgLjI0MS4yNDdoLjgyNWMuMTM4IDAgLjI0OC0uMTEzLjI2Ni0uMjUuMDktLjY1Ni41NC0xLjEzNCAxLjM0Mi0xLjEzNC42ODYgMCAxLjMxNC4zNDMgMS4zMTQgMS4xNjggMCAuNjM1LS4zNzQuOTI3LS45NjUgMS4zNzEtLjY3My40ODktMS4yMDYgMS4wNi0xLjE2OCAxLjk4N2wuMDAzLjIxN2EuMjUuMjUgMCAwIDAgLjI1LjI0NmguODExYS4yNS4yNSAwIDAgMCAuMjUtLjI1di0uMTA1YzAtLjcxOC4yNzMtLjkyNyAxLjAxLTEuNDg2LjYwOS0uNDYzIDEuMjQ0LS45NzcgMS4yNDQtMi4wNTYgMC0xLjUxMS0xLjI3Ni0yLjI0MS0yLjY3My0yLjI0MS0xLjI2NyAwLTIuNjU1LjU5LTIuNzUgMi4yODZtMS41NTcgNS43NjNjMCAuNTMzLjQyNS45MjcgMS4wMS45MjcuNjA5IDAgMS4wMjgtLjM5NCAxLjAyOC0uOTI3IDAtLjU1Mi0uNDItLjk0LTEuMDI5LS45NC0uNTg0IDAtMS4wMDkuMzg4LTEuMDA5Ljk0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtcGx1czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1wbHVzOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLXBsdXM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtcGx1czpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1wbHVzOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtcGx1czpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J004IDRhLjUuNSAwIDAgMSAuNS41djNoM2EuNS41IDAgMCAxIDAgMWgtM3YzYS41LjUgMCAwIDEtMSAwdi0zaC0zYS41LjUgMCAwIDEgMC0xaDN2LTNBLjUuNSAwIDAgMSA4IDQnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTggNGEuNS41IDAgMCAxIC41LjV2M2gzYS41LjUgMCAwIDEgMCAxaC0zdjNhLjUuNSAwIDAgMS0xIDB2LTNoLTNhLjUuNSAwIDAgMSAwLTFoM3YtM0EuNS41IDAgMCAxIDggNCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLXBsdXM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItcGx1czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1wbHVzOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLXBsdXM6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItcGx1czpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLXBsdXM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNOCA0YS41LjUgMCAwIDEgLjUuNXYzaDNhLjUuNSAwIDAgMSAwIDFoLTN2M2EuNS41IDAgMCAxLTEgMHYtM2gtM2EuNS41IDAgMCAxIDAtMWgzdi0zQS41LjUgMCAwIDEgOCA0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J004IDRhLjUuNSAwIDAgMSAuNS41djNoM2EuNS41IDAgMCAxIDAgMWgtM3YzYS41LjUgMCAwIDEtMSAwdi0zaC0zYS41LjUgMCAwIDEgMC0xaDN2LTNBLjUuNSAwIDAgMSA4IDQnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1wbHVzOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLXBsdXM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtcGx1czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1wbHVzOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLXBsdXM6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1wbHVzOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTggNGEuNS41IDAgMCAxIC41LjV2M2gzYS41LjUgMCAwIDEgMCAxaC0zdjNhLjUuNSAwIDAgMS0xIDB2LTNoLTNhLjUuNSAwIDAgMSAwLTFoM3YtM0EuNS41IDAgMCAxIDggNCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNOCA0YS41LjUgMCAwIDEgLjUuNXYzaDNhLjUuNSAwIDAgMSAwIDFoLTN2M2EuNS41IDAgMCAxLTEgMHYtM2gtM2EuNS41IDAgMCAxIDAtMWgzdi0zQS41LjUgMCAwIDEgOCA0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtcGx1czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1wbHVzOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LXBsdXM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtcGx1czpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1wbHVzOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtcGx1czpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J004IDRhLjUuNSAwIDAgMSAuNS41djNoM2EuNS41IDAgMCAxIDAgMWgtM3YzYS41LjUgMCAwIDEtMSAwdi0zaC0zYS41LjUgMCAwIDEgMC0xaDN2LTNBLjUuNSAwIDAgMSA4IDQnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTggNGEuNS41IDAgMCAxIC41LjV2M2gzYS41LjUgMCAwIDEgMCAxaC0zdjNhLjUuNSAwIDAgMS0xIDB2LTNoLTNhLjUuNSAwIDAgMSAwLTFoM3YtM0EuNS41IDAgMCAxIDggNCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWRhc2g6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtZGFzaDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1kYXNoOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWRhc2g6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtZGFzaDpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLWRhc2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLWRhc2g6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItZGFzaDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1kYXNoOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLWRhc2g6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItZGFzaDpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLWRhc2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLWRhc2g6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtZGFzaDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1kYXNoOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLWRhc2g6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtZGFzaDpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLWRhc2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWRhc2g6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtZGFzaDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1kYXNoOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWRhc2g6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtZGFzaDpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LWRhc2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWdlYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtZ2VhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1nZWFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWdlYXI6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtZ2VhcjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLWdlYXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggNC43NTRhMy4yNDYgMy4yNDYgMCAxIDAgMCA2LjQ5MiAzLjI0NiAzLjI0NiAwIDAgMCAwLTYuNDkyTTUuNzU0IDhhMi4yNDYgMi4yNDYgMCAxIDEgNC40OTIgMCAyLjI0NiAyLjI0NiAwIDAgMS00LjQ5MiAwJy8lM0UlM0NwYXRoIGQ9J005Ljc5NiAxLjM0M2MtLjUyNy0xLjc5LTMuMDY1LTEuNzktMy41OTIgMGwtLjA5NC4zMTlhLjg3My44NzMgMCAwIDEtMS4yNTUuNTJsLS4yOTItLjE2Yy0xLjY0LS44OTItMy40MzMuOTAyLTIuNTQgMi41NDFsLjE1OS4yOTJhLjg3My44NzMgMCAwIDEtLjUyIDEuMjU1bC0uMzE5LjA5NGMtMS43OS41MjctMS43OSAzLjA2NSAwIDMuNTkybC4zMTkuMDk0YS44NzMuODczIDAgMCAxIC41MiAxLjI1NWwtLjE2LjI5MmMtLjg5MiAxLjY0LjkwMSAzLjQzNCAyLjU0MSAyLjU0bC4yOTItLjE1OWEuODczLjg3MyAwIDAgMSAxLjI1NS41MmwuMDk0LjMxOWMuNTI3IDEuNzkgMy4wNjUgMS43OSAzLjU5MiAwbC4wOTQtLjMxOWEuODczLjg3MyAwIDAgMSAxLjI1NS0uNTJsLjI5Mi4xNmMxLjY0Ljg5MyAzLjQzNC0uOTAyIDIuNTQtMi41NDFsLS4xNTktLjI5MmEuODczLjg3MyAwIDAgMSAuNTItMS4yNTVsLjMxOS0uMDk0YzEuNzktLjUyNyAxLjc5LTMuMDY1IDAtMy41OTJsLS4zMTktLjA5NGEuODczLjg3MyAwIDAgMS0uNTItMS4yNTVsLjE2LS4yOTJjLjg5My0xLjY0LS45MDItMy40MzMtMi41NDEtMi41NGwtLjI5Mi4xNTlhLjg3My44NzMgMCAwIDEtMS4yNTUtLjUyem0tMi42MzMuMjgzYy4yNDYtLjgzNSAxLjQyOC0uODM1IDEuNjc0IDBsLjA5NC4zMTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTMgMS4xMTVsLjI5MS0uMTZjLjc2NC0uNDE1IDEuNi40MiAxLjE4NCAxLjE4NWwtLjE1OS4yOTJhMS44NzMgMS44NzMgMCAwIDAgMS4xMTYgMi42OTJsLjMxOC4wOTRjLjgzNS4yNDYuODM1IDEuNDI4IDAgMS42NzRsLS4zMTkuMDk0YTEuODczIDEuODczIDAgMCAwLTEuMTE1IDIuNjkzbC4xNi4yOTFjLjQxNS43NjQtLjQyIDEuNi0xLjE4NSAxLjE4NGwtLjI5MS0uMTU5YTEuODczIDEuODczIDAgMCAwLTIuNjkzIDEuMTE2bC0uMDk0LjMxOGMtLjI0Ni44MzUtMS40MjguODM1LTEuNjc0IDBsLS4wOTQtLjMxOWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5Mi0xLjExNWwtLjI5Mi4xNmMtLjc2NC40MTUtMS42LS40Mi0xLjE4NC0xLjE4NWwuMTU5LS4yOTFBMS44NzMgMS44NzMgMCAwIDAgMS45NDUgOC45M2wtLjMxOS0uMDk0Yy0uODM1LS4yNDYtLjgzNS0xLjQyOCAwLTEuNjc0bC4zMTktLjA5NEExLjg3MyAxLjg3MyAwIDAgMCAzLjA2IDQuMzc3bC0uMTYtLjI5MmMtLjQxNS0uNzY0LjQyLTEuNiAxLjE4NS0xLjE4NGwuMjkyLjE1OWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5Mi0xLjExNXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDQuNzU0YTMuMjQ2IDMuMjQ2IDAgMSAwIDAgNi40OTIgMy4yNDYgMy4yNDYgMCAwIDAgMC02LjQ5Mk01Ljc1NCA4YTIuMjQ2IDIuMjQ2IDAgMSAxIDQuNDkyIDAgMi4yNDYgMi4yNDYgMCAwIDEtNC40OTIgMCcvJTNFJTNDcGF0aCBkPSdNOS43OTYgMS4zNDNjLS41MjctMS43OS0zLjA2NS0xLjc5LTMuNTkyIDBsLS4wOTQuMzE5YS44NzMuODczIDAgMCAxLTEuMjU1LjUybC0uMjkyLS4xNmMtMS42NC0uODkyLTMuNDMzLjkwMi0yLjU0IDIuNTQxbC4xNTkuMjkyYS44NzMuODczIDAgMCAxLS41MiAxLjI1NWwtLjMxOS4wOTRjLTEuNzkuNTI3LTEuNzkgMy4wNjUgMCAzLjU5MmwuMzE5LjA5NGEuODczLjg3MyAwIDAgMSAuNTIgMS4yNTVsLS4xNi4yOTJjLS44OTIgMS42NC45MDEgMy40MzQgMi41NDEgMi41NGwuMjkyLS4xNTlhLjg3My44NzMgMCAwIDEgMS4yNTUuNTJsLjA5NC4zMTljLjUyNyAxLjc5IDMuMDY1IDEuNzkgMy41OTIgMGwuMDk0LS4zMTlhLjg3My44NzMgMCAwIDEgMS4yNTUtLjUybC4yOTIuMTZjMS42NC44OTMgMy40MzQtLjkwMiAyLjU0LTIuNTQxbC0uMTU5LS4yOTJhLjg3My44NzMgMCAwIDEgLjUyLTEuMjU1bC4zMTktLjA5NGMxLjc5LS41MjcgMS43OS0zLjA2NSAwLTMuNTkybC0uMzE5LS4wOTRhLjg3My44NzMgMCAwIDEtLjUyLTEuMjU1bC4xNi0uMjkyYy44OTMtMS42NC0uOTAyLTMuNDMzLTIuNTQxLTIuNTRsLS4yOTIuMTU5YS44NzMuODczIDAgMCAxLTEuMjU1LS41MnptLTIuNjMzLjI4M2MuMjQ2LS44MzUgMS40MjgtLjgzNSAxLjY3NCAwbC4wOTQuMzE5YTEuODczIDEuODczIDAgMCAwIDIuNjkzIDEuMTE1bC4yOTEtLjE2Yy43NjQtLjQxNSAxLjYuNDIgMS4xODQgMS4xODVsLS4xNTkuMjkyYTEuODczIDEuODczIDAgMCAwIDEuMTE2IDIuNjkybC4zMTguMDk0Yy44MzUuMjQ2LjgzNSAxLjQyOCAwIDEuNjc0bC0uMzE5LjA5NGExLjg3MyAxLjg3MyAwIDAgMC0xLjExNSAyLjY5M2wuMTYuMjkxYy40MTUuNzY0LS40MiAxLjYtMS4xODUgMS4xODRsLS4yOTEtLjE1OWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5MyAxLjExNmwtLjA5NC4zMThjLS4yNDYuODM1LTEuNDI4LjgzNS0xLjY3NCAwbC0uMDk0LS4zMTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTItMS4xMTVsLS4yOTIuMTZjLS43NjQuNDE1LTEuNi0uNDItMS4xODQtMS4xODVsLjE1OS0uMjkxQTEuODczIDEuODczIDAgMCAwIDEuOTQ1IDguOTNsLS4zMTktLjA5NGMtLjgzNS0uMjQ2LS44MzUtMS40MjggMC0xLjY3NGwuMzE5LS4wOTRBMS44NzMgMS44NzMgMCAwIDAgMy4wNiA0LjM3N2wtLjE2LS4yOTJjLS40MTUtLjc2NC40Mi0xLjYgMS4xODUtMS4xODRsLjI5Mi4xNTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTItMS4xMTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItZ2VhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWljb24tdGVydGlhcnktMi1nZWFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLWdlYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItZ2VhcjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1nZWFyOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItZ2VhcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCA0Ljc1NGEzLjI0NiAzLjI0NiAwIDEgMCAwIDYuNDkyIDMuMjQ2IDMuMjQ2IDAgMCAwIDAtNi40OTJNNS43NTQgOGEyLjI0NiAyLjI0NiAwIDEgMSA0LjQ5MiAwIDIuMjQ2IDIuMjQ2IDAgMCAxLTQuNDkyIDAnLyUzRSUzQ3BhdGggZD0nTTkuNzk2IDEuMzQzYy0uNTI3LTEuNzktMy4wNjUtMS43OS0zLjU5MiAwbC0uMDk0LjMxOWEuODczLjg3MyAwIDAgMS0xLjI1NS41MmwtLjI5Mi0uMTZjLTEuNjQtLjg5Mi0zLjQzMy45MDItMi41NCAyLjU0MWwuMTU5LjI5MmEuODczLjg3MyAwIDAgMS0uNTIgMS4yNTVsLS4zMTkuMDk0Yy0xLjc5LjUyNy0xLjc5IDMuMDY1IDAgMy41OTJsLjMxOS4wOTRhLjg3My44NzMgMCAwIDEgLjUyIDEuMjU1bC0uMTYuMjkyYy0uODkyIDEuNjQuOTAxIDMuNDM0IDIuNTQxIDIuNTRsLjI5Mi0uMTU5YS44NzMuODczIDAgMCAxIDEuMjU1LjUybC4wOTQuMzE5Yy41MjcgMS43OSAzLjA2NSAxLjc5IDMuNTkyIDBsLjA5NC0uMzE5YS44NzMuODczIDAgMCAxIDEuMjU1LS41MmwuMjkyLjE2YzEuNjQuODkzIDMuNDM0LS45MDIgMi41NC0yLjU0MWwtLjE1OS0uMjkyYS44NzMuODczIDAgMCAxIC41Mi0xLjI1NWwuMzE5LS4wOTRjMS43OS0uNTI3IDEuNzktMy4wNjUgMC0zLjU5MmwtLjMxOS0uMDk0YS44NzMuODczIDAgMCAxLS41Mi0xLjI1NWwuMTYtLjI5MmMuODkzLTEuNjQtLjkwMi0zLjQzMy0yLjU0MS0yLjU0bC0uMjkyLjE1OWEuODczLjg3MyAwIDAgMS0xLjI1NS0uNTJ6bS0yLjYzMy4yODNjLjI0Ni0uODM1IDEuNDI4LS44MzUgMS42NzQgMGwuMDk0LjMxOWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5MyAxLjExNWwuMjkxLS4xNmMuNzY0LS40MTUgMS42LjQyIDEuMTg0IDEuMTg1bC0uMTU5LjI5MmExLjg3MyAxLjg3MyAwIDAgMCAxLjExNiAyLjY5MmwuMzE4LjA5NGMuODM1LjI0Ni44MzUgMS40MjggMCAxLjY3NGwtLjMxOS4wOTRhMS44NzMgMS44NzMgMCAwIDAtMS4xMTUgMi42OTNsLjE2LjI5MWMuNDE1Ljc2NC0uNDIgMS42LTEuMTg1IDEuMTg0bC0uMjkxLS4xNTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTMgMS4xMTZsLS4wOTQuMzE4Yy0uMjQ2LjgzNS0xLjQyOC44MzUtMS42NzQgMGwtLjA5NC0uMzE5YTEuODczIDEuODczIDAgMCAwLTIuNjkyLTEuMTE1bC0uMjkyLjE2Yy0uNzY0LjQxNS0xLjYtLjQyLTEuMTg0LTEuMTg1bC4xNTktLjI5MUExLjg3MyAxLjg3MyAwIDAgMCAxLjk0NSA4LjkzbC0uMzE5LS4wOTRjLS44MzUtLjI0Ni0uODM1LTEuNDI4IDAtMS42NzRsLjMxOS0uMDk0QTEuODczIDEuODczIDAgMCAwIDMuMDYgNC4zNzdsLS4xNi0uMjkyYy0uNDE1LS43NjQuNDItMS42IDEuMTg1LTEuMTg0bC4yOTIuMTU5YTEuODczIDEuODczIDAgMCAwIDIuNjkyLTEuMTE1eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggNC43NTRhMy4yNDYgMy4yNDYgMCAxIDAgMCA2LjQ5MiAzLjI0NiAzLjI0NiAwIDAgMCAwLTYuNDkyTTUuNzU0IDhhMi4yNDYgMi4yNDYgMCAxIDEgNC40OTIgMCAyLjI0NiAyLjI0NiAwIDAgMS00LjQ5MiAwJy8lM0UlM0NwYXRoIGQ9J005Ljc5NiAxLjM0M2MtLjUyNy0xLjc5LTMuMDY1LTEuNzktMy41OTIgMGwtLjA5NC4zMTlhLjg3My44NzMgMCAwIDEtMS4yNTUuNTJsLS4yOTItLjE2Yy0xLjY0LS44OTItMy40MzMuOTAyLTIuNTQgMi41NDFsLjE1OS4yOTJhLjg3My44NzMgMCAwIDEtLjUyIDEuMjU1bC0uMzE5LjA5NGMtMS43OS41MjctMS43OSAzLjA2NSAwIDMuNTkybC4zMTkuMDk0YS44NzMuODczIDAgMCAxIC41MiAxLjI1NWwtLjE2LjI5MmMtLjg5MiAxLjY0LjkwMSAzLjQzNCAyLjU0MSAyLjU0bC4yOTItLjE1OWEuODczLjg3MyAwIDAgMSAxLjI1NS41MmwuMDk0LjMxOWMuNTI3IDEuNzkgMy4wNjUgMS43OSAzLjU5MiAwbC4wOTQtLjMxOWEuODczLjg3MyAwIDAgMSAxLjI1NS0uNTJsLjI5Mi4xNmMxLjY0Ljg5MyAzLjQzNC0uOTAyIDIuNTQtMi41NDFsLS4xNTktLjI5MmEuODczLjg3MyAwIDAgMSAuNTItMS4yNTVsLjMxOS0uMDk0YzEuNzktLjUyNyAxLjc5LTMuMDY1IDAtMy41OTJsLS4zMTktLjA5NGEuODczLjg3MyAwIDAgMS0uNTItMS4yNTVsLjE2LS4yOTJjLjg5My0xLjY0LS45MDItMy40MzMtMi41NDEtMi41NGwtLjI5Mi4xNTlhLjg3My44NzMgMCAwIDEtMS4yNTUtLjUyem0tMi42MzMuMjgzYy4yNDYtLjgzNSAxLjQyOC0uODM1IDEuNjc0IDBsLjA5NC4zMTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTMgMS4xMTVsLjI5MS0uMTZjLjc2NC0uNDE1IDEuNi40MiAxLjE4NCAxLjE4NWwtLjE1OS4yOTJhMS44NzMgMS44NzMgMCAwIDAgMS4xMTYgMi42OTJsLjMxOC4wOTRjLjgzNS4yNDYuODM1IDEuNDI4IDAgMS42NzRsLS4zMTkuMDk0YTEuODczIDEuODczIDAgMCAwLTEuMTE1IDIuNjkzbC4xNi4yOTFjLjQxNS43NjQtLjQyIDEuNi0xLjE4NSAxLjE4NGwtLjI5MS0uMTU5YTEuODczIDEuODczIDAgMCAwLTIuNjkzIDEuMTE2bC0uMDk0LjMxOGMtLjI0Ni44MzUtMS40MjguODM1LTEuNjc0IDBsLS4wOTQtLjMxOWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5Mi0xLjExNWwtLjI5Mi4xNmMtLjc2NC40MTUtMS42LS40Mi0xLjE4NC0xLjE4NWwuMTU5LS4yOTFBMS44NzMgMS44NzMgMCAwIDAgMS45NDUgOC45M2wtLjMxOS0uMDk0Yy0uODM1LS4yNDYtLjgzNS0xLjQyOCAwLTEuNjc0bC4zMTktLjA5NEExLjg3MyAxLjg3MyAwIDAgMCAzLjA2IDQuMzc3bC0uMTYtLjI5MmMtLjQxNS0uNzY0LjQyLTEuNiAxLjE4NS0xLjE4NGwuMjkyLjE1OWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5Mi0xLjExNXonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1nZWFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLWdlYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtZ2VhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1nZWFyOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLWdlYXI6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1nZWFyOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDQuNzU0YTMuMjQ2IDMuMjQ2IDAgMSAwIDAgNi40OTIgMy4yNDYgMy4yNDYgMCAwIDAgMC02LjQ5Mk01Ljc1NCA4YTIuMjQ2IDIuMjQ2IDAgMSAxIDQuNDkyIDAgMi4yNDYgMi4yNDYgMCAwIDEtNC40OTIgMCcvJTNFJTNDcGF0aCBkPSdNOS43OTYgMS4zNDNjLS41MjctMS43OS0zLjA2NS0xLjc5LTMuNTkyIDBsLS4wOTQuMzE5YS44NzMuODczIDAgMCAxLTEuMjU1LjUybC0uMjkyLS4xNmMtMS42NC0uODkyLTMuNDMzLjkwMi0yLjU0IDIuNTQxbC4xNTkuMjkyYS44NzMuODczIDAgMCAxLS41MiAxLjI1NWwtLjMxOS4wOTRjLTEuNzkuNTI3LTEuNzkgMy4wNjUgMCAzLjU5MmwuMzE5LjA5NGEuODczLjg3MyAwIDAgMSAuNTIgMS4yNTVsLS4xNi4yOTJjLS44OTIgMS42NC45MDEgMy40MzQgMi41NDEgMi41NGwuMjkyLS4xNTlhLjg3My44NzMgMCAwIDEgMS4yNTUuNTJsLjA5NC4zMTljLjUyNyAxLjc5IDMuMDY1IDEuNzkgMy41OTIgMGwuMDk0LS4zMTlhLjg3My44NzMgMCAwIDEgMS4yNTUtLjUybC4yOTIuMTZjMS42NC44OTMgMy40MzQtLjkwMiAyLjU0LTIuNTQxbC0uMTU5LS4yOTJhLjg3My44NzMgMCAwIDEgLjUyLTEuMjU1bC4zMTktLjA5NGMxLjc5LS41MjcgMS43OS0zLjA2NSAwLTMuNTkybC0uMzE5LS4wOTRhLjg3My44NzMgMCAwIDEtLjUyLTEuMjU1bC4xNi0uMjkyYy44OTMtMS42NC0uOTAyLTMuNDMzLTIuNTQxLTIuNTRsLS4yOTIuMTU5YS44NzMuODczIDAgMCAxLTEuMjU1LS41MnptLTIuNjMzLjI4M2MuMjQ2LS44MzUgMS40MjgtLjgzNSAxLjY3NCAwbC4wOTQuMzE5YTEuODczIDEuODczIDAgMCAwIDIuNjkzIDEuMTE1bC4yOTEtLjE2Yy43NjQtLjQxNSAxLjYuNDIgMS4xODQgMS4xODVsLS4xNTkuMjkyYTEuODczIDEuODczIDAgMCAwIDEuMTE2IDIuNjkybC4zMTguMDk0Yy44MzUuMjQ2LjgzNSAxLjQyOCAwIDEuNjc0bC0uMzE5LjA5NGExLjg3MyAxLjg3MyAwIDAgMC0xLjExNSAyLjY5M2wuMTYuMjkxYy40MTUuNzY0LS40MiAxLjYtMS4xODUgMS4xODRsLS4yOTEtLjE1OWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5MyAxLjExNmwtLjA5NC4zMThjLS4yNDYuODM1LTEuNDI4LjgzNS0xLjY3NCAwbC0uMDk0LS4zMTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTItMS4xMTVsLS4yOTIuMTZjLS43NjQuNDE1LTEuNi0uNDItMS4xODQtMS4xODVsLjE1OS0uMjkxQTEuODczIDEuODczIDAgMCAwIDEuOTQ1IDguOTNsLS4zMTktLjA5NGMtLjgzNS0uMjQ2LS44MzUtMS40MjggMC0xLjY3NGwuMzE5LS4wOTRBMS44NzMgMS44NzMgMCAwIDAgMy4wNiA0LjM3N2wtLjE2LS4yOTJjLS40MTUtLjc2NC40Mi0xLjYgMS4xODUtMS4xODRsLjI5Mi4xNTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTItMS4xMTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCA0Ljc1NGEzLjI0NiAzLjI0NiAwIDEgMCAwIDYuNDkyIDMuMjQ2IDMuMjQ2IDAgMCAwIDAtNi40OTJNNS43NTQgOGEyLjI0NiAyLjI0NiAwIDEgMSA0LjQ5MiAwIDIuMjQ2IDIuMjQ2IDAgMCAxLTQuNDkyIDAnLyUzRSUzQ3BhdGggZD0nTTkuNzk2IDEuMzQzYy0uNTI3LTEuNzktMy4wNjUtMS43OS0zLjU5MiAwbC0uMDk0LjMxOWEuODczLjg3MyAwIDAgMS0xLjI1NS41MmwtLjI5Mi0uMTZjLTEuNjQtLjg5Mi0zLjQzMy45MDItMi41NCAyLjU0MWwuMTU5LjI5MmEuODczLjg3MyAwIDAgMS0uNTIgMS4yNTVsLS4zMTkuMDk0Yy0xLjc5LjUyNy0xLjc5IDMuMDY1IDAgMy41OTJsLjMxOS4wOTRhLjg3My44NzMgMCAwIDEgLjUyIDEuMjU1bC0uMTYuMjkyYy0uODkyIDEuNjQuOTAxIDMuNDM0IDIuNTQxIDIuNTRsLjI5Mi0uMTU5YS44NzMuODczIDAgMCAxIDEuMjU1LjUybC4wOTQuMzE5Yy41MjcgMS43OSAzLjA2NSAxLjc5IDMuNTkyIDBsLjA5NC0uMzE5YS44NzMuODczIDAgMCAxIDEuMjU1LS41MmwuMjkyLjE2YzEuNjQuODkzIDMuNDM0LS45MDIgMi41NC0yLjU0MWwtLjE1OS0uMjkyYS44NzMuODczIDAgMCAxIC41Mi0xLjI1NWwuMzE5LS4wOTRjMS43OS0uNTI3IDEuNzktMy4wNjUgMC0zLjU5MmwtLjMxOS0uMDk0YS44NzMuODczIDAgMCAxLS41Mi0xLjI1NWwuMTYtLjI5MmMuODkzLTEuNjQtLjkwMi0zLjQzMy0yLjU0MS0yLjU0bC0uMjkyLjE1OWEuODczLjg3MyAwIDAgMS0xLjI1NS0uNTJ6bS0yLjYzMy4yODNjLjI0Ni0uODM1IDEuNDI4LS44MzUgMS42NzQgMGwuMDk0LjMxOWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5MyAxLjExNWwuMjkxLS4xNmMuNzY0LS40MTUgMS42LjQyIDEuMTg0IDEuMTg1bC0uMTU5LjI5MmExLjg3MyAxLjg3MyAwIDAgMCAxLjExNiAyLjY5MmwuMzE4LjA5NGMuODM1LjI0Ni44MzUgMS40MjggMCAxLjY3NGwtLjMxOS4wOTRhMS44NzMgMS44NzMgMCAwIDAtMS4xMTUgMi42OTNsLjE2LjI5MWMuNDE1Ljc2NC0uNDIgMS42LTEuMTg1IDEuMTg0bC0uMjkxLS4xNTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTMgMS4xMTZsLS4wOTQuMzE4Yy0uMjQ2LjgzNS0xLjQyOC44MzUtMS42NzQgMGwtLjA5NC0uMzE5YTEuODczIDEuODczIDAgMCAwLTIuNjkyLTEuMTE1bC0uMjkyLjE2Yy0uNzY0LjQxNS0xLjYtLjQyLTEuMTg0LTEuMTg1bC4xNTktLjI5MUExLjg3MyAxLjg3MyAwIDAgMCAxLjk0NSA4LjkzbC0uMzE5LS4wOTRjLS44MzUtLjI0Ni0uODM1LTEuNDI4IDAtMS42NzRsLjMxOS0uMDk0QTEuODczIDEuODczIDAgMCAwIDMuMDYgNC4zNzdsLS4xNi0uMjkyYy0uNDE1LS43NjQuNDItMS42IDEuMTg1LTEuMTg0bC4yOTIuMTU5YTEuODczIDEuODczIDAgMCAwIDIuNjkyLTEuMTE1eicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWdlYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtZ2VhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1nZWFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWdlYXI6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtZ2VhcjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LWdlYXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggNC43NTRhMy4yNDYgMy4yNDYgMCAxIDAgMCA2LjQ5MiAzLjI0NiAzLjI0NiAwIDAgMCAwLTYuNDkyTTUuNzU0IDhhMi4yNDYgMi4yNDYgMCAxIDEgNC40OTIgMCAyLjI0NiAyLjI0NiAwIDAgMS00LjQ5MiAwJy8lM0UlM0NwYXRoIGQ9J005Ljc5NiAxLjM0M2MtLjUyNy0xLjc5LTMuMDY1LTEuNzktMy41OTIgMGwtLjA5NC4zMTlhLjg3My44NzMgMCAwIDEtMS4yNTUuNTJsLS4yOTItLjE2Yy0xLjY0LS44OTItMy40MzMuOTAyLTIuNTQgMi41NDFsLjE1OS4yOTJhLjg3My44NzMgMCAwIDEtLjUyIDEuMjU1bC0uMzE5LjA5NGMtMS43OS41MjctMS43OSAzLjA2NSAwIDMuNTkybC4zMTkuMDk0YS44NzMuODczIDAgMCAxIC41MiAxLjI1NWwtLjE2LjI5MmMtLjg5MiAxLjY0LjkwMSAzLjQzNCAyLjU0MSAyLjU0bC4yOTItLjE1OWEuODczLjg3MyAwIDAgMSAxLjI1NS41MmwuMDk0LjMxOWMuNTI3IDEuNzkgMy4wNjUgMS43OSAzLjU5MiAwbC4wOTQtLjMxOWEuODczLjg3MyAwIDAgMSAxLjI1NS0uNTJsLjI5Mi4xNmMxLjY0Ljg5MyAzLjQzNC0uOTAyIDIuNTQtMi41NDFsLS4xNTktLjI5MmEuODczLjg3MyAwIDAgMSAuNTItMS4yNTVsLjMxOS0uMDk0YzEuNzktLjUyNyAxLjc5LTMuMDY1IDAtMy41OTJsLS4zMTktLjA5NGEuODczLjg3MyAwIDAgMS0uNTItMS4yNTVsLjE2LS4yOTJjLjg5My0xLjY0LS45MDItMy40MzMtMi41NDEtMi41NGwtLjI5Mi4xNTlhLjg3My44NzMgMCAwIDEtMS4yNTUtLjUyem0tMi42MzMuMjgzYy4yNDYtLjgzNSAxLjQyOC0uODM1IDEuNjc0IDBsLjA5NC4zMTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTMgMS4xMTVsLjI5MS0uMTZjLjc2NC0uNDE1IDEuNi40MiAxLjE4NCAxLjE4NWwtLjE1OS4yOTJhMS44NzMgMS44NzMgMCAwIDAgMS4xMTYgMi42OTJsLjMxOC4wOTRjLjgzNS4yNDYuODM1IDEuNDI4IDAgMS42NzRsLS4zMTkuMDk0YTEuODczIDEuODczIDAgMCAwLTEuMTE1IDIuNjkzbC4xNi4yOTFjLjQxNS43NjQtLjQyIDEuNi0xLjE4NSAxLjE4NGwtLjI5MS0uMTU5YTEuODczIDEuODczIDAgMCAwLTIuNjkzIDEuMTE2bC0uMDk0LjMxOGMtLjI0Ni44MzUtMS40MjguODM1LTEuNjc0IDBsLS4wOTQtLjMxOWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5Mi0xLjExNWwtLjI5Mi4xNmMtLjc2NC40MTUtMS42LS40Mi0xLjE4NC0xLjE4NWwuMTU5LS4yOTFBMS44NzMgMS44NzMgMCAwIDAgMS45NDUgOC45M2wtLjMxOS0uMDk0Yy0uODM1LS4yNDYtLjgzNS0xLjQyOCAwLTEuNjc0bC4zMTktLjA5NEExLjg3MyAxLjg3MyAwIDAgMCAzLjA2IDQuMzc3bC0uMTYtLjI5MmMtLjQxNS0uNzY0LjQyLTEuNiAxLjE4NS0xLjE4NGwuMjkyLjE1OWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5Mi0xLjExNXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDQuNzU0YTMuMjQ2IDMuMjQ2IDAgMSAwIDAgNi40OTIgMy4yNDYgMy4yNDYgMCAwIDAgMC02LjQ5Mk01Ljc1NCA4YTIuMjQ2IDIuMjQ2IDAgMSAxIDQuNDkyIDAgMi4yNDYgMi4yNDYgMCAwIDEtNC40OTIgMCcvJTNFJTNDcGF0aCBkPSdNOS43OTYgMS4zNDNjLS41MjctMS43OS0zLjA2NS0xLjc5LTMuNTkyIDBsLS4wOTQuMzE5YS44NzMuODczIDAgMCAxLTEuMjU1LjUybC0uMjkyLS4xNmMtMS42NC0uODkyLTMuNDMzLjkwMi0yLjU0IDIuNTQxbC4xNTkuMjkyYS44NzMuODczIDAgMCAxLS41MiAxLjI1NWwtLjMxOS4wOTRjLTEuNzkuNTI3LTEuNzkgMy4wNjUgMCAzLjU5MmwuMzE5LjA5NGEuODczLjg3MyAwIDAgMSAuNTIgMS4yNTVsLS4xNi4yOTJjLS44OTIgMS42NC45MDEgMy40MzQgMi41NDEgMi41NGwuMjkyLS4xNTlhLjg3My44NzMgMCAwIDEgMS4yNTUuNTJsLjA5NC4zMTljLjUyNyAxLjc5IDMuMDY1IDEuNzkgMy41OTIgMGwuMDk0LS4zMTlhLjg3My44NzMgMCAwIDEgMS4yNTUtLjUybC4yOTIuMTZjMS42NC44OTMgMy40MzQtLjkwMiAyLjU0LTIuNTQxbC0uMTU5LS4yOTJhLjg3My44NzMgMCAwIDEgLjUyLTEuMjU1bC4zMTktLjA5NGMxLjc5LS41MjcgMS43OS0zLjA2NSAwLTMuNTkybC0uMzE5LS4wOTRhLjg3My44NzMgMCAwIDEtLjUyLTEuMjU1bC4xNi0uMjkyYy44OTMtMS42NC0uOTAyLTMuNDMzLTIuNTQxLTIuNTRsLS4yOTIuMTU5YS44NzMuODczIDAgMCAxLTEuMjU1LS41MnptLTIuNjMzLjI4M2MuMjQ2LS44MzUgMS40MjgtLjgzNSAxLjY3NCAwbC4wOTQuMzE5YTEuODczIDEuODczIDAgMCAwIDIuNjkzIDEuMTE1bC4yOTEtLjE2Yy43NjQtLjQxNSAxLjYuNDIgMS4xODQgMS4xODVsLS4xNTkuMjkyYTEuODczIDEuODczIDAgMCAwIDEuMTE2IDIuNjkybC4zMTguMDk0Yy44MzUuMjQ2LjgzNSAxLjQyOCAwIDEuNjc0bC0uMzE5LjA5NGExLjg3MyAxLjg3MyAwIDAgMC0xLjExNSAyLjY5M2wuMTYuMjkxYy40MTUuNzY0LS40MiAxLjYtMS4xODUgMS4xODRsLS4yOTEtLjE1OWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5MyAxLjExNmwtLjA5NC4zMThjLS4yNDYuODM1LTEuNDI4LjgzNS0xLjY3NCAwbC0uMDk0LS4zMTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTItMS4xMTVsLS4yOTIuMTZjLS43NjQuNDE1LTEuNi0uNDItMS4xODQtMS4xODVsLjE1OS0uMjkxQTEuODczIDEuODczIDAgMCAwIDEuOTQ1IDguOTNsLS4zMTktLjA5NGMtLjgzNS0uMjQ2LS44MzUtMS40MjggMC0xLjY3NGwuMzE5LS4wOTRBMS44NzMgMS44NzMgMCAwIDAgMy4wNiA0LjM3N2wtLjE2LS4yOTJjLS40MTUtLjc2NC40Mi0xLjYgMS4xODUtMS4xODRsLjI5Mi4xNTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTItMS4xMTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtaG9tZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1ob21lOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLWhvbWU6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtaG9tZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1ob21lOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtaG9tZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOC43MDcgMS41YTEgMSAwIDAgMC0xLjQxNCAwTC42NDYgOC4xNDZhLjUuNSAwIDAgMCAuNzA4LjcwOEwyIDguMjA3VjEzLjVBMS41IDEuNSAwIDAgMCAzLjUgMTVoOWExLjUgMS41IDAgMCAwIDEuNS0xLjVWOC4yMDdsLjY0Ni42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMMTMgNS43OTNWMi41YS41LjUgMCAwIDAtLjUtLjVoLTFhLjUuNSAwIDAgMC0uNS41djEuMjkzek0xMyA3LjIwN1YxMy41YS41LjUgMCAwIDEtLjUuNWgtOWEuNS41IDAgMCAxLS41LS41VjcuMjA3bDUtNXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004LjcwNyAxLjVhMSAxIDAgMCAwLTEuNDE0IDBMLjY0NiA4LjE0NmEuNS41IDAgMCAwIC43MDguNzA4TDIgOC4yMDdWMTMuNUExLjUgMS41IDAgMCAwIDMuNSAxNWg5YTEuNSAxLjUgMCAwIDAgMS41LTEuNVY4LjIwN2wuNjQ2LjY0N2EuNS41IDAgMCAwIC43MDgtLjcwOEwxMyA1Ljc5M1YyLjVhLjUuNSAwIDAgMC0uNS0uNWgtMWEuNS41IDAgMCAwLS41LjV2MS4yOTN6TTEzIDcuMjA3VjEzLjVhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAwIDEtLjUtLjVWNy4yMDdsNS01eicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLWhvbWU6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItaG9tZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1ob21lOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLWhvbWU6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItaG9tZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLWhvbWU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTguNzA3IDEuNWExIDEgMCAwIDAtMS40MTQgMEwuNjQ2IDguMTQ2YS41LjUgMCAwIDAgLjcwOC43MDhMMiA4LjIwN1YxMy41QTEuNSAxLjUgMCAwIDAgMy41IDE1aDlhMS41IDEuNSAwIDAgMCAxLjUtMS41VjguMjA3bC42NDYuNjQ3YS41LjUgMCAwIDAgLjcwOC0uNzA4TDEzIDUuNzkzVjIuNWEuNS41IDAgMCAwLS41LS41aC0xYS41LjUgMCAwIDAtLjUuNXYxLjI5M3pNMTMgNy4yMDdWMTMuNWEuNS41IDAgMCAxLS41LjVoLTlhLjUuNSAwIDAgMS0uNS0uNVY3LjIwN2w1LTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOC43MDcgMS41YTEgMSAwIDAgMC0xLjQxNCAwTC42NDYgOC4xNDZhLjUuNSAwIDAgMCAuNzA4LjcwOEwyIDguMjA3VjEzLjVBMS41IDEuNSAwIDAgMCAzLjUgMTVoOWExLjUgMS41IDAgMCAwIDEuNS0xLjVWOC4yMDdsLjY0Ni42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMMTMgNS43OTNWMi41YS41LjUgMCAwIDAtLjUtLjVoLTFhLjUuNSAwIDAgMC0uNS41djEuMjkzek0xMyA3LjIwN1YxMy41YS41LjUgMCAwIDEtLjUuNWgtOWEuNS41IDAgMCAxLS41LS41VjcuMjA3bDUtNXonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1ob21lOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLWhvbWU6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtaG9tZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1ob21lOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLWhvbWU6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1ob21lOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004LjcwNyAxLjVhMSAxIDAgMCAwLTEuNDE0IDBMLjY0NiA4LjE0NmEuNS41IDAgMCAwIC43MDguNzA4TDIgOC4yMDdWMTMuNUExLjUgMS41IDAgMCAwIDMuNSAxNWg5YTEuNSAxLjUgMCAwIDAgMS41LTEuNVY4LjIwN2wuNjQ2LjY0N2EuNS41IDAgMCAwIC43MDgtLjcwOEwxMyA1Ljc5M1YyLjVhLjUuNSAwIDAgMC0uNS0uNWgtMWEuNS41IDAgMCAwLS41LjV2MS4yOTN6TTEzIDcuMjA3VjEzLjVhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAwIDEtLjUtLjVWNy4yMDdsNS01eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTguNzA3IDEuNWExIDEgMCAwIDAtMS40MTQgMEwuNjQ2IDguMTQ2YS41LjUgMCAwIDAgLjcwOC43MDhMMiA4LjIwN1YxMy41QTEuNSAxLjUgMCAwIDAgMy41IDE1aDlhMS41IDEuNSAwIDAgMCAxLjUtMS41VjguMjA3bC42NDYuNjQ3YS41LjUgMCAwIDAgLjcwOC0uNzA4TDEzIDUuNzkzVjIuNWEuNS41IDAgMCAwLS41LS41aC0xYS41LjUgMCAwIDAtLjUuNXYxLjI5M3pNMTMgNy4yMDdWMTMuNWEuNS41IDAgMCAxLS41LjVoLTlhLjUuNSAwIDAgMS0uNS0uNVY3LjIwN2w1LTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtaG9tZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1ob21lOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LWhvbWU6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtaG9tZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1ob21lOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtaG9tZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOC43MDcgMS41YTEgMSAwIDAgMC0xLjQxNCAwTC42NDYgOC4xNDZhLjUuNSAwIDAgMCAuNzA4LjcwOEwyIDguMjA3VjEzLjVBMS41IDEuNSAwIDAgMCAzLjUgMTVoOWExLjUgMS41IDAgMCAwIDEuNS0xLjVWOC4yMDdsLjY0Ni42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMMTMgNS43OTNWMi41YS41LjUgMCAwIDAtLjUtLjVoLTFhLjUuNSAwIDAgMC0uNS41djEuMjkzek0xMyA3LjIwN1YxMy41YS41LjUgMCAwIDEtLjUuNWgtOWEuNS41IDAgMCAxLS41LS41VjcuMjA3bDUtNXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004LjcwNyAxLjVhMSAxIDAgMCAwLTEuNDE0IDBMLjY0NiA4LjE0NmEuNS41IDAgMCAwIC43MDguNzA4TDIgOC4yMDdWMTMuNUExLjUgMS41IDAgMCAwIDMuNSAxNWg5YTEuNSAxLjUgMCAwIDAgMS41LTEuNVY4LjIwN2wuNjQ2LjY0N2EuNS41IDAgMCAwIC43MDgtLjcwOEwxMyA1Ljc5M1YyLjVhLjUuNSAwIDAgMC0uNS0uNWgtMWEuNS41IDAgMCAwLS41LjV2MS4yOTN6TTEzIDcuMjA3VjEzLjVhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAwIDEtLjUtLjVWNy4yMDdsNS01eicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNOCAzYTUgNSAwIDEgMS00LjU0NiAyLjkxNC41LjUgMCAwIDAtLjkwOC0uNDE3QTYgNiAwIDEgMCA4IDJ6Jy8lM0UlM0NwYXRoIGQ9J004IDQuNDY2Vi41MzRhLjI1LjI1IDAgMCAwLS40MS0uMTkyTDUuMjMgMi4zMDhhLjI1LjI1IDAgMCAwIDAgLjM4NGwyLjM2IDEuOTY2QS4yNS4yNSAwIDAgMCA4IDQuNDY2Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J004IDNhNSA1IDAgMSAxLTQuNTQ2IDIuOTE0LjUuNSAwIDAgMC0uOTA4LS40MTdBNiA2IDAgMSAwIDggMnonLyUzRSUzQ3BhdGggZD0nTTggNC40NjZWLjUzNGEuMjUuMjUgMCAwIDAtLjQxLS4xOTJMNS4yMyAyLjMwOGEuMjUuMjUgMCAwIDAgMCAuMzg0bDIuMzYgMS45NjZBLjI1LjI1IDAgMCAwIDggNC40NjYnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTggM2E1IDUgMCAxIDEtNC41NDYgMi45MTQuNS41IDAgMCAwLS45MDgtLjQxN0E2IDYgMCAxIDAgOCAyeicvJTNFJTNDcGF0aCBkPSdNOCA0LjQ2NlYuNTM0YS4yNS4yNSAwIDAgMC0uNDEtLjE5Mkw1LjIzIDIuMzA4YS4yNS4yNSAwIDAgMCAwIC4zODRsMi4zNiAxLjk2NkEuMjUuMjUgMCAwIDAgOCA0LjQ2NicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNOCAzYTUgNSAwIDEgMS00LjU0NiAyLjkxNC41LjUgMCAwIDAtLjkwOC0uNDE3QTYgNiAwIDEgMCA4IDJ6Jy8lM0UlM0NwYXRoIGQ9J004IDQuNDY2Vi41MzRhLjI1LjI1IDAgMCAwLS40MS0uMTkyTDUuMjMgMi4zMDhhLjI1LjI1IDAgMCAwIDAgLjM4NGwyLjM2IDEuOTY2QS4yNS4yNSAwIDAgMCA4IDQuNDY2Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWljb24tdGVydGlhcnktMy1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J004IDNhNSA1IDAgMSAxLTQuNTQ2IDIuOTE0LjUuNSAwIDAgMC0uOTA4LS40MTdBNiA2IDAgMSAwIDggMnonLyUzRSUzQ3BhdGggZD0nTTggNC40NjZWLjUzNGEuMjUuMjUgMCAwIDAtLjQxLS4xOTJMNS4yMyAyLjMwOGEuMjUuMjUgMCAwIDAgMCAuMzg0bDIuMzYgMS45NjZBLjI1LjI1IDAgMCAwIDggNC40NjYnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTggM2E1IDUgMCAxIDEtNC41NDYgMi45MTQuNS41IDAgMCAwLS45MDgtLjQxN0E2IDYgMCAxIDAgOCAyeicvJTNFJTNDcGF0aCBkPSdNOCA0LjQ2NlYuNTM0YS4yNS4yNSAwIDAgMC0uNDEtLjE5Mkw1LjIzIDIuMzA4YS4yNS4yNSAwIDAgMCAwIC4zODRsMi4zNiAxLjk2NkEuMjUuMjUgMCAwIDAgOCA0LjQ2NicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWNvdW50ZXJjbG9ja3dpc2U6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNOCAzYTUgNSAwIDEgMS00LjU0NiAyLjkxNC41LjUgMCAwIDAtLjkwOC0uNDE3QTYgNiAwIDEgMCA4IDJ6Jy8lM0UlM0NwYXRoIGQ9J004IDQuNDY2Vi41MzRhLjI1LjI1IDAgMCAwLS40MS0uMTkyTDUuMjMgMi4zMDhhLjI1LjI1IDAgMCAwIDAgLjM4NGwyLjM2IDEuOTY2QS4yNS4yNSAwIDAgMCA4IDQuNDY2Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J004IDNhNSA1IDAgMSAxLTQuNTQ2IDIuOTE0LjUuNSAwIDAgMC0uOTA4LS40MTdBNiA2IDAgMSAwIDggMnonLyUzRSUzQ3BhdGggZD0nTTggNC40NjZWLjUzNGEuMjUuMjUgMCAwIDAtLjQxLS4xOTJMNS4yMyAyLjMwOGEuMjUuMjUgMCAwIDAgMCAuMzg0bDIuMzYgMS45NjZBLjI1LjI1IDAgMCAwIDggNC40NjYnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXN1Y2Nlc3MtMjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKX0ubW9uc3Rlci1pY29uLXdhcm5pbmctMjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm1vbnN0ZXItaWNvbi1lcnJvci0yOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKX0ubW9uc3Rlci1pY29uLWVycm9yLTI6YmVmb3JlLC5tb25zdGVyLWljb24tc3VjY2Vzcy0yOmJlZm9yZSwubW9uc3Rlci1pY29uLXdhcm5pbmctMjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tc3VjY2Vzcy0zOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24td2FybmluZy0zOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKX0ubW9uc3Rlci1pY29uLWVycm9yLTM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItMzpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zdWNjZXNzLTM6YmVmb3JlLC5tb25zdGVyLWljb24td2FybmluZy0zOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1zdWNjZXNzLTE6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWNoZWNrLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1jaGVjay1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm1vbnN0ZXItaWNvbi13YXJuaW5nLTE6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWV4Y2xhbWF0aW9uLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWV4Y2xhbWF0aW9uLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItMTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS14LWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmkteC1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItMTpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zdWNjZXNzLTE6YmVmb3JlLC5tb25zdGVyLWljb24td2FybmluZy0xOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1zdWNjZXNzLTQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWNoZWNrLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1jaGVjay1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm1vbnN0ZXItaWNvbi13YXJuaW5nLTQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWV4Y2xhbWF0aW9uLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWV4Y2xhbWF0aW9uLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItNDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS14LWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmkteC1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItNDpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zdWNjZXNzLTQ6YmVmb3JlLC5tb25zdGVyLWljb24td2FybmluZy00OmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19YSxhOmFjdGl2ZSxhOmZvY3VzLGE6aG92ZXIsYTpsaW5rLGE6dmlzaXRlZHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtvdXRsaW5lOm5vbmU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dHJhbnNpdGlvbjpjb2xvciAuM3MgZWFzZS1pbi1vdXQsdGV4dC1kZWNvcmF0aW9uLWNvbG9yIC4zcyBlYXNlLWluLW91dH1hOmFjdGl2ZSxhOmZvY3VzLGE6aG92ZXJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEgKTt0ZXh0LWRlY29yYXRpb24tdGhpY2tuZXNzOjFweDt0ZXh0LXVuZGVybGluZS1vZmZzZXQ6MnB4fWE6Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpO291dGxpbmUtb2Zmc2V0OjJweH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspe2EsYTphY3RpdmUsYTpmb2N1cyxhOmhvdmVyLGE6bGluayxhOnZpc2l0ZWR7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1hbWJlci0yKX1hOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX19Lm1vbnN0ZXItc2tlbGV0b24tY29sLTEwey0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXNrZWxldG9uLWhlaWdodDoxMDAlOy0tbW9uc3Rlci1za2VsZXRvbi13aWR0aDoxMCU7LS1tb25zdGVyLXNrZWxldG9uOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKSAwLHRyYW5zcGFyZW50IHZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpKX0ubW9uc3Rlci1za2VsZXRvbi1jb2wtMTAsLm1vbnN0ZXItc2tlbGV0b24tY29sLTIwe2JhY2tncm91bmQtaW1hZ2U6dmFyKC0tbW9uc3Rlci1za2VsZXRvbik7YmFja2dyb3VuZC1wb3NpdGlvbjowIDA7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTp2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSB2YXIoLS1tb25zdGVyLXNrZWxldG9uLWhlaWdodCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcik7bWluLWhlaWdodDoxcHh9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTIwey0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXNrZWxldG9uLWhlaWdodDoxMDAlOy0tbW9uc3Rlci1za2VsZXRvbi13aWR0aDoyMCU7LS1tb25zdGVyLXNrZWxldG9uOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKSAwLHRyYW5zcGFyZW50IHZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpKX0ubW9uc3Rlci1za2VsZXRvbi1jb2wtMzB7LS1tb25zdGVyLXNrZWxldG9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0OjEwMCU7LS1tb25zdGVyLXNrZWxldG9uLXdpZHRoOjMwJTstLW1vbnN0ZXItc2tlbGV0b246bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpIDAsdHJhbnNwYXJlbnQgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkpfS5tb25zdGVyLXNrZWxldG9uLWNvbC0zMCwubW9uc3Rlci1za2VsZXRvbi1jb2wtNDB7YmFja2dyb3VuZC1pbWFnZTp2YXIoLS1tb25zdGVyLXNrZWxldG9uKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOnZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpIHZhcigtLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0KTtjb2xvcjp2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKTttaW4taGVpZ2h0OjFweH0ubW9uc3Rlci1za2VsZXRvbi1jb2wtNDB7LS1tb25zdGVyLXNrZWxldG9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0OjEwMCU7LS1tb25zdGVyLXNrZWxldG9uLXdpZHRoOjQwJTstLW1vbnN0ZXItc2tlbGV0b246bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpIDAsdHJhbnNwYXJlbnQgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkpfS5tb25zdGVyLXNrZWxldG9uLWNvbC01MHstLW1vbnN0ZXItc2tlbGV0b24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1za2VsZXRvbi1oZWlnaHQ6MTAwJTstLW1vbnN0ZXItc2tlbGV0b24td2lkdGg6NTAlOy0tbW9uc3Rlci1za2VsZXRvbjpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcikgMCx0cmFuc3BhcmVudCB2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSl9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTUwLC5tb25zdGVyLXNrZWxldG9uLWNvbC02MHtiYWNrZ3JvdW5kLWltYWdlOnZhcigtLW1vbnN0ZXItc2tlbGV0b24pO2JhY2tncm91bmQtcG9zaXRpb246MCAwO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6dmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi1oZWlnaHQpO2NvbG9yOnZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpO21pbi1oZWlnaHQ6MXB4fS5tb25zdGVyLXNrZWxldG9uLWNvbC02MHstLW1vbnN0ZXItc2tlbGV0b24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1za2VsZXRvbi1oZWlnaHQ6MTAwJTstLW1vbnN0ZXItc2tlbGV0b24td2lkdGg6NjAlOy0tbW9uc3Rlci1za2VsZXRvbjpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcikgMCx0cmFuc3BhcmVudCB2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSl9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTcwey0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXNrZWxldG9uLWhlaWdodDoxMDAlOy0tbW9uc3Rlci1za2VsZXRvbi13aWR0aDo3MCU7LS1tb25zdGVyLXNrZWxldG9uOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKSAwLHRyYW5zcGFyZW50IHZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpKX0ubW9uc3Rlci1za2VsZXRvbi1jb2wtNzAsLm1vbnN0ZXItc2tlbGV0b24tY29sLTgwe2JhY2tncm91bmQtaW1hZ2U6dmFyKC0tbW9uc3Rlci1za2VsZXRvbik7YmFja2dyb3VuZC1wb3NpdGlvbjowIDA7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTp2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSB2YXIoLS1tb25zdGVyLXNrZWxldG9uLWhlaWdodCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcik7bWluLWhlaWdodDoxcHh9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTgwey0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXNrZWxldG9uLWhlaWdodDoxMDAlOy0tbW9uc3Rlci1za2VsZXRvbi13aWR0aDo4MCU7LS1tb25zdGVyLXNrZWxldG9uOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKSAwLHRyYW5zcGFyZW50IHZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpKX0ubW9uc3Rlci1za2VsZXRvbi1jb2wtOTB7LS1tb25zdGVyLXNrZWxldG9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0OjEwMCU7LS1tb25zdGVyLXNrZWxldG9uLXdpZHRoOjkwJTstLW1vbnN0ZXItc2tlbGV0b246bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpIDAsdHJhbnNwYXJlbnQgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkpfS5tb25zdGVyLXNrZWxldG9uLWNvbC0xMDAsLm1vbnN0ZXItc2tlbGV0b24tY29sLTkwe2JhY2tncm91bmQtaW1hZ2U6dmFyKC0tbW9uc3Rlci1za2VsZXRvbik7YmFja2dyb3VuZC1wb3NpdGlvbjowIDA7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTp2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSB2YXIoLS1tb25zdGVyLXNrZWxldG9uLWhlaWdodCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcik7bWluLWhlaWdodDoxcHh9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTEwMHstLW1vbnN0ZXItc2tlbGV0b24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1za2VsZXRvbi1oZWlnaHQ6MTAwJTstLW1vbnN0ZXItc2tlbGV0b24td2lkdGg6MTAwJTstLW1vbnN0ZXItc2tlbGV0b246bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpIDAsdHJhbnNwYXJlbnQgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkpfS5tb25zdGVyLXNrZWxldG9uLWFuaW1hdGVke2FuaW1hdGlvbi1kdXJhdGlvbjoyLjI1czthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGU7YW5pbWF0aW9uLW5hbWU6c2hpbW1lcjthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmxpbmVhcjtib3JkZXItcmFkaXVzOjRweH1Aa2V5ZnJhbWVzIHNoaW1tZXJ7MCV7ZmlsdGVyOmJyaWdodG5lc3MoMSl9NTAle2ZpbHRlcjpicmlnaHRuZXNzKDEuNSl9dG97ZmlsdGVyOmJyaWdodG5lc3MoMSl9fSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBkaWZmIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGlmZi5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9vYnNlcnZlci5tanNcIjtcblxuZXhwb3J0IHsgaGFuZGxlRGF0YVNvdXJjZUNoYW5nZXMsIGRhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGFuZGxlRGF0YVNvdXJjZUNoYW5nZXMoKSB7XG5cdGlmICghdGhpc1tkYXRhc291cmNlTGlua2VkRWxlbWVudFN5bWJvbF0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRsZXQgZGF0YSA9IHRoaXNbZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xdLmRhdGE7XG5cblx0Y29uc3QgYWN0dWFsRGF0YSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0T3B0aW9uKFwiZGF0YVwiKSk7XG5cdGNvbnN0IGFjdHVhbERhdGFBc09iaiA9IEpTT04ucGFyc2UoYWN0dWFsRGF0YSk7XG5cblx0Y29uc3QgcGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy5kYXRhXCIpO1xuXHRpZiAocGF0aCkge1xuXHRcdGRhdGEgPSBuZXcgUGF0aGZpbmRlcihkYXRhKS5nZXRWaWEocGF0aCk7XG5cdH1cblxuXHRpZiAoaXNPYmplY3QoZGF0YSkpIHtcblx0XHRjb25zdCB0bXAgPSBbXTtcblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0dG1wLnB1c2goZGF0YVtrZXldKTtcblx0XHR9XG5cdFx0ZGF0YSA9IHRtcDtcblx0fVxuXG5cdGNvbnN0IGluZGV4ID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLmluZGV4XCIpO1xuXHRpZiAoaW5kZXggIT09IHVuZGVmaW5lZCAmJiBpbmRleCAhPT0gbnVsbCkge1xuXHRcdGRhdGEgPSBkYXRhPy5baW5kZXhdO1xuXHR9XG5cblx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCB8fCBkYXRhID09PSBudWxsKSB7XG5cdFx0ZGF0YSA9IFtdO1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0ID0gZGlmZihkYXRhLCBhY3R1YWxEYXRhQXNPYmopO1xuXHRpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHF1ZXVlTWljcm90YXNrKCgpID0+IHtcblx0XHR0aGlzLnNldE9wdGlvbihcImRhdGFcIiwgZGF0YSk7XG5cdH0pO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEZvcm1TdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBGb3JtU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdEZvcm1TdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGZvcm0geyBcbmlucHV0LG1ldGVyLHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aCk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxMDAlO21hcmdpbjowO291dGxpbmU6bm9uZX1pbnB1dCxzZWxlY3QsdGV4dGFyZWF7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O3BhZGRpbmc6LjRyZW0gLjZyZW19dGV4dGFyZWF7bWluLWhlaWdodDo2cmVtO3Jlc2l6ZTp2ZXJ0aWNhbH1pbnB1dFt0eXBlPWNvbG9yXXtoZWlnaHQ6MnJlbTttYXJnaW46MDtwYWRkaW5nOi4xcmVtO3dpZHRoOjJyZW19aW5wdXQ6aG92ZXI6bm90KFt0eXBlPXJhZGlvXSk6bm90KFt0eXBlPWNoZWNrYm94XSk6bm90KFt0eXBlPXJhbmdlXSksc2VsZWN0OmhvdmVyLHRleHRhcmVhOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9aW5wdXQ6Zm9jdXMsc2VsZWN0OmZvY3VzLHRleHRhcmVhOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDozcHh9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sLCBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uLy4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IGdldExpbmtlZE9iamVjdHMsIGhhc09iamVjdExpbmsgfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9EQVRBU09VUkNFX1NFTEVDVE9SLFxuXHRBVFRSSUJVVEVfREFUQVRBQkxFX0lOREVYLFxufSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4vZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IERhdGFzZXRTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9kYXRhc2V0Lm1qc1wiO1xuaW1wb3J0IHtcblx0aGFuZGxlRGF0YVNvdXJjZUNoYW5nZXMsXG5cdGRhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sLFxufSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuaW1wb3J0IHsgRm9ybVN0eWxlU2hlZXQgfSBmcm9tIFwiLi4vc3R5bGVzaGVldC9mb3JtLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhU2V0IH07XG5cbi8qKlxuICogVGhlIGRhdGEgc2V0IGNvbXBvbmVudCBpcyB1c2VkIHRvIHNob3cgdGhlIGRhdGEgb2YgYSBkYXRhIHNvdXJjZS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2RhdGFzZXQucG5nXCI+XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1kYXRhc2V0IC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWRhdGFzZXQnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1kYXRhc2V0PjwvbW9uc3Rlci1kYXRhc2V0PlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCAnQHNjaHVrYWkvY29tcG9uZW50LWRhdGF0YWJsZS9zb3VyY2UvZGF0YXNldC5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1kYXRhc2V0Jyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgZGF0YXNldC5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIERhdGFTZXRcbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBkYXRhIHNldFxuICovXG5jbGFzcyBEYXRhU2V0IGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2RhdGFzZXRAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hpY2ggYXR0cmlidXRlcyBhcmUgdG8gYmUgbW9uaXRvcmVkIGJ5IGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKWAuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ1tdfVxuXHQgKiBAc2luY2UgMS4xNS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzO1xuXHRcdGF0dHJpYnV0ZXMucHVzaChBVFRSSUJVVEVfREFUQVRBQkxFX0lOREVYKTtcblx0XHRyZXR1cm4gYXR0cmlidXRlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGRhdGFzb3VyY2UgVGhlIGRhdGFzb3VyY2Vcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGRhdGFzb3VyY2Uuc2VsZWN0b3IgVGhlIHNlbGVjdG9yIG9mIHRoZSBkYXRhc291cmNlXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtYXBwaW5nIFRoZSBtYXBwaW5nXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtYXBwaW5nLmRhdGEgVGhlIGRhdGFcblx0ICogQHByb3BlcnR5IHtudW1iZXJ9IG1hcHBpbmcuaW5kZXggVGhlIGluZGV4XG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IGRhdGEgVGhlIGRhdGFcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRjb25zdCBvYmogPSBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXG5cdFx0XHRkYXRhc291cmNlOiB7XG5cdFx0XHRcdHNlbGVjdG9yOiBudWxsLFxuXHRcdFx0fSxcblxuXHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRkYXRhOiBcImRhdGFzZXRcIixcblx0XHRcdFx0aW5kZXg6IDAsXG5cdFx0XHR9LFxuXG5cdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogQHNpbmNlIDMuNzAuMFxuXHRcdFx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHRcdFx0ICovXG5cdFx0XHRcdHJlZnJlc2hPbk11dGF0aW9uOiB0cnVlLFxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBAc2luY2UgMy43MC4wXG5cdFx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHRcdCAqL1xuXHRcdFx0cmVmcmVzaE9uTXV0YXRpb246IHtcblx0XHRcdFx0c2VsZWN0b3I6IFwiaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWFcIixcblx0XHRcdH0sXG5cblx0XHRcdGRhdGE6IHt9LFxuXHRcdH0pO1xuXG5cdFx0dXBkYXRlT3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzLCBvYmopO1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWRhdGFzZXRcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGNyZWF0ZWQuXG5cdCAqIEBzaW5jZSAzLjcwLjBcblx0ICogQHJldHVybiB7RGF0YVNldH1cblx0ICovXG5cdHJlZnJlc2goKSB7XG5cdFx0Ly8gbWFrZXMgc3VyZSB0aGF0IGhhbmRsZURhdGFTb3VyY2VDaGFuZ2VzIGlzIGNhbGxlZFxuXHRcdHRoaXMuc2V0T3B0aW9uKFwiZGF0YVwiLCB7fSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRpZiAoIXRoaXNbZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJObyBkYXRhc291cmNlXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBpbnRlcm5hbFVwZGF0ZUNsb25lRGF0YSA9IHRoaXMuZ2V0SW50ZXJuYWxVcGRhdGVDbG9uZURhdGEoKTtcblx0XHRcdGlmICghaW50ZXJuYWxVcGRhdGVDbG9uZURhdGEpIHtcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIk5vIHVwZGF0ZSBkYXRhXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBpbnRlcm5hbERhdGEgPSBpbnRlcm5hbFVwZGF0ZUNsb25lRGF0YT8uW1wiZGF0YVwiXTtcblx0XHRcdGlmIChcblx0XHRcdFx0aW50ZXJuYWxEYXRhID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0aW50ZXJuYWxEYXRhID09PSBudWxsIHx8XG5cdFx0XHRcdGludGVybmFsRGF0YSA9PT0gXCJcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJObyBkYXRhXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSB0aGlzLmdldE9wdGlvbihcIm1hcHBpbmcuZGF0YVwiKTtcblx0XHRcdFx0Y29uc3QgaW5kZXggPSB0aGlzLmdldE9wdGlvbihcIm1hcHBpbmcuaW5kZXhcIik7XG5cblx0XHRcdFx0bGV0IHBhdGhXaXRoSW5kZXg7XG5cblx0XHRcdFx0aWYgKGlzU3RyaW5nKHBhdGgpICYmIHBhdGggIT09IFwiXCIpIHtcblx0XHRcdFx0XHRwYXRoV2l0aEluZGV4ID0gcGF0aCArIFwiLlwiICsgaW5kZXg7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGF0aFdpdGhJbmRleCA9IFN0cmluZyhpbmRleCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBkYXRhID0gdGhpc1tkYXRhc291cmNlTGlua2VkRWxlbWVudFN5bWJvbF0/LmRhdGE7XG5cdFx0XHRcdGlmICghZGF0YSkge1xuXHRcdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJObyBkYXRhXCIpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB1bnJlZiA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuXHRcdFx0XHRjb25zdCByZWYgPSBKU09OLnBhcnNlKHVucmVmKTtcblxuXHRcdFx0XHRuZXcgUGF0aGZpbmRlcihyZWYpLnNldFZpYShwYXRoV2l0aEluZGV4LCBpbnRlcm5hbERhdGEpO1xuXG5cdFx0XHRcdHRoaXNbZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xdLmRhdGEgPSByZWY7XG5cblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIGFzc2VtYmxpbmcgdGhlIGNvbXBvbmVudC5cblx0ICpcblx0ICogSXQgY2FsbHMgdGhlIHBhcmVudCdzIGFzc2VtYmxlIG1ldGhvZCBmaXJzdCwgdGhlbiBpbml0aWFsaXplcyBjb250cm9sIHJlZmVyZW5jZXMgYW5kIGV2ZW50IGhhbmRsZXJzLlxuXHQgKiBJZiB0aGUgYGRhdGFzb3VyY2Uuc2VsZWN0b3JgIG9wdGlvbiBpcyBwcm92aWRlZCBhbmQgaXMgYSBzdHJpbmcsIGl0IHNlYXJjaGVzIGZvciB0aGUgY29ycmVzcG9uZGluZ1xuXHQgKiBlbGVtZW50IGluIHRoZSBET00gdXNpbmcgdGhhdCBzZWxlY3Rvci5cblx0ICpcblx0ICogSWYgdGhlIHNlbGVjdG9yIG1hdGNoZXMgZXhhY3RseSBvbmUgZWxlbWVudCwgaXQgY2hlY2tzIGlmIHRoZSBlbGVtZW50IGlzIGFuIGluc3RhbmNlIG9mIHRoZSBgRGF0YXNvdXJjZWAgY2xhc3MuXG5cdCAqXG5cdCAqIElmIGl0IGlzLCB0aGUgY29tcG9uZW50J3MgYGRhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sYCBwcm9wZXJ0eSBpcyBzZXQgdG8gdGhlIGVsZW1lbnQsIGFuZCB0aGUgY29tcG9uZW50XG5cdCAqIGF0dGFjaGVzIGFuIG9ic2VydmVyIHRvIHRoZSBkYXRhc291cmNlJ3MgY2hhbmdlcy5cblx0ICpcblx0ICogVGhlIG9ic2VydmVyIGlzIGEgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgYGhhbmRsZURhdGFTb3VyY2VDaGFuZ2VzYCBtZXRob2QgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGNvbXBvbmVudC5cblx0ICogQWRkaXRpb25hbGx5LCB0aGUgY29tcG9uZW50IGF0dGFjaGVzIGFuIG9ic2VydmVyIHRvIGl0c2VsZiwgd2hpY2ggYWxzbyBjYWxscyB0aGUgYGhhbmRsZURhdGFTb3VyY2VDaGFuZ2VzYFxuXHQgKiBtZXRob2QgaW4gdGhlIGNvbXBvbmVudCdzIGNvbnRleHQuXG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXG5cdFx0aWYgKCF0aGlzW2RhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sXSkge1xuXHRcdFx0Y29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldE9wdGlvbihcImRhdGFzb3VyY2Uuc2VsZWN0b3JcIik7XG5cblx0XHRcdGlmIChpc1N0cmluZyhzZWxlY3RvcikpIHtcblx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyh0aGlzLCBzZWxlY3Rvcik7XG5cdFx0XHRcdGlmIChlbGVtZW50ID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIHNlbGVjdG9yIG11c3QgbWF0Y2ggZXhhY3RseSBvbmUgZWxlbWVudFwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBEYXRhc291cmNlKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgZWxlbWVudCBtdXN0IGJlIGEgZGF0YXNvdXJjZVwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXNbZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xdID0gZWxlbWVudDtcblx0XHRcdFx0ZWxlbWVudC5kYXRhc291cmNlLmF0dGFjaE9ic2VydmVyKFxuXHRcdFx0XHRcdG5ldyBPYnNlcnZlcihoYW5kbGVEYXRhU291cmNlQ2hhbmdlcy5iaW5kKHRoaXMpKSxcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBzZWxlY3RvciBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucmVmcmVzaE9uTXV0YXRpb25cIikgJiZcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwicmVmcmVzaE9uTXV0YXRpb24uc2VsZWN0b3JcIilcblx0XHQpIHtcblx0XHRcdGluaXRNdXRhdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4gW0NTU1N0eWxlU2hlZXRdXG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW0Zvcm1TdHlsZVNoZWV0LCBEYXRhc2V0U3R5bGVTaGVldF07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfREFUQVRBQkxFX0lOREVYXSA9ICgpID0+IHtcblx0XHRjb25zdCBpbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9EQVRBVEFCTEVfSU5ERVgpO1xuXHRcdGlmIChpbmRleCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJtYXBwaW5nLmluZGV4XCIsIHBhcnNlSW50KGluZGV4LCAxMCkpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlT3B0aW9uc0Zyb21Bcmd1bWVudHMob3B0aW9ucykge1xuXHRjb25zdCBpbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9EQVRBVEFCTEVfSU5ERVgpO1xuXG5cdGlmIChpbmRleCAhPT0gbnVsbCAmJiBpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b3B0aW9ucy5tYXBwaW5nLmluZGV4ID0gcGFyc2VJbnQoaW5kZXgsIDEwKTtcblx0fVxuXG5cdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0RBVEFTT1VSQ0VfU0VMRUNUT1IpO1xuXG5cdGlmIChzZWxlY3Rvcikge1xuXHRcdG9wdGlvbnMuZGF0YXNvdXJjZS5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdE11dGF0aW9uT2JzZXJ2ZXIoKSB7XG5cdGNvbnN0IGNvbmZpZyA9IHsgYXR0cmlidXRlczogZmFsc2UsIGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9O1xuXG5cdGNvbnN0IGNhbGxiYWNrID0gKG11dGF0aW9uTGlzdCwgb2JzZXJ2ZXIpID0+IHtcblx0XHRpZiAobXV0YXRpb25MaXN0Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBkb25lRmxhZyA9IGZhbHNlO1xuXHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25MaXN0KSB7XG5cdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJjaGlsZExpc3RcIikge1xuXHRcdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgbXV0YXRpb24uYWRkZWROb2Rlcykge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRcdFx0bm9kZS5tYXRjaGVzKHRoaXMuZ2V0T3B0aW9uKFwicmVmcmVzaE9uTXV0YXRpb24uc2VsZWN0b3JcIikpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRkb25lRmxhZyA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZG9uZUZsYWcpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChkb25lRmxhZykge1xuXHRcdFx0dGhpcy5yZWZyZXNoKCk7XG5cdFx0fVxuXHR9O1xuXG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuXHRvYnNlcnZlci5vYnNlcnZlKHRoaXMsIGNvbmZpZyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoRGF0YVNldCk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgRm9ybVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IEZvcm1TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0Rm9ybVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgZm9ybSB7IFxuLmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfWlucHV0LG1ldGVyLHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aCk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxMDAlO21hcmdpbjowO291dGxpbmU6bm9uZX1pbnB1dCxzZWxlY3QsdGV4dGFyZWF7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O3BhZGRpbmc6LjRyZW0gLjZyZW19dGV4dGFyZWF7bWluLWhlaWdodDo2cmVtO3Jlc2l6ZTp2ZXJ0aWNhbH1pbnB1dFt0eXBlPWNvbG9yXXtoZWlnaHQ6MnJlbTttYXJnaW46MDtwYWRkaW5nOi4xcmVtO3dpZHRoOjJyZW19aW5wdXQ6aG92ZXI6bm90KFt0eXBlPXJhZGlvXSk6bm90KFt0eXBlPWNoZWNrYm94XSk6bm90KFt0eXBlPXJhbmdlXSksc2VsZWN0OmhvdmVyLHRleHRhcmVhOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9aW5wdXQ6Zm9jdXMsc2VsZWN0OmZvY3VzLHRleHRhcmVhOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDozcHh9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpSYWxld2F5O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFGSjRBQklBQUFBQXQzQUFBRklRQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHb0U4Rys0NkhJVThCbUEvVTFSQlZFUUFoUWdJZ1FvSm54UVJDQXFCdWd5Qm1uQUxoQ0lBQVRZQ0pBT0lRQVFnQllVVUJ5QU1neHdiZmFRWGFKZWZtTnowWm9sM3Y2MGNQZVpNcEc0SEpTams1cUlJTmc2Q0dNZ2xaZi8vbjNGMGpPR0dEUkExclhlSW5jSklVa05IR242OXFNUkRVOFphampzOVVic210bnFuRTN2M3ZxaVFtZlJRcExrS1c2UVp3YWw2czVJVWlKTlVTVUcvT3dvRFk2QjY3NU9qU2prRFNTTXUycGVkcHU5dkpJTFVsSmQ3MDdEK2VMSHBqWURJNGUxdURuTGpISHZ4cERYR015ZHVMTG4xcXQwRkNRT3lGc0paRTEra0pxM1QrSWU3QkpGSU5PQU5iaTl2VFV6aEk3VzRHbVVMMGxXalQvRlFRaS9tKyt4dVBQMDJvbVJIZTVwbjREZ2ZOWmZuK1I5ejk3OXRtRWVOYXExUnhScUhUalRQTkEySkZFZ3JIZG8vbnQvVy81emJnR0N4aWE2RWtWaUEyRmhZR0l0Um1FMVp2VlV2cXRTdGI3TXZyZDNXNyt0MiswWGRvVG56empZYnA3bVNITEFDa2hNV2dDVEw2czBXdjBBVW9oSmZFcUUzb3BQZDU4aWtKbktsbyszdWFlU0hZSjZmY0ljWGpkK3JLVUVzYUVsVHFsVWxWUm0vTitlLzhpUDBMNUFLb3pObEozLzlpQndzaE02djVKSVVKeWtnVDNmZHJPbXE2TGNzK1orcS9Yc0FYRnhFRWlRSVVhS29zRm43Y3RUKzdCQlM1ZHFEb2xKWHVuYmw3cnR0ekQvdjM4NExmdEphZ0ZGQUxZUEU1QTdnbk1yWkJodDRsWHFzYlpLbWJkcTBUdE9tcG1nTml1Z00yUFlCYzczTXJqcTdHTHNvWEhjVHB0OXVQdkZEejhlTjNnK3N4clBRQXc2RFRGTnAvT1pJOWlpbk5pdFpoUm1wUU9Da2RvQmRBTmpWV2xhdk1pdHdETkpYL3BZSUFrVnduT1Avdlc1eHpvTXc3U0FGQUtVK1p6L2tuUC9aOWorT2Rmckw4S2UydmRLYm1waHV4SlN1TDhFVUFnZ0hJaUJIUCs0NDRFRHp2MVBUUTNZa09jT1NsVEhtajZVc2RmbzJMKy9qcFllN0lIV2NRVWdjZ2twTEZSMVlUVzhDR0tRWDliOEdGQUFBSDl0bzRSSFE2R0x2RlJyaTREaXdUekFBRERNS0RQci9mWjNWL3FkZ1Bta0d6S1RFbVdFWGI3UTN0dGdUWXFvMm5QNi8rOTdYZitGLzlKSEFWc0lJY0FDQlp3UnlrR1Q3Z0NSOFZvaEpjVU9PU0RqaVNiQXBoTW96bTJKUnB0QnRVVzY5WGJORkczSVZ5MktMb2s0OC9MZnNtNTI3SWFxQkxNdUJiT0ZJd2VGVWQwMXZlTCtZOHhXaHR6Y3FUbTJDSVRjNWVMSndTSTRmWWxMWUZJVkhBcy8vVDUzTjQvWXgxaEtHVStIU3FFcmRwUFBuczZmcXFXSnNOYlphQ2xRdGpsT0xVTXNoY2RvQTVUUXNzNEpMYzkwU3hDT01NVUs0S1A5TnNocHpwWDR2d3hLQ2hDQVNSRVJFL0xLc1dSbEp3TktBY1RuWEFoRXkzcjFLSGNaYS9ZZFg1ODQyMC9pYVhtdEdob0NBaUlpQVIyM3YvUDkrS1RBQ0FONWhka0MzeFVDNEVMc2dndmtSMmtyRWpZU0V2MEJLU21IQ2hJdllPQ0FKa0tRZ3lZTU0yUW9VTXpDbzE2Qko4NXFBV0NDZEhlazNBQjBPREwxTHEwUGdUZTNoU3cyZmhpNFhoUHVldVFXRUg2eHRJRVFBYkcyTm01b1Y1NFFGUCt5S2dPMkQ0VDV0L3d6MlhXOTIvcnBxcExUU0lQOHFWOXZMdk9kczBOTFd5WDUxSzZvZmJ2UFpFMXBhZjd3MzE4QzladGhxN2YzMmJmdUw2NFZaSHc1MTRZc201bGdmTmJmRzdXOWxzVUE0RUd6NzIzdnh3R3pwNGZSUittUDhMczVCN0tCMmVESlhjNnh3bEc2OTAydWc3QXpMQThOWTIxQjJkQi9QNXFmT1Y4dDFvbnlMNWpaRERmUUk1Umc4RDk4RnZIc3ZjbEh1SnNyZHZzSnJwYy9Uci9ndS9FZlpKelhVenBXYURqN003K1VQOC84RWtBQVZhQVMvQ1IrWHMvSk40WWFJY08xeEhaY1VhTU1ia2xycEt5N05mUUpLUWNVUmFnb0dtQ1crSEE2RU52YmczM3NsMnBJWVJtRTliSUhiMG1BNmtrNmxONUdkeU1ONUVibVFoeEhLbHdNZ1Q1OGNndzdwZFVSejduZk1jUWZjVTN2SWN6VmtkcmhYOFhIcTQwMTJ0Rk9kN2tUL2E3cDdtODNXQTcxRjdhTzlNK2RqdmRkNmo3ZnhtK0QxUHUzejN1aXJ2bXV5emE1M3RydjkzbFRiODJSVDJLYUZWVUtNTlAzNkJ2UU1DbzBHc0Vka0w4cyt6TGcxRXhiTTBOZ0NXQXhnemY4MkRHMUtYTWZjNHJqTmNRZkhLeFNDdVJ1Qkk1QW9kREREa0dkVjhDblZWRW1FTWFpbjRTYTBBWFRJMFJCTnBPWUFMVnExYVY5dnhKaVV6SEtXQ2lzNm1wMEJ1a3gwNjlHcjc0c25WTmJzb0Nta1ZNb3A1K3BER2FXejJzTERyMmlOdCtvWk8wYjM2WVNJaldjeHZubE4weDBWaGxZb1c0VVJqWFhLeUxHM1kzcW9MZEVhekhBRUVvVnVNbDNERGVFUlZwRy9qZVRFUjBDVVpFVTFtb3RxRm9pd0pGS1VhREZpYWNTbEJKckVqU1FLSi9DU0ZTbVNLazE2MVFsa2RLZXlTWFl6c2RYS2k2STlpa05KTXRDVUtsT3VRcVVxMVZIVDF6cTYrbHpmUU5BSWE1SnBSb3ZXYUVQN1p4dU5tVGpNTEJZdXEzWFVUZ05kUkRkNlVxOUEzM2NieEF6eERET04wSXhhTlZheGQvL3MvYWp4QUU2Sm5QYkZHWmt1QzN1YU5VOEVzRFNMWlZteE9qMVBkOEhReFhTcGVka1hhd2JXNndabzgrNkRyaXVRRkZ3NUlwdm5KaDYvWmdGSks5MzBhRU0yWEozeUpCMERIb3BoYnFnMHVya3ZNSWdZbHRiR1JQY2RrZDdWai9OVjRwYkFiYSsvRTRCakNnOXA1WmVyaS9wZE0wQ0cvN3RYWk54VkUrNmJZYXZRbjZ1bVd3eTNGWGY2Z2crWG5BdEhEZ2prUE5pVWJxcG93dkRVdmJSbGNqNVhaSFl6VjhKaTRObDF2anNPaHJNYXhPSHhlRHdlanovVklISlhuNkgwd2hnNnFGT0VVcVFvMFdMRTBvaExDVEtKMHlRNUxVOXlSUXBTcFVsZlpuQVNCa1dwbENsWG9WS1Y2cWliVEJ0TW1RS1lZV0hWVVVmdEdJdDYybGRuTUgzRXBpVTBxVlFxSGJDTHhPVStFNC8xWExmQkVoektoZ1VjZ1VTaGZ4d21EejlHNUVSQUFITDdGSFJLUXlybnd1eFFmNXJoSEJFQlJJb1NMVVlzelViYzRydE1kcGwyNkZnZDU1dGdRRzh4L2ZBWjJKekl2R2JtbHJjWEFtM3dYS2E3RWxmUGNTMnR4ZnErZWdmaUhHb0RNeHlCUktIdnkzU0ozMFE2VjgrNm1kZlpzYUZWM2VPVUtzV015bmtoeUwxdTRWSTBMMVNKTEl4WHlZenBMeU5xaVd6MFhUcGthVHluMVpEdGk5MG1ZMDJ2MHRVcXR6U0NsK3FySzdySXV2MXY5UkQwc2d4cUdiSm9HR2ZFa2xFMVl6cjI4TzFsMktld1g5TjRBRGFOMWI3TDBJYVJUWE91eTl5aXU4MnBPd0hRQkMrcGxkQ3JPbUswTWcvcjF2UllFbTNEQkVjZ1VlZ21VeDAzRzQrd2l0UWdPZkVSRUNWWlVZM200dG1FSXZ3VUtVcTBHTEUwNGxJQ1R1STB5VHF0RmNsRUNsS2xTYTg2V0VaM0pKdnNGV2k3SXhLSk9Cd09oOFBoY0VUclJOM3REcGxNSnBOaFJJYWlxQWlHWVJnbWNia3N5NE5vei9yb2ZRTDdLY2FsTkQwRk9XM1JHWnVPQlIyeG1WTXhrVWdrRGwwWDd1Sml1dFM4Yk5HYUUrdi9aUU93cWU4NkdJSWVFc0N1b3ZXWWZDcTJ0dnBNT0JON016TzY4R1dYTGh0bWdXMmZmZUhwMU11N3F3WDVORHdUa3BDU2NlZkJreGR2ZmluQVJJUklVYUxGaUtVUmx4SUFpWkUwclZxNjVJb1VTWlVtdmVxVU1ycHMvejFaV0VaNVlCZ0dBQUFBQUFDQTBXWnNkMUNwK0h3K24yL2NPbGs0ckRwU2wxSzNIcjM2amcxQ1R0d3pPY051Q1hZTmdpRFlob3RIMW9nT0xSU3V4OG5pbDRyMmlZYXYwbm9yelh2WjJuWmpaTGZhS0QrVlJnSC9mZ05tcGtGYmhnaUdpVWFjR2ZYTm1LNDlGUHZZOXR2YmNUbTc1KzNmZGFtVzZZU3R3a2R6YUNIWmN2cTBDUzRpVTVabU54TFhHQmUvclFvSGpNUDEvUUVHVk1aRkpnYkRESi81VDNleUJjdkdQU3FUaW1KY0MrWVFVanFHdjJuQzdxM25CMERPcXYyRzNWdmxJaEtJVzhNUlNCUzZ5WlRpTkdGWCtSR0NESHM4UFlJZFRqZEFVQXl2UWt3U0NwcGhOZDIwbXB1TWpRWEtCUWtXSWpRcG1KUlVLWXhLWGNMRGM2a0lmSGFUS2FPTVNjNE1zVlJZUTBlelU2RkxwVnVQM3RMSHV3cHJZZnRoaXdpSEZBV2tTcG1XUnQrNm5KNlUxOEN1eUo4NWoyeDBiMGQ3TjlwaWJxMGxiNE5uVStwTzd0RVVMaWhkVU8yaHJwdGdZWENzeEJGQTNsUTJubUZjM0ZiUmpHQmdDZDZCVUg3cW5YQmJhY2pzSzk5UmZJRE1BRmtCc29PK25aZzhQMEJCZ01JQXRRRWFuOVdRRXM5TUFITkc4NTU0d2ErQXJucXZUVGpwR1M3ZS9pbFBtakFSUG1uc3hXa2RBQVJ5T0w5eUFoeW14N1NHS2xrN0doNDh2RHZOZmRnK0lUQlpwRDlnemdNSUJ3d0JrNXRta0VYSXFxTU1hRVRnL0hVZTI2b0xUVHA0dzRnOVVrWjViZ2J4RUh0Q3lUTFlQSG1KVXEzdUpwcXp2U05jdW1iQmRYWVFza3UxQzkyTjhqVHZERkVVMHJ2ODE3Z21xc0dqUGZSdU5qdmVyVERtSENFNHErcWJ6T2p1SUl2UmFEaHpaMS9WSlVwaGhpT1FLSFF3c1o1VGpndUFCOEN1S3IrWUlNS2V3SW9NTzV4eDllNEFFQlREU1lwbTJPVHk4b0lveVlvYWplalVRYjhKd0QvWEI1aVNzd1VpZ2hBc1JHaFMwQ2d6SnpYTUNUVTFYRVpIYVRBWFRDUVNpY1hiWTRWQ29SZ0xFeHN0bGRDdHhaMWFVbmx1dEdodE9RdDE4L1JVZFZwa0RCdmJTNG5Fb05Gb05CcU5GaWRYbjBXSkxKQ3JVOENVYnFxTWhaR3BtK0Y4RWJCSVVhTEZpS1VSbHhLRUVpVlZMVk55UmdwU3BVbXZ1Z0FaaEFHbHlwU3JVS2xLdGJwbUE2d3JRTGNldmZxYUU3RFRXczZZSG0wRTJkY2xpV1dzV0Uzbm1TN0c1YjZ1R1ZuUG5OdXl5V2JId3hEanBXazZNK2oyMGVZTUxRLzAzVk1tS200Wm5nbEpTTW00OCtESml6ZS9LcmRDa1ZNbEtzeUltbWVaZjBHUXl3SkJFRnhDL3JnZ0NJSWdDSUl6OTBiREV3TVRqOGZqQVVBeGRTNlZzRGNzMWc4d2ZZQ1hyTmQ5OFNIOGdhams1dnVVUHFnNFhEUDlKbTdvR1d2R1h4U2RFTExmcnNFU0VzbVdYVGNNM2NMdEhGU0diU0hCQWpjQ2lVSVhKcUhuTWxPTFJCTGFzblVLMlN1eDF6cW5NQi9aTUdPeC96UHU4b2hEQURBQU9BQUNBQW1BQWtBRFlIZ2xDa0N1TFZBaVNJS0ZDUDBraFdOS1BGVXdiZHlMK3NEQnllZ2thSjJXRU10V3JFNi80dnBXN0c2ZTRtRHcwQmZ4WmhGdDlHdmZoUEVBbXlkNGNNdFVxc1BsNGF5N0d1YWs1dDBONTJPT3dKYUJnU05Ic2syTmg3cUVXWllWcThlK2tzeGpqM0VLU1hnOExOaWxRcUZRekUxZnY1dHZwUVFGdEZJbXlMdGl2VGVXa1FDazVaUmUyUWlKMlpyTFlEVjg2TUJZV1g1eEFQdW5rMXludFoyeDZhYk5yaVhBc2hXcmNma1U2M3kvai9tK2duek44STNZdHh6ZkNlT2lBUGk3WWgxd0JCS0Z6czcyV3JsaWZXYjNuK3NPbWtTaXpYSFRYcG12QW5PZ2VhKzdTOEYxRUhQOG5VNEluRlk0UTVtV3AzQkFMbGVzYTdCejRGdU9iRTRFWFJuaXlrOGh0Q09pazh2bGNzV1lJS3I0L2NITTNYWEljY3lPRHNCWEg5UjNOSUJqVXNkMWZpZGowaWluSDVyaVpmVU9EVGlGUXVsemVheDcrakhaVnl4ZjM4VTN4TGRyK1U3dTQzSDU5S2VnSzk1SnZ3dnlxbjNJZ3hMeVVHMlk0UWdrQ3YxQlREK0l2Q01QTWcwbFZZUkJuU0lRa2FKRWl4RkxJeTRsQ0NUMmhtMHNFQWdFSlREcnFiNGdKMkpZb3pTVUtWZWhVcFhxYk5yWitaaGVqYis1ckhyR3pjY0xRaEpTTXU0OGVQTGl6YS9LelFuTUNFS3dFS0ZKWVlHeU55SzFsdEpVL0o2V21GeFVxTHNJblhTczM0czRBSm5UTlA5SlY4MVpXMDhid294d2pNb0dnKzFnUFB4d0FNZVprQkVFK1ZzdXBzeG85Y1dTNWl2bmFTVXBGSlExVEVidGV5S2pNQUxsU1FoNlJLM2dDQ1FLM2VRVTRqYkVDN3VxL0F5Q0RIdUNCUVRzY01iVnV3TVVCQlREUTl5UUZNMnd5Um55RVN4S3NxSkdVM1JpRURQWEw5RFo1RjRJcEF1U1lDRkNrOElHWlZNRkNkT2tMdUUxSUtWRmxHZ3hZbW5FTmVOQkNWU0prbkpFaitTTUZFbVZKcjNxbURLSXpHbGtTYmJkOUhMazFmeCszZStWQ3BtS29oZ2x5VUJWcWt5NUNwV3FWS2NhVUczVWxmcG9rTWJheE5Bc0xWcTFhVTlHSWxPZnZKbE1wcGpKWkRKYlJqdGFOV2svcnpXb01JSWFOV2VzYXV0MDN5TU8yUHhJSTZNQkU5MXFmb0R5eENTd2dDT1FLSFNUNlFWdURoNWhGWGxwdHJnTWp5QktzcUlhTDE3R2Nka0E1OEE4Z0NZLzMyUExid2tuQ1FCQU5tdEN3Nk5vQnJWSXF6YnRPVXNXVTQwNWxDd1oxdER4NXAxbzdURWRKQmdTR0w3NzdCRWpvOTRhbzlvanRLOWJ2NS9oQU04UmE0NlNqZ21kZUx6TkRNaGlVSG51N1FtRERCWitJVUZpVGNKb0hjbElrU3BOK21aR2NUY0g1SWNCcGNxVVIwV29WS1U2NnFaM3VzZWdGM21uK2JGbHJpcTlCbW1uVjdQYjdHMFJ0Q2FzT3dLUVpFZ2g0ODZESnkvZS9KNkpyejJydnoxMThQazhQcC9QNXkvOU5QSmlyOWdKd3lsS3JVeTVDcFdxVkVmZFZGTnRocldnVlp2MlpJU1llcmVCb0pkSEtlYWVnMEo3VUJlcVI4U08xYW4zcEZBTUtMd0l0VlNKKytGbW5pSEVzRkVRVytwZWtvTTVIcWY1MGx4QkxMdjl6Q01BWlRQUTE3bjlYNWtIRlg3YzZRMkp2YitLU0lzU0xVWXNqYmhtdkpFRVd4TEhKRFhNU0s1SWtWUnAwcXVPSUtPTHpHbGtTYmJkOUhMa3lWZWdNQlc1VUt3a0dXd3BWYVpjaFVwVnFxT21qOXA1cWxOVDMvLzF4c2lBUkNLUlNBQkFCUURBZ0VBZ0VGNGtjSFBBNHkvZjJtN1lHbzVBb3RDVlNTSWFUZVZHRkFBbHgxUklaUnZHYzVqMEpJZW9jeHp6cEt0Y2F5Y3hJMWhTeVYrNjEvR0N3dXpBTWZRTXc2TFRLZDhvc0ZBY3JOVkRQSWVGczZMSEZ4bE55dGllRGpiOEdPUVFiaFNJdGowMmdJZzhPVmJVZmdGL0d0a2FDc01NUnlCUjZENTVtY1BqTGJZa0k4SjB3SndYZi9NMW5vOWRqVFZkV2hwaUQ0TWprQ2owR1lZNmtZMU41UTRFS2dVaFdJalFwTkNqYktvU0NOT2lYb1piVkY5L3pzTGRHWUdnVmJNendKd3o4K21xVTJzalkxQnJjamwzZkcvc2Z6NnE3b2cyWTM0dmZwZFVoZS9DWjJISDh5QUEveFE4RDNteUFJRE5BVnNDQUpiWm54aTJjSDVzMmNSSndWYU9tMldXc3RQR1p4WVpBMUtJUjdtdDNBekFtdGtGVUk1aWxEY0FtMlF3b2pGWEI2cjNJc0J5VnE1bCt0TmFiY3RyRitRckFRK2xraVVXemlIR0tXYzV1MUZVZE1LTWhueGl4bkFVNGxrYUFuby9uaHVTY0VuSHJRNlFFZG9SMkZJUTRHRm5ZSGtmQmdKVHdObDQyclFIN2RWNklCS3g0R0RJUFRTUEF0WUhjdWEvVXplUDFlcFpKTmF0T0FTcUZFUWtZQ1dTaktvbWN2SjRRL2xZbVI2YldpRVdXVklGQU5hSVRPVncyWlZIenI1TXpDLzBpL0Qxa3dFV1ZEL3pUOWI2REc2MzJpSzRVcUM3VFAyVU5ibmtFWTg2NFhZaUtsVytCUzNGVUt4SERRWW8rOEI5eXoxdzRoMDdCYTRRa2t6TDBMR0pHSXJyWitjTlh1QjNQdzZjZWRwQU1VNkd6UlFxRFc3bnRCK2NXaXNGeW8zV0NtUWpMME1tWG9CcU5XUkZJWkk3Z0RYaHRTY3Q4THBCZmtIc1JRNlhwVmZJUnZaQlU4cDg1RjRoSDhFS254bUVZbXUrSzZjWVkzZ1FlMSsvVHpKQUlSRjFjS3ZObW4yUTBNOGFPV3NYalQ5anZCQ3I1MjF4cXRXVkk2YXBMcGVoS2N4WnVXOUJXTEozUUdxZjlKVGl1dnZVMHdkZ2h3LzhJQlJJWDFWdU5ReXNCcVN0Vk5QWFpEdEwrTml2Y3dpMVBnRC81TzBveW0ySis3OG9uMHJ4Z0E5T0NsYTBnTjBKRVBIWS9ZUDRuaElhd2JFSjJIbFVuUjlEYnpmV01QQXZ4a3J0QTE0eDZqckFtWVVjZ1JmUmxabm5ZeHMyeStvd0xEd2tTMlZrM2RmakFBVVZJSmV3RDA2dHorQXV3NnBJcXhUbDRkbWpvR2xZUVhETWIzMUZKUHMrNjdqOVJOZ3NIWWd3d09jWXR1Zks2VmhDTE11YzRORlRidjlwRVFqRk5qTnIwTFdBSkIzWEdIbTR4N25CUmZYbUhRaFEwYnpxbU90VlRueWVTNngxSGJDL2Fyai9YZS83cU1PbDdNMGVVbkRQZ2h5aXNGOHFJb0ZiaGZFZ3F5RDRvM28ySzVSTHJNSllDYUM1Z3JId3VwRE5zVm9YRkkzKzlXWVBhMWx3dk9wOTFmdmFuR2hvbUppcDk3dXBOSG1PSCt5YjEraExJcGRkcjIxUmlBMTNKaWI3OWs2cFRCM2RGQW83MTRwUTF5UlpiVFhNeWRBN21RRTlSRkdoTC9PeHJIamRSbm8wWGRmOXlFZTBuWEZmT2VyelkrRE8zZmlCV0JGTUFtcUZiT2Vna0FxWFRWbzVmUzY2eU9JVmxMQ1NkY3A2OHVlNHlKZWxoVVB0VTZWbTJqbk5BUHF3V2FObm52MXc3SlA2eFFaYXdTSVBsT0ZNRVVHdXpQQ0JiMmRKVXlnWTZROXdyNkpVakpyNk5aY2JFWXdML2N4WmZlYzgyTE9zTUs0OXhYNjI4UDhOcTNUREVjSUFQWnd3aEx3NThoUEtrNUpTb0RCSmdpVExFU3RQQTUwbTdTcVltTlN4NkZOdjBpU2pVMDR6bVRiTllzNENxemZKZmxtQy9ZWkpnTkJ3REFhQmk4ZUJIVDVIQWs0SVFrS3VSRVIyY2VIQ2pTdFhZaEplTU42OEVmejR3Zmp6SnhFZ2dKU2NuRXlnVUF3bEpYZGgxSnlFQytjaGdnWXBUaHhLdkhoMkVpUnlsaVNKcDJUcEtEbzZXMlRJc0ZXbVRGNnk1RUR5NUVNS0ZQQldxQkJma1JJQ0JsVm8xYXBSYXRTeVU2Zk9WdlhxK1dqUXdGZVRKbjZhdGVNd01mRm4wY0ZlcDA0QnVuVFpvbHMzcEVjUHZsNjlrRDU5K0NaTjJ1YVVVNFJPTzQxcjJqU3VPZk4yV3JCQTZFMHlaTWtNNGJ3NWh3c1duQzVhY3Joa3hlbXlOWnNyTnR5dTJ2SzRac2R0elo3SE9zd0dFd3Voa1JpTTdUZzRFQzRlbkIxbmlKQVFib3VkRUJHUkhWeUlJUkxlY0Q1OElYNzg0UHo1UXdJRTJFbE9UcVFSWEhBUTE2VTRoQzdnZ0NFQWcwWUFCd29LRHJ1RWw2K0dxYkZOUExXR0F4REEyKzJtVVNOT2lCZzd0MFNrUzMxb3hlTWtqckZuMklJakp6ak1TVWhPdWtrb0VKU2lqeUdneDJJYS85WmMwM2IrbjgrZ3FrZ1MyOHM3NTZjalVwM3p3VHIrUlBlNlNlcmxVZFQ1YWV1Z2UvQUhnQno5RjRpbndFOHErSDRPdklXMzlGYmVXcnkvQnFNdnYvS1N1cGk5SGtyVmVmRzVaNElhdmZqeVd5K3A0c1ZYeWhlVlQ1bnhJcS96YnZiam9xWFgxWmUwaGowQVlGTVFaczJCa0FnRklHRnd4SFlOQjlYZGFtd3IzczcvQ0lmZ1laaWZoVDlnYTEweXd0emRaWS9oY25lVFlhL2tpejhLQ0JvcmhGWjRnMWxYQkdHV0tBNzUyRWxJZDlhTEs0U0ZOZFYzMjliRzdSSUlLVTRHRXZoanI4TFUxd2pBMjNzOUJtZ2JHalE5N29VS3dxaU92eVBaRVJJQ0tJekE2V1RwV1F3VjZvSmxlM1ZUbGo1VHlQS09qbTROYnZPZy9UOUdWZnhOQTloRmhRRFN3L2ZSanBDRjJXOE9BNjhpQ3lUK2YySC9ERzhDNmUrbTF4L0lJODc5TkEzNXJ3QUE2OFFXQVlnbFRUQXNZQUNFcWVOKzZteTN3WW9BNEYrak5vV2NOUzhPaWFqUVFQN3lNRmF3SWpRUmdTVU1MSTBRN24xUkFYNlJGOFlLSUlKVW9aM3lnQytRMlFvc0NrdE81bHVNSEdVYUUzZUxlOFZqMGhxcFdBcElFYWxPYXBHNnJkVys3cVJBRmNDZVlpa0E0QlBUc0xoL3dVV2ZPYng5UjZVOHFmQTRTS241ZzdZQ1hBU1FDUUJZTjNrQS8vMU4xZi9rNlMvMFkvMW9Ccjc0R1h4eCsyTmYwdSsvN2d2cUMvTHp6MEVmOU9SQnFqbjFQZ0xvWlE4YisxWjBjOGdOL2wvMkRXZk5tZktwWDEwMzd6Mkx4bjNsdEJYVGJFNVo4SVB2ZkcvR0pvU0R5NDZBTXhZMkRnRWhFVEVKR1NVTVRvV2dwa2N4TURKNzI0UjMvZUgxOFNDQ1M0SWt5WFF5Wk1xU3IwQ2hJc1VNYXRTcDE2QkpNeU1UTTR0T2Ivbk5XMzd5dnYvNTJPYys4WVhmL1RzdTNMTE1lVDliZFh0MmNOZXZYdkx5YVBqRkRVK05nUmNOdU9CMXIzbkRMQklHUnlOUUdEeE95am1vVklPTGg2K1VHQXdBa29QOHdKT09oaGJKQk5VdmhwVU5MWnFEVTZKMEtWS2x5Yk9iWGc2dEVoVktsYWxTN2x1VjJyVm8xY2FxVmdkdm5hTVFDY3VXWEhIVjVjaTRXVVFtVW1VME1NQW10Z1FzQlN6dEYzUmJCQmV3RklBdzVsNDFpamNiQm1RcDZ5M0FFTnQ4MmRBa3dqeG56N1A3OFZVVURCL1ZtdUFkK3g1NmNQKyt2WHZHUmtlR2gxWXNYN1oweWVqSThPS2JGeTFjTURRNE1IL2UzRG16Ky90NmU3cTdPanZhMjNLdExkbE1PcFZzYm1yY2dXQTA3UGNlZmVUaGg3cWRkcXZadVArdWRHMjFsc1RBUCtmejZkcjFtb3ArMExKMVRFZ2dTNkN1dkM1b3lBaXViMDEzWVBNTGJZelRiT0RBVFg1WUVpWXljcFU1SVZjUGZKRGxKK29PdWRzdkxPVXlDSEEwZXBTaFJkNGR1SDRLZ0VwTUVPV1pHYjVFRmNNalZKa0JVQlVCUlprQTJaS05Sc0FOMSsxMHhLOHRpNUx2dTlDUU9jWnd4b2J0VkpZU05ZU0ZJMy9lendpTEpkUUVsVkFWcWJGZlZqN0dGWUtVd2lMMk05Y1NkZ05tOExIY3NBSWx2M3QrcFR6aWtnalM4TGhucFJBNHlEcGJPN0JjZWtoTElSdHlyc28zaE9GYmlVMjlGZ21LWTVKODJ4UmQ4cXlsc0ZXa0VIL2JhbjhsbkR2M1p5NWU0RFZHaVozT1FSREJENDY0WG5XVG1vRkRSNTJ1WEpremxmeUNSTjBqRlVMZXFaVkxOUUVYbVZFbERvdFpOT2ZpelE0UkxiaTBLM1ZmUWl1T0tPRVNNRlR2MTNUdmk2Q1Z5VTdXeE1tS1czVWJ0RG1uSTE3eVgzSGNud2pnb2ZvVTRtYVNVbExuSVBvZDB3OHl2NjZvV0lNZFNpR1BVdjJ0Z21BNEVkYTEwRnJudFFtL2VsdGhmd3VoQUhXS3MrSnMvM3pxdFR4U2ZjWmRXdk1Ca0VrbzJPV2Q1aDhWeGtsMXdRMHRXcWZYeGpuYlhUd0R3NW9tV1o1cWR2SElEYktZeHlnOTcwcEp2ekF6OG4zNU9MUmtmU2JkRFRwWmdOTTlsUUptMmlVMy9IMG5neHZIMjlkQWVZMlFEUXZ4WjR6U2hwUWJoQWpCbXdWYkk3RjdJdko3a2lOMUZKR1dOdUFuMHpNRXlSbDBoMk4xN0pDS2lnQ1BLZnk5bkhOT3R6d25JendtZ3V2WlovVE1CY1FsSEFmdzVFeEhEc1hHdUZ1U2VvM3lDSm5aUmIzVzdVZjNhTlo3M0VZSzdrT1NsVkpzd1lZeUpDdGNHTTFHcmo5OGNuSGhrRm11N1BkT3duMVd6UjBoeFRuUlU4YUJKbXhxSDl3UUlJYy9mVVdCSGo4cXJJU2piTzJoUFc3bFJJYW9ESnBLcDZXclZIYjBvbDVMbktMeUZqMlRIZ215OTZBcFo2L2xxMWlOUFk4dndES3o1Z3MrRS9DWklDUHdjYWNxY25SaXIxUnpQc25DZ1FWYWc1VU1yS0dKNnk0K3lQWVpJN3lqS1RKS1NVTjRvVVQ3R1RkaXhPMERrZmNUVWRta2FCenFQYmk1U2lLZkphSkRES1kxWmwxMnUxUkFPa3dTcDd6SG42UWthaXBOTHI2RTBwSGdtSVEwTzN4Qm5XU3lZMjBjdUgyeldZeE5RM3cybUZ3UDh4azVjS2VEc2RVYWtLbExITkpHOHM1eHp5aE50dEVCaVJETlFzY0NsMnYyWkFuMUNpdHhNRWpMTXdHOXAxZER0ZHFpd0pUTkNmTFNxUlMwQXRWdXFRUElzUUNSWkltOHg2NklOd3BUQ01KQzJ2WUhyTk1XTXc1VHhKNFZpNEhnUlJva2lnRktQVHBuNDVKWWd4cWgwYm9xZ3VIUDZJZ2tRVEtWUHA5Qm1DdHlTT0pkNmJ5RTBsUTFkbmt0bGNpR1VtcFFPOXRCbjZBQlJCdlliaC9vWGFwbkNDNzVHR0l4bDhXK1paT2pvSFVodTdOQzI1VUpvTGRvdkMxVm9BaTJGQVhwK000TjFEeUF6VVVqZVN2NXdHN1piZjlFY1Q2ak1ic0oxQnBZL0p0b2w3TjBqcFFoZ0xoY1lmWWVVWjJCWHFHVUg4NVE4UlJ0ejJmUWRuem5sbEIxOGRDRE0zQk0wUlZtTFhHUEZWUmpFZFFoTFA5RGlKdnBOem9VQXZlZzlaQUxmSWpUVmI0ZXQ1dlBNOUFVVkMxMUpZQk15RXBKb0xhd0hWczNBMENORDBjZzIveG5YSk4rSUpXNEFLZjFHU1VhM1ZCY3VNclhsVVlUdWdab096UGZXS1J1YzhxWU1tbE9NS3dsN3gwa0t0c3dsZjJaUnNyajFoZzJ5enFCYVBsQWFNbGtSQzd6RzRXYUhjOEFCcmx5MG1EVmdQaEtnNjBLSUdzbG4xRkZRR29CSFkxVEd2OUtnSnAzVm9vM09CSXVBNDg1b3JoMGMwTkcyTFg2eVNBOXNHY0JhbjJRaG9iZ25pSjZGZXR1S1NIWExwNWVjTjFGaTFvM01nTW1LZHcwSXJGaGo4MUtpVUxEdlJKREk1S1NVbEtBRklLeFZ6Q3VnVXhYcEdnWmZBZ1BFRTkwTmV6S3pweHZIYlBUVnEyZE9hcTg0MkVOOXV5VHpLMkZZdCtXZFFaRGU0VWJlQjE4c3d2bFFVQ2lGcmJMK3lDN1dxbHpaT1ViMlZwWVFadTFtUFVrVDJYeTcyNk5qMGdwVW1vRVdJZXIvRkprZ2tnYkFBTDREaC8wbG81SkRCTUM3a2cwRHR6UG9nRjBLN0xXTFhSMDZQRU4wb29ISDFsdWVKa1FEUElXVTZNWk82TGEyc2d1bkY1MDhDMmxZR1pQbGN4MlhKMXR1WEZicmU1MUNJVVdTaGI0Zm9qNkxnR2NtbGcrVUNpU2l4Y0g5cko2VFRKZEFDMjRBcEdic2E1aGEvTklyK2g5SWVhWElDaVp1OEM0Skx6V1Q3Z0tZVDc2MzkrQUFqTGxwcGRYQUxibXQvemNkWjhuZkkvc3dYTmJaZHc5bVIxU083SWZnWktDLzRNQ3dwQ3c1c0QxajQwd0l1YmR0cEJOY3NWSG11VVB2aGFrc3hNOUY4Qkxrc1EzNk0vQk9KQVF0OFRCQlNVYlNvandLMzJFWWJlUXJ6dVlHYTluV0ZoT0tUbFFCdzlDRmo5alRHNEozTmdEdmV1QWcxVU9oYjRLQXA5cEhnYU1KS2IwU2xvTDdEb2RIc0xqcHRYaGt2T2Fhb2UwQ0hqRFU2dGtLQ0I0MmdaSnpSRGNQbzJ4TmVKclpEeGNYZVYzVjI4SndrMEhKaFUwOEx0R0RRTXFLT1AzVEdvQUk2WW5iRWtSd0RSazNPNGtpNjFJbnFUODEyeEtiaWlvQk1HRTVETHBNS3JpT3BvdkZMdGJJZTl4cU1xL1NUWXN5MFpRRjV5YVphdnAvYStIN3ViRG5wU3NpQndKRmFnQk1pN3dWV2M3VUhxbG13M2ZjTHZ2bW5WUlNGWVJRRW5neG5IdnV4OFExQ1Y3QUlBdUFJRGRBSDFBK0x3ZytnSGdQNEM5UUxnQkFOYWV2T1R3b3FNSFVvTmdtVm1FeURJN0xyeExIRFhYRWs3WkFNSTl6T2JHeUNHRGJrNkc1VWduVHBQYzMralpRTWpZR1V5dU5YZytNL1RpYkkyY0J4Z0p3a2IwYmdpNGZaZjVBQkNXVDdCRFNNOFllUy9KOG5vNElzeFFZazUxd1pLbTQ0Q2p3NnBUZlFqWGpVTHY5ZWpQT1ZLSjNQaFMyaUlmdWxBSzZzTUx1elk1T24vYkh6aFpETjJHYVBoNDY2WkxVVVpFbVdKM1hSRys4QSt2NVlPT2xGSU1SRkI0K0xqV3l1U3VTT2VwM3FyUFdyTkJvUnZHRFdiZ3FjdTk3MTVrWHoyQkVNRlVaWGZodkw5VUQvT3VtNjR3ejgxSWtzU1h2WnVJT3FjWVJDcHQrRFVpZ3N1RTNRN2J2Zzh6OXFFemY4bWZlSEZuNTVzSlJVdUxZeFEzZk1IWnVPN3ZoazhNMDkxUXhMQloxU2UyaVFOVjBkakV1Q0ZUYm55amVhcU5XdERVT2JxSmVKc0J1bklRN1BLV3F2SFBQRnhFWFRNS1JqZkFEYytNOWI3NVdpdEtlTjJUVHdQTWIwUEE5cTJGVVVHU2FMaHNsakRBVUFNTUxkS1lRSFZqY3dwZ1lLb3dhVVFDMTZycmh4QkRSVS9hWmdiRW9VcytBMTBUeGtzbmtTTGpaYXl5UmErUGhLS05qQlQ4TG9TcXJxQkdpcUdTUmlGNVRCQzdoNTNDaW9lRjRXRk1WMXpLNWpEUG9iakhnUDVhOXNCREQxaU84NFdjTDk0Q281RWRjSWtIbE5mSnRmbW1BRXQrQXAxSmF0dzd2NUx4YlNVM21lS0NXczEzY29kUVVZbEpWdis4dG11ckFHb0UxbnBNaFpleFRMb1BMMGtnN1VleTJNTEV1dk0weTQ1S2x3R2xXeEFobkhmTmpaYVdOY002ckpiTWltaTArc3p2OUJCcU91dGZQVkVqSGpJYk5kNXBhYU5tYkgzRkxKdmkxdGxPeE5zb3RkaU93VDluZVBPNytlU0dGRlR6MFRhZDlZZG1BL3BKOHFGYTVnc2Zhb2lzdzYxQW50OE92aisyNDJXSzNSVnIrY3lPQ0dUWFRaN1pxM3lISlFMUitxZnVTYmdQbDRVb1VubkZNcWx1SDlBUDhSaU8xa2Fsc3hlZUhYbmt1TkllOSs2MDZ6aWgxczhPSzg2ZWtNcjZxc0JzOHJ1VXE2eEZIMGdVZlZzT1lhbjNXU3RBUmY3RjUwdjZ3ZHVLYjBZdjJic3AydkN3U3FGYU1BcnJJTHZZVjBxeC9UczZjRDkvUjB2bWI3cStVajRRSkRIZkx3cWExTDJZU2FLZTZvY1dYVDZFaCtWd3VhUnlIc3BMdGlVTWVmcEpSVVlJdmRPcDVZRisvTWhnQkIycGZ3R2prS2NjZit3U0krQlZ6T1hMR2cxY3hXNERWZjlIT2FhSGlTczAvUjNkZlNpOGhkRnhZaDdNd2xGL2p5aHdEYWdGL0NlMnowaHd3RjRYNUpiRHNGSnVBd00wTnF0anNHTURDVjZHSzE5aGpVQURiUk43eUdkaE9oOHV3SEwzMEd6cXlsbWN2N2FJZzdRb2x6UG5Md3JiamNOdjM2WEthRlp6NGk4UFZIaGVRM29RcGFxTEpESTNTRGtFWExITUNKVFphUEt5ZlFUVVdyODZxSGNXNlpUZTVvTTd2YXRORFhrRmxja1VQNkdTVVFoVldpdEYyVzcxOWZQT1pIZTdnOFdyN0ZtMjR5OGhIa1RtUmdWN3ZqUFJYUHE0ZEQ4MGEwYVpnNDNmQlY1dFd2dkk2QUJZT2dmR3V0aThpL2txeFF1TEVHb0cxbzVmVG1tNm5zV1pyZGx1RTJicjBMZ2tkU2g3RjFNUzVwRDBEWkR3OFVpdFdLRm11c3gySDIxeEQvYm03eHhzOE9IMWxpWUpTVnc0WXVqd2h4UzMwQncyNUI3YUNiR3RnSFpVTEltNnVlYXR4ZXlwclZrcStsRm5CbVJWQWQyb1VUNUNWNlBMa1hYNGthS2JkZ1RtRmhqZXNvL0tqQzhJbWxnYkx5ckdLMzhTN0pqcXQxRTVhQ01pWG93YStVUGd5M2JKNTZkb0hJZ3hQUGdid0pyZFd0bE9HSjdNQ04rMDVpNlY3VW1qaWpoU21JL2VvZFhqSTJXeFFIamFtZlZPU1B5bldEdDU4Ym95OHl2TE40cTkzSmhwTDVwV0JuUkc2bGFhMXBFVjVtL3VJQXBSTjdSWG5UaklybW5BMnNIa1pwR2NHNnlzNlplV1h6NmQ4blRUZnRaaFFPYmFCWG1MVk1WcVprZ05ERmdEaTZYbFRZbTljVTJXWWpwelNTRkFTQnRxcXNTb2xpVVBLVWZiQUQxK3BpYldaNXlhWXppL2ZtV3NIUlhpY2ovOU5wMFp6ZmladEozMTExZWRnZkF0WDhXK21tdjI1MWRmRXdGQXRxRzh0ejJ5RHpMaUR0dmFiZXJXK0pxTmJoQ3h0U2dyTTZxNHNsVEpTNDF4YUNwQkdocHBEcnJpUVFXVjdOZ2RqNEY2aFNVam1vTFNCc3RaVGR2ZGZoQVluckJqVWl6bStnd1Z1OHpxaHNXYjN4L0YrNVhFVURVVFFYUUN4d2RIeHk1dmk2WUhuczI4VWlKaDBuN3hJV0MzNWwyc0dWUXFTTEhmMUNON2dDUUtrZUdnUjhhVFdxVy9CbGY1S0NBUWdUbXVMQ3hNelJqakxJc1I0UWczVmpvNithdlh0bXNDSm9aTU9rY2J6RjFLT0hHRDdaR3lrbGNXTXhzZWlEc1NtVXdDU1JieE0rT01WWWd4S2d3dlI1Wk5NQ1I0MU9RdUhzenVRMSthNyt1ZjNnTWVQM0dSR1hITTBHT2RiR2hmZjd6SWFSRUIrT3h2VGgwOThCczNmL0RBWTNwb0R5clFVdTZURUh5VWg1ZHRjaWMrT0NoUUZqZUYrUkR6NHR2cWREOUZ0T0NpQTJrZklIdmVrMlBMUmZ0QU84ZHhZdTRlMExpejdXQnl5K3dEeFg2Wkd1clphYnJ1ekd6V29PK21DK1pGa25Hc0tUdUx6TkhDSkM1SDhnVXpGczUzV3JCVk1nSzNJbE9CRkwvQkVRV205alRtY1I4VUVrMExKL1FFTURmZ1BIVFpDcXFXRi9vS2VldjRVUjRxR1ZVUzV6eEIwTmZ5clFkblQ4d2ZkRWFMdHBjajNKaDRGYS9HVDZZYzVadUFpMkRqdXdjK0liK25PSTd3Nk1hcU8rQ3ZLYTBqemFlZjREcVFvZVVJQWtka201dTVuUE83Wm13VHpBQTVWVWZ4b3VTMkdGQUlNQWhBMVMrZllZVklwUGNYaUZMRkNqbWdlT0V3QVVkRElIdzYwUGdwSk5EMk9GUkZid0lNRWF4aHBLV1c3Mlg3bG13OE9ZV09GdzJkWnNuMmROdjhKcCtmRkk0WmhtVDl3WmNaYTlnU3VBQlRydThodzVrMG1lQ2o3U3NlOWRLZ2dKUFJSZ1VzZVVWSGFrK3h4OE1RMUZHRGhNcWF1bG1uUExuQXREWUFDUzlPVzZKZXhlMUYrNHc5dkprejVVeCtxZ1c4NWpreHd6dzV3V0FXNW1IWnlmek9SYk5NekNPYzVqZFZwaFpzVXBzZStwR2dScHhtWjQrWjg5aTlwTzN4eGhnNVJoKy80YlVDakVwaDYwT1AxL0dXWnJXb3JpN2FaV3VRaStMWkp3WXAwYk5NZWZaaHd4NDk5aW42RkpjQUs0RG1BR1RJaUZXSnhEVHp3bEhmemZ6YXZRWWQ0eVlNeURTWVBDTE5tSkN6dUZGYnBvNUV1aWlRWkptUWxySXprRXhCR21LcDJMVGppa2lQc0tmUHZGMkpkRDR2MUUvczJlMjZzeGdDcnVDQjZNeVpMYnNJUDJUZDl1bk03cnNzdFAySDZGQmdVbE9CNjBDL3pZNHEzUXkwcHJuY0FTN0paTTgxMnlZZEpaTDQ0Z0lETnU0NjJZUmFUenk1SEtxN0xqeGpGT2NieGFYWnBCMHJiWmJVUFRPYi83cXhrZlRQT2daL2RLS1JnR3o3YmZJc29RMER4djN6OTgzTE40WW92b2FibU5aMm5qT0tIblo5c1JkVEdqSnF4SU9ZTWlkbkp3UlpEcGtUMjJwcGtkSVVOWEZTQmhYS0hHdUJoK2hsMytqNWJTcjJYTU83U0IzVkthWDJCanJPTW0xNHErUnNPR0JIc3dZRk5yK2tZTHpxQU0wM25qQjk5R2pxamthRHhNZk9hTnJXNkU5Vk1sQmlsVFZ4Y1dSaUFKZXYvUCtUNGE0TmJZcUVza2RzUzRhNHJWS0xLUUpOQkpRRmJTcmZqdEJtTW9FVUtTdmpmQWxBbFlUalMwUmgxTkhVdE1XSFc0Rm4zMFlVMEk0STlBUFU5cnd0dU4rYmVubFNjdGlFVFJZbTRnNGo3dDRBSkpHb2Nlb2tPUmdRTTh6MGZIOU5MTGFTUVJFOFdjQzRGZmthc0NiWmhYNms0c1NiR1hOTkxkSXZtUUhPQkdvR1Y0dGdOSzBzOTN4ZkF2cmk3ZW1NQWhhVWdjR0l5eWZmZVhTcGJIZzkvZDhtOTV1OC90K1R1Ny90KzdhNFR4L3NvL2U1TlB3enNwdktSck5UajF6cC9rL2Ivelgyb0UvLy8yU1dlK05xdmdtUmRVMGFLandSSXYxNnBFNUZVZW56YjNvNzVBamdIRU9rSUY5K0dYSTlmRU5ZS0g5Y1JrUHlxUTFHaFBYUytMTEdubVgyZUc1OWs1VFp1eXJGWE05RG1UN0tsNExtbVJ6WVlMaTVSMmZEa3NLSWJmQzVya3hnQURiNlIydVRmZW8xL0phSlA0WjJ0UWJ2NzVpYnVHOXZRYStvTStYYXVpS2FIWnM5MXJJeVFXK3JCbUlvZ3Y0WUV6aDMxOWZkdDZlZ3I4NjVkV1Y1NjRySitKU0srRzdpVStJZWJqL2VMeGZJOWhGWE92RXhjVmROQzk1U3h4MHA5SS9hVXoyYVZZeFh2YXE1YTlqaW03Mm1TY2JzQXoyTGEwT09icjB2Q1E5WUhkaEFwTGxYYS9XTXVvdytjLytxVnYwRHlxTXBYTEptZkVMWDhFYURidTF4ditFV3RKQnZvb1QwYStrVzJPbG00MlkzQWtSbURRWVg2UHJqWld2OTJwSmtVQk5pWDZnbzJkTGhlOFlqRVFPMXd5cWN2L1AyajJ1aTVIMlB5eXRPZDNKT0FNN3UxRTIyL0ZxbmZVUnJkdmIwNGk3b1g0TkRyeWZKTFJvdURJN2FtcnZWcTl3KzdhcDAxNGpGRnhxeE4vZXFWN3I4MmFtYWM3MTI1VUN3dVVkWDYraWxBaWxrdnNXdUdBaFZxbzJPK1ZPSytkV0NmUWNaN1NxQytPcTkvcnJNUElNenVNU2E3S0cyRmpOZ2lMY2szLytvNVZ0RE4xRnhEalJwc2l4TTNqWnd5d1NrQ3NJcnhCR2xtZXhLT3V5WFNxd1gxSXdXaktuVWFOU3J4djdtenFOdVRsVVVWWnEwM2NsYSt3L0xkQk82Vzg1c1VidElLSVlWS0w2SDdIaFdVck9yNENGcVpQRHhtKy9XaDVSUEhxWDRMUk55SWdqUEYwZVVsRElUdEhPZXFyYnVuL1ZUaWZVS3dXaWhtSXBBbzE0Ti9wL2dTcXpnN2x1ajByN1dLS042T0NQeGw0WExCMUJid0tFR3ZZd3F5elViTzduTnF2ckhtN3RvZnFCTTBkTG5kcXV2ZEVMQjhtQjVuMXpQV09qYTVKQXFTRVFyWGRDSDNQRGV3bjJoK3dvSmEvV1N3c1loSzlNaldzbDA2N290M0FGRHNsWG44N2RTaGlSbnZ2bWE2Qk92OG5RT21IVVFUUnd2WFc5L0Q2clFjUzAyWGozM0RiSS92eitmWElidVNwVnZWcXZIMVhmTnZYdXVtaGczVm15K3JRaHlqVjl5WG5SYTJiMmxMZGEvakg4YmJhVXQ3TjZhNFBpbFRaYzNtYmxqSmJveXpvdmNvdTh1ei91UElORHo4ODRST2o2d1cyMTB0eU8wb3JGVW9QWFhOUWJrOVpKWEdWa3JvRzZaTXk5WFVQTGEwejZyU2dxbGdYS2xiVkJicTQwcWNYOTMvdDBQY1p2c2tWSmx0TTFPeWJodktreXRLT1lNL3VWMHNWZ1RVZUlCRldGZzJ1VU8wRGZ6RjliV0JYdGpEanZTSUhsVjI4MmtuQmxML2IvOU5qcTR3TStNQmd0bkVSZUQ1bHpXWURTMkdxMHYvMENibTZSYTEzd0g1QS9ya3R5ZkxlM1kyczhxOXJ4Yi9LdXJHSWptSEhwUS9zYTlGKzNHMWpSbE5tWW9RdzVYMDhYMmZ2clRQbUtTWkR4ZGpNdlVwTEpIcERrZEJiY3h3UlQ2QnhHQ0JzUXgxS3J0U1Rtc2VBQ1pCeDJ3a1YzamZMVFkwSUo2Z2tpN0tlUWNYdWdMK3ViUWo1WFBidERvekJtem9jdFJhK3pOMmt5UXV3WWJLWDNuY29PMFdsa1FzSS9PQ1hyY2ZiN1BHSEpmeWY0VFB2OE9WaTJ0c0p5Yll6Y2JNcmdyQk9YR0pQdS9PaG1CRUpVZmpnbmlHQzZKN3dnQ3VHQzh4eVZSRk5rVW5kNUFWcUgzTEhBeTgxd2swdVJ5SldHZGI4ajcySUMwbGM3TmIyc2dmTTI2ZVVPMllmYncrMW1LU21YMEpsUFdaR3cxVVliNkRHa3laU2xEZXNOdDFiVVhsMFo1bzZFZmU1MEFXbXhzUWQxQnBNTVlkQTR2OVB1RFF3SFhpSDk2Q2I1c01lZlNCb01oWjhTYU0vcS85QzZiTEM1TkdZMHBLZ2haTy8zMnFUMFZVQVlxSFdER3FWYUpoOFRWSDk3TjBSbmlrYXBkeWwybkJKSVpWQnFqdzFDcmpnTGE2V0F6Wm5CM2VZRWhvc3JMNUFZSVoyYTJjeHJuYkwvV1JpVVJmZGkwNE14czI2VHNHMU9sWXYvUEg0Y0FoVG9nSittYXVFSWxpZTBJQXJKTEpORG1iSE1vRTBxci82aUxuQ1NqMTRkOE5INXFhVlc5UVJBdElvdTB5N05rdHV4RVhPTFVHYzZrMjJEOS9UYzJzL2pmblJBaEpJU2hqQXUrNlcyMTREMVFNZkVCZThuZ0krUWtlY09tTkgvNytTbWRNUEdkYmlFMHlhdGd2N052R3I4S0JiQ3lJQWwwMmxvY2RFZTYydXZjYTd1czJkY3V5Zks1eUNMMXN2SmVkNjJ6THJ3UzhuUjduZGloMlJXTkJ2aFN0N29wVzRzM0tHdjlKNEk0bjhmU0tDUHVYcU5BZWFOUlVDUXZObWFWVEJCdU54amhObmN3aXhvTUdkUnpybTh6R3VEMnpTbnpaMFlidWpKV2t5bHJNL1RZZDlZZEVveW1qTjNZYmIzclZyYndYQnpwb1BXSnZCM1VlYzg3MTUrNXNiWENLWk5wa0NLNDJEZmtjNDJFd3E3UlJYNmZQbzI1b3VmNWlkR1dldDg4cDJ0a1dxS3doRmdKV0hNdFJyTTVaNXkxLzY3VDNDUlI2MXN4WDR6VXU2TXBGRGRucklidVdnZlZ6YW5mMkZ0Sktjc24vNnJNclNuS2FFemEwK2MrSENwbStyei9lY2dUUk4rLy9iVldZd3AzaGFHYzNtOWRNanRRaHhOKzJDR0lvU3BKZkhzUXdnWGp2YVJsUDN0SENBSzArZE84MnBoUUdqZVljOVo5dU80dW5hdzBVK3V3cE5TT3FMUk5iZFgwTkR1c21BOE9WVDBua0RWOUpWQUY0QUZSbk04dE5qVGh0U0ZaVG05QTJsMkJOS2EzNXFuMkV5ZElUMkowTG83N29UblFremFkLzJzeEVVU0sveHBBcmJydWxCMWdKajM1ZlZHVzIwTVdhVlk5V3VSbTNWSXhyZWJmNHRwKzVaS094NXNoUFZObkpJRXVQOGNXOFlzY1NoM3BhcEpTOXJSODhQRE9MTEVHT2pjWEViKzVhLytsWnNsL2hHOU9ndnVidkNkL2NYMmRUaFZLS0EyVjZncjVKeHdJOFp4QUNGb3A5V3V1YXZOdDJsUXphYUxxRkdxdkdoVFNna3VSOG9iK3NCWU9lL1Zkb3U5RkZNOTU2cmhROE1PWWVGTkFHWGlHZkdaVU9icE1tT1ZMdmlUNS9tTTRDYmZUclM0OGp0aTlmL25KQ2RjeDZTMnpOUG5KL0x4SHROanJxYXRmS0RLUzVNMXZaMUN2ZmY3NjUyU0lWcCtlUWJvQXZxQU1HVjZQcjUzNGRQYU5wczlVM2ljOVR4S1Z0bis4U0FNekh0bFl2dnpocnkzdkY3NVhZSG5vcTJYTEh2N0svRzdCZTRVMWc0Zi9XVlcvUmlIeEM3MC96NkNPZnY3YTV6cmgvcHovSkwxSzh3YXJhT2J0MWxmNjVBOUNjMStaSTMrVTd3R21WWVRKb2g2U2tqMWcxNWNjMlM1NWQ4L0x3dUxZUE9BZUVJQUlCTTRnTDdvV3EyTC95VGNPclBMZTVZTFU4TTdPN3RzK2ZCc21Wdko5Y05WVUVYbnE2Q25TZ0RzckVQV1JSc0RaTUpzbisrYUZXNktZaHJHVTUyb1M1UmdhNXZtVkZRdVZDOHNoZVlWWkZqQVoxRnZqOVFuSEg5TFhlS3krOWljVEV5eTZpNVd6ZWh1aCsrcTcxeHg3RmxIdFhNU0VKNlpoaGVTUTVENXovVVVWaTVTTFhJbGR1T3kreEVmTUM1RDBzUXpwcmlYVTlSYW4vVE9KcWtFdFdIZTJ6S055ZWlKKzVvN2kwVlZZMjZ6cFh3Q2x4Y2ZTWkQ5Qzc1MS9wY3lZTXZDMTR6TEpWZXhVUmgvWDRuVnFVcFVJWExkcnNBdXBWdFZ0ZnV3WnI5Z0xNUElpUk1zVmpxOWdhSnpHclZKQ1NjZW13WWpmUHhBQm5sVHFRRlFkakk1SE5vZTFDNU8wMVpLaWdZV0JMWUJkTE5Zay9aZGV4Um9WNFNCMmZMdzFjMFhDSXZtenEwcXJ5RktCU2ppVGtmb1ladlRvN3dzckFNSFpmelJBNTlZakJaVzZQMTArdnNwZWorRWVCWnJaOHVlZDA4NTZ5c0M1QkRmdysxY3VFb3BvcmFaVWw5WVZHbkxzalJCWkV4UE5KZ0tCMXNabUhsNlRhQXpZOEcxZUdXRk5HNktDYytQMUlvMHRxOUxIS1lYVWZady9mOFdSTk43M0JmaDVra2dlcWY4WldTMll2a3MzRWo3cGZxaTcxbTVvSk1nR0k2Vk4xT0Y2TW8yL3I0bHVibEFUUnQ2cEJrQk45NW50WFl6SDJUL1B6TVYrWWVpNTg1eHVUVDFZUy84MlY3ZW5OVlpyYTNWUzZPR0JnQyt5c0lWK1kzZUtYcjNBRS9BTzBzNzVsOVlZMHBTTEdxbFVCa2lvRFIveFZEcXQ1Ny9BM2FrKzFUZHVMdUc5YVdmU0F4cVhiNDdSbGpXcThZQ2JEQW0zWUJBR082K0hPUXA1bUhNZHBqRVl1MU40RDZOWEJQZ0l0b2xoQStvbWhjbW5SZEJSTndzZ211VW1mKzh5RkkySUVIbFliRzFaTVF6QjBMRGtOd0hrRTdUVzRmenUzQzB4aHpWM2IybDYxWkFuNkJtU0tlRmFLU01JR0tsa2VBOXg2NHE5K1hOZHZuNW9tWTJXcnd6MTlkY3kvdG1NZnc2MDNPS1Vyd2oxenE1VjkzQWs4NnlaUnFQRmxyUlljcUk1cFBHOGp6M1RiRFRWV0MydHYrOHFGcXNJSTdHaFp5cysrVDFMWFRQM3k0L3p5TGNhYlQ3TjdkQUUzZFR0aWJqTW96eWtWb0tlQUdZMnhxRzZzMktJZTdSSmFnM2tUT29NWmNEOGJuVkVKcVlGNFZySGE2TDdpVEpwa2JNWGMwVHFPR3pLblZHYURVMkkxb1dwelV3ZjVBTlZZTStnbXlFMDdnUk1NaDBXSXNaeVVVbWhodW5YV1pNbTVmKy9IYnZzMDhtREtyT3JjYTVhc0c1aURqN2FKYlk0MFhuT3NFWmNVcXdiRHYvbGZyRGJVZFdweVhxSGF0Y3hiWFRUVGdiZUo3OGVYRjVuM3p5TFpQRnZyT0RnbmhPQnAvdkhUYVdMV2hINlRkbjgzZlI3c3RFeS9YNXY3c3JRSzFYWHZGMk5hWVBSTnFScURCaTQwZi9uNnhRbCtMNVE3WVorNDNwa0VOOVR6QUNZbW9HdWNUeFNpT2N0WW9BM0poQlp5S1hWd2p1Y3ZCbzVHSFJxMWNpS09ML3N1Z1Q0Q0dobStndzdLOEVLeHp2U3ZQNHhCOVlKbVdVN0p5OCtJcFU2REVBMS82NFJQYzBJTlQ2M1N5TVpHd1B2MzhlUHM2NEM3RmNMYXh1MHFjNnE2dDBRNlZFQ2NFTEpjS1ZjMmd1Q0lJMnFsWjkrdS9uWjF3Y2xHQ05va3dESHhyNGVScVNIdlh6dTFPeWZwSC8vejc5aEJzeXpUMjk5YlZVNGRobDFpWWNSNUVtdkJOTkVsTkkxQWxvcTF6RVVKbEY2Uk5MTjB3RDg4TGZ2N3AwK0NiNE9iSmVxMlhOV3cxdTlvQW9OSXAvbUpYd3BLL3ptaDkzNVBnUVBaUmFOUk5KTlBwVWZ2T2ZlT05sZGhGQW8yZ3FBVzhWQ1FkbFdGMjczRFpENmFaTnlWbTZPN0ZsZkRhcnlpcnZFOG1mUTN5NUxwSGZSSEFDNGVKZEU4dXZNclRYYUdxWkRKT3JVODJzYUZ3akVYZkRwanpnbFU0Zy9kUU00SjZhMDRqei8xVUxjaitUZi9ORlRpTldYeXV2OUhVQXczQXZlQlNNSC9DRHV5elNIUjlNTGZRK0JXOHNFUXRFMkVGZ21GQXFKcGRYZmgvU3k4M1dPZXllNUxGaUhnS0VwSjNobC83V0JiNEYxcmw1T1d3WElQaktaQngxeG9YQzE4OXdkdngvaXp1RmRYanFDUEkxUFZGOENPSzk2ajRkTWRqa0JkS3JpdFNIVTduZ0ozZC8zZjd6L0oxazhFelQzenhTTkJhcGgrYjZ5MVRXMHJGcU1Lb2RjKzFTMUZIMHlMcURDQXZEcHZMZy9iVUVxdGZGZnA2cHhwdGxMK0tDRFRzQjExeDJKbDRvNEwxeXZLY205VXVNVllNY3Y2WlFja3U5V091dU9za3VyYis0Y1BwVlBudC8xNFpzYlNDZE9CZVVZNWdPM0FVZTYwU0x2dytCU3NhcGF5cmVFSjBwc1pmLzNXaE9mRkh6bzdvTit6enp2LzNsOGpNVnByc3k4d0VsV1pTcU82SVJNZHVYa1Q0OUlwV29LcUM2K3EwR3ZjUWsxSHNhbGtUd3hkc043NnZoSHJJdkFQMllSWFpMaU5MOHJIc1hmTEpsUzNNV3d0ekhjdkRjZzMrZm1ibTlUOXY1YkgzOWMzRGorekxqbDJmRVMxNlZ1dkx1b29KRFgwOFBqOUN6bWNXL3U1ZkI2dTR0Y2h4dXhSdlJ6eXhWdDhiSm9WYk91bVJVdFl4cnh4bkRNdzJFenZOeDM1M1RueU85NmREM3NXLzhsKzV6V2JKM3NLVjM4MlhMeXl3M0tXM1JmNFBvdlBrMjNNcVJjb3Z0eXZYeW41aU5jKzlHbmk4REN5V3NDOWlrakhOVGVTek1mZkZOZjdjd2NDdkVlZk5aTGU4Z2xobUZHNFBpYjRqdE5DUkVLdWJuekpWNDF1bW1ELzhGTVd6K0Z2dEdCZDNDMHB2SmQwNGN6UlRXYSs1aHhFWmRBOHhmRmM1cmpJdXhkQSt4NHo3TGN5OC8yQ0E2cERnR0g4RVBsbnByRHFzT3p2SWNiOFVaRlhxNW1OMXdkNVNMam40K2JQeHN2Y2FxSU5VUlJvL3pXMlRhOXBYamR2OWYzRmt1TldLem96d3FncXJ4U1VYYW1lUWFYcFN5TVlXVzZsN0JZb1pMRm5lSDdyMHdobTZvQ0ttN01pR0ZHYWZINmYyN3NLV2FYcGVVbDNSajFBb1dWTkdPR0Z3eFlkMGxKUUxJbi9ycXh0VE9tU3NKZDNCNTFoQm16cFJvUDJWYklWaFI5bXJSTFY5aFgzTnRvVFRGakVUV25CK25DazdsT1UydnM5U0xYWmVJaWtUcWZhSmFldndKRnhibERxdmQzdnI5RGRXNy8rNkpGQVByL3YwN3IyUTZqUWZUUWU2THpXUFBCamcrdWQvNFFoSHdkTnZVZmRLUHN0bXhadGlxcnk3S3lnYThZeHlzb2JWOUdxdHRqNEN0Z3RiT0d2aXZycU03b002eU9zbHQ1WlpoL2tzcXFod2ZBQnJVOUpFdHIzS2JGZlJGUDRjMlNtNFA1N2ZTdXFXVlI3Ti9YUlM1dWNHbnByeDVUdlFDZS84VW9SZVRxSE1qTEQ4WXIvdWFHNUhzbnV4NlJBWTkyZWJ4UGVMM1R6UktKV2U3M0R2czlIWThDd080T3Izdlk2Mm1ucGVicGJzOGRtczhVc1hFWW5vQ2NjZ1ZFajhQUVY1Q3JCS3JVTElJS2x1NDZlMmNCeUlPVzZ5WmJDclpoL1Q5MVE3NjZRZFRxY0pXYk9pbzZYMEorMUY5ZDNJR29PM1FrQjFVaElyTE50SlQxL2RmLzZ0ZDlQL245MDYrWEZja3BCd1BtT29UTzZIVStYR2NJakh3T3lMUkRIcVduRUMwdyt1ZkoxSktnZ3BFd2NqVVJqdUVhZmRiMHlmOUxJbG9VWE1DRHdMOFZMbkZZQzhUVTdxVlYraXJScnkveFdTK05MZDAxUnlCQ1VUR3Y5MmI1WFYxSlpQNS9OVHZnSFVkMVI3ZkQyNFdmRGlDcE0yM20xM054Sm1LeDl1a3JybGhGN3pDNlpydDgrMXJmdGUyNFZlNGk5SGEwYU5VSit4WExCL1dmWmZFcnlwY3RYN0hpSHo5bDVOTG1CSjdBVEhFOGZ2SXdkanZHZDMrQ1lBamFUa2tsMy96M3dCVmo4dk1tenZEQVZiYXNBZ0tHMU9mQWpJbUoyV0VQWnNGTTJJWmI1TGRzU0wrN0JNejV3cnZONlJxeFNGVEQvK1c3QWlEL1R2T0lXSnI5azh0NTVYaCsxYVgyVTZxbmx4TXpHMmFRY0x2ekdYYWZ0MG9PY0ZXdkVWMlpxUXJCdERVTzRETEt2RDhmSmlVdlArZnRoQWZraWdHUWlsTkFqdEJVWXFYNC82ZUZrcyt1QzBYSHpxZEtXMDd5TmtKVHpudTIrL1JHNkRIZ2VsYWJtM3o5YlVkNVh6cTQydGpaWTlwU1h4a3NkLzdtbHN0bUh2RytPNlhVZTJJQk16bFN6OFZ4VDhVRmtoMmVReUorM3RmL0cySkNsZUhzYnpQOTBCYlJuQ2F1OUFtdWM2WlBHQ1JYcEhQRGxOYzlTbVl6MVBLUW4xeWViaDJodk1wUXRmYkl3cnBxTkxURzFObGwyaHh2c0czcWFWOUxiYXc1K2RiR2F2UXBOMXNIT3l1MndKTGY1VksrVU9ucEhUMm9veHY0cU1vZFZXZ0pIN0JOZ1pIZU92dGZkL3N0S0lOcmNuVlN6TnhDdXBQUWtBUDM0eXNUblFObXQ3VmJaYSszVU5wWWdqNVpIakJza0tLMFFRdHR6eGRYWHB4OGRjT0RydEp2QjNZdFgzOUc2ZjFUWlkvYlZmWkUvb2lKN3NVRExsdDl0L0taRGMxNXIvZGtldU1iNHVDdVY0OVpFUXlrbjJSWU10bTlSUU4vbDNXR0FCWGtGTDZJb0hmOG42ZHZBa2hHTHloN2JlZ3ZoYzRVU0NvSWNQbmVxYWVYWHZnZ3dBZWR3dDJ3STY0NURYbksxMjFIaFlCeWpWSzA2Tks0LzQ4YUx2b1hVeTJ0NFNwZS9rVjJ6L1RZV3FxajNiQTJHakdzN1dqYm83SFlPbXJXb0NVU1BiTjJ1Q1ZSc1crRVNEWHJSdngrY2lTWkd0WDRmYjVSS3FVZDlubnRWQnArOUl4MFluRUpiVVVhS1dWTkhjWFVLOHkxblpSN2lvOURMUHlmUFN5WFRDVngxNzRucWxsNDlva2IzYXdJTEtodVBhTFdQWFhOdXp1OTJ1SEVPYUo0K2VqNXZhK05xRjVEeG1RMEtIdHl4am5qMDZwNUI5YTk0ZjNhcDZvL01WVWF2ZjB6V1BKQTdoSjhLWWVjNWVXVEF2aE02a1ZKOHNVemlJRE12S1hVYjVCK0pKVzV0OUpSbWZRb1RoK3RabjE0b29wMXRMR3RlR1o3VTlPMG1jNWx5ZFdiQXpZWGJkeDJwK3BPL0M4elNRVkdqTy9CM3RsRDdPODgzRmsyTnFWV0hwcHBXcG5FazFuL21wWm9WNmFKZEpIbU83TzlRVkpTdjBodGE3Q1U0SnR5Y2JndC9tbERyZjRVWjhFUGdLVWcvQ2NJL2dHREpmV043RWtlK3dTYjlUdVhOMWttM0NCZUM3STVudDRDb0RBbG1pNFExRE44UVhkdkFWZzQyMDd4OWZmQklyaW8vcnMvSzF4YVY2UnM5eHM3WHprb1NDM2pReW1Cb0FuYzBmTUdwQmhocHJQZXR2eDlycmRYc3ptZTRRS2dzSjhZUHIwYWFidW5xZ0F4TVFUUUR2K05QY3d4ajJPeU02ZHUvM2ZubWovR3YxMWtQUUlCZk5CY0N3S1R3M1VnUzV3RnJBQWRSeFZ3UmdXOHFRSXVoMXRIS2xPa3I5cll5MThmYW93aVcyc2c2N1lHTDFqSlpNSlV3b2NxNFR1VnlCMi83UUtLN1hRYm9QR3dCcUxXUUQ3V1FMN1hRSDZ6WVEwSUkzN282KzJnYUFINzEyM2QzN2MvUERkY0swSUFoL3ViRVhLM0NXd0hwMkV5UE95Ykg5clltZjBCMlBzaEFQTXNTSFptY2V2NEZzZnV4ZjM5eGYyelYvLzdENHNYa2JnWmh0bDhxd1lPcUlFSDFHQ2YrOEVmTDlOcU01K0d6VmYybjIvK01FZTBtVWV0WmNCZS9TSG9ja1ljY0o3NEJyeDZkUmdBb0QwNEIwNzBxY2hvellMa1dvYjY1YTV2OG1lV0ptb21BR3B3bVBJZlFCZ1c1TzhXYWpBSHZvMWR2L3lpNDhiN2Jmd1RQWjNzeEFHdi9hZW9ZUUFndmw5S0V3RHM2UjY0MGZ2MXdiSHhTOUgrVDk4OXJTck5icTNuTkwxZkhsd0ErRVJET0lBZmgxemt3UlZIV2d1UFRtRWZXSy8vM1h0TjcwY2V6cVhiUkgvL3M2RDNiMytRc3p6c2xOSms3N2Q5R3hsc1RDSHB4ekk4dSsvVDc3ODRRdFc4c29IM1ErakpCSENSOGtyNFJ5QStmNnVETXo0TWNqWVA5N1NodjlIQ25wOEtmM2lHVWd2YmcvZER1TkR4U2FJQUtNVC8yMWNaOEtEOERMM3h1VGhGY1cyaTRwOVY3aFhMVzBCVkgxeUhsNHQ3UEwyL2xRdW91emhYNzRyd2h2MGFrYktucDg5N1BOTzdGSHpqb2l1V2xGTmVzK1Avc0JiUC8yS25IZHo4dW12clBaU3hGYkxpd1Z4eURVb3hwUmszbCsvOHpNZVBoNVIxR0FjQTdzclYrNC9wQW1KWDI1VnNpNGd2QXdxeFdEVGFFRkp1eURRMkVjbldYcWxLb3BLcHVhblJBRFRBaFpPMDdYWmJLamtibG5XcDdSM1lhQU5UUGI0cEdUZHp1VU9xZFkxV2llOG1EM2pvY1QwNlV5d1FBVWxBMjBZQm9LSmxYUkFKRE1sTmtNWjd5U290WkVRalFJL0VVY2xXbGRXT1hWUm1DbGVPZ3JZV1ZJMUJMN21iKzcyZTBkTnJzTDBDNGRaczNvRUtoYXh1TnNuQkViRnhNa1NFUisrWmpMWkhZaEpWVjNteG95VlJhVVQwcWpvdnJlZ2NWZFJzWGprbWFGRnRFZUpsamVRRlZRcG1VMDRRY2JDSGpBejFpVUlhd3ZsT1hrTzZMUjZrWGVvbVhNb2paUk5WM2ZxcXgzN0hoN2ZVZWdEVkMxK1pxRXdscTY2M3pjeTkzcTU3NCtxdUFyMHR0QlVxZitKdGpGaXBjMEJhK3lsNWE4Y203WXpOcktOQStJUUZPM3BmMWZyVmJlMURTcGhOV1J0b0hlSk5oZnNYUmVleHF2c0ZxU2ZVNzU2RTFpeXJzbkJaV3hwWWFHWW1JUkt2V1M3ejdPZy83aTRnZG00SkRhUmNtaGpySzFNNk4vUmFjbU9KaEdobDlZMDRIS3hralovY0d2S0NuQXJ0ZHV3SWRLMUlSaWhXdHN2b2I1SFlXVmFoQ0w1N2laWlM5U1VxK0RUSDg5MXVBSWp5bFZlbk5hMXRTaUdiSFNuMnpYbG5wOHVxZDducW1QbW5Dd1hteDIxWDh1UEh4emdmRUl0RXk1OXR0OSt1djdMWGRsUG95NWw2NzFsNE1BSjFvNVdvS0lGMkYrNlhaMVR0NjJMTjVndXhXV1dsRXRNa3hQZmR2TnhGcllnUjEyMVJsMnZhc29EOGVnNjNzRjR0UTdsUWVHeGJQZUxNQ1RpcXIxd0RMK3ZTSmZWMis2TVhmVzljRU1QSzBMLzg3a0VpOFkycmI5VkR0K1A5R3lMdjVjQldKMW91N2NLZEV4V2VyOGpQNHd2RFNzK3o2QnVQYUdLT0wvQ21saVNhNGJ5aUx1ZyttUkJSUmZCQU43R1NaMDJDNFhIOGVwZFdyL0NCOGdiVVpVcGVTczV4TlFESU9ZVkExRW1JZWlLWFdLWlJBMVZHVENUeG9tT29nT2pRRGNmWCt6MXJsT3loblV3dEVQWmlRRFNsU1EwWEhPVjVzaTllNlozcTY5Qm50QzIrNnZQb1B2Qys0KzBWYlR0NC8xLzh3WEl4RzQ2bUU0d24wSGkzL1hBUXBpTGdBRlpnMExqNUtIKzFYQnJIUW5waFRaMHYrM09qSXArNmIwZ3M2dW9TRTdxVndqdTN0ZWg5SjlCT1hjL0N3RHkvL2FVbUZxbEZMTW1INWxVMVI5aFJVdzRTYUkzMHFGSFdBbm1tU2xxbythdHVHNFhzc1MxNXpmMVNzeWw1YlozYjRwRlg4N2F5QWNkbWNaK3pvZWh6em9YRWRhUVNaa29vTHZtVjRMbXp1eDZ2RXdXN1JWQ0V0V3QzZEFVSzNmRmlaMWFkaTZWT1FYY2g2bXpHenoyaHpqZk1LUXFUamlqMnUyYXBqaVRQcmFSR0o3N2FOalRwY2Q2Z1BKQldBUDlYdGFwY1dQOXgrakw4amRQUHphL3dxaU51ZkRBdzYzYlhLa2xybXNBZStRVThKZnlmQTJ2cUYrUlAzWW4xM2VoaDUrdTVIcmJNUklZdzlQTHRvWDh3T1lHMWtYZUM0ZWE5WjAyTTNhTWF1bno5Y255YXZYcjdMRVFQSHErcXBoaUpIeTBKZ0pnQXlzem9tejNUbGxZQkNkYkl2Uk9jVWVMZ05aTHRMT3BGcHJYMDRXS09nVjVBbGl3OWV4MmJNMndmblkrbk52TVYvaXZ1L2hPenhGSFZibEpEV2FOSjZTUmx1Vkc5c1ZxMHhyVkVYVGZVS0J1TXE2Z1BRWGRVczFJeVZ0U3dKV3h2aGQraW5YUTlJQzVLaHhITE10NGZuSm9zdXRZTXRxWEFMQnZuUUZRQm1IT1dkbFZyK0RUUHhsSWdkMkdNcThsaFA0OFJEWE91RVFNWmk4OStZaWNTa3RnSklMbm1MaDRPaDBPMGVNcXpkbzlieW9md21PMzd1aFBySklkY0w3MnNFNXg4enFpb1ZZbWt4VkZGYTUvYmxhbzNBS2doL2tFT0FtUHV4NWJETk9RcTFiSUt3VW1KaGlZSEMzQ2NtWkx2a1dGVmtRNVplam5FOWNCL3NDSWk0bFUwa1k2ZXRSVU5hWHVvUUx5dEowTm95Mm9NQ2dyTGlKQ2RRUjNEQk9mK3l4VUNqdkxmUUZiRWVhL1RsNzJTdU5PdXBsVCtuQnRhV2dybHl6TmNST3hzYlgvVEZkSnkvMmd4UGEzb1UyR3BZYkNoTDJ2NUgyYXlJTldOUUwvem1LellxVUNzclYyYXNyZVhSTDcvY2w0YVQ2N1NNVEF4RWZKTHdoT2hOaFhPSnUvcDB3Ti92Q1ZNcUN6eE9qZk41ZUxSTE9DS0ljK01yMXhlNmZBd2JGc1c0TDRjMjdtK2F0b0FkQVRicGwvTjNSSmdiQjBuZk0yNkxmdUtrUFJzRFNFQTBWTVRqZERYWTdKNGY3OCtZRi9QNCtzaFYraGNsWlRHZnlQVG05MHVWS1BSY0JodXRLNUNLV1llOXBnYThjdUNxUmpoY01vNXhOaDRRY1k2SlIzYWs1WTQxbTVTUkI0V0ZGVXRzaXFBVWpVU01CWjY3UGNNSWRCTWEyaWNGSjdVN2oxV3NmMU9heUdjcXpFekMzaUFXVWE1Q2pXYWMzaXYwN0NTSlJJbUdGUGJpZDNPcjVXQ3dMZjIrNEoyTHNiVTJVRmhWU3dUckZxRHpJYzRDbUJOakpEV2xWYlRhRFFhNG1Za1hwZHNreUozZFRVZVQxeEd0bFRJSnVGTU9HbmhPbEhLa2hORUdoSno5QmwrakFsRE1Db0RRbXFaekJXeVVWU0lQSFZjNjJRRFpnOVBITndGWlRERWtJa2xtZ1FpWUxCUWtENEhZOVZvckt0YUFvU0xLQUZwTmNaVVNobXdJTzJzbFJXVE5qV21WbEI4ZjRSUnZ1RmV4d29xUTFaa0JhdmpodUppM2dvZHlmREpLd0x6QUZEdm9oYVdoRFJpSjkyalRvd245MzZ0dXdUaTNKbFlsTXR3T0N5dDE1dkYxYUJsQW1aQTgyb3RPZElHQ3gwV1FKb094Ni8zWTFuWm9mZm5sRGxvM2IvSDlyMFNJRExtd1lPdUpjOWRhZjJ0V1JLQUxhM0RWOXBCR0x0bWJ2YTNwQzRhSjYwUjZYcWJHYTdSKy9lVC9kNVFxbitvOG9kWTlXQytwdXlWMDFoaUNId2NvMjRVcFZGMUhSMFNtdjE0SWNxVXNOQmpwWXJhWG9wQkY1SmFoNmNxT2svSmFGWG1wOGxrMEphTWdoQ2tGQnZRRFB6ckZwUXVBT0lzYVkydjkyWXdwMTBnTkZFcGNyZGg3dGFlTUxSdFRNa3hHeVV4U1ZWZ0ZTbVhaYU5Qc3hzWStJWnA4SkdreHBPYkFGOU5kMGFXMFBQd25ycjhIakNiQkN0N3BjcmROeStIMjhtNlErcFhqNDgrVU1IS0MyRk5qMlEzZWYrM2FScUh1UkQrbWIvNVNlZnc5NE1hTUxDZkdWWlpDU2Y2UzQrSmUvUGhCK1NtSzFKZk9EVTZFMVpVcTVNdDZ2V2M5emFPVTlWbGtndnE1SXpoZVhxTGhZM3A5ZE1QNzVvLy9jWGhMR2VmSGV6YUs4OHpKVjFmOC81NWk2cjY5ZVFmWlhEMzFsNzRwT2JqZXJQWmZSazNjNGZ4L0xVeGVZZ3RiTTd1dy8xcW9lOXpiWW5wK1R5TUI3ZFcwOS9CZHl6S2JxdGVLSGtzR2x5UVVGYkt4ZDdOTmR4ZEVrWkFBQkE4aWxNUEd6dlJTZ0dCRUR6WU1Ybm5VRnpSVEhVU2dOWjdWVVQ2a2VBZTI1cHFmOVFYMWY4NHNXRGlJOVBIRWJVNFpXdExZTFBFVDZWMFFObTllbDlpMExROUhlOTRRdkNsdW5JRUdpUmNSbXBQbVpRcERRbm1GNmtoQUFQeHZ4OS8zMy8vOThMSC8xdFNOS0lmQU1CYSt3OFo1QUY4UEcvOXM2SW4rZTVzRGdHZ1lBQUFFTUMvSDhnanQ2dnIvMGE5VTc3WFgwQm9LQlZDZW83ZzNZU050NnZWUTZXZDRuL3dsZXE5UWxaTlptMUl6eS8yeXVjTC9Bb0lSeTREcGZ1TVEzMndKTXJQNkNMUFVEZmg2dWVCbGxyaFJmQWI4SU41VzVlU1ZjYXBPK3JhUGkreGJ6cmZYYXpvN09kOC83TFkxUTZnLzU2bDBwZVpCQXFvL3I0dDRGOHkzK2hpQ0dlNG5rQWowK1hXVWdrdS9teWNmVjJ2eEUwWkR2cTdUK2FVdGhPVXpWZjlPSkFWV0FtQXJ5NXZ3RDRuelNPZmVZMmRwVXR0MithQWZaNnFkME5sTHNjNCs0azRKV0Z2ZjlRVHF2dEdMZVJqWmhPQzl4WjUxY0wzc0lEOVE1VWpaZHV4MndXcWtLcHRGR1VJTFpsSEx3clpJVDdGVUpjaXBCRDhmS0U5dSs4LzRpMFg4dHZidk9ZRTNCQ1BqYkhsSGp0bUl0a3h2aXNpMm9FdWZKeTBJUVlOekQyNm84K0swYkZzbDR2WS91SUpRSFlvZU44K1dRUTZkd0pQUzFpSndrK3oyRlMycHllNnJjMHRiVDNCODFMZmgyUzdoaGZVbXJGeUxxMEVvbWlJYjUzK1lLVmU3NUxNZEF3RGtKc0NjLzBTQ3NUc3hVK1lXbS9LZXVmSytXamNzRjdaWkZ6YmhURWozcG41eXhVdEQ1VldEc3N1ZUN0aWMvQzJNZGZJNTd6STlyMlFIdU5TZkwyOEp5bHo1ZGs3RW5JUlAwdnRYd3h2TzJEck12YXJ4R0pFcTVYWExMK0xGOVJ4d2VsSWRoTngwYlRIdEpvUlBSS1VUaW55bFpJRTRFOVhuYVVUUURnb3hCMk1BcEFuU2tOSzVKN3U0U3ZCdG5PL3NtZS8zdDAwQXViSi9NSGZSK2s4WkVjRnlnTUFCTkNRZnJRMkZJd0R0VHNCK2g4Y2c4TUJDSXpEb1NZSEFKYkJ0d2JFM1hzYzY5Mi9OT0RVcmpZbEdrZzdGOUpBa1U3WElLQllXNE1EM3A3ZHo5SE1NcnNDQXJBcjcwSStmb2FjM1ZlUThMWDVSSUoyUmozTUd0VnJZQ1ZHMHRBNktOV3dvZHJlT3BWYS9ualhVNnlIV0p4WnV5Yko2dTZnVTRkNHcxN2F6RUpNb1Y4cjR3RCt5a3Jrb0VaOTFGWnE1SEx4OWlYb0F3OCtIREFJTTJwcVdYRHd6b2ZYUE53YnNnMmZSKzlrNnlLRmdMc0hKa1g4UXBmbWpWY2RZbUZTZ054ZXIyT1pZZ29FRFpLQjlYMW1zbVJLRW5scklEUU5RUGxBVURZdWxTZkdXTWN4ZUllZmVxTUk2dkJDMWF4dzQ5NXZJYmZ3QldId3hWVXZVSXlXanRUd1cxVGcrY1pURGIxOWphcnArZlZWRWdwNWZYN3M0MEs4TmpucXJqbjB0WTIxRmRNYjdZb3BpVTF4VldLVlB5YXh5S2NrNWxSTmlHMkViUnZnVWlrb1RnOTFTWFNnYkJKY2JTMHdhNlFCcGlScW1VMUlwYW9rS2k1V01aR05pcnBHU3VHVVJDWlFwVFdxaEsrS2VhcUlxd281OFFLYVA1WGgwZEZXa2FseGNGdlkvUFczUXJyNnc5ZGMxM2FsSm0yN3JpdnQybHdWaFY1RklscGtwYW9CRVZaNVlWYXhFRlhhQk5hL3RwamZ4ZFplenV0dytEYytJUC9KLzR5eTROemdyZ2JJd1gwRUdiVkNaYVd3bHJTU2NqNk8vRTArSUJGaDBkMGkrNDV2MzdkbU5aWEs5VFh3R3Y4TWZQYmV0Q3g2WEwrQXBDbERXL0hqTmlLKzd2cnExU3M0MjEyOGJiRy9NdmlNYzVHbzVKYzNLbWRkWjI4bzdFVTdWckNHQlBaNE50TDg5L3RsWEYwYklZbU5Jd0JCQVE9PSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlF1aWNrc2FuZDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBREkwQUJBQUFBQUFkWEFBQURIVEFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR2x3Ym5GWWNoekFHWUQ5VFZFRlVIQUNGQUJFSUNvR3FJSUdHVmd1RUtBQUJOZ0lrQTRoTUJDQUZoVUlISUF3SEcycGdSUWRpMkRnQWFQQVpGa1d3Y1FBRm0rOFRSZGttblVqMi95bEJtekdoZGVoYlpTRjBSN3VvN2hrWkNaR1Q2aG5wb2JaVFd4eTZjT0RoMEVnLzlvMEZSK0hBOHMzSjFiM3R3NTlYb3pnY0NOd2pabXR0d0NWeFg0aExvcEVrVGFSWHQwWklZMkl0NGpmOTJYc0N2TVJMVXdqMlFvMElraGN4S2tZcTVpUXRjZm5pbXJwWjBqcUh0R25nSmJsL3REcXppaXFkcXdBem9RMFRMeDg2TXpwWDV0STVUL3p2OTY5NzVyNEFvb3NSQkRKZkJibWtXZ3NJdG9xTmJHMlhKOUNrZW9iSGJmM3pCQm1vR0ExSTVhZ3hHTzFHVGFvTkVGVE02N0l1b245Rlh2emYraXVpd1FFSy9XL2FobWlieitWZEViVlZSNFlOK1BkL2pjekNUTzdMbndXZ0lxRmw1UUFsMjFZQjJwNUtKRmxMNkpmN1plQnpmdTRjRkozcStBT0M4UVY2NnpvYld3WWhXd0QvVjVzbXZFWG96RW1FVFd2dEtHMlRQRzNoV2NwUW05blFPdlI4SkZJVmdaQmQybWJGYytJMWZZWHZ3TlFrWml2cXlQMGU5Mzg2eTFiYTlkM3pCcUdMcXdBWDNYcHpiVEg2K3RiWHpHZ2tBMnVKZlF5ZWxmV2VKU3ZnQzBKRlVGMWF4TmRUVTJIVHBTajdsSmwvbmVtcTcrOXZTTWsvNkphZEdzc3FyZ0dlZXRuYU5WUEw0eitkN3F4L3NneG5GMlQ1ZWdIU1VXeVg3QUREVk1LeG94ejBCY2h1WHhpMkFzQ2F0VFB5dmdPT05UT2JyT1NjY0d1Q1FsemhFYktCL3ZydHoxaXJIOGhzWm5hNzluSW5oeTB5UkVMQ0p5TGdXZjg2LzNBZ1REQUFBTHBqTkVnM0pOTlFaTGhzWkxveXBGdzFwazRkY3RoaDVLaWp5QWtuRU1JQlFwK3VKL2lsa2hpcHVDUEhlZytHOWxwRm9RL2EreE9LYzZIRkF4QjJ6cnAzb3pBWGFpQnV4Vk04Vm1Da1dtVjd0dDgzVXFsNmk2eHd5YXN3Q3BWOStjelU1T2Zqck1ySC9CMWJkc1NaSzdtU1cvYS90Q212S29KRWloWWpWaUtQUHJ5bUtWRGtQLzlyTU1Nc2N5MncwRkxMckxQUkRudGRjeDB6S3pNL0U2aUFwQ2o2TC9rL2FLQTNBMjhPeVZ4YUM0T2xUNWFkdVBNUFdmWkIwdkJrUnRuY1lBR2RoU3VXYmxvMjUxclQ5ZUNPQ0tMZ2ZiWUdrcUJKNlZReWE0S1RHSUhVZzVmaHFSU1lFak1IUnhJSEkrbEozRlR6dE4wcFdoN0REREZQcHRvcHVONDRKL0FJa2cxU2VPcGNpOWhQMFJUUUVpV093enhOMDBaSFUrVXBTMUdGOEJZUEVEM0FCTEYxbnFMRmZBdFNJZHM0dFpRckVKQ3o5VEt0WjJUTVVWaGF4SE9MVzNpWVN0MHBvRWNZZ29TeDQ3VkRxY3loa2drRlBZSGR2TVN4OVY5K3Q3Nk5MWnFEQjJtOVlZaG10bXY0ejBsNzFhRFgvaGN6T3dRdXhxNmsxbFVDN25tbnRHL1AzU3p6S0dRL2Z3UlVEL2NPTVFpRElwVGdqeHZ2Yi9QYndFOXNsQTZpakxJVHhia0dscDJtWGhmVTFPNUEveUhlYWJSV0l6SWRXaldaMlcwOThTM05KbXhJVXhEMEpTMklRcWg3L0RMT1ZGVVk5SS8wNzFkcUpGeTRnTjlTTnlQc0Fxa2xKR1hQYWZlTSt4YkY1cUlZYy9JQUJ4bWxtNEJjQitvUE9SejE5Q00yb3VoMm9HdEVOTjJBSkZyQ1Z6TzROb0QzZXhXU0VLRzRzak1EdE9WSlNnWUxWM29TYUxZZWU2T3JFNTlKV3RJN1hxNkZNTkI2cEJhRHptU0c3eDlQL25jb0FRQzBZTzY1QVYvOFZxUjVwQzdPMEtKUlNUaVhNSGVhanp2cThmRDZURWF0ZFNlRWRDeUp5T1A3SFMwSE5zY2puNEVVSDdJVnY1QjlOY0h0NlErUXhyNU5nSmxFWXBCYmw3aVdGVGcyU3ZzdE5McGsxd2QwRU9CL0hLT1A1MW9Ba0tIYmswY3hnYVVTbUVkenZ2UkVYZlhuVUVxeHFHZ2R4LzFwVUJuNnlTVWJpTDhia0lsQ3BPQzJIRi9ZMHg1cXB4VEw2TG1sVVBiRk9KTWpZUURlWUpJY1lBaHRLVnFmckZLSW5nbWpPSTVleCtXYlNVQXJDR053aElEaWFLUFFWMTJlemFkQTA0Q0hHODVMWW1oMmdpTUVvaGd1RkNFN1d0MlJucFpPUDBMQW16akpOSk1sMUZxUTJ3ZmJVQkpiOCtnZGZpU0dTVzFnQzF0WjB6N1FWUWRkb1RTeXNqU2Viem9sZnlvaFN0Z2dCZWVMQ0hPRGZNeW8yQk9TOGExMmhpZHIzWVVoUkRWWFRBSXhFNnh3bXMwREVnMU1SRkhBR3RHWkpMRTZDdEJabDVKMkE3dWxUUDIwTWpRWHUrRkdjUmhqQ29WWHRvd1ppdGhlQWlnYmxuT1pJUmdEQ2dZS2VqakJRb1E2aFJoMkxJYXJHV0I3eitZaXRLQXVxRU1BbDlRRElnSGM5UnNZaVV6QU5nTXNaR0xMb1VheGFra1ZyZkRveksyMTBaYkswNFpwaTZDRUJWb3NNT0FBVVZnUWl3VjJITWpCRHVLVWdKT0lneVhoRU1uc1VDbFNhYVN4dzZUcmlPbU1SVjI0V1NHL0FyMW9iOExOOU1GYWZiRm9xTnJjY0NOeTRraWpxSXdCSmxOd0JDOG1XVmdsRyt0TVordjU1T01WNEVpRjJLQ0liVlNzbEZvWk5wbUZ3ODJYV3N3b0M1NktEK3FVcm9JekttbnU0R0FaZUpaL0VBQk00UVdRUnBGcWhvVllDUWZQZHBPaEhHYVd1eDRldUZpSG51NDAwcG8xTjdDWFZNbmZLalIyWWRGaXNjV3FGcXVCZE52QWE5ZHk4dEVUUCs3MTNMd2NEUHh2RGQwYXcrOW5leWZnZC9ZMzhDRUw1c0ppV0FuciszMy93WktjUW53S2pyWGlNQUJwRHVDb2FVaWtHSVNoQ0FFRnlFRVY1SmVsRmNIQnA5TG5lL2UvYTdiTUV3OEtwUDZaWlZtVlI4UzVvYkFtVlpKV09NNXkwajhCQUJRWVFUVW1ReWFaR0VUMXg5SERDVWtNRzJNMkhFT2h1WDVIalR1QnBTcEFLd2lYT21zcUJxREFYelFVSXdaK2ZPQkh2Z1poWWhQRzMvalZ5SXZKT0RkQklDMGpLNXNLbk43NnFVeHNJNVJqdEFwaXZ3Y21lQVFLOUZZS0dzRVN0Q1FRb2c3Nkc0WmVtcVRKVEFSVzFEOHlCVklRQlZNSWhhWnUvVkg3aFNPQlJGS1JtalFrU2JrZ1FIb2lyWXpoS0ZYWDdMSUpvTEM1YWFuaTB4Z1dMZ1JnVGdsa3JPYTFXTUp3blE5WHpsY2ZtQURzaFE0SDlFb2VueTVTb3JIcldnOXRzMHBJN3YvM3NFZXdBYXpydUMrR0NQQ2Z4cmtUOUNZQTlDOWJBNUJ4U0tLM2R4MEFZSS9leWlxbXRCdUFvMHRjTnVicjgwd2w0K200TVBqOW1LYVdQL0ZKMXRsdFBkVXpPNEcvaEw5V2pwVE5zbFZ1SXlmSTZYSlh1VmllRXdxdDRkYm1majhBQ0NKelNmZG40cE1vNDNLc2tYV3lzUVZwakQ5U3dtMEY5QVBBdndPQU54MnV2Y2IyQzl1QUM5K0VDODk0enpxZkdhUDdLT2Jocm5NN3oyMEJBWUJFUUg4bmdON0s5M1oxZXVWek5QcW43VFBISXZNY2RkVjFpNjJ6M245T21XV1QrWmFhYVlrTHpqbHZnV3VJaGlSUXNHYTBtb3RnWUdSaVpoRWxXcXc0ZGc1T2laSWtTNUZtamYrdDlRQUhva0o2Yi8zZ2JqTDExa2RmT2JRM2dCaDY2bXU5c3Y2M1R1ZFRvRkNSWW1WV3VXZTFTL2FiNjdEampqamh2cHNSY1V1TkxTN2I3SGJVdU91aTMvMFJEbGZjMEJBZXY2bTExVC8rOXErRkJBeEhoU2RTQ3hBdVJLZ3drVnJRMFFzaWE4MnFwYlphT2FPTkJDN3hGS2xpVE5OZUJyZU8ydW1nazY1NjZhNkhub1lZWUtCQlBFYWJZS3h4SmhudnJJbnk1Y2lWcDhSVXBXd21SMDJFalRiWWFaY2RDQTIvRUFCb0RRQnNQOUJ5UUw4Rk1QOEE4SjhETndjQUFEWjJGYnlFaE9NVUxDV3FvcGhJaUZGR1A2L0pTYmJubkpnVXhWMUR6TFFBaENKSXVFYkJvM2d5YVNVSlJTTmRFTEhTSHRJTTNISEdzU054ZmV3RW5jZnI2Y0NnTVdsN2phYUowMGV4UXRRUjlpaUc0Q1V3OGdTaUpubndTYjJyc0FpcFJFbG54Q1lNczZjU3lJK2UyUng2RXFiK0NyR0VIbU9vTkFPRnBKU3lObEFUaEhUTlBvQjlIUU9yeDRqNVhrek9nNFFPQ1dtY1BqUnhUQzNVOFlQb3VVVTdYN3pNdnJraVdvN2RKc1puUVFBRTdubjEvdDVmWjJSRVFtbzB3ZWl1dkprTGxnK3dST2tzNXhTOE04V0xsVG9FeEtSSnVONVpsdWM5VnhtR3AzWG9oU0ZaZzYwMmgwUHBmUWpnSEhMZFU5ZFlHWkdVakY4eEdQYWZwQ2lOQnE5VjZpMDZUMDRZWXA0b0sxNG9jM2VsckNpVkVZRGMvai95UVNuUE90YUpuekhCYWFoY0EwQ2ZBQ3E4Uzc1WnRBazBwVG5LTkF1dU1RV1FiRml2dG5QVXhuTUxRT3UyZkVtTmIxWnE1NUlNYzVRWnRtcDhWeWxSK0ZCWW95bFhwWDdWQkRBbWRtSXRIVjJGUnd4cTNmNHpKb3g0dDNLWmZwc2p5OHUvVldiVWc3WjFSOU1ncGJqSjR0bTRXQURNUWs0NXdEU2tVUmd0eUVtdzJNS1JUV0RGWmROL0ZHYVJmWkhiYTdPTFlPL3VUNGlIQjRxTWNxdEg3S1Z2MGJxd09aRi90ZVkrRFE0b0hVUVloUTRPVlFvYlRXTjFTN0RCOFBYYyt6dXg2T1EzeE8xRmRtRXFBL3Z5aUszdHVhSFNSYVc0ME9ZMDhaVkFQVFdNWHdLNFpFT3hCaEM4ZlR3YXNHaHhLU3Q3eVFsQm9UNTBvcngra05xb21HK3FJTTE0VHlYVmhTSUQxMHVFSTJDY3VGT3E1NENjUXZOengvcGNmOEdvZE5ZL1MzeG1hVit6Slpzdzc5aWxlOUYvVThyaFBWQzRtUWxjTURyYm9EWVM2Q05iNEFLd3hwK1JFRlZTMVRJNlVNWnc0d1lXUU5QUVc1dE5UbkZQZE5ndzBGTStkcWdIZzgyNko4c2lWaTN1blE0VGxzaTlnYjdHNDVtV0xuZC9EeisvUm5hOFJMRWU1OW1xcHI3U2hvcXRWd1NJdmZtR2RWMnY4eXBxalU3djVqNm5yUDExMXBnc2lMeE5qZTFXSEI4Yk1qcFdKODFkdFMycGFud1Rnd25OMjMzV3F3NGJESlNaR2xCSlRTRGxIZU1ZWlhadE85ZnVsV00vZTBETjNaek5GYnpmL2RzMnVYSUxLZ3hka3dOOVdFVFp1N2xzNXJrd3dSS3d5VnVWMkZNMmVhbGZHVmFoM0xVMHI1MXRXZk01V0ZIQ0ovV01ZWVVqaFd5K2NFbzhleVdCTVhFeldDVkxreWJZamoxdnJWSmRuT1JYZXhzcmdVRExxYmFoMm9pRDg1N0VTR0xhdnRrVExKUmZtTldFOGVhRzI5MFdtNUlzWGk1VGg3V3dsTzhjM0xTbjNldWk3V1I1SDh4RFkxMkxDYkN5RXhWKzZ4NGYzdFF3VURHcjNodGxPZkFHNjMxOHhrcnptc2picXdZdEVWU1c4dlI5S0xlaFo3b0ozb2thNWpXTFZuOXBXcWNybUQyVnZHT2FKOGVuK0tpT2RVYmtQWEpRZlc1eFpiN1cyUmVEdE9KVGEwTmJOend0UkpQQVo5UnRxU2F4MHFHbExrOTJndjFEWDVPVVErKzNZNnUwVUszUFB5RFJjOGVJbG1rU2NFWnAwd1MydzZ3Y0szK0txbkozNHllTmFidkY1L1J5RFIwajc4SHc4NUhtekdWT1MwV0lnOUpBZWxnTzQ5d05rdEk3aEEwVzlrd0p1ajlDRWwyR2FCTDVxa0pYSm1nc3NTNmFnTlZ2N29vR2lBZ3hhbCszcXdUWGZUaWxyQ21sVmxvOFkwTE0yRC9BTmhmdWlTSnJOWFZzQngwV3RQYmtWa3ZOYUhsa3dnQTFjT1F0SXl5RVVnME9ISGx6ZDkxUVczcmwzVzAvczNkd25mWUswZ0NPV3p3UHRJQ0hWbk5YN2VCZ1JuUmNHUVNyaml1YzF3bndxV1VsMTZ2Ulo5VmhYU2VNSVMwa2ZKQzcyOGtQay9yMkRFZFRQSTkwR0tBSm10dVJnMHBqSGFFNVMvbG15N0hRQ1kzZ0Jxa2Jia3BEaXQ3S01QcDlMa1FRU1ovUDVJcUR3UkNlUFJ6N2QzNjBPZ2FGVGpzZU41L0RPOG1hNGxDeGw1MVdjcE84VG55ZHVGbG1maGZ6Vm10NmVjaDhMZW04bitnUUtLS2hndzJFWCtwL0Rlc2k5R0FSVmdLOWtUbE9MVGtRSWFyWE1iSlp0YUVEMDZiNWJkSTRhSitFVFgrQWlRNUpkdHVjUTFYYUR6dkRGcTFzTGFKYzN0eEtRM3RRTGV5VXF5S1dWUTNGL3EwZEZqOFlEOGs2eWRkVkZhNStWcytEU0c2dUMvbk45Y2VudUVOcWxqSi80Y290L243ZitwaVllWVVwbytGWk9sRkd4UnZWMVd5NFZFUEdLTEpwWDdBQjN1Q3RMRjJibVdhSUJpTkY2aEI5MjNHL1QybXVkdElFMWZ6NjZUVXczQWJyUXJhbHdFRmhPM1pMTFpKR3pXend6d0xqRHMrejhvWms4NGdPd29IVUFIQWdMdzhYaDJhRk1yNjZqczVTb3hrdEpZQmVUclJqWDV6bkJrZG1JOU0rLzFocmNZall0ZFpyZ2JyVlRSNmMwNm8zbXVhQ2tOWmNqcmZQc1hsaXBhak5Md2F1Zkw1RVZTS0VBSGd6bzdFTXhZSlcwL29pSnh1TnRrbzBXbVUvTzQ0TmRVV3pJdXNOa2RaZmpkZlNWbzJ4OE9ESEg2THpUSHV6MnB3T1QvT2NCRWpKMVJValI4Yjg3NU5JRUJCdW0zQnR0NnpFb2RiMWhNZG9NaHJHR3FYVTQyQjBtNzNreUx1Um9hNThSeG5HaUt4bUlId3RnTlN1dmtBcXV2UjBLTkp3djM0WWU0WTkrcHZXMzVFMHRzRkYxZ3V1alRMVTM1ZnBVOER3bEFmUG5HN0gwM3pXOFgwZEpubXZKenlZNDV4OGxoRDZnMkpBVEVSNW14L3JFdDNtTnpxM09rYVV3SnZJZkd1K2ZxNVhmQk9IamFmdlFENklvd2hoYjluUWF4VDZKRGZTYjhWa3hybVZWbnF1NXJYSTVScTdSSHlNSlJpTkpuT0h0OGttdmJnZ3pZamduVG40ZHlleGNTek8zdlF5RG9KOWxXSWp1SXNSS1I4ZmJBQVhtenZzbHZNdWJib3ZUYW1jN0syYlJVZjJIMHlSakx0SnFlVHV5QWplOFlRY0pKQTFkY2R0enVWQ2UwL0VyaFlOSXd1MFlPekV0ZWIrU2xNS09VUXNFOXV1WnV2dVFYV2JYcFhsQ2J1dkpBUlhQeUFtekZHaEkrdU9HTUJIN0RQTzBvRFV3MU03OEFOM2hKNkVCK3FvMFlSaEk1OGJCWENJVUxJbXlnaFdWc2F5c0lTUUI1NmhxQjJISXBYek96TzlFbEZzZHh1Qk9YMGlQaFN4TlA5ZVZoeVNTSXAyRXpYa2FiUjdmZlF4a2VpVEQ0TDBGWUNHR2lOek1EZElqWGhoZHpYUHplUTZzSFV3RHlnZFVzd3grdW1LaXE0OW81UXJ5NEVKUGNodlgzMm1KMUVaUHZMcko2cGNhVnVtQzNwUXFYemoyZXZYNG9wVTd2TnUyYStPVitlcnh2SWoyVWJsNkEzblJza3hrV3c5Zk5BZWpWd01JRTVSSEVTbzV4cjF4TktzN2NjTjhOdzMxTWYvOXRSQUtORExIRDdjTDY1bW1lcGFvaGtuUGVMWW5jYitaR0FWczNRbWVzNXlCR3Y0eGJKUjdSdVdqS0lXd1E2bGZDdEZ0SEFlMFdDb28xREMrU0I2SnNkbnBFbVBnQjJnU1E2SlVpOFZGb0lCaFYza2hDaGYwMll4ajlKdmVnL1RLcVR3ZzNlSFBPNXNWa1dEWXZHQ1NhQnVxSTduYUE5b05CODcyTmdvdUlRYmtFckhiODhKMmROalM2SnBEclRmVjdyaDhXcnhrcjhjQjNaaDEyS25NbUtxSG8xcE9lbmh0RjQ2YXpFOUxhODd1Y1J2M0pSMnl5UTdtSU5sZmRuR2puVUpldC9GMXVqZStxTzZTdzZ2WVNwNkRSc2lHZ0o1QmN4WFZvM1I1TFYrWVYxdXV6aHZpWEQrYWIxWkdORHgyUHg0bnJhbWFjYnRxSEtvY3l2MzBlekIyOEdya2pYZTAreEFrQndhVE16TGRZbUZPOU8vZzJHSWVIQVNWTnJUejRVeHJJOFR4S2pqVkpxcnQxWHJkSTdETSszRGUrQ1ExZlc1L1YzVFhIZGZ4b3JFd01QVGJ4cnNSYVlwbmxLSE14eFpIcytKY2ZNYjdYR3BQQldtTGZ1Q1EvZlN6ZXYyUFJhdUN6NkFsbC9CNEVDRXZ0Rm85QnJHRWRacG5JT0krTGdnbjVCYnFPd1NiamkvMWhxQmEzNG45Zko5QUQzVThpYnVhbUdHZDNXMUx1UmxOb2h6bkxrdWlQZUQxajNDRERwNVRWTkdBK0ZoZFhvYVlFeU1UMHFUeDJSbndwczhJdEI5ZkhKM3lhNUZlZ0NsZlAwclJsbDlkN0NaMzMzai9oZzNHMk10YXZNMWZCVU5Cck4xVGVGV0Ywb2M3aXdDb1F2S21lU3BoQlJlSHR5dzB5aXc5MG42eHBnQ1l5a21vTktHaG1oMElWWlk4S0JrTzBXMXBxWUlpOU1pVFZHOTRKMmpoK2N2T1MwUnNlUUs1Z1VEOEVBcVAyQ2FyOUlqVmh0VjNzd1BWTnpUQjN2d1lDa2lXQlU3cjczTjQyQkFuNk4xRzlmbDlOWC9ENUErSjNrOVI2TlVXL055YnFUclZzenc1emZPRDhObzFvdFl2WDJTZ1lOWDEwRGM1WW9QdUpMVWo2NmRUdGNPbC9QRWJZWlBocmkzK08rL0U5K045amJlYVFyT1E1Z0oxN3gwQ0oybURvWVlvTkJsVE5XTkh1enhhL0R1Zmpyd3ZyRzBvZytZWWJGQ2IwVEJELzNvN2l0ek43ZHpYR29kejdmSjM2eHNET2t5T1NBNDROOHJIUHYvK1RNYURGcEpuNDM0Tjg1TS9tY3ErQ0tvaWdoeXdkamtsVnpTOThIZzZRR0JHVitrU2FhMUswbHlSNVRrRGNETi9ZSlRwUi96ZmJ6U2trNWV2RjdSdWRGWUtKcW1JaEVpUkVpcjA3RkVCTmF6NEVLejc4MEJOM3FLOXJPYis0WW8xOHo3NThuY2tnUzZPK1BnTEhaayt2WGVyN0lidThCcXRyYnMxZjMzbXg1MkhleVpKeDNvaUc4MFh6ZGJBNVMvK0VKN0x4RWZzMmRQejRZZ2FzZWh3UlJhTEtMVGtZZ1FKWGtQUmJBaDFqcVhtU3JkenZnbWZFKzJUWi9mbTRqdHkrZGorL2ZHODBpUjI2bi82NTFqK2JPZEVlVjNlWkw3NFFVaXNJYlJyM1NKRjVUb25XeGpmaUlHZWQzeGFjdVhZSS9YQzlYdGhZQVlrRFVZM3QxRWdUTk9Sa2dFOFE0VURTZ1VRY09IRUF1Z1BKNkY5dlVaUUo0bkxkUXIvKzlWK0dnYTR2c1F4Q0ROWDc1OTV5TlhwTS9mV3hBbnA5dytDNmpOSW4yNVU1b3NxUUdyR0hYcEJPNE5qYmN1Nnk1ZmN2Sm9kckh3bnBXYUZYV0RWR0ZxWGYzWld1Tno3RjlldnRyeWpHNWhhVG9IUDdYdnhiV3phMmlGZ05sWHB1S2NIeUs2dEhMNUpraXhTKzFqdXVudXdscUQzNy9XMEYzUVRjZElMVVcwR05nM0ZjMmtwNk5LaTVsQVRtZW1vQWtJVDVyWnhYejNmZG1wK1FObUc2UkZ4eDNHNnllWGlvcFprVnpmbGRZclRmVFp6eFk5Z28yK2dZWG1ZSWhTM2NrdDZFRVBlelkyM1pIaGpHMHdQdUh0MXpzejdZc2RHZVB1WllsZU1NSXNLYTBtYlRGcnVsTUd5M3NtSmVSQ3NwZjhQdXpRNEhJUnFkYUlYTGhFODY3WWdZQmRudFhrYzM2YlUvUDR3L2twWlQ4VTlGME0wQjBob0Zub05hMHVjV3d4Rmk1MHM3VDE1d04wd3FUWmZCN3JMVjh5bWhicWJjT0YvamFkYXZVZk4yc2haMEdRMXBiNE40MmtkR24wY1ZURDkxL1dNeWNuNWVxSVJULzErZEZrYjB2VDFnT0p1VnZyQ0lmMjJVdUtwcDkzNlNGVzBxbHNxRnVtSlBXT1RDendVNzRYc0tBK1dCeG5xRE5Wa0FmQXFJM2pXcXNoeW45SE1hOTlTdlpCbUd3L0tjQjFlalF5b1BGWTVzdS9PRVBENzBUeVdvUS9pZlZSM2w4cVRTQXV2VFVYNEY0U2VZMGFORnpRQWlWUUZnM1pEN0cvMzBFS04vcGNFc0FCU2pCWFk5ZGk3NHJsWHBKYzRkVjQ4amFJQnJBeTR3ekx3SURWWnUrM1dnZnN1ME5wT2NZd3czdlhIWlFjclJDM050UXNMUEdtRU1YMUE4c0gzMFladWdCWXVqeENMdzdlKzVORFRkZFE4ZWJHQitZZzVhWDBLcHF3SXVwU0xyM3lENUpuRnhUdmZhbnA2T0cwKzErZG1GMzZJZ0dzdzlCQmNQNTNuZkhQN05uM1FaWHBzeE0rS3B4RE5uMStBcVdCNGtkamJpYVl2dlBxUDdXUTRLL0RqRFVaNzEzL0RiRjdCR0tTS0owOFgrTDFUUlJ5eCtWVzcyb092QTEzQVF1clh1MDQ5dDNOOUZLWUU0VzNjNkU5NmEwMXlZZHZpNzcrREJSWHc5bVJDLzdMUEdKbGtBKzdSNzIyMWNHUWZjV295NlVLY3JmeEF2QWZCeUQ2Y05hY3RlcUhDYWUrcENsbUxHdEdCZ21DU1A3akJIUjF0ZDBYOTR1MzYxYkQrWWwyZ1lzOTl0a29BMXVjODY0UGZCVGljYXBxZXZocVhCZmUyYlBsaStQMUhqTVpGYXU0Qkd1Vk1HbDI2SWFLRGxKNHo2OVhSOUd4eFhIczUwV2JMYmk4QTE4UlRlRXJoNTFXWlpUMWhUVEZncHg4V2o3U1BpcVQ2c2syT0tIODVyNEM2NFVzREt6cW5CR1hmVVVvYUY4OTZuVUpua1N2K21IdlJJaUtNQmhVUU9uenpHdkgwcTkrYXNtWTlhcHFacXdXYzhhR0RPTUVNbGdlUXFCU2gwVWFRRDIySTdzZWZUYXJrRmdMTm5PcEEwZUgrcXdkNmcvb2RYK1Z5V3cwQjFhMW0veUxQYzVWUVo5ejFaSk84TFhiNFlvcmJkMS9XTG1lN1VFQjdCcjEyRmNGZy9aVm8yNlhJc0E5SnRpQktkYXpsb3hGUDBRUXdPSnBRVW9Famd3OTNWc1EzcHQwckNLTm9oNm5KeVhWR2NPd3dmTWFkY1hRK1VSdkgvNTM1KzAwZVk0RWc1L1pMK3dmVXkxcEdKVWtuWk9qbmJqRW1IRVlodXdZMHAreG00eFpNMUswMncxRFdjYzhic2luTXRtaVpXTnl1Q0JaL3RuaEhZanovZ1pPcUx1c2d3QnpRVmR0UEZRWGVZRHZIbFJ4Y3d0c1IySTFqUjlTS2lkdk9iMnBrN0QwL2tpS3VPWHgzcG1EdzVGQUhSYm1YVmxaK2FsU3hlKzRIU3VkaXhmYS9QSllZNkVlbW8wa3RKcjY4aDUyWWNHS3ZzSDlEN3g5RlY3TDlTN3dkS3dLQnVYbUJXN2ZiTXRaMEJJUnpGbFBjYjFtWThudHBzWDJZZ0F1czBjTTBxeFJMUFd0MTFLeHZmY2pxcmdDOWFyRTNtOEo3ZmVKUmNRVkpBZXM4NHI2dS9tZ2JVbnFkei9nMEMydUpvVjdrazkvS1dDVkxvd1c1T1JTN2x2WjJqLzZxQ09rZXcrZjUySTJyeXFqeDQrcTI1Ly8xeVQ5dERvL215K1NsWmx6OWxyOE9kZGp1Q0hHbGRyREJuRUdFd25KWEJYbWRKN1hxK0pLdEJQbVBSZXBld21XOTRST0dWRVk5SzQ4K3I4aUVoQXpuVHhnVkdkRTlPSzBFWG5TQ0ZkeHZGOGE0S1RDMU55OFpxMjc3Qk5MaUZjQ0hNRDVIZWhZdGNoRCtoWjc4RldCb0JBTitraEx5bXl5QUlHV2NsYTdMVzgxbGdpY0NRZHRkaWE4TVBBSGRrSHlIcUczcEl1aHVldk0vYml4Z1B5c1plNFJ3cjRzNExjdkgzVzVCRThnVi82dzErUndlak16Q1IrSnY4L0c5RVc4UXorUXdlSXhaS0NqQStuWDRjNnRuOVlhZlVOZmw4VStjMVdNZHd2WEE4ZGE2WjNSUnVEc1hhZ0FWdlQwWng5UTZway9xc0NLU0F6ODF6WHRmdEZmRUROVHcvbk1iaDZRV1JaVFk0S241L09GWGZmU0FqLzc2YkJBZGlZb1JGcDdjMk1yd1hCVFp0NXBEMXNtMkdJVmNFZnd0cDIwYWRmMmlaVVhJM3dEV2xDQVZaSTVWTGY2Nm1Nd0dZQXh6Q3ZsaUdvKzd2aUwxOVlqNElLejA3Wm9zTVBXL1BxZjAvckl6cCttUC9PN0p4eEgwTHpUWjh6R3RHc08zRUlUNXg2VlRyWFcrTDlsZ2U5VU1MUDVaYmZDdk9ZbEduT2llQnBFblJTQnhOKy9lQk5mMGpidHdFRTZCYW96VnhWNHFXT0xRNys2aWtmZEcrQkt3dXhDeUkrcjJiK2cyTk10a1g3UjdjZlZES1dpL2dDRWtEMWMxS3k4c0xYaHZnZU9Qdmg0cUpaNkU4R3I3TlRiRUZQYzJ2RHNXMlc4bWxqdEZwNmNDWldvc3J5UkhLM1E5RHZSODhtMjlOa1ZuWHVyaVFJT2lTc2FEcCt2MjFNNGZsVWNMellldkJBQzlyK01WcU52b0RSQ2dWRmpjeWdOWEs3Q3hZRmpiL2xvMDdWdlpRdGwwbXpuL090ditkSjExZHRyd0hrMVVBNnRkQ3dlczNrMG5VMkxTeHN4N05NU1BaZXRzbWFNdWtKSG9QWGRDUjlINm96b3hHbXIyV1l5SlpMT1pGQWRndzJrOUJDejNYNjkzT0x5R1RzeTNxK2VlSkpzZTkyeWFJZzY3MS9mOGVnbjRQQU14UUsyWHcwTHZmZEo5QjdjK1FkU1RQU3ZsQ3JaNExoLzJocW03dGJhWERiekFsaHVkU0VvN0FldVdtcXB6eTFYS1YxeTFWQnJwS1JMcVZTNWxacWVOOXE5QnNUbU5Vb1FNV1JOSUlHR0kwWGt5c0VTY2dWWm83SGhZckEwYUFsU293bzhGVmZ1eStYRm1vcmhPRUVvbjh1NXhzRjVZSXc1Y2lvbm9NSUZoMjFYUjBzSGl1dW1EdEpmdytubjVoU1ZGV0wrVjlSVTNGWXlJRkp2U0d3MnBOVXlpZ1g4S3VjRG1qYU9PM0J2bjA2WHNRaGJmT2FVZFBibnVTRFdtaklrazUyVFlWMWFOSTNobGtoV3JLRVpQaXdER3J5UGNQYjcvSXhsejdhcEhrVGgvWVd2Zm1zc0Y2UzRraGJ2RDNxSmtRVVdYQlhuZmlDVVVraUpqUUpsOExYdEU4cWRJNmpGYmRGMko3bXUyN3lYbDQzejk3QzlnMVNOMld3RW8rRERrT2JQZWxwRUhYa2QwbTNETklrdWpWTktORjlUSWV6ZjFxeHBwZENJbWhmOE53bmFydjRQL1ZPTU0vM3dRY3c2NERJSnUzQm5qeER3SURVak4zbmFNbW9qZXptNlBERGNGeCtPbDhPNVF1dzE4R1FtNEM4YTVoL1JTejZQY0ZXNmdCVEYyVEdWeFZRcU9uR1pJYUtHWXlhZE9CVXdXaHdwRk00WTFNcFlBZ0hYcS9CdGVPK2FLYmNHSVVXZ01LS3lOU1I2Tmg5dXVnWXM3Q0NxSEN6MHdxZ3AzWWZZYkhuRWxFWmhnV2ZKUDU0M2ZkK09TNDFJTXFzekdqTTZKR21VdnZnOXRIeUVndkNJWlRLM1dFSEFSQ0xtY2lkaVI4VEIzaVFCcXoxQnFScVdKL0RBUkU4UzFKL1U0SXhMMEVXQmdiNkkrUUx4NXhlUHhyZFY1U2ZyWitGMkdFanNVWlhWTkhnYURNZE5Xa3NRTlovSEFLY05HbVUwbnZFRUJJK3pPbUUxaXh4WFBtNG0xYkJKSFQra1ZIa3dvOHBYRUFrYXNad1RXQzJBRmZSVll3MC9VWTR0THExWXFMU2paeXVhUjZqNXdKYjRBbSt5VDNHV1ZYdWMzWWdOVTgzZ2JibGM4SktzZlVqUTBMNWozcFVGY1hJR2NvQVYwQzd3K2I1cVJpSld4QkVya244WnVYZXlXQW9XZmVtbEF4ZHB2TGR3L3JocVhidmFzRVhZOHNDMWhmeUtjcEI4YjdsYnlQMVhBZTRXc2NMenhVTmJkM1gyMU5ZM1BFRnp3WHVMdHQ1UmY1aUtQU1dRSWpzSXZyL1ZyWWJ3L09DN0NMOHZNL0JUSEhaNTVZYUpNcERPdDdSdGF0cFpPZHcybjE1RGgrdExqUzhBZnVYalBSemV1YjlRQnpWdmRyWUpoUUVVSDJta3YweTQ5OEJHd25mdmlqdG9GYlUzU2RxMlgvZDBTM3RMeXpTTDkxTno4Mk9nQlBnc2F1K3lnVCt0T0FnNTFIQ2ZYZEdmeW5HcUVSVHZhOEEycVBMN1BhMk4zTHMvblpkQUs5OXk2Q2syNTY1RExXM1V4TEpSWSsydDkveHV2clBaMHRwU1diNnQwcmZWMHJTUDA5SFd1cTYxZGJ5MVRRdWlFcnhNcEpmY3ByZERGVFVQVmJORk56dFlhajFsK2RXOG41cGJYdVEwcTF1YUQ0TW5vRkNpMzkwbnVoamY5eURZdnh5eUkzU2FGMTBYeDBybEppdzYzYTNrVTZwMUsyZHdrdnl4V3h5cjFjOFRPa0ZPWFdLS3FqM2JpdklFWDJIR2JicEFZdVhEanFwRDFzRStuMVp0bmNSSnJtbWdjbmlWRE91d3ZQV1NDdXl3bm45YVk3VXYwMURONnhEVHQxcWxROWU3aFV0YmhNS1dwY0pFQlNGYjllVVlYQUpINW5xMGt2c2hEbTFGcldXMzhvN0IyOUJsejg1OVd5UFBBMStiandhcCtQeGtodGQxSUtJdzlmemx5azdWMms1TW5tdVZYc210dFVOenJIM3h0dFlINkpxak9LSzJRK2VtdjE3NVBxUTM4VCs5bTZTN3lmVThxOEQrQnhoVFJlSEN2alRuV2tBTTkxSlkyUWtiNUFHUFFxV0pxQTc2bmx3K3cvZTlPWUJpcGk0ZDJrdEllT1JPdjFCRmNXK2FnQ2hBM2VzbEVYVUdiY0lHQVJUYzRuaFQxMUJaNjZYWHpURkxGTnlaSVQ1TUxXK3J5Qm1vZFcyVnJFWERSTVpxUkQvMnF5TUw3MlhnUXBHRUxmTm96NzBndm83QmtCenhXcDZlaEFWYWNucGV0WGtONnhKR2RnaUp5aHBKaDdhQ01JZ0RNY3BSVDhxaWFMdkw3R2FOVStabjR1aWxyZ2EzWW9NK2lLc0hIcWo5R3U0bmdycEZIb1dydmxGUVBzUGNweGxqcU9Mc3ZkbW1qYnJlbXNIcmE5K3VTc0dEK29WdXBic09iN0Z4WllVNnNxeFJiZHgwbldPeGtra2l1czR2bncvSzBXQ0pSNXVJNzVYWFQzMTRCcys5RFRuQnhieVJtTkc1d3c1QmdXUFVKaG5ac2wyV1czTjUrM1VyZGlVMExpcXhJQzlmSmh1Zk5sK1dUSnF1MExjU2treFg0ekZBZTVSV1JMVmNQajVUTTFORlJ0UDViYmZrYy9ZYk5OVUlpTG5wVEJMVHNyc3BnQ01aeDJuRmFrTXZKdWNvaWp3YVVNYUtlTDdRUXVlajZLTzIzSkZsUUl0VXVqWXpPL1NZdUUwN2ZidklSTkc4TW5jcG81ZDNsNWxLMGpJam1kdTQ5WTliWDZvMjZZbFpjN1BmSGY5MHZNZG1IbHdaUVR5SEROWDFHbDVrMWo3Y1A0LzVNTkVwNDBRSnpUTTNHTGl2MEpyZkJSNHVBZmYwcUJCTVcwS1U0Vm1xMk9NcWNMTWRURGV2YVBpQ21iWTR3WXlWTDFnWk5uVlJzajRITHBhQXVlYW5xNExjQ3BsWHBSS2lreW1VNllhYzRldStFSW8rMS9ONStzOUZ3aTkwUVAyTnJnQ0tHcFRETERLV0xhUlc2a2JQYW1OM0VabUtSSVFReWRVZWJFUzArWEdxZHFoYmdNU200dUg5aGI3d0FhcU9JVjJDNEtQVXZtSUVMMUFQZkEzNEs1bG1peFYzNkc4MEtMc2JVbzFDbnVyQ3lCUkY3a2NGUys5RXNZWC96UWZmOEIvYmZkUGt5enNwTUk0cWpwbnNYcnJBbzcvMXFkZm5TMFRNM0FhUzJVVHZSOGVMVnVMZWp1d0xsSGRid25VV1haRlZtb3hobmFMTGpqQ2JOZmlaMlFKSkxnaUsyOHFPdWt5bHl4WnlldUpQM0MvcEliUTZURjJ1aFhnYWNLWldGYnZnejNHdndoNWdhR2R0SUNIWmRBUHdQYUN6SXVqYWUxZk1kT0Y5MmQ0UXdXSHZPWDJMS0RKbGoyaTZOamZvaHFzZ2hGdXVHOWhLcmFYTjBvaFYwRU9rR2FMTEx6T012dWhYRTh2VTVkYm9jc1pvRE1sTUlUTnkrVFdpMEpLSUw1RFUrMC9wZDBmMFE0bTZDWFdwOE1IUUkrVjluaG5jd1NES01jb1EvY2h6Vjc5YktjKy92dmc1L1NGd083OTA3UEQ1dS9kVXl2ZXY5RDJqWDBaWmRBZVNSaS92ZjZxODNXT3pKeGlZV2hqS0g5cDZEbUtVZHR3MzVmNFN4cXRiSDdvalNjV0hGcm5XK0Q3bFltMU5rK0htYXlyd2RQUkN2ZlltOE1zbGp4b2ZFYzJNdURYMzJ3L01NK2lsdXZ6ckRad1RjZWx0dXA5dWh0MEdsNDhkK1FuSFcwNVVzanpYYS9ubjJiTnM4M1Q5RUhab3U4bnQ0OHNGT1BzMTc4OTNDYlhiMnNOTFdUR05qcFU0QU1PVHJMaFd5NDVQWHF1VlJxeE9WUVRXU0dOV2h5cjh5QjU0OG9KV1lBUFpYY0RoemNLTzkzKzhCK081Ujh4S3FONWNtb3lrRkNvMXJoWUZZSzJvaEdlelJ0UVZqRzZwOGpuQU9sVXBqK1BxYmNTL25sSUNOV1E0QzdCRWNQMU9iOS9ZbmM2dGE0STNMbkpJVmtiN05tSGRXS2oyd3I5WnpLVGk3NXNYSzFORGU1eGRZNG9wejhyRS9RZW5IL2NzV1hZcUZkbWJjUWpYMkFmaXRwQkVHcEc3ZlBJdXZmQ3JLeFZhdjlZUVltV2tqZzQzcUFMVGZKZHR6S29VeG54RS8zZlJPbS9SaktpN3V6QW5PYWdnU0ZuWG5wYnJJSEMyTE5lV292RmwycFpxcmduLzVLTGtzakVpSU1OaS9JaEVvL1JGWlpnL2F4WURLUy9ZSlV6clU3dGdoOXVEbTdqdHBDRklXYjg5MngySTJ5cXlNU3JlYnI5SXEyUFdzSjJNWHJ3ck5TSWgzUUE1QTIvWlVJSzAxZmJ3dm1ZRUY4cUdxcEJpTEdYcVhTOGV1d1ppTEk3VjlxYVBMaGoyMFVKUDkycVZGNlY0dlVRZFlzMzhsOUJWZ1NuY1lPRzdaVmt0aXRyZmZ2dEIyYjdRSitLR21uTmV2SlVqV2V2aGlCQ3ZVaUdOUGR5R2VBWEx0MEo0ZnBDYzJHa0Y5OVhUVWtHNFYvdHFwS1hIOWVtcEJ4Vm52MnVEWFhwZkU4bXNtbU5XbE9NWTJGK3d5VkRNR1NkQ1llUG1ZbTZUb2RPeUN6blQ1bkRJTkZIUUlpWDRZblU2b1YzcTlVZ3duY3lsT0dhU1pvK1hTYVFtVmp1ekJrM0dhS1FYUnhaeHVnMUp2cy8wdzJENGYxdnh5VVFlR0JaNXZUSUQrNGRjOHNkNFQrM1F2bGZBWEIrYUk3K1V6Yzd6RkErTE9aeGY1S0M4UW0xdmY4eElBZEJvVXpsMU5LUCtSSGRGNGZpcDVsY2FtblkzZDFTMXYxYi90V1BJWWk4UmhMMms1UTVuYVVHZzhUb2ExMmlUbUZtYlVBMFVUV2gwQ1RPbVMrcGlnSGNscERoeDhHYW92U1dqTFhRcjBWSUVvaC96MUtVVHRuM1hlT2c3OURDKzVDU1U2UnJkUGVtVFgvMXNpZHY2RDVnVmFWWnNKVFBuVXpzbFY2dkZVdlhWRXVuVkhJbEVjN1ZYWnBOTGJiS3ZNYkJzYjYva3MzK0xvZVhUVjlJUXNnTU45bDBiMmdKWm5QTnBPTTd1dlo0dVdiWWQ1OVJUT1R3M0pHWHBudnFxaGJYK0cwREtWQ3RnRWwxVUxSUGYzZXJna045UEY2NEVFSFdaUnQzRTI2MjFmUFNIYWoreFNMMkhobHp3ZFQyenF2aC93WmRzQ0VqTm80b3VJTGQ3SWNlMWJSSHdmcFZXQlpoamZaaVpUQXRGTlZNTGc2Z1dNaGhxbVdoSzBSM0Vwb0t0eHl1V3pTMXE1bXJwT3dxOGVWeTNDL0ZSZVJNSUhLZVpLRUkrZVlpdW9tbDJDUG9NRmpYNnE4Qmx2MGNFM1Z1b1FrOEs1eWVNcGROSElJa3MzeGhMQ1NYbGZFOHF2M3granc5UVlwaFM0ekxITmYzenRyRW1NSjA0RzAxMlVzUFg1K3RxdWtYYlYyaEtiVWtSVEk2YytEeERmbE1oeG9zQ0ljL3pnSmhIRlV0ZGp5bHZXQ2twdUw0MmRXRGZwT2x1YXFsWjFoTkJ0TnNMZkJHUnFVSm1JU3Y5WjRGRWVrdmdqV3RzYkdyOFFlNTJJN2k5SmZnUlhnT1F2VjdiSk5hdCtPdHRZL1F3eWt1TndINGpDMWI1WlV2WnA3K3VxMkZrdXJzNG1nT2hkclcvZDlqZ1RRNjdwZ0tEcjhobS9rN285bzdzNTA2eTJDZWVZM1B1TzhGbW5ienZidFlQTGEzL1cvclpGSlo3R2dJTTM2N1h3UFlqZ01wci9FTWc0WG9EbTVHdWwxZ0hzNy9DSVNhYjN6dWdrMDRNYUEwSVZFVXZybTN1cFdEUjhEY0tobHRRTUZ5TmdpRVRJL2duZTYya1RkNmMyZGJrNVdIRHJ4N1pKSXNxY0tZdlN1SlJsSWFpb0J0RndUc29DdjZVb2dUQWRjZ0pMY2dKenlJblBJS2M4S0dVb2k5MHdmU2FSdXdBb28rb3FicVIydWNScGc0L2NqM0JUSmo5S2VaeDRHZmptbUFYNVRtV1lDbFRNTnltendRbHhXbURSOVYrL2lPY0pQWmZtQjZIbCtBR2pZMG80dFJ0MXZjSHU0YkZhbjJ5eitBYlJqTmI4bzFTVGpkR0dxTk94WDRTSVRWcHlDUFhJOHloaVQzQkFpWWUzeklWK0toazVpUkNQbWpUKzNTbGVwK3VCdm5nNURHTFFmRVhBOEVBOW5icm5Yb0FzWHd4ZTcrdUl0QUlmbzM2OFVnM1FtQnErd2pvYmZReCtnUjlpajVEbjZNdndKZmdQZWtyVXZ3YXFTSytWZDdENytEM3pBOGUydmgySXpEOXRlbnhWRDZKQzQ1MTJ4dDhsajVIZlQ5UGZ4cCtvczRIdEFWZHdZektuS3ErUXN6eGV4bzNyR3dMY3JkMlZkUVFOMW1YeDFQY3dDMXU0c1BiekJORUx2MkxhTERkVXRQMm9iUXhLOGF6SG9PNFczaUQzVDQ5ZldlVTJlZlIzZjcveUxGWVptRFFYdmM5SzlsYWdVVUFNZUxlZnhhc0FqQ0hmVmdBWkI2SWRZczUwWHUxM2JxTEY5YjI0STlaRDJzRGJpMTQvejhneTFpeGx0amd2T1VCNUxvQWdCWFl6YWxKZ3NhTXJSMXRYWWRSUmxHSDlSUWRzRSs2eG1SZzh5SWVvOG94UnVNUUJTb1B1TU9NWU1MZHM0eEdDSitIMlNNaTVhYnVzL3dDVlk1dE5BMFhtMHk5eEdNMEp0QU9xMXBnSzBCZEtBZjdES0d2ME1mb3k5Ri9aR2xhbE52bHdubENjaGd0Ukw5bFc2QXI0S04rb1NkZ0l4WHBJSnlGMjdnTzJPL05BbGgxVlhlTk95UGQ5LzNTSUtBL1ZDazM5WTRFUFlpdUhlTUJISnBXa20zUWVKRUxQRVlMMFc5Z2daS2E5ekdIenY4Ykk3REhlLzRZYmhmZTJFOWlvTzlKTTMyM2J1YnNTa1F2aU13K24zUU5KVWU4dE90cnp5NXYyRWE2N0EyeFZaVHM0dTh5MWpqbnU1M05DM2tFYmlFL1pqc2l1bE9qMjBRNjhVNllFaW10eGt1dUMzdkw4WVpMbzJzRkVhZFF4dXZHOWxFMGV0Nitsays3TVFIb04wUFlsc2FYYit2YU4zdHIxeTQyZFZta2ZTYlY1eGkzQmJWMXUxMU05d0QwbE96TFhuWUNSOTB0NHd0K3JpdW9LQTE5eXV3RDJwTEFKd1E3WjN5K2NJbmk4a2c2MThuVVNBVDJPNlZLLzNXQklhMWhUMmV3N0VvRlNyYU1JaitUV0UwKzk0cmFIQUp3RVQ5K1o3cGxYRWpxM3hESDNRRGc1SUdPKzVMOEwyK0ovK2l3enhQTXhnRWlCZ0FJL2l5Wm9IQW1NUDAvZUU1azl5NmlOZTFrNnc3V3o0dWNycVRweHlaM0JlVUp2MlJ5cDNYRlRQWWR5TDdKSXdSNFJranpON2F6WGkyQ0lNRTBwVFhvZFpjN0lTamQrckw0Rkh4R0V5M0FSSFVBeDFWL0xadmlqbDh3V1YybTFmU0NmK3N3YzBXMDZPcWE1bTZTS3p5dFJuaFFWYWdNNk1jaFJna0pNWFlFOFloQjl1bUtvb1RwR1JxTmtLNGZ4NE9XK3UrNENyY0dZcmdUWjV2bUc5VFVqdGZuaXFZWlVXVDZVZzBlRTNoa2lVRzVuQnBnakYxNERYYm8rRFFSYmZwVjEzek1wbElKQ3VjK1ZMSnhHZ2F6eEZ3V0kzWkxuajY1WDUwMHhCMDNvWjBNTDRhU1A2R3ZRWEtidVBNclVxdm1hUWgzVUdaclJVWk5pWW85dFhUUlU3eEdsZFN5cFk0NWJBckxVTE16dEFiNjVpbWRJT2FSRFlwSVVGNUJzSW83S1E2L1V6U3d0STJTZWRTMWs3UW9JWFBTYzBHVEY0dXpXaHhMeHZ3TnhGN2g5cjEyTExZWElkOUZENXNyTy9TMzJiS2VXelpQSnFYL0FNM1FoMXB1ZlN0NzZqaVF2WUVsMW1NMGVNN1RNa3dBQTN0OVNEbTc2WmFYS0xaNTY1dnBPMGl4dmZReUNJMmo1Qk9oVi9rMlBpVjNzUnQ0S3FGbC9tRHVEblV6Nm03VnY3OFJQYjNJMWpQTVhWQ3FWWWlmK0VURkhuVzNyY2hNYjUxZTF1dVZwekwwbGdHVElBVU1hUlVGY0tBRHNJRUUwUUlabUtmeURVbEZaWWNvMmE2LzQzUURDYVhza2NNR09LMnM1S0Z6cVB5aTdzamZKOVM4TlZvamo4b1gxTWp1eWZFRVFJQ1BjV2ltQVdnakxCd2tKcTBPSmppZEhaejJpWTNPWnpzRWtkbnJFTmx5blNOWVlsNXloREtYWWc4ajFicVRDQWhzbkM3eTVLdFFLSnRYbG1JeWhVdThOTExCQlppeXVRT1V5RGJKZEVVbXlEV1pyTDlDZWFhWlloSUg3VVMwdUpYbWViVElpalpCY3JGODAyODZKeWV2N0V5MXhFUU9xc21UdzduS3RkQVVaZXp5VGVEbGt5M1hCR1VaNDNMS3BoN1FISzd4cWVBUWV2dG9jV1JsRXRKbEEwMVJaTXBSS1RWRlhlcnB4VnhGeGI2OG5GN2pzcTdHYmRVMjBCdWVJVkpPd3NmRnE0VFBCSVVTT0xpNEpNclFWejk5ZFpNaGFQQzRXVHNZeWdFblpxczRtcndZS2R4ZXVQbFlLVExKcURTL1Y0bzRoQ28rRHZOUWIvUUkrdkhvcmVmZ01UUE1tNFk1dTA3NVA2SklYaEgvZTEveW53RUEpIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9Ym9keSxodG1se2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9aHRtbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItcGFyYWdyYXBoLHB7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNjt0ZXh0LWFsaWduOmp1c3RpZnl9Lm1vbnN0ZXItaDEsaDF7Zm9udC1zaXplOjNyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTU7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDIsaDJ7Zm9udC1zaXplOjIuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yO21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI1O21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNCxoNHtmb250LXNpemU6MS41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg1LGg1e2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6Ym9sZGVyO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDYsaDZ7Zm9udC1zaXplOjEuM3JlbTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX1wK2gxe21hcmdpbi10b3A6My43NXJlbX1wK2gye21hcmdpbi10b3A6M3JlbX1wK2gze21hcmdpbi10b3A6Mi4yNXJlbX1wK2g0e21hcmdpbi10b3A6MS41cmVtfXAraDV7bWFyZ2luLXRvcDouNzVyZW19ZGl2K2gxLGRpditoMixkaXYraDMsZGl2K2g0LGRpditoNSxkaXYraDYscCtoNnttYXJnaW4tdG9wOjB9LmRlY297YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7dGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50fTo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX06OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfWtiZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtib3JkZXItcmFkaXVzOjEwcmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3BhZGRpbmc6LjI1ZW0gLjZlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9ZGV0YWlsc3ttYXJnaW4tYm90dG9tOjFyZW19c3VtbWFyeXtjdXJzb3I6cG9pbnRlcjtmb250LWZlYXR1cmUtc2V0dGluZ3M6XFxcInRudW1cXFwiO2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMWVtO3BhZGRpbmc6LjZyZW0gMXJlbX1kZXRhaWxzW29wZW5de3BhZGRpbmc6LjZyZW0gMXJlbSAuNzVyZW19ZGV0YWlsc1tvcGVuXSBzdW1tYXJ5e21hcmdpbi1ib3R0b206LjVyZW07cGFkZGluZzowfS5tb25zdGVyLW5vLXVzZXItc2VsZWN0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1Aa2V5ZnJhbWVzIGRldGFpbHMtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41ZW0pfX1kZXRhaWxzW29wZW5dPjpub3Qoc3VtbWFyeSl7YW5pbWF0aW9uOmRldGFpbHMtc2hvdyAuMTVzIGVhc2UtaW4tb3V0fWRldGFpbHNbb3Blbl0+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tb25vc3BhY2V7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2UpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmludmFsaWR7YmFja2dyb3VuZC1jb2xvcjpyZWR9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6MDt3aWR0aDoxMDAlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4uL2RhdGF0YWJsZS9kYXRhc2V0Lm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBkYXRhc291cmNlTGlua2VkRWxlbWVudFN5bWJvbCB9IGZyb20gXCIuLi9kYXRhdGFibGUvdXRpbC5tanNcIjtcbmltcG9ydCB7IEZvcm1TdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9mb3JtLm1qc1wiO1xuXG5leHBvcnQgeyBGb3JtIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRlYm91bmNlV3JpdGVCYWNrU3ltYm9sID0gU3ltYm9sKFwiZGVib3VuY2VXcml0ZUJhY2tcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRlYm91bmNlQmluZFN5bWJvbCA9IFN5bWJvbChcImRlYm91bmNlQmluZFwiKTtcblxuLyoqXG4gKiBBIGZvcm0gY29udHJvbCB0aGF0IGNhbiBiZSB1c2VkIHRvIGdyb3VwIGZvcm0gZWxlbWVudHMuXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvZm9ybS9mb3JtL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vZm9ybS1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGZvcm0gY29udHJvbFxuICogQGZpcmVzIG1vbnN0ZXItb3B0aW9ucy1zZXRcbiAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGVkXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZWRcbiAqL1xuY2xhc3MgRm9ybSBleHRlbmRzIERhdGFTZXQge1xuXHQvKipcblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3NlcyBDbGFzcyBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5mb3JtIEZvcm0gY2xhc3Ncblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlQmFjayBXcml0ZSBiYWNrIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHdyaXRlQmFjay5ldmVudHMgV3JpdGUgYmFjayBldmVudHNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGJpbmQgQmluZCBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVwb3J0VmFsaWRpdHkgUmVwb3J0IHZhbGlkaXR5IGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZXBvcnRWYWxpZGl0eS5zZWxlY3RvciBSZXBvcnQgdmFsaWRpdHkgc2VsZWN0b3Jcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5tdXRhdGlvbk9ic2VydmVyIE11dGF0aW9uIG9ic2VydmVyIGZlYXR1cmVcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy53cml0ZUJhY2sgV3JpdGUgYmFjayBmZWF0dXJlXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuYmluZCBCaW5kIGZlYXR1cmVcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRjb25zdCBvYmogPSBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGZvcm06IFwiXCIsXG5cdFx0XHR9LFxuXG5cdFx0XHR3cml0ZUJhY2s6IHtcblx0XHRcdFx0ZXZlbnRzOiBbXCJrZXl1cFwiLCBcImNsaWNrXCIsIFwiY2hhbmdlXCIsIFwiZHJvcFwiLCBcInRvdWNoZW5kXCIsIFwiaW5wdXRcIl0sXG5cdFx0XHR9LFxuXG5cdFx0XHRyZXBvcnRWYWxpZGl0eToge1xuXHRcdFx0XHRzZWxlY3RvcjogXCJpbnB1dCxzZWxlY3QsdGV4dGFyZWFcIixcblx0XHRcdH0sXG5cblx0XHRcdGV2ZW50UHJvY2Vzc2luZzogdHJ1ZSxcblx0XHR9KTtcblxuXHRcdG9ialtcImZlYXR1cmVzXCJdW1wibXV0YXRpb25PYnNlcnZlclwiXSA9IGZhbHNlO1xuXHRcdG9ialtcImZlYXR1cmVzXCJdW1wid3JpdGVCYWNrXCJdID0gdHJ1ZTtcblxuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWZvcm1cIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW0Zvcm1TdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0T3B0aW9uKFwiZGF0YXNvdXJjZS5zZWxlY3RvclwiKTtcblxuXHRcdGlmICghc2VsZWN0b3IpIHtcblx0XHRcdHRoaXNbZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xdID0gbmV3IERhdGFzb3VyY2UodGhpcyk7XG5cdFx0fVxuXG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdFx0aW5pdERhdGFTb3VyY2VIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBjcmVhdGVkLlxuXHQgKiBAc2luY2UgMy43MC4wXG5cdCAqIEByZXR1cm4ge0RhdGFTZXR9XG5cdCAqL1xuXHRyZWZyZXNoKCkge1xuXHRcdHRoaXMud3JpdGUoKTtcblx0XHRzdXBlci5yZWZyZXNoKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUnVuIHJlcG9ydFZhbGlkYXRpb24gb24gYWxsIGNoaWxkIGh0bWwgZm9ybSBjb250cm9scy5cblx0ICpcblx0ICogQHNpbmNlIDIuMTAuMFxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0cmVwb3J0VmFsaWRpdHkoKSB7XG5cdFx0bGV0IHZhbGlkID0gdHJ1ZTtcblxuXHRcdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRPcHRpb24oXCJyZXBvcnRWYWxpZGl0eS5zZWxlY3RvclwiKTtcblx0XHRjb25zdCBub2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIHNlbGVjdG9yKTtcblxuXHRcdG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRcdGlmICh0eXBlb2Ygbm9kZS5yZXBvcnRWYWxpZGl0eSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdGlmIChub2RlLnJlcG9ydFZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHZhbGlkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhU291cmNlSGFuZGxlcigpIHt9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2luaXRFdmVudEhhbmRsZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdHRoaXNbZGVib3VuY2VCaW5kU3ltYm9sXSA9IHt9O1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLndyaXRlQmFja1wiKSA9PT0gdHJ1ZSkge1xuXHRcdGNvbnN0IGV2ZW50cyA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGVCYWNrLmV2ZW50c1wiKTtcblx0XHRmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCAoZSkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMucmVwb3J0VmFsaWRpdHkoKSkge1xuXHRcdFx0XHRcdHRoaXMuY2xhc3NMaXN0LmFkZChcImludmFsaWRcIik7XG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsYXNzTGlzdC5yZW1vdmUoXCJpbnZhbGlkXCIpO1xuXHRcdFx0XHRcdH0sIDEwMDApO1xuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRoaXNbZGVib3VuY2VXcml0ZUJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0dGhpc1tkZWJvdW5jZVdyaXRlQmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRpZiAoZS5tZXNzYWdlICE9PSBcImhhcyBhbHJlYWR5IHJ1blwiKSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRkZWxldGUgdGhpc1tkZWJvdW5jZVdyaXRlQmFja1N5bWJvbF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpc1tkZWJvdW5jZVdyaXRlQmFja1N5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlKCk7XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge0ZpbHRlckJ1dHRvbn1cbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGZvcm0gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgaWY6dHJ1ZSwgY2xhc3MgcGF0aDpjbGFzc2VzLmZvcm1cIlxuICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJmb3JtXCJcbiAgICAgICAgICAgICAgICAgIHBhcnQ9XCJmb3JtXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgZGF0YS1tb25zdGVyLXJvbGU9XCJzbG90XCI+PC9zbG90PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoRm9ybSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSwgaXNJbnN0YW5jZSB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCIuL25vZGUubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBOb2RlTGlzdCB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBpbnN0YW5jZSB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5Ob2RlTGlzdCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIE5vZGVMaXN0IGNsYXNzXG4gKi9cbmNsYXNzIE5vZGVMaXN0IGV4dGVuZHMgU2V0IHtcblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBpbnZhbGlkIHZhbHVlIHR5cGVcblx0ICogQHBhcmFtIHtOb2RlTGlzdHxOb2RlfEFycmF5PE5vZGU+fXZhbHVlc1xuXHQgKi9cblx0Y29uc3RydWN0b3IodmFsdWVzKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG5cdFx0aWYgKGlzQXJyYXkodmFsdWVzKSkge1xuXHRcdFx0dmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB0aGlzLmFkZCh2YWx1ZSkpO1xuXHRcdH0gZWxzZSBpZiAoaXNJbnN0YW5jZSh2YWx1ZXMsIE5vZGVMaXN0KSkge1xuXHRcdFx0dmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB0aGlzLmFkZCh2YWx1ZSkpO1xuXHRcdH0gZWxzZSBpZiAoaXNJbnN0YW5jZSh2YWx1ZXMsIE5vZGUpKSB7XG5cdFx0XHR0aGlzLmFkZCh2YWx1ZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHZhbHVlIHR5cGVcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9ub2RlLWxpc3RcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTm9kZUxpc3R9XG5cdCAqL1xuXHRhZGQobm9kZSkge1xuXHRcdHN1cGVyLmFkZCh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRyZW1vdmUobm9kZSkge1xuXHRcdHN1cGVyLmRlbGV0ZSh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGhhcyhub2RlKSB7XG5cdFx0cmV0dXJuIHN1cGVyLmhhcyh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtOb2RlTGlzdH1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHN1cGVyLmNsZWFyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqL1xuXHR0b0FycmF5KCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge05vZGVMaXN0fVxuXHQgKi9cblx0dG9KU09OKCkge1xuXHRcdHJldHVybiB0aGlzLnRvQXJyYXkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtOb2RlTGlzdH1cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGNvbnN0IHBhcnRzID0gW107XG5cblx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy50b0FycmF5KCkpIHtcblx0XHRcdHBhcnRzLnB1c2gobm9kZS50b1N0cmluZygpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcGFydHMuam9pbihcIlxcblwiKTtcblx0fVxuXG5cdGdldCBsZW5ndGgoKSB7XG5cdFx0cmV0dXJuIHN1cGVyLnNpemU7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBOb2RlTGlzdCB9IGZyb20gXCIuL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBOb2RlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVybmFsVmFsdWVTeW1ib2wgPSBTeW1ib2woXCJpbnRlcm5hbERhdGFcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRyZWVTdHJ1Y3R1cmVTeW1ib2wgPSBTeW1ib2woXCJ0cmVlU3RydWN0dXJlXCIpO1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBpbnN0YW5jZSB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5Ob2RlKClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgTm9kZSBDbGFzc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9JdGVyYXRpb25fcHJvdG9jb2xzXG4gKi9cbmNsYXNzIE5vZGUgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7Kn0gW3ZhbHVlXVxuXHQgKi9cblx0Y29uc3RydWN0b3IodmFsdWUpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0gPSB2YWx1ZTtcblxuXHRcdHRoaXNbdHJlZVN0cnVjdHVyZVN5bWJvbF0gPSB7XG5cdFx0XHRwYXJlbnQ6IG51bGwsXG5cdFx0XHRjaGlsZE5vZGVzOiBuZXcgTm9kZUxpc3QoKSxcblx0XHRcdGxldmVsOiAwLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL25vZGVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHsqfVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsVmFsdWVTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7Kn1cblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0gPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuVHlwZXMuTm9kZXxudWxsfVxuXHQgKi9cblx0Z2V0IHBhcmVudCgpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQ7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtpbnRlZ2VyfVxuXHQgKi9cblx0Z2V0IGxldmVsKCkge1xuXHRcdHJldHVybiB0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRnZXQgY2hpbGROb2RlcygpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRzZXQgY2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzID0gdmFsaWRhdGVJbnN0YW5jZShcblx0XHRcdGNoaWxkTm9kZXMsXG5cdFx0XHROb2RlTGlzdCxcblx0XHQpO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbCh0aGlzLCB0aGlzLCAxLCBuZXcgU2V0KCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTm9kZX1cblx0ICogQHBhcmFtIHtOb2RlfSBub2RlXG5cdCAqL1xuXHRhcHBlbmRDaGlsZChub2RlKSB7XG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmFkZCh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLnBhcmVudCA9IHRoaXM7XG5cblx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsID0gdGhpcy5sZXZlbCArIDE7XG5cdFx0c2V0Q2hpbGRMZXZlbEFuZFBhcmVudC5jYWxsKHRoaXMsIG5vZGUsIDEsIG5ldyBTZXQoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlfVxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICovXG5cdHJlbW92ZUNoaWxkKG5vZGUpIHtcblx0XHR0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmNoaWxkTm9kZXMucmVtb3ZlKHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSkpO1xuXHRcdG5vZGVbdHJlZVN0cnVjdHVyZVN5bWJvbF0ucGFyZW50ID0gbnVsbDtcblxuXHRcdG5vZGVbdHJlZVN0cnVjdHVyZVN5bWJvbF0ubGV2ZWwgPSAwO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbCh0aGlzLCBub2RlLCAtMSwgbmV3IFNldCgpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aGFzQ2hpbGROb2RlcygpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmxlbmd0aCA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlfVxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICovXG5cdGhhc0NoaWxkKG5vZGUpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmhhcyhcblx0XHRcdHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMS4yOC4wXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGNvbnN0IHBhcnRzID0gW107XG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0pIHtcblx0XHRcdGxldCBsYWJlbCA9IHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF07XG5cdFx0XHRpZiAoIWlzUHJpbWl0aXZlKGxhYmVsKSlcblx0XHRcdFx0bGFiZWwgPSBKU09OLnN0cmluZ2lmeSh0aGlzW2ludGVybmFsVmFsdWVTeW1ib2xdKTtcblxuXHRcdFx0cGFydHMucHVzaChsYWJlbCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0cmV0dXJuIHBhcnRzLmpvaW4oXCJcXG5cIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY291bnQgPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoO1xuXHRcdGxldCBjb3VudGVyID0gMDtcblxuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmNoaWxkTm9kZXMpIHtcblx0XHRcdGNvdW50ZXIrKztcblx0XHRcdGNvbnN0IHByZWZpeCA9IChjb3VudCA9PT0gY291bnRlciA/IFwiXHUyNTE0XCIgOiBcIlx1MjUxQ1wiKS5wYWRTdGFydChcblx0XHRcdFx0MiAqIG5vZGUubGV2ZWwsXG5cdFx0XHRcdFwiIHxcIixcblx0XHRcdCk7XG5cdFx0XHRwYXJ0cy5wdXNoKHByZWZpeCArIG5vZGUudG9TdHJpbmcoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBhcnRzLmpvaW4oXCJcXG5cIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcGFyYW0ge2ludH0gb3BlcmFuZFxuICogQHBhcmFtIHtTZXR9IHZpc2l0ZWROb2Rlc1xuICogQHJldHVybiB7c2V0Q2hpbGRMZXZlbEFuZFBhcmVudH1cbiAqL1xuZnVuY3Rpb24gc2V0Q2hpbGRMZXZlbEFuZFBhcmVudChub2RlLCBvcGVyYW5kLCB2aXNpdGVkTm9kZXMpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKHZpc2l0ZWROb2Rlcy5oYXMobm9kZSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcInRoZSBub2RlIGhhcyBhbHJlYWR5IGJlZW4gdmlzaXRlZCBhbmQgY2Fubm90IGJlIHRyYXZlcnNlZCBhZ2FpblwiLFxuXHRcdCk7XG5cdH1cblxuXHR2aXNpdGVkTm9kZXMuYWRkKG5vZGUpO1xuXG5cdGlmIChub2RlICE9PSB0aGlzKSB7XG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQgPSB0aGlzO1xuXHR9XG5cblx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG5cdFx0Y2hpbGRbdHJlZVN0cnVjdHVyZVN5bWJvbF0ucGFyZW50ID0gbm9kZTtcblx0XHRjaGlsZFt0cmVlU3RydWN0dXJlU3ltYm9sXS5sZXZlbCA9XG5cdFx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsICsgb3BlcmFuZDtcblx0XHRzZXRDaGlsZExldmVsQW5kUGFyZW50LmNhbGwoc2VsZiwgY2hpbGQsIG9wZXJhbmQsIHZpc2l0ZWROb2Rlcyk7XG5cdH0pO1xuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwiLi4vdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4uL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IGFzc2VtYmxlUGFydHMgfSBmcm9tIFwiLi9idWlsZG1hcC5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuL2V4dGVuZC5tanNcIjtcblxuZXhwb3J0IHsgYnVpbGRUcmVlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBhcmVudFN5bWJvbCA9IFN5bWJvbChcInBhcmVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgcm9vdFN5bWJvbCA9IFN5bWJvbChcInJvb3RcIik7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gYnVpbGRUcmVlT3B0aW9uc1xuICogQHByb3BlcnR5IHthcnJheX0gb3B0aW9ucy5yb290UmVmZXJlbmNlcz1bbnVsbCwgdW5kZWZpbmVkXSBkZWZpbmVzIHRoZSB2YWx1ZXMgZm9yIGVsZW1lbnRzIHdpdGhvdXQgcGFyZW50c1xuICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGF+ZXhhbXBsZUZpbHRlckNhbGxiYWNrfSBvcHRpb25zLmZpbHRlciBmaWx0ZXJpbmcgb2YgdGhlIHZhbHVlc1xuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIHRyZWUgc3RydWN0dXJlIGZyb20gYSBnaXZlbiBzdWJqZWN0IHVzaW5nIGEgc2VsZWN0b3IgYW5kIHNwZWNpZmllZCBJRCBhbmQgcGFyZW50IElEIGtleXMuXG4gKlxuICogVGhlIGJ1aWxkVHJlZSBmdW5jdGlvbiBpcyBhIHBvd2VyZnVsIHRvb2wgZm9yIGNyZWF0aW5nIHRyZWUtbGlrZSBkYXRhIHN0cnVjdHVyZXMgZnJvbSBwbGFpbiBKYXZhU2NyaXB0XG4gKiBvYmplY3RzLiBJdCB0YWtlcyBpbiBmb3VyIHJlcXVpcmVkIHBhcmFtZXRlcnM6IHRoZSBzdWJqZWN0IG9iamVjdCB0aGF0IHlvdSB3YW50IHRvIHR1cm4gaW50byBhIHRyZWUsIGFcbiAqIHNlbGVjdG9yIHRoYXQgaWRlbnRpZmllcyB3aGljaCBwYXJ0cyBvZiB0aGUgc3ViamVjdCB0byB1c2Ugd2hlbiBidWlsZGluZyB0aGUgdHJlZSwgYW5kIHR3byBrZXlzXG4gKiAoaWRLZXkgYW5kIHBhcmVudElES2V5KSB0aGF0IHNwZWNpZnkgd2hpY2ggcHJvcGVydGllcyBpbiB0aGUgc3ViamVjdCByZXByZXNlbnQgdGhlIHVuaXF1ZSBpZGVudGlmaWVyc1xuICogYW5kIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gbm9kZXMgaW4gdGhlIHRyZWUuXG4gKlxuICogT3B0aW9uYWxseSwgeW91IGNhbiBhbHNvIHBhc3MgaW4gYW4gb3B0aW9ucyBvYmplY3QgdG8gZnVydGhlciBjb25maWd1cmUgdGhlIGJlaGF2aW9yIG9mIHRoZSBmdW5jdGlvbixcbiAqIHN1Y2ggYXMgc3BlY2lmeWluZyB3aGljaCB2YWx1ZXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgcm9vdHMgb2YgdGhlIHRyZWUsIG9yIHByb3ZpZGluZyBhIGN1c3RvbSBmaWx0ZXJcbiAqIGZ1bmN0aW9uIHRvIG9ubHkgaW5jbHVkZSBjZXJ0YWluIG5vZGVzIGluIHRoZSBmaW5hbCBvdXRwdXQuXG4gKlxuICogVGhlIGJ1aWxkVHJlZSBmdW5jdGlvbiB3b3JrcyBieSBmaXJzdCB1c2luZyB0aGUgYXNzZW1ibGVQYXJ0cyBoZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnRcbiAqIHBhcnRzIG9mIHRoZSBzdWJqZWN0IGJhc2VkIG9uIHRoZSBzZWxlY3RvciwgYW5kIHRoZW4gaXRlcmF0ZXMgb3ZlciB0aGUgcmVzdWx0aW5nIG1hcCB0byBjcmVhdGUgTm9kZVxuICogb2JqZWN0cyBhbmQgb3JnYW5pemUgdGhlbSBpbnRvIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXBzIGJhc2VkIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGlkS2V5IGFuZCBwYXJlbnRJREtleSBwcm9wZXJ0aWVzLlxuICpcbiAqIFRoZSByZXN1bHRpbmcgTm9kZUxpc3QgcmVwcmVzZW50cyB0aGUgdHJlZSBzdHJ1Y3R1cmUsIHdpdGggZWFjaCBOb2RlIG9iamVjdCBjb250YWluaW5nIHRoZSBvcmlnaW5hbFxuICogb2JqZWN0IGRhdGEgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIG1ldGFkYXRhIGFib3V0IGl0cyBwb3NpdGlvbiBpbiB0aGUgdHJlZS4gWW91IGNhbiB0aGVuIHVzZSB0aGUgY2hpbGROb2Rlc1xuICogcHJvcGVydHkgb2YgZWFjaCBOb2RlIHRvIGFjY2VzcyBpdHMgY2hpbGRyZW4sIG9yIHRoZSBwYXJlbnQgcHJvcGVydHkgdG8gYWNjZXNzIGl0cyBwYXJlbnQuXG4gKlxuICogT3ZlcmFsbCwgdGhlIGJ1aWxkVHJlZSBmdW5jdGlvbiBpcyBhIGZsZXhpYmxlIGFuZCBwb3dlcmZ1bCB3YXkgdG8gdHJhbnNmb3JtIGZsYXQgZGF0YSBpbnRvIGhpZXJhcmNoaWNhbFxuICogc3RydWN0dXJlcywgYW5kIGNhbiBiZSBlc3BlY2lhbGx5IHVzZWZ1bCBpbiBzY2VuYXJpb3Mgc3VjaCBhcyBkaXNwbGF5aW5nIGZvbGRlciBzdHJ1Y3R1cmVzIG9yXG4gKiB2aXN1YWxpemluZyBjb21wbGV4IGRhdGEgcmVsYXRpb25zaGlwcy5cbiAqXG4gKiBMZXQncyBzYXkgeW91IGhhdmUgYW4gYXJyYXkgb2YgZGF0YSBvYmplY3RzIHJlcHJlc2VudGluZyBhIGZpbGUgc3lzdGVtIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIGFuZCB5b3Ugd2FudFxuICogdG8gdHVybiBpdCBpbnRvIGEgdHJlZS1saWtlIHN0cnVjdHVyZSB3aGVyZSBlYWNoIG5vZGUgcmVwcmVzZW50cyBhIGZvbGRlciBvciBmaWxlLCBhbmQgY2hpbGQgbm9kZXNcbiAqIHJlcHJlc2VudCB0aGUgY29udGVudHMgb2YgdGhlIGZvbGRlcjpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCBmaWxlU3lzdGVtID0gW1xuICogICB7IGlkOiAnZm9sZGVyMScsIG5hbWU6ICdGb2xkZXIgMScsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6IG51bGwgfSxcbiAqICAgeyBpZDogJ2ZpbGUxJywgbmFtZTogJ0ZpbGUgMScsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGUyJywgbmFtZTogJ0ZpbGUgMicsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ3N1YmZvbGRlcjEnLCBuYW1lOiAnU3ViZm9sZGVyIDEnLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGUzJywgbmFtZTogJ0ZpbGUgMycsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGU0JywgbmFtZTogJ0ZpbGUgNCcsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ3N1YmZvbGRlcjInLCBuYW1lOiAnU3ViZm9sZGVyIDInLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGU1JywgbmFtZTogJ0ZpbGUgNScsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZpbGU2JywgbmFtZTogJ0ZpbGUgNicsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZvbGRlcjInLCBuYW1lOiAnRm9sZGVyIDInLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiBudWxsIH0sXG4gKiAgIHsgaWQ6ICdmaWxlNycsIG5hbWU6ICdGaWxlIDcnLCB0eXBlOiAnZmlsZScsIHBhcmVudDogJ2ZvbGRlcjInIH0sXG4gKiAgIHsgaWQ6ICdmaWxlOCcsIG5hbWU6ICdGaWxlIDgnLCB0eXBlOiAnZmlsZScsIHBhcmVudDogJ2ZvbGRlcjInIH0sXG4gKiAgIHsgaWQ6ICdzdWJmb2xkZXIzJywgbmFtZTogJ1N1YmZvbGRlciAzJywgdHlwZTogJ2ZvbGRlcicsIHBhcmVudDogJ2ZvbGRlcjInIH0sXG4gKiAgIHsgaWQ6ICdmaWxlOScsIG5hbWU6ICdGaWxlIDknLCB0eXBlOiAnZmlsZScsIHBhcmVudDogJ3N1YmZvbGRlcjMnIH0sXG4gKiAgIHsgaWQ6ICdmaWxlMTAnLCBuYW1lOiAnRmlsZSAxMCcsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMycgfSxcbiAqIF07XG4gKlxuICogY29uc3QgdHJlZSA9IGJ1aWxkVHJlZShmaWxlU3lzdGVtLCAnaWQnLCAnaWQnLCAncGFyZW50JywgeyByb290UmVmZXJlbmNlczogW251bGxdIH0pO1xuICpcbiAqIGNvbnNvbGUubG9nKHRyZWUudG9TdHJpbmcoKSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgYnVpbGRUcmVlIGZ1bmN0aW9uIHRha2VzIGluIHRoZSBhcnJheSBvZiBkYXRhIG9iamVjdHMsIGFzIHdlbGwgYXMgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmeWluZ1xuICogdGhlIGtleXMgdG8gdXNlIGZvciBpZGVudGlmeWluZyBub2RlcyBhbmQgdGhlaXIgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMuIEluIHRoaXMgZXhhbXBsZSwgd2UgdXNlIHRoZSBpZFxuICoga2V5IHRvIGlkZW50aWZ5IG5vZGVzLCBhbmQgdGhlIHBhcmVudCBrZXkgdG8gc3BlY2lmeSB0aGUgcGFyZW50IG9mIGVhY2ggbm9kZS5cbiAqXG4gKiBUaGUgcmVzdWx0aW5nIHRyZWUgb2JqZWN0IGlzIGEgbmVzdGVkIHRyZWUgc3RydWN0dXJlLCB3aGVyZSBlYWNoIG5vZGUgaXMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGZpbGUgb3JcbiAqIGZvbGRlciwgYW5kIGhhcyBjaGlsZCBub2RlcyByZXByZXNlbnRpbmcgaXRzIGNvbnRlbnRzLiBUaGUgdG9TdHJpbmcgbWV0aG9kIG9mIHRoZSB0cmVlIG9iamVjdFxuICogY2FuIGJlIHVzZWQgdG8gcHJpbnQgb3V0IHRoZSB0cmVlIGluIGEgcmVhZGFibGUgZm9ybWF0OlxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiAtIEZvbGRlciAxXG4gKiAgIC0gRmlsZSAxXG4gKiAgIC0gRmlsZSAyXG4gKiAgIC0gU3ViZm9sZGVyIDFcbiAqICAgICAtIEZpbGUgM1xuICogICAgIC0gRmlsZSA0XG4gKiAgIC0gU3ViZm9sZGVyIDJcbiAqICAgICAtIEZpbGUgNVxuICogICAgIC0gRmlsZSA2XG4gKiAtIEZvbGRlciAyXG4gKiAgIC0gRmlsZSA3XG4gKiAgIC0gRmlsZSA4XG4gKiAgIC0gU3ViZm9sZGVyIDNcbiAqICAgICAtIEZpbGUgOVxuICogICAgIC0gRmlsZSAxMFxuICogYGBgXG4gKlxuICogQG1lbWJlcm9mIE1vbnN0ZXIuRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdCAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYnVpbGQgdGhlIHRyZWUgZnJvbS5cbiAqIEBwYXJhbSB7c3RyaW5nfE1vbnN0ZXIuRGF0YX5leGFtcGxlU2VsZWN0b3JDYWxsYmFja30gc2VsZWN0b3IgLSBFaXRoZXIgYSBzdHJpbmcgdG8gc3BlY2lmeSBhIHByb3BlcnR5IG9mIGVhY2ggb2JqZWN0IHRvIHVzZSBhcyBhIHNlbGVjdG9yLCBvciBhIHNlbGVjdG9yIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgbWFwIG9mIG9iamVjdHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRLZXkgLSBUaGUgcHJvcGVydHkga2V5IHRvIHVzZSBhcyB0aGUgdW5pcXVlIElEIG9mIGVhY2ggbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRJREtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgdG8gdXNlIGFzIHRoZSBwYXJlbnQgSUQgb2YgZWFjaCBub2RlLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBtb2RpZnkgdGhlIGZ1bmN0aW9uIGJlaGF2aW9yLlxuICogQHBhcmFtIHtBcnJheTwqPn0gW29wdGlvbnMucm9vdFJlZmVyZW5jZXM9W251bGwsIHVuZGVmaW5lZF1dIC0gQW4gYXJyYXkgb2YgdmFsdWVzIHRvIHRyZWF0IGFzIHJvb3QgcmVmZXJlbmNlcyB3aGVuIGNyZWF0aW5nIHRoZSB0cmVlLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gW29wdGlvbnMuZmlsdGVyXSAtIEEgZmlsdGVyIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggbm9kZS5cbiAqXG4gKiBAcmV0dXJuIHsqfSBUaGUgcmVzdWx0aW5nIHRyZWUgc3RydWN0dXJlIGFzIGEgTm9kZUxpc3QuXG4gKlxuICogQHRocm93cyB7VHlwZUVycm9yfSBzZWxlY3RvciBpcyBuZWl0aGVyIGEgc3RyaW5nIG5vciBhIGZ1bmN0aW9uLlxuICogQHRocm93cyB7VHlwZUVycm9yfSB0aGUgc2VsZWN0b3IgY2FsbGJhY2sgbXVzdCByZXR1cm4gYSBtYXAuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9iamVjdCBoYXMgbm8gdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgaWQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKlxuICogQHNpbmNlIDEuMjYuMFxuICovXG5mdW5jdGlvbiBidWlsZFRyZWUoc3ViamVjdCwgc2VsZWN0b3IsIGlkS2V5LCBwYXJlbnRJREtleSwgb3B0aW9ucykge1xuXHRjb25zdCBub2RlcyA9IG5ldyBNYXAoKTtcblxuXHRjb25zdCBtYXhEZXB0aCA9IDEwMDtcblxuXHRpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XG5cdFx0b3B0aW9ucyA9IHt9O1xuXHR9XG5cblx0b3B0aW9ucyA9IGV4dGVuZChcblx0XHR7fSxcblx0XHR7XG5cdFx0XHRyb290UmVmZXJlbmNlczogW251bGwsIHVuZGVmaW5lZF0sXG5cdFx0XHRmaWx0ZXI6IHVuZGVmaW5lZCxcblx0XHR9LFxuXHRcdG9wdGlvbnMsXG5cdCk7XG5cblx0Y29uc3QgZmlsdGVyID0gb3B0aW9ucz8uZmlsdGVyO1xuXHRsZXQgcm9vdFJlZmVyZW5jZXMgPSBvcHRpb25zLnJvb3RSZWZlcmVuY2VzO1xuXHRpZiAoIWlzQXJyYXkocm9vdFJlZmVyZW5jZXMpKSB7XG5cdFx0cm9vdFJlZmVyZW5jZXMgPSBbcm9vdFJlZmVyZW5jZXNdO1xuXHR9XG5cblx0Y29uc3QgY2hpbGRNYXAgPSBhc3NlbWJsZVBhcnRzKHN1YmplY3QsIHNlbGVjdG9yLCBmaWx0ZXIsIGZ1bmN0aW9uIChvLCBrLCBtKSB7XG5cdFx0Y29uc3Qga2V5ID0gbz8uW2lkS2V5XTtcblx0XHRsZXQgcmVmID0gbz8uW3BhcmVudElES2V5XTtcblx0XHRpZiAocm9vdFJlZmVyZW5jZXMuaW5kZXhPZihyZWYpICE9PSAtMSkgcmVmID0gcm9vdFN5bWJvbDtcblxuXHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIG9iamVjdCBoYXMgbm8gdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgaWRcIik7XG5cdFx0fVxuXG5cdFx0b1twYXJlbnRTeW1ib2xdID0gcmVmO1xuXG5cdFx0Y29uc3Qgbm9kZSA9IG5ldyBOb2RlKG8pO1xuXHRcdHRoaXMuaGFzKHJlZilcblx0XHRcdD8gdGhpcy5nZXQocmVmKS5hZGQobm9kZSlcblx0XHRcdDogdGhpcy5zZXQocmVmLCBuZXcgTm9kZUxpc3QoKS5hZGQobm9kZSkpO1xuXHRcdG5vZGVzLnNldChrZXksIG5vZGUpO1xuXHR9KTtcblxuXHRub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0Y29uc3QgaWQgPSBub2RlPy5bXCJ2YWx1ZVwiXT8uW2lkS2V5XTtcblxuXHRcdGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgb2JqZWN0IGhhcyBubyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBpZFwiKTtcblx0XHR9XG5cblx0XHRpZiAoY2hpbGRNYXAuaGFzKGlkKSkge1xuXHRcdFx0bm9kZS5jaGlsZE5vZGVzID0gY2hpbGRNYXAuZ2V0KGlkKTtcblx0XHRcdGNoaWxkTWFwLmRlbGV0ZShpZCk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBsaXN0ID0gbmV3IE5vZGVMaXN0KCk7XG5cblx0Y2hpbGRNYXAuZm9yRWFjaCgocykgPT4ge1xuXHRcdGlmIChzIGluc3RhbmNlb2YgU2V0KSB7XG5cdFx0XHRzLmZvckVhY2goKG4pID0+IHtcblx0XHRcdFx0bGlzdC5hZGQobik7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBsaXN0O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0luc3RhbmNlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcIi4vbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4vbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IE5vZGVSZWN1cnNpdmVJdGVyYXRvciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpc05vZGVMaXN0U3ltYm9sID0gU3ltYm9sKFwiaXNOb2RlTGlzdFwiKTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVjdXJzaXZlIGl0ZXJhdG9yIGZvciB0cmF2ZXJzaW5nIG5vZGVzIGluIGEgRE9NIHRyZWUuXG4gKlxuICogQHNpbmNlIDEuMjYuMFxuICogQHN1bW1hcnkgQW4gaXRlcmF0b3IgdG8gcnVuIHJlY3Vyc2l2ZWx5IHRocm91Z2ggYSB0cmVlIG9mIG5vZGVzXG4gKiBAZXh0ZW5kcyBCYXNlXG4gKi9cbmNsYXNzIE5vZGVSZWN1cnNpdmVJdGVyYXRvciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIG5vZGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKG5vZGUpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1tpc05vZGVMaXN0U3ltYm9sXSA9IGZhbHNlO1xuXG5cdFx0Ly8gaXRlcmF0b3IgaXMgYSBOb2RlTGlzdFxuXHRcdGlmIChpc0luc3RhbmNlKG5vZGUsIE5vZGVMaXN0KSkge1xuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBub2RlO1xuXHRcdFx0Y29uc3QgbiA9IG5ldyBOb2RlKCk7XG5cdFx0XHRuLmNoaWxkTm9kZXMgPSBjaGlsZHJlbjtcblx0XHRcdHRoaXNbaXNOb2RlTGlzdFN5bWJvbF0gPSB0cnVlO1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBuO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gdmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy95aWVsZFxuXHQgKi9cblx0W1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiogKCkge1xuXHRcdC8qKlxuXHRcdCAqIFRoZSBlbmQgb2YgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBpcyByZWFjaGVkLiBJbiB0aGlzIGNhc2UsIGV4ZWN1dGlvbiBvZiB0aGUgZ2VuZXJhdG9yXG5cdFx0ICogZW5kcyBhbmQgYW4gSXRlcmF0b3JSZXN1bHQgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciBpbiB3aGljaCB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCBkb25lIGlzIHRydWUuXG5cdFx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMveWllbGRcblx0XHQgKi9cblx0XHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGl0ZXJhdG9yIGlzIGEgbm9kZWxpc3QgYW5kIHRoZSBtYWluIG5vZGUgaXMgb25seSBhIHBsYWNlaG9sZGVyXG5cdFx0aWYgKHRoaXNbaXNOb2RlTGlzdFN5bWJvbF0gIT09IHRydWUpIHtcblx0XHRcdHlpZWxkIHRoaXNbaW50ZXJuYWxTeW1ib2xdO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXS5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5jaGlsZE5vZGVzO1xuXG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgY2hpbGROb2Rlcykge1xuXHRcdFx0XHR5aWVsZCogbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEByZXR1cm4ge05vZGVSZWN1cnNpdmVJdGVyYXRvcn1cblx0ICovXG5cdGZvckVhY2goY2FsbGJhY2spIHtcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcykge1xuXHRcdFx0Y2FsbGJhY2sobm9kZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgVHJlZVNlbGVjdFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFRyZWVTZWxlY3RTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0VHJlZVNlbGVjdFN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgdHJlZXNlbGVjdCB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWJhZGdlXXtkaXNwbGF5OmlubGluZS1mbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25de2Rpc3BsYXk6ZmxleH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItc3RhdGU9b3Blbl1bZGF0YS1tb25zdGVyLWhhcy1jaGlsZHJlbj10cnVlXSBbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJde2NvbnRlbnQ6dXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7IHV0ZjgsIDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB3aWR0aD1cXFwiMTZcXFwiIGhlaWdodD1cXFwiMTZcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIj48cGF0aCBkPVxcXCJNMi41IDBjLS4xNjYgMC0uMzMuMDE2LS40ODcuMDQ4bC4xOTQuOThBMS41MSAxLjUxIDAgMCAxIDIuNSAxaC40NThWMEgyLjV6bTIuMjkyIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTZ2MWguOTE2VjB6bTEuODM0IDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6TTEzLjUgMGgtLjQ1OHYxaC40NThjLjEgMCAuMTk5LjAxLjI5My4wMjlsLjE5NC0uOTgxQTIuNTEgMi41MSAwIDAgMCAxMy41IDB6bTIuMDc5IDEuMTFhMi41MTEgMi41MTEgMCAwIDAtLjY5LS42ODlsLS41NTYuODMxYy4xNjQuMTEuMzA1LjI1MS40MTUuNDE1bC44My0uNTU2ek0xLjExLjQyMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjg5LjY5bC44MzEuNTU2Yy4xMS0uMTY0LjI1MS0uMzA1LjQxNS0uNDE1TDEuMTEuNDIyek0xNiAyLjVjMC0uMTY2LS4wMTYtLjMzLS4wNDgtLjQ4N2wtLjk4LjE5NGMuMDE4LjA5NC4wMjguMTkyLjAyOC4yOTN2LjQ1OGgxVjIuNXpNLjA0OCAyLjAxM0EyLjUxIDIuNTEgMCAwIDAgMCAyLjV2LjQ1OGgxVjIuNWMwLS4xLjAxLS4xOTkuMDI5LS4yOTNsLS45ODEtLjE5NHpNMCAzLjg3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNS43MDh2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxek0wIDcuNTQydi45MTZoMXYtLjkxNkgwem0xNSAuOTE2aDF2LS45MTZoLTF2LjkxNnpNMCA5LjM3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6bS0xNiAuOTE2di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTd2LjQ1OGMwIC4xNjYuMDE2LjMzLjA0OC40ODdsLjk4LS4xOTRBMS41MSAxLjUxIDAgMCAxIDEgMTMuNXYtLjQ1OEgwem0xNiAuNDU4di0uNDU4aC0xdi40NThjMCAuMS0uMDEuMTk5LS4wMjkuMjkzbC45ODEuMTk0Yy4wMzItLjE1OC4wNDgtLjMyLjA0OC0uNDg3ek0uNDIxIDE0Ljg5Yy4xODMuMjcyLjQxNy41MDYuNjkuNjg5bC41NTYtLjgzMWExLjUxIDEuNTEgMCAwIDEtLjQxNS0uNDE1bC0uODMuNTU2em0xNC40NjkuNjg5Yy4yNzItLjE4My41MDYtLjQxNy42ODktLjY5bC0uODMxLS41NTZjLS4xMS4xNjQtLjI1MS4zMDUtLjQxNS40MTVsLjU1Ni44M3ptLTEyLjg3Ny4zNzNjLjE1OC4wMzIuMzIuMDQ4LjQ4Ny4wNDhoLjQ1OHYtMUgyLjVjLS4xIDAtLjE5OS0uMDEtLjI5My0uMDI5bC0uMTk0Ljk4MXpNMTMuNSAxNmMuMTY2IDAgLjMzLS4wMTYuNDg3LS4wNDhsLS4xOTQtLjk4QTEuNTEgMS41MSAwIDAgMSAxMy41IDE1aC0uNDU4djFoLjQ1OHptLTkuNjI1IDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXptMS44MzQgMGguOTE2di0xaC0uOTE2djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXpNNC41IDcuNWEuNS41IDAgMCAwIDAgMWg3YS41LjUgMCAwIDAgMC0xaC03elxcXCIvPjwvc3ZnPicpO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEzcHg7bWFyZ2luLXJpZ2h0OjhweDt3aWR0aDoxM3B4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1zdGF0ZT1jbG9zZV1bZGF0YS1tb25zdGVyLWhhcy1jaGlsZHJlbj10cnVlXSBbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJde2NvbnRlbnQ6dXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7IHV0ZjgsIDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB3aWR0aD1cXFwiMTZcXFwiIGhlaWdodD1cXFwiMTZcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIj48cGF0aCBkPVxcXCJNMi41IDBjLS4xNjYgMC0uMzMuMDE2LS40ODcuMDQ4bC4xOTQuOThBMS41MSAxLjUxIDAgMCAxIDIuNSAxaC40NThWMEgyLjV6bTIuMjkyIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTZ2MWguOTE2VjB6bTEuODM0IDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6TTEzLjUgMGgtLjQ1OHYxaC40NThjLjEgMCAuMTk5LjAxLjI5My4wMjlsLjE5NC0uOTgxQTIuNTEgMi41MSAwIDAgMCAxMy41IDB6bTIuMDc5IDEuMTFhMi41MTEgMi41MTEgMCAwIDAtLjY5LS42ODlsLS41NTYuODMxYy4xNjQuMTEuMzA1LjI1MS40MTUuNDE1bC44My0uNTU2ek0xLjExLjQyMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjg5LjY5bC44MzEuNTU2Yy4xMS0uMTY0LjI1MS0uMzA1LjQxNS0uNDE1TDEuMTEuNDIyek0xNiAyLjVjMC0uMTY2LS4wMTYtLjMzLS4wNDgtLjQ4N2wtLjk4LjE5NGMuMDE4LjA5NC4wMjguMTkyLjAyOC4yOTN2LjQ1OGgxVjIuNXpNLjA0OCAyLjAxM0EyLjUxIDIuNTEgMCAwIDAgMCAyLjV2LjQ1OGgxVjIuNWMwLS4xLjAxLS4xOTkuMDI5LS4yOTNsLS45ODEtLjE5NHpNMCAzLjg3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNS43MDh2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxek0wIDcuNTQydi45MTZoMXYtLjkxNkgwem0xNSAuOTE2aDF2LS45MTZoLTF2LjkxNnpNMCA5LjM3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6bS0xNiAuOTE2di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTd2LjQ1OGMwIC4xNjYuMDE2LjMzLjA0OC40ODdsLjk4LS4xOTRBMS41MSAxLjUxIDAgMCAxIDEgMTMuNXYtLjQ1OEgwem0xNiAuNDU4di0uNDU4aC0xdi40NThjMCAuMS0uMDEuMTk5LS4wMjkuMjkzbC45ODEuMTk0Yy4wMzItLjE1OC4wNDgtLjMyLjA0OC0uNDg3ek0uNDIxIDE0Ljg5Yy4xODMuMjcyLjQxNy41MDYuNjkuNjg5bC41NTYtLjgzMWExLjUxIDEuNTEgMCAwIDEtLjQxNS0uNDE1bC0uODMuNTU2em0xNC40NjkuNjg5Yy4yNzItLjE4My41MDYtLjQxNy42ODktLjY5bC0uODMxLS41NTZjLS4xMS4xNjQtLjI1MS4zMDUtLjQxNS40MTVsLjU1Ni44M3ptLTEyLjg3Ny4zNzNjLjE1OC4wMzIuMzIuMDQ4LjQ4Ny4wNDhoLjQ1OHYtMUgyLjVjLS4xIDAtLjE5OS0uMDEtLjI5My0uMDI5bC0uMTk0Ljk4MXpNMTMuNSAxNmMuMTY2IDAgLjMzLS4wMTYuNDg3LS4wNDhsLS4xOTQtLjk4QTEuNTEgMS41MSAwIDAgMSAxMy41IDE1aC0uNDU4djFoLjQ1OHptLTkuNjI1IDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXptMS44MzQtMXYxaC45MTZ2LTFoLS45MTZ6bTEuODMzIDFoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXpNOC41IDQuNWEuNS41IDAgMCAwLTEgMHYzaC0zYS41LjUgMCAwIDAgMCAxaDN2M2EuNS41IDAgMCAwIDEgMHYtM2gzYS41LjUgMCAwIDAgMC0xaC0zdi0zelxcXCIvPjwvc3ZnPicpO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEzcHg7bWFyZ2luLXJpZ2h0OjhweDt3aWR0aDoxM3B4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PWhpZGRlbl17ZGlzcGxheTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PXZpc2libGVde2Rpc3BsYXk6ZmxleH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuPWZhbHNlXSBbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJde2NvbnRlbnQ6XFxcIiBcXFwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEzcHg7bWFyZ2luLXJpZ2h0OjhweDt3aWR0aDoxM3B4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjBcXFwiXXtkaXNwbGF5OmZsZXg7bWFyZ2luOjB9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiMVxcXCJde21hcmdpbjowIDAgMCAyMHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjJcXFwiXXttYXJnaW46MCAwIDAgNDBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCIzXFxcIl17bWFyZ2luOjAgMCAwIDYwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiNFxcXCJde21hcmdpbjowIDAgMCA4MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjVcXFwiXXttYXJnaW46MCAwIDAgMTAwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiNlxcXCJde21hcmdpbjowIDAgMCAxMTBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCI3XFxcIl17bWFyZ2luOjAgMCAwIDEyMHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjhcXFwiXXttYXJnaW46MCAwIDAgMTMwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWZpbHRlcmVkPXRydWVde2Rpc3BsYXk6bm9uZX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgYnVpbGRUcmVlIH0gZnJvbSBcIi4uLy4uL2RhdGEvYnVpbGR0cmVlLm1qc1wiO1xuaW1wb3J0IHsgZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9ST0xFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7XG5cdGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50LFxuXHRmaXJlQ3VzdG9tRXZlbnQsXG5cdGZpcmVFdmVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVSZWN1cnNpdmVJdGVyYXRvciB9IGZyb20gXCIuLi8uLi90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0ZPUk1fVVJMLCBBVFRSSUJVVEVfSU5URU5EIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSBcIi4vc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHsgU2VsZWN0U3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHsgVHJlZVNlbGVjdFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3RyZWUtc2VsZWN0Lm1qc1wiO1xuXG5leHBvcnQgeyBUcmVlU2VsZWN0LCBmb3JtYXRIaWVyYXJjaGljYWxTZWxlY3Rpb24gfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxOb2Rlc1N5bWJvbCA9IFN5bWJvbChcImludGVybmFsTm9kZXNcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGtleUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImtleUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBBIHRyZWUgc2VsZWN0IGNvbnRyb2wgaXMgYSBzZWxlY3QgY29udHJvbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBhIHZhbHVlIGZyb20gYSB0cmVlIHN0cnVjdHVyZS5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0XG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdFxuICpcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHRyZWUgc2VsZWN0IGNvbnRyb2wgd2l0aCBhIGxvdCBvZiBvcHRpb25zXG4gKiBAZmlyZXMgbW9uc3Rlci1vcHRpb25zLXNldFxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0ZWRcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZVxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlZFxuICovXG5jbGFzcyBUcmVlU2VsZWN0IGV4dGVuZHMgU2VsZWN0IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vdHJlZS1zZWxlY3RAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQGV4dGVuZHMgU2VsZWN0XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnJvb3RSZWZlcmVuY2VzPVsnMCcsIHVuZGVmaW5lZCwgbnVsbF1cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcuaWRUZW1wbGF0ZT1pZFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy5wYXJlbnRUZW1wbGF0ZT1wYXJlbnRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcuc2VsZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmb3JtYXR0ZXJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZvcm1hdHRlci5zZXBhcmF0b3I9XCIgLyBcIlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHJvb3RSZWZlcmVuY2VzOiBbXCIwXCIsIHVuZGVmaW5lZCwgbnVsbF0sXG5cdFx0XHRcdFx0aWRUZW1wbGF0ZTogXCJpZFwiLFxuXHRcdFx0XHRcdHBhcmVudFRlbXBsYXRlOiBcInBhcmVudFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmb3JtYXR0ZXI6IHtcblx0XHRcdFx0XHRzZWxlY3Rpb246IGZvcm1hdEhpZXJhcmNoaWNhbFNlbGVjdGlvbixcblx0XHRcdFx0XHRzZXBhcmF0b3I6IFwiIC8gXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdHJlZS1zZWxlY3RcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1NlbGVjdFN0eWxlU2hlZXQsIFRyZWVTZWxlY3RTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbXBvcnQgU2VsZWN0IE9wdGlvbnMgZnJvbSBkYXRhc2V0XG5cdCAqIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBjb250cm9sIGRlZmF1bHRzL29wdGlvbnNcblx0ICpcblx0ICogQHBhcmFtIHthcnJheXxvYmplY3R8TWFwfFNldH0gZGF0YVxuXHQgKiBAcmV0dXJuIHtTZWxlY3R9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtYXAgaXMgbm90IGl0ZXJhYmxlXG5cdCAqL1xuXHRpbXBvcnRPcHRpb25zKGRhdGEpIHtcblx0XHR0aGlzW2ludGVybmFsTm9kZXNTeW1ib2xdID0gbmV3IE1hcCgpO1xuXG5cdFx0Y29uc3QgbWFwcGluZ09wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm1hcHBpbmdcIiwge30pO1xuXG5cdFx0Y29uc3QgZmlsdGVyID0gbWFwcGluZ09wdGlvbnM/LltcImZpbHRlclwiXTtcblx0XHRjb25zdCByb290UmVmZXJlbmNlcyA9IG1hcHBpbmdPcHRpb25zPy5bXCJyb290UmVmZXJlbmNlc1wiXTtcblxuXHRcdGNvbnN0IGlkID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLmlkVGVtcGxhdGVcIiwgXCJpZFwiKTtcblx0XHRjb25zdCBwYXJlbnRJRCA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy5wYXJlbnRUZW1wbGF0ZVwiLCBcInBhcmVudFwiKTtcblxuXHRcdGNvbnN0IHNlbGVjdG9yID0gbWFwcGluZ09wdGlvbnM/LltcInNlbGVjdG9yXCJdO1xuXG5cdFx0Y29uc3Qgbm9kZXMgPSBidWlsZFRyZWUoZGF0YSwgc2VsZWN0b3IsIGlkLCBwYXJlbnRJRCwge1xuXHRcdFx0ZmlsdGVyLFxuXHRcdFx0cm9vdFJlZmVyZW5jZXMsXG5cdFx0fSk7XG5cblx0XHRjb25zdCBvcHRpb25zID0gW107XG5cdFx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0XHRjb25zdCBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3Iobm9kZSk7XG5cdFx0XHRmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcblx0XHRcdFx0Y29uc3QgZm9ybWF0dGVkVmFsdWVzID0gZm9ybWF0S2V5TGFiZWwuY2FsbCh0aGlzLCBuKTtcblxuXHRcdFx0XHRjb25zdCBsYWJlbCA9IGZvcm1hdHRlZFZhbHVlcy5sYWJlbDtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBmb3JtYXR0ZWRWYWx1ZXMudmFsdWU7XG5cdFx0XHRcdGNvbnN0IGludGVuZCA9IG4ubGV2ZWw7XG5cblx0XHRcdFx0Y29uc3QgdmlzaWJpbGl0eSA9IGludGVuZCA+IDAgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XG5cdFx0XHRcdGNvbnN0IHN0YXRlID0gXCJjbG9zZVwiO1xuXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxOb2Rlc1N5bWJvbF0uc2V0KHZhbHVlLCBuKTtcblxuXHRcdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdGxhYmVsLFxuXHRcdFx0XHRcdGludGVuZCxcblx0XHRcdFx0XHRzdGF0ZSxcblx0XHRcdFx0XHR2aXNpYmlsaXR5LFxuXHRcdFx0XHRcdFtcImhhcy1jaGlsZHJlblwiXTogbi5oYXNDaGlsZE5vZGVzKCksXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuc2V0T3B0aW9uKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3B0aW9ucy1zZXRcIiwge1xuXHRcdFx0b3B0aW9ucyxcblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlNlbGVjdH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBldmVudFxuICovXG5mdW5jdGlvbiBoYW5kbGVPcHRpb25LZXlib2FyZEV2ZW50cyhldmVudCkge1xuXHRzd2l0Y2ggKGV2ZW50Py5bXCJjb2RlXCJdKSB7XG5cdFx0Y2FzZSBcIkFycm93TGVmdFwiOlxuXHRcdFx0Y2xvc2VPck9wZW5DdXJyZW50T3B0aW9uLmNhbGwodGhpcywgZXZlbnQsIFwiY2xvc2VcIik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkFycm93UmlnaHRcIjpcblx0XHRcdGNsb3NlT3JPcGVuQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIGV2ZW50LCBcIm9wZW5cIik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtldmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gY2xvc2VPck9wZW5DdXJyZW50T3B0aW9uKGV2ZW50LCBtb2RlKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZXZlbnQsIEV2ZW50KTtcblxuXHRpZiAodHlwZW9mIGV2ZW50LmNvbXBvc2VkUGF0aCAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgZXZlbnRcIik7XG5cdH1cblxuXHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdGNvbnN0IG9wdGlvbk5vZGUgPSBwYXRoLnNoaWZ0KCk7XG5cblx0Y29uc3Qgc3RhdGUgPSBvcHRpb25Ob2RlLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1zdGF0ZVwiKTtcblx0aWYgKHN0YXRlICE9PSBtb2RlKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IG9wdGlvbk5vZGUucXVlcnlTZWxlY3Rvcihcblx0XHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWZvbGRlci1oYW5kbGVyXVwiLFxuXHRcdCk7XG5cdFx0aWYgKGhhbmRsZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0ZmlyZUV2ZW50KGhhbmRsZXIsIFwiY2xpY2tcIik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHJldHVybiB7YXJyYXk8bGFiZWwsIHZhbHVlPn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEtleUxhYmVsKG5vZGUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKTtcblxuXHRjb25zdCBsYWJlbCA9IG5ldyBGb3JtYXR0ZXIobm9kZS52YWx1ZSkuZm9ybWF0KFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy5sYWJlbFRlbXBsYXRlXCIsIFwiXCIpLFxuXHQpO1xuXHRjb25zdCB2YWx1ZSA9IG5ldyBGb3JtYXR0ZXIobm9kZS52YWx1ZSkuZm9ybWF0KFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy52YWx1ZVRlbXBsYXRlXCIsIFwiXCIpLFxuXHQpO1xuXG5cdHJldHVybiB7XG5cdFx0dmFsdWUsXG5cdFx0bGFiZWwsXG5cdH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVHJlZUxhYmVscyh2YWx1ZSkge1xuXHRsZXQgbm9kZSA9IHRoaXNbaW50ZXJuYWxOb2Rlc1N5bWJvbF0uZ2V0KHZhbHVlKTtcblx0aWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG5vZGUgPSB0aGlzW2ludGVybmFsTm9kZXNTeW1ib2xdLmdldChwYXJzZUludCh2YWx1ZSkpO1xuXHR9XG5cblx0Y29uc3QgcGFydHMgPSBbXTtcblxuXHRpZiAobm9kZSBpbnN0YW5jZW9mIE5vZGUpIHtcblx0XHRsZXQgcHRyID0gbm9kZTtcblx0XHR3aGlsZSAocHRyKSB7XG5cdFx0XHRjb25zdCBmb3JtYXR0ZWRWYWx1ZXMgPSBmb3JtYXRLZXlMYWJlbC5jYWxsKHRoaXMsIHB0cik7XG5cdFx0XHRwYXJ0cy51bnNoaWZ0KGZvcm1hdHRlZFZhbHVlcy5sYWJlbCk7XG5cdFx0XHRwdHIgPSBwdHIucGFyZW50O1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwYXJ0cztcbn1cblxuLyoqXG4gKiBUaGlzIGZvcm1hdHRlciBjYW4gZm9ybWF0IGEgbGFiZWwgaGllcmFyY2hpY2FsbHkuXG4gKiBUaGUgb3B0aW9uIGBmb3JtYXR0ZXIuc2VwYXJhdG9yYCBkZXRlcm1pbmVzIHRoZSBzZXBhcmF0b3IuXG4gKlxuICogYGBgXG4gKiBhIC8gYiAvIGNcbiAqIGBgYFxuICpcbiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHBhc3NlZCBhcyBhcmd1bWVudCBvZiB0aGUgb3B0aW9uIGBmb3JtYXR0ZXIuc2VsZWN0aW9uOmAuXG4gKlxuICogQHNpbmNlIDEuOS4wXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEhpZXJhcmNoaWNhbFNlbGVjdGlvbih2YWx1ZSkge1xuXHRyZXR1cm4gYnVpbGRUcmVlTGFiZWxzXG5cdFx0LmNhbGwodGhpcywgdmFsdWUpXG5cdFx0LmpvaW4odGhpcy5nZXRPcHRpb24oXCJmb3JtYXR0ZXIuc2VwYXJhdG9yXCIsIFwiIC8gXCIpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3Blbk9wdGlvbkV2ZW50SGFuZGxlciA9IFN5bWJvbChcIm9wZW5PcHRpb25FdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbb3Blbk9wdGlvbkV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJmb2xkZXItaGFuZGxlclwiLFxuXHRcdCk7XG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbnRhaW5lciA9IGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZWxlbWVudCwgQVRUUklCVVRFX1JPTEUsIFwib3B0aW9uXCIpO1xuXHRcdGNvbnN0IGluZGV4ID0gY29udGFpbmVyXG5cdFx0XHQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UpXG5cdFx0XHQuc3BsaXQoXCItXCIpXG5cdFx0XHQucG9wKCk7XG5cblx0XHRjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmdldE9wdGlvbihgb3B0aW9ucy4ke2luZGV4fS5zdGF0ZWApO1xuXG5cdFx0Y29uc3QgbmV3U3RhdGUgPSBjdXJyZW50U3RhdGUgPT09IFwiY2xvc2VcIiA/IFwib3BlblwiIDogXCJjbG9zZVwiO1xuXHRcdHRoaXMuc2V0T3B0aW9uKGBvcHRpb25zLiR7aW5kZXh9LnN0YXRlYCwgbmV3U3RhdGUpO1xuXG5cdFx0Y29uc3QgbmV3VmlzaWJpbGl0eSA9IG5ld1N0YXRlID09PSBcIm9wZW5cIiA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIjtcblxuXHRcdGlmIChjb250YWluZXIuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpKSB7XG5cdFx0XHRjb25zdCBpbnRlbmQgPSBjb250YWluZXIuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpO1xuXG5cdFx0XHRsZXQgcmVmID0gY29udGFpbmVyLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdGNvbnN0IGNoaWxkSW50ZW5kID0gcGFyc2VJbnQoaW50ZW5kKSArIDE7XG5cblx0XHRcdGNvbnN0IGNtcCA9IChhLCBiKSA9PiB7XG5cdFx0XHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJvcGVuXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gYSA9PT0gYjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBhID49IGI7XG5cdFx0XHR9O1xuXG5cdFx0XHR3aGlsZSAoXG5cdFx0XHRcdHJlZj8uaGFzQXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpICYmXG5cdFx0XHRcdGNtcChwYXJzZUludChyZWYuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpKSwgY2hpbGRJbnRlbmQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgcmVmSW5kZXggPSByZWZcblx0XHRcdFx0XHQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UpXG5cdFx0XHRcdFx0LnNwbGl0KFwiLVwiKVxuXHRcdFx0XHRcdC5wb3AoKTtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtyZWZJbmRleH0udmlzaWJpbGl0eWAsIG5ld1Zpc2liaWxpdHkpO1xuXG5cdFx0XHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZVwiKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtyZWZJbmRleH0uc3RhdGVgLCBcImNsb3NlXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVmID0gcmVmLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dGhpc1trZXlFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBwYXRoPy5bMF07XG5cblx0XHRsZXQgcm9sZTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkpIHtcblx0XHRcdFx0cm9sZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKTtcblx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRzaG93LmNhbGwodGhpcyk7XG5cdFx0XHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBlID0gZWxlbWVudC5jbG9zZXN0KGBbJHtBVFRSSUJVVEVfUk9MRX1dYCk7XG5cdFx0XHRcdGlmIChlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZS5oYXNBdHRyaWJ1dGUoKSkge1xuXHRcdFx0XHRcdHJvbGUgPSBlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHN3aXRjaCAocm9sZSkge1xuXHRcdFx0Y2FzZSBcIm9wdGlvbi1sYWJlbFwiOlxuXHRcdFx0Y2FzZSBcIm9wdGlvbi1jb250cm9sXCI6XG5cdFx0XHRjYXNlIFwib3B0aW9uXCI6XG5cdFx0XHRcdGhhbmRsZU9wdGlvbktleWJvYXJkRXZlbnRzLmNhbGwodGhpcywgZXZlbnQpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH07XG5cblx0dGhpcy5zaGFkb3dSb290LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXNba2V5RXZlbnRIYW5kbGVyXSk7XG5cdHRoaXMuc2hhZG93Um9vdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpc1tvcGVuT3B0aW9uRXZlbnRIYW5kbGVyXSk7XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1zZWxlY3QgZGF0YS1tb25zdGVyLXVybD1cImh0dHBzOi8vZXhhbXBsZS5jb20vXCI+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cdGlmIChpc1N0cmluZyh1cmwpKSB7XG5cdFx0b3B0aW9uc1tcInVybFwiXSA9IG5ldyBVUkwodXJsKS50b1N0cmluZygpO1xuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaW50ZW5kIHBhdGg6b3B0aW9ucy5pbnRlbmQsIFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItc3RhdGUgcGF0aDpvcHRpb25zLnN0YXRlLCBcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXZpc2liaWxpdHkgcGF0aDpvcHRpb25zLnZpc2liaWxpdHksIFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItZmlsdGVyZWQgcGF0aDpvcHRpb25zLmZpbHRlcmVkLFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuIHBhdGg6b3B0aW9ucy5oYXMtY2hpbGRyZW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZm9sZGVyLWhhbmRsZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgcGFydD1cIm9wdGlvblwiIHJvbGU9XCJvcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJcbiAgICAgICAgICAgIHR5cGUgcGF0aDp0eXBlLFxuICAgICAgICAgICAgcm9sZSBwYXRoOnJvbGUsXG4gICAgICAgICAgICB2YWx1ZSBwYXRoOm9wdGlvbnMudmFsdWUsIFxuICAgICAgICAgICAgbmFtZSBwYXRoOm5hbWUsIFxuICAgICAgICAgICAgcGFydCBwYXRoOnR5cGUgfCBwcmVmaXg6b3B0aW9uLSB8IHN1ZmZpeDogZm9ybVxuICAgICAgICAgICAgXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6b3B0aW9ucyB8IGluZGV4OmxhYmVsXCIgcGFydD1cIm9wdGlvbi1sYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHRlbXBsYXRlIGlkPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICBwYXJ0PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItdmFsdWUgcGF0aDpzZWxlY3Rpb24gfCBpbmRleDp2YWx1ZSwgXG4gICAgICAgICAgICAgICAgIGNsYXNzIHBhdGg6Y2xhc3NlcyB8IGluZGV4OmJhZGdlLCBcbiAgICAgICAgcGFydCBwYXRoOnR5cGUgfCBzdWZmaXg6LW9wdGlvbiB8IHByZWZpeDogZm9ybS1cIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6c2VsZWN0aW9uIHwgaW5kZXg6bGFiZWxcIiBwYXJ0PVwiYmFkZ2UtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJiYWRnZS1sYWJlbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cInJlbW92ZS1iYWRnZVwiIGRhdGEtbW9uc3Rlci1zZWxlY3QtdGhpc1xuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmZlYXR1cmVzLmNsZWFyIHwgPzo6aGlkZGVuIFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cInJlbW92ZS1iYWRnZVwiIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDxzbG90IGNsYXNzPVwiaGlkZGVuXCI+PC9zbG90PlxuXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICBcXCR7c2VsZWN0ZWR9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tZmlsdGVyLWNvbnRyb2xcIiByb2xlPVwic2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHJvbGU9XCJzZWFyY2hib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydD1cInBvcHBlci1maWx0ZXJcIiBuYW1lPVwicG9wcGVyLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwiY29udGVudFwiIGNsYXNzPVwiZmxleFwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwib3B0aW9ucyBwYXRoOm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJuby1vcHRpb25zXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJuby1vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5lbXB0eU9wdGlvbnNcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBwYXJ0PVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZSB8IHN1ZmZpeDpcXFxcIHN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUcmVlU2VsZWN0KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBUb2dnbGVTd2l0Y2hTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBUb2dnbGVTd2l0Y2hTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0VG9nZ2xlU3dpdGNoU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciB0b2dnbGVzd2l0Y2ggeyBcbjphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmF5LTE6I2Y2ZjZmNjstLW1vbnN0ZXItY29sb3ItZ3JheS0yOiNlMmUyZTI7LS1tb25zdGVyLWNvbG9yLWdyYXktMzojOGI4YjhiOy0tbW9uc3Rlci1jb2xvci1ncmF5LTQ6IzZmNmY2ZjstLW1vbnN0ZXItY29sb3ItZ3JheS01OiMzZTNlM2U7LS1tb25zdGVyLWNvbG9yLWdyYXktNjojMjIyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTE6I2ZmZjdmOTstLW1vbnN0ZXItY29sb3Itcm9zZS0yOiNmZmRjZTU7LS1tb25zdGVyLWNvbG9yLXJvc2UtMzojZmYzYjhkOy0tbW9uc3Rlci1jb2xvci1yb3NlLTQ6I2RiMDA3MjstLW1vbnN0ZXItY29sb3Itcm9zZS01OiM4MDAwNDA7LS1tb25zdGVyLWNvbG9yLXJvc2UtNjojNGMwMDIzOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMTojZmZmOGY4Oy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMjojZmZkZGRmOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMzojZmY0MjZjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNDojZGUwMDUxOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNTojODIwMDJjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNjojNTEwMDE4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMTojZmZmOGY2Oy0tbW9uc3Rlci1jb2xvci1yZWQtMjojZmZkZGQ4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMzojZmY0NjQ3Oy0tbW9uc3Rlci1jb2xvci1yZWQtNDojZTAwMDJiOy0tbW9uc3Rlci1jb2xvci1yZWQtNTojODMwMDE0Oy0tbW9uc3Rlci1jb2xvci1yZWQtNjojNTMwMDAzOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMTojZmZmOGY1Oy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMjojZmZkZWQxOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMzojZmQ0ZDAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNDojY2QzYzAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNTojNzUyMTAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNjojNDAxNjAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xOiNmZmY4ZjM7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTI6I2ZmZGZjNjstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMzojZDU3MzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi00OiNhYzVjMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTU6IzYzMzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNjojMzcxZDAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci0xOiNmZmY4ZWY7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTI6I2ZmZTBiMjstLW1vbnN0ZXItY29sb3ItYW1iZXItMzojYjk4MzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci00OiM5MjY3MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTU6IzUyMzgwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNjojMzAyMTAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMTojZmZmOWU1Oy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMjojZmZlNTNlOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMzojOWM4YjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNDojN2Q2ZjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNTojNDYzZDAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNjojMjkyMzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTE6I2Y3ZmZhYzstLW1vbnN0ZXItY29sb3ItbGltZS0yOiNkNWYyMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMzojODE5MzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTQ6IzY3NzYwMDstLW1vbnN0ZXItY29sb3ItbGltZS01OiMzOTQxMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNjojMjIyNjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTE6I2U1ZmZjMzstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0yOiM5OGZiMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMzojNWM5YjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTQ6IzQ5N2MwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS01OiMyNjQ1MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNjojMTgyNjAwOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0xOiNlMGZmZDk7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTI6IzcyZmY2YzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMzojMDBhMjFmOy0tbW9uc3Rlci1jb2xvci1ncmVlbi00OiMwMDgyMTc7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTU6IzAwNDkwODstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNjojMDYyODAwOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTE6I2RjZmZlNjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0yOiM1ZGZmYTI7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMzojMDBhMDVhOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTQ6IzAwODE0NzstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC01OiMwMDQ4MjU7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNjojMDAyODEyOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTE6I2RhZmZlZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0yOiM0MmZmYzY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMzojMDA5Zjc4Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTQ6IzAwN2Y1ZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS01OiMwMDQ3MzQ7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNjojMDAyODFiOy0tbW9uc3Rlci1jb2xvci10ZWFsLTE6I2Q3ZmZmNzstLW1vbnN0ZXItY29sb3ItdGVhbC0yOiMwMGZmZTQ7LS1tb25zdGVyLWNvbG9yLXRlYWwtMzojMDA5ZThjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTQ6IzAwN2M2ZTstLW1vbnN0ZXItY29sb3ItdGVhbC01OiMwMDQ0M2M7LS1tb25zdGVyLWNvbG9yLXRlYWwtNjojMDAyNzIyOy0tbW9uc3Rlci1jb2xvci1jeWFuLTE6I2M0ZmZmZTstLW1vbnN0ZXItY29sb3ItY3lhbi0yOiMwMGZhZmI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMzojMDA5OTlhOy0tbW9uc3Rlci1jb2xvci1jeWFuLTQ6IzAwN2E3YjstLW1vbnN0ZXItY29sb3ItY3lhbi01OiMwMDQzNDQ7LS1tb25zdGVyLWNvbG9yLWN5YW4tNjojMDAyNTI1Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMTojZGFmYWZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMjojOGRmMGZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMzojMDA5OGE5Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNDojMDA3OTg3Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNTojMDA0MDQ4Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNjojMDAyMjI3Oy0tbW9uc3Rlci1jb2xvci1za3ktMTojZTNmN2ZmOy0tbW9uc3Rlci1jb2xvci1za3ktMjojYWVlOWZmOy0tbW9uc3Rlci1jb2xvci1za3ktMzojMDA5NGI0Oy0tbW9uc3Rlci1jb2xvci1za3ktNDojMDA3NTkwOy0tbW9uc3Rlci1jb2xvci1za3ktNTojMDA0MDRmOy0tbW9uc3Rlci1jb2xvci1za3ktNjojMDAxZjI4Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0xOiNlOGY2ZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTI6I2I5ZTNmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMzojMDA5MmM1Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi00OiMwMDc0OWQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTU6IzAwM2M1NDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNjojMDAxZDJhOy0tbW9uc3Rlci1jb2xvci1henVyZS0xOiNlOGYyZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTI6I2M2ZTBmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMzojMDA4ZmRiOy0tbW9uc3Rlci1jb2xvci1henVyZS00OiMwMDcxYWY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTU6IzAwM2I1ZTstLW1vbnN0ZXItY29sb3ItYXp1cmUtNjojMDAxYzMwOy0tbW9uc3Rlci1jb2xvci1ibHVlLTE6I2YwZjRmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0yOiNkNGUwZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMzojMDA4OWZjOy0tbW9uc3Rlci1jb2xvci1ibHVlLTQ6IzAwNmRjYTstLW1vbnN0ZXItY29sb3ItYmx1ZS01OiMwMDM4NmQ7LS1tb25zdGVyLWNvbG9yLWJsdWUtNjojMDAxYTM5Oy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMTojZjNmM2ZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMjojZGVkZGZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMzojNjU3ZWZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNDojMDA2MWZjOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNTojMDAzMjhhOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNjojMDAxNjQ5Oy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMTojZjdmMWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMjojZThkYWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMzojOWI3MGZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNDojNzk0YWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNTojMmQwZmJmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNjojMGIwMDc0Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMTojZmRmNGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMjojZjdkOWZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMzojZDE1MGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNDojYjAxZmUzOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNTojNjYwMDg3Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNjojM2EwMDRmOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTE6I2ZmZjNmYzstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yOiNmZmQ3ZjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMzojZjkxMWUwOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQ6I2NhMDBiNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS01OiM3NDAwNjg7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNjojNDQwMDNjOy0tbW9uc3Rlci1jb2xvci1waW5rLTE6I2ZmZjdmYjstLW1vbnN0ZXItY29sb3ItcGluay0yOiNmZmRjZWM7LS1tb25zdGVyLWNvbG9yLXBpbmstMzojZmYyZmIyOy0tbW9uc3Rlci1jb2xvci1waW5rLTQ6I2QyMDA4ZjstLW1vbnN0ZXItY29sb3ItcGluay01OiM3OTAwNTE7LS1tb25zdGVyLWNvbG9yLXBpbmstNjojNGIwMDMwOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMTojZTViODc1Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMjojZDlhMzYyOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMzojYzA4YTRlOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNDojYTc3MTNiOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNTojOGY1YTI4Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNjojMzYwNTA1Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xOiNmN2Y1ZWY7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTI6I2U1ZTJkOTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMzojY2JjNmIzOy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC00OiNhMTlkOGE7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTU6IzdhNzU2NjstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNjojNTE0ZDNmfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLWJvcmRlci1jb2xvci0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0xKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTF7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLWNvbG9yLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMil9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLXRoZW1lLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMil9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ye2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTMpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtM3tjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLWJvcmRlci1jb2xvci00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci00KX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTR7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLWNvbG9yLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtZWxlbWVudCwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtYmFja2dyb3VuZC1pbmhlcml0e2JhY2tncm91bmQtY29sb3I6aW5oZXJpdCFpbXBvcnRhbnR9Lm1vbnN0ZXItdGhlbWUtb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1vZmZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3IpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7bWFyZ2luOjA7b3V0bGluZTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoe2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtZ3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjJzO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5sYWJlbHtkaXNwbGF5OmJsb2NrO21heC13aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjAgLjJlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt3aGl0ZS1zcGFjZTpub3dyYXB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2gtc2xpZGVye2JvdHRvbTo0cHg7bGVmdDo0cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NHB4O3RvcDo0cHg7dHJhbnNpdGlvbjouMnM7d2lkdGg6Y2FsYyg1MCUgLSA0cHgpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoW2RhdGEtbW9uc3Rlci1zdGF0ZT1vbl0gLmxhYmVsLm9mZnt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLnN3aXRjaFtkYXRhLW1vbnN0ZXItc3RhdGU9b2ZmXSAubGFiZWwub2ZmLFtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoW2RhdGEtbW9uc3Rlci1zdGF0ZT1vbl0gLmxhYmVsLm9ue3Zpc2liaWxpdHk6dmlzaWJsZX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLnN3aXRjaFtkYXRhLW1vbnN0ZXItc3RhdGU9b2ZmXSAubGFiZWwub257dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2hbZGF0YS1tb25zdGVyLXN0YXRlPW9uXSAuc3dpdGNoLXNsaWRlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udHJvbCB9IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tY29udHJvbC5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG5cdHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgVG9nZ2xlU3dpdGNoU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvdG9nZ2xlLXN3aXRjaC5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgVG9nZ2xlU3dpdGNoIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHN3aXRjaEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzd2l0Y2hFbGVtZW50XCIpO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBTVEFURV9PTiA9IFwib25cIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgU1RBVEVfT0ZGID0gXCJvZmZcIjtcblxuLyoqXG4gKiBBIHNpbXBsZSB0b2dnbGUgc3dpdGNoXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvZm9ybS90b2dnbGUtc3dpdGNoXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS90b2dnbGUtc3dpdGNoLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAzLjU3LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGJlYXV0aWZ1bCBzd2l0Y2ggZWxlbWVudFxuICogQGZpcmVzIG1vbnN0ZXItb3B0aW9ucy1zZXRcbiAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGVkXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZWRcbiAqL1xuY2xhc3MgVG9nZ2xlU3dpdGNoIGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZT1jdXJyZW50IHZhbHVlIG9mIHRoZSBlbGVtZW50XG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZGlzYWJsZWQ9ZGlzYWJsZWQ9ZmFsc2UgRGlzYWJsZWQgc3RhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMub249c3BlY2lmaWVzIHRoZSBjbGFzcyBmb3IgdGhlIG9uIHN0YXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5vZmY9c3BlY2lmaWVzIHRoZSBjbGFzcyBmb3IgdGhlIG9mZiBzdGF0ZS5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHZhbHVlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWVzLm9mZj1zcGVjaWZpZXMgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IGlmIGl0IGlzIG5vdCBzZWxlY3RlZFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMub249c3BlY2lmaWVzIHRoZSBsYWJlbCBmb3IgdGhlIG9uIHN0YXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLm9mZj1zcGVjaWZpZXMgdGhlIGxhYmVsIGZvciB0aGUgb2ZmIHN0YXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYWN0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYWN0aW9ucy5vbj1zcGVjaWZpZXMgdGhlIGFjdGlvbiBmb3IgdGhlIG9uIHN0YXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYWN0aW9ucy5vZmY9c3BlY2lmaWVzIHRoZSBhY3Rpb24gZm9yIHRoZSBvZmYgc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluPXNwZWNpZmllcyB0aGUgbWFpbiB0ZW1wbGF0ZSB1c2VkIGJ5IHRoZSBjb250cm9sLlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dmFsdWU6IG51bGwsXG5cdFx0XHRkaXNhYmxlZDogZmFsc2UsXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdG9uOiBcIm1vbnN0ZXItdGhlbWUtb25cIixcblx0XHRcdFx0b2ZmOiBcIm1vbnN0ZXItdGhlbWUtb2ZmXCIsXG5cdFx0XHRcdGhhbmRsZTogXCJtb25zdGVyLXRoZW1lLXByaW1hcnktMVwiLFxuXHRcdFx0fSxcblx0XHRcdHZhbHVlczoge1xuXHRcdFx0XHRvbjogXCJvblwiLFxuXHRcdFx0XHRvZmY6IFwib2ZmXCIsXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdHRvZ2dsZVN3aXRjaE9uOiBcIlx1MjcxNFwiLFxuXHRcdFx0XHR0b2dnbGVTd2l0Y2hPZmY6IFwiXHUyNzE2XCIsXG5cdFx0XHR9LFxuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0YWN0aW9uczoge1xuXHRcdFx0XHRvbjogKCkgPT4ge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBvbiBhY3Rpb24gaXMgbm90IGRlZmluZWRcIik7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9mZjogKCkgPT4ge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBvZmYgYWN0aW9uIGlzIG5vdCBkZWZpbmVkXCIpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtUb2dnbGVTd2l0Y2h9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdC8qKlxuXHRcdCAqIGluaXQgdmFsdWUgdG8gb2ZmXG5cdFx0ICogaWYgdGhlIHZhbHVlIHdhcyBub3QgZGVmaW5lZCBiZWZvcmUgaW5zZXJ0aW5nIGl0IGludG8gdGhlIEhUTUxcblx0XHQgKi9cblx0XHRpZiAoc2VsZi5nZXRPcHRpb24oXCJ2YWx1ZVwiKSA9PT0gbnVsbCkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb24oXCJ2YWx1ZVwiLCBzZWxmLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIikpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIHZhbHVlIGZyb20gYXR0cmlidXRlXG5cdFx0ICovXG5cdFx0aWYgKHNlbGYuaGFzQXR0cmlidXRlKFwidmFsdWVcIikpIHtcblx0XHRcdHNlbGYuc2V0T3B0aW9uKFwidmFsdWVcIiwgc2VsZi5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogdmFsaWRhdGUgdmFsdWVcblx0XHQgKi9cblx0XHR2YWxpZGF0ZUFuZFNldFZhbHVlLmNhbGwoc2VsZik7XG5cblx0XHRpZiAodGhpcy5zdGF0ZSA9PT0gU1RBVEVfT04pIHtcblx0XHRcdHRvZ2dsZUNsYXNzT24uY2FsbChzZWxmKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dG9nZ2xlQ2xhc3NPZmYuY2FsbChzZWxmKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBpcyBjYWxsZWQgd2hlbiBvcHRpb25zIGNoYW5nZWRcblx0XHQgKi9cblx0XHRzZWxmW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihcblx0XHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChpc09iamVjdCh0aGlzKSAmJiB0aGlzIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcikge1xuXHRcdFx0XHRcdHZhbGlkYXRlQW5kU2V0VmFsdWUuY2FsbChzZWxmKTtcblx0XHRcdFx0XHR0b2dnbGVDbGFzcy5jYWxsKHNlbGYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogdXBkYXRlciB0cmFuc2Zvcm1lciBtZXRob2RzIGZvciBwaXBlXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuXHQgKi9cblx0W3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInN0YXRlLWNhbGxiYWNrXCI6IChXZXJ0KSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnN0YXRlO1xuXHRcdFx0fSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4gW0NTU1N0eWxlU2hlZXRdXG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1RvZ2dsZVN3aXRjaFN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIHRvZ2dsZSBzd2l0Y2hcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS5jbGljaygpXG5cdCAqIGBgYFxuXHQgKi9cblx0Y2xpY2soKSB7XG5cdFx0dG9nZ2xlVmFsdWVzLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogdG9nZ2xlIHN3aXRjaCBvbi9vZmZcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS50b2dnbGUoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7VG9nZ2xlU3dpdGNofVxuXHQgKi9cblx0dG9nZ2xlKCkge1xuXHRcdHRoaXMuY2xpY2soKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiB0b2dnbGUgc3dpdGNoIG9uXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cdCAqIGUudG9nZ2xlT24oKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7VG9nZ2xlU3dpdGNofVxuXHQgKi9cblx0dG9nZ2xlT24oKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogdG9nZ2xlIHN3aXRjaCBvZmZcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS50b2dnbGVPZmYoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7VG9nZ2xlU3dpdGNofVxuXHQgKi9cblx0dG9nZ2xlT2ZmKCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGVsZW1lbnRcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogY29uc29sZS5sb2coZS5zdGF0ZSlcblx0ICogLy8gXHUyMUE2IG9mZlxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpID09PSB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKVxuXHRcdFx0PyBTVEFURV9PTlxuXHRcdFx0OiBTVEFURV9PRkY7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFN3aXRjaFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBjb25zb2xlLmxvZyhlLnZhbHVlKVxuXHQgKiAvLyBcdTIxQTYgb25cblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zdGF0ZSA9PT0gU1RBVEVfT05cblx0XHRcdD8gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIilcblx0XHRcdDogdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB2YWx1ZVxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBlLnZhbHVlPVwib25cIlxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG5cdCAqL1xuXHRzZXQgdmFsdWUodmFsdWUpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS90b2dnbGUtc3dpdGNoQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdG9nZ2xlLXN3aXRjaFwiO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1zd2l0Y2hdYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGVDbGFzc09uKCkge1xuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLm9mZlwiKSk7IC8vIGNoYW5nZSBjb2xvclxuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQodGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLm9uXCIpKTsgLy8gY2hhbmdlIGNvbG9yXG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlQ2xhc3NPZmYoKSB7XG5cdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmdldE9wdGlvbihcImNsYXNzZXMub25cIikpOyAvLyBjaGFuZ2UgY29sb3Jcblx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5vZmZcIikpOyAvLyBjaGFuZ2UgY29sb3Jcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGVDbGFzcygpIHtcblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVcIikgPT09IHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9uXCIpKSB7XG5cdFx0dG9nZ2xlQ2xhc3NPbi5jYWxsKHRoaXMpO1xuXHR9IGVsc2Uge1xuXHRcdHRvZ2dsZUNsYXNzT2ZmLmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGVWYWx1ZXMoKSB7XG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bGV0IGNhbGxiYWNrLCB2YWx1ZTtcblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJ2YWx1ZVwiKSA9PT0gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikpIHtcblx0XHR2YWx1ZSA9IHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9mZlwiKTtcblx0XHRjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwiYWN0aW9ucy5vZmZcIik7XG5cdH0gZWxzZSB7XG5cdFx0dmFsdWUgPSB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKTtcblx0XHRjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwiYWN0aW9ucy5vblwiKTtcblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdmFsdWUpO1xuXHR0aGlzPy5zZXRGb3JtVmFsdWUodmFsdWUpO1xuXG5cdGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdGNhbGxiYWNrLmNhbGwodGhpcyk7XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcInN0YXRlXCIsIHRoaXMuc3RhdGUpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQW5kU2V0VmFsdWUoKSB7XG5cdGNvbnN0IHZhbHVlID0gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZVwiKTtcblxuXHRjb25zdCB2YWxpZGF0ZWRWYWx1ZXMgPSBbXTtcblx0dmFsaWRhdGVkVmFsdWVzLnB1c2godGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikpO1xuXHR2YWxpZGF0ZWRWYWx1ZXMucHVzaCh0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIikpO1xuXG5cdGlmICh2YWxpZGF0ZWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpID09PSBmYWxzZSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0dGhpcyxcblx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHQnVGhlIHZhbHVlIFwiJyArXG5cdFx0XHRcdHZhbHVlICtcblx0XHRcdFx0J1wiIG11c3QgYmUgXCInICtcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikgK1xuXHRcdFx0XHQnXCIgb3IgXCInICtcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpLFxuXHRcdCk7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJkaXNhYmxlZFwiLCB0cnVlKTtcblx0XHR0aGlzLmZvcm1EaXNhYmxlZENhbGxiYWNrKHRydWUpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xuXHRcdHRoaXMuZm9ybURpc2FibGVkQ2FsbGJhY2soZmFsc2UpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2luaXRFdmVudEhhbmRsZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRpZiAoZXZlbnQuY29kZSA9PT0gXCJTcGFjZVwiKSB7XG5cdFx0XHRzZWxmW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsaWNrKCk7XG5cdFx0fVxuXHR9KTtcblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0dG9nZ2xlVmFsdWVzLmNhbGwoc2VsZik7XG5cdH0pO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJzd2l0Y2hcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1zdGF0ZSBwYXRoOnZhbHVlIHwgY2FsbDpzdGF0ZS1jYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbCBvblwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMudG9nZ2xlU3dpdGNoT25cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwgb2ZmXCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy50b2dnbGVTd2l0Y2hPZmZcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLmhhbmRsZSB8IHN1ZmZpeDpcXFxcIHN3aXRjaC1zbGlkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoVG9nZ2xlU3dpdGNoKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0aW5pdE1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9GT1JNX1JFTE9BRCwgQVRUUklCVVRFX0ZPUk1fVVJMIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgbG9hZEFuZEFzc2lnbkNvbnRlbnQgfSBmcm9tIFwiLi91dGlsL2ZldGNoLm1qc1wiO1xuXG5leHBvcnQgeyBUZW1wbGF0ZSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkID0gU3ltYm9sKFwid2FzSW5pdGlhbGl6ZWRcIik7XG5cbi8qKlxuICogQSBUZW1wbGF0ZSBjb250cm9sIGlzIGEgY29udHJvbCB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWQgY29udGVudCBmcm9tIGEgVVJMIGFuZCBkaXNwbGF5IGl0IGluIHRoZSBTaGFkb3dSb290LlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGUvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS4xMS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSB0ZW1wbGF0ZSBjb250cm9sXG4gKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG4gKi9cbmNsYXNzIFRlbXBsYXRlIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVsb2FkPXVuZGVmaW5lZCAgY3VycmVudGx5IHRoZSBvbmx5IHZhbHVlIGRlZmluZWQgaXMgYG9uc2hvd2AuIEN1cnJlbnRseSB0aGUgb25seSB2YWx1ZSBkZWZpbmVkIGlzIG9uc2hvdy4gdGhpcyByZW1vdmVzIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gdGhpcyBtZWFucyB0aGF0IHRoZSBjb250ZW50IGlzIG9ubHkgbG9hZGVkIG9uY2UuIHJlbG9hZGluZyBvZiB0aGUgY29udGVudCBkb2VzIG5vdCBvY2N1ci5cblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qcm9jZXNzb3JbXX0gcHJvY2Vzc29yc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2ggRmV0Y2ggW3NlZSBVc2luZyBGZXRjaCBtb3ppbGxhLm9yZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSS9Vc2luZ19GZXRjaClcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZGlyZWN0PWVycm9yXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2guaGVhZGVycz17XCJhY2NlcHRcIjpcInRleHQvaHRtbFwifX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHVybDogdW5kZWZpbmVkLFxuXHRcdFx0XHRyZWxvYWQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0cHJvY2Vzc29yczogW10sXG5cdFx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdFx0cmVkaXJlY3Q6IFwiZXJyb3JcIixcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0bW9kZTogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdFx0YWNjZXB0OiBcInRleHQvaHRtbFwiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIGF0dHJpYnV0ZXMgYXJlIHRvIGJlIG1vbml0b3JlZCBieSBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKClgLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmdbXX1cblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdGNvbnN0IGxpc3QgPSBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdFx0bGlzdC5wdXNoKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cdFx0cmV0dXJuIGxpc3Q7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdFtpbml0TWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlcltpbml0TWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0Ly8gZGF0YS1tb25zdGVyLW9wdGlvbnNcblx0XHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfRk9STV9VUkxdID0gKHVybCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCkpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJ1cmxcIiwgbmV3IFVSTCh1cmwsIGRvY3VtZW50LmxvY2F0aW9uKS50b1N0cmluZygpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwidXJsXCIsIHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBkZWZhdWx0IHNsb3Rcblx0ICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcblx0ICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcblx0ICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkZvcm19XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdGVtcGxhdGVcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2FkIGNvbnRlbnQgZnJvbSB1cmxcblx0ICpcblx0ICogSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhhdCB3aXRoIHRoaXMgZnVuY3Rpb24gdGhlIGxvYWRpbmcgaXMgZXhlY3V0ZWRcblx0ICogZGlyZWN0bHkuIGl0IGlzIGxvYWRlZCBhcyB3ZWxsIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IHZpc2libGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdXJsXG5cdCAqL1xuXHRmZXRjaCh1cmwpIHtcblx0XHRpZiAoaXNTdHJpbmcodXJsKSB8fCB1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCwgYCR7dXJsfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsb2FkQ29udGVudC5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJvY2Vzc29yXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZGVzdGluYXRpb25cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzb3VyY2VcbiAqIEBzaW5jZSAxLjExLjhcbiAqL1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhpcyBzZWxlY3QuXG4gKlxuICogYGBgXG4gKiA8bW9uc3Rlci1zZWxlY3QgZGF0YS1tb25zdGVyLXVybD1cImh0dHBzOi8vZXhhbXBsZS5jb20vXCI+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cblx0aWYgKGlzU3RyaW5nKHVybCkpIHtcblx0XHRvcHRpb25zW1widXJsXCJdID0gbmV3IFVSTCh1cmwsIGRvY3VtZW50LmxvY2F0aW9uKS50b1N0cmluZygpO1xuXHR9XG5cblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1JFTE9BRCkpIHtcblx0XHRvcHRpb25zW1wicmVsb2FkXCJdID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKS50b0xvd2VyQ2FzZSgpO1xuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG4gKi9cbmZ1bmN0aW9uIGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW2ludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWRdID0gdHJ1ZTtcblxuXHRjb25zdCBvcHRpb25zID0ge1xuXHRcdHRocmVzaG9sZDogWzAuNV0sXG5cdH07XG5cblx0Y29uc3QgY2FsbGJhY2sgPSAoZW50cmllcywgb2JzZXJ2ZXIpID0+IHtcblx0XHRmb3IgKGNvbnN0IFssIGVudHJ5XSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nID09PSB0cnVlKSB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcInJlbG9hZFwiKSA9PT0gXCJvbnNob3dcIikge1xuXHRcdFx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0bG9hZENvbnRlbnQuY2FsbCh0aGlzKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuXHRvYnNlcnZlci5vYnNlcnZlKHRoaXMpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBkZWZhdWx0IHNsb3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyB1cmxcbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcbiAqIEB0aHJvd3Mge0Vycm9yfSByZXF1ZXN0IGZhaWxlZFxuICogQHRocm93cyB7RXJyb3J9IG5vdCBmb3VuZFxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IGNsaWVudCBlcnJvclxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2ZcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG4gKi9cbmZ1bmN0aW9uIGxvYWRDb250ZW50KCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCB1cmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiLCB1bmRlZmluZWQpO1xuXHRpZiAoIWlzU3RyaW5nKHVybCkgfHwgdXJsID09PSBcIlwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyB1cmxcIik7XG5cdH1cblxuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSk7XG5cblx0Y29uc3QgZGVmYXVsdFNsb3QgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcInNsb3RbbmFtZT1kZWZhdWx0XVwiKTtcblx0aWYgKCEoZGVmYXVsdFNsb3QgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGRlZmF1bHQgc2xvdFwiKTtcblx0fVxuXG5cdGRlZmF1bHRTbG90LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0bGV0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udGFpbmVyXWAsXG5cdCk7XG5cdGlmICghKGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0Y29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0XHRjb250YWluZXIuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcImNvbnRhaW5lclwiKTtcblx0XHR0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblx0fVxuXG5cdGxvYWRBbmRBc3NpZ25Db250ZW50KGNvbnRhaW5lciwgdXJsLCBvcHRpb25zKVxuXHRcdC50aGVuKCgpID0+IHtcblx0XHRcdGRlZmF1bHRTbG90LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0XHRcdHJ1blByb2Nlc3NvcnMuY2FsbCh0aGlzKTtcblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7cnVuUHJvY2Vzc29yc31cbiAqL1xuZnVuY3Rpb24gcnVuUHJvY2Vzc29ycygpIHtcblx0Y29uc3QgcHJvY2Vzc29ycyA9IHRoaXMuZ2V0T3B0aW9uKFwicHJvY2Vzc29yc1wiKTtcblx0aWYgKCFpc0FycmF5KHByb2Nlc3NvcnMpKSByZXR1cm47XG5cblx0Zm9yIChjb25zdCBbLCBwcm9jZXNzb3JdIG9mIHByb2Nlc3NvcnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3Qgc291cmNlID0gcHJvY2Vzc29yPy5zb3VyY2U7XG5cdFx0Y29uc3QgZGVzdGluYXRpb24gPSBwcm9jZXNzb3I/LmRlc3RpbmF0aW9uO1xuXG5cdFx0aWYgKGlzU3RyaW5nKHNvdXJjZSkgJiYgaXNTdHJpbmcoZGVzdGluYXRpb24pKSB7XG5cdFx0XHRjb25zdCBzb3VyY2VOb2RlID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3Ioc291cmNlKTtcblx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uTm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZGVzdGluYXRpb24pO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHNvdXJjZU5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRkZXN0aW5hdGlvbk5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0KSB7XG5cdFx0XHRcdGRlc3RpbmF0aW9uTm9kZS5pbm5lckhUTUwgPSBzb3VyY2VOb2RlLmNsb25lTm9kZSh0cnVlKS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHNsb3QgbmFtZT1cImRlZmF1bHRcIj48L3Nsb3Q+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlbXBsYXRlKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBIb3N0U3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgSG9zdFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRIb3N0U3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBob3N0IHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn06d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0ZXh0LXNpemUtYWRqdXN0OjEwMCV9OndoZXJlKGgxKXtmb250LXNpemU6MmVtO21hcmdpbi1ibG9jay1lbmQ6LjY3ZW07bWFyZ2luLWJsb2NrLXN0YXJ0Oi42N2VtfTp3aGVyZShkbCxvbCx1bCkgOndoZXJlKGRsLG9sLHVsKXttYXJnaW4tYmxvY2stZW5kOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OjB9OndoZXJlKGhyKXtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbG9yOmluaGVyaXQ7aGVpZ2h0OjB9OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHByZSxzYW1wKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKHNtYWxsKXtmb250LXNpemU6ODAlfTp3aGVyZSh0YWJsZSl7Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcjt0ZXh0LWluZGVudDowfTp3aGVyZShidXR0b24saW5wdXQsc2VsZWN0KXttYXJnaW46MH06d2hlcmUoYnV0dG9uKXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259OndoZXJlKHByb2dyZXNzKXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06d2hlcmUoc2VsZWN0KXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZSh0ZXh0YXJlYSl7bWFyZ2luOjB9OndoZXJlKGlucHV0W3R5cGU9c2VhcmNoIGldKXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi41NH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5bGU6bm9uZTtwYWRkaW5nOjB9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6MXB4IGRvdHRlZCBCdXR0b25UZXh0fTp3aGVyZSg6LW1vei11aS1pbnZhbGlkKXtib3gtc2hhZG93Om5vbmV9OndoZXJlKGRpYWxvZyl7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjpzb2xpZDtjb2xvcjojMDAwO2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtsZWZ0OjA7bWFyZ2luOmF1dG87cGFkZGluZzoxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50fTp3aGVyZShkaWFsb2c6bm90KFtvcGVuXSkpe2Rpc3BsYXk6bm9uZX06d2hlcmUoc3VtbWFyeSl7ZGlzcGxheTpsaXN0LWl0ZW19aHRtbHtoZWlnaHQ6MTAwJX1ib2R5LGh0bWx7bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCl9Ym9keXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowO3dvcmQtYnJlYWs6YnJlYWstd29yZH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9aW5wdXQsbWV0ZXIscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhe2FjY2VudC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjEwMCU7bWFyZ2luOjA7b3V0bGluZTpub25lfWlucHV0LHNlbGVjdCx0ZXh0YXJlYXtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7cGFkZGluZzouNHJlbSAuNnJlbX10ZXh0YXJlYXttaW4taGVpZ2h0OjZyZW07cmVzaXplOnZlcnRpY2FsfWlucHV0W3R5cGU9Y29sb3Jde2hlaWdodDoycmVtO21hcmdpbjowO3BhZGRpbmc6LjFyZW07d2lkdGg6MnJlbX1pbnB1dDpob3Zlcjpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKTpub3QoW3R5cGU9cmFuZ2VdKSxzZWxlY3Q6aG92ZXIsdGV4dGFyZWE6aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31pbnB1dDpmb2N1cyxzZWxlY3Q6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjNweH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2U6XFxcIkNvbnNvbGFzXFxcIixcXFwiQ291cmllciBOZXdcXFwiLFxcXCJSb2JvdG8gTW9ub1xcXCIsXFxcIlNvdXJjZSBDb2RlIFByb1xcXCIsXFxcIkZpcmEgTW9ub1xcXCIsbW9ub3NwYWNlOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjNweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjJweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWxpZ24tY29udGVudDpzdHJldGNoO2JvcmRlcjowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bWFyZ2luOjA7bWluLWhlaWdodDoxMDB2aDtwYWRkaW5nOjB9W2RhdGEtbW9uc3Rlci1yb2xlPWhlYWRlcl17aGVpZ2h0OjY0cHg7bWFyZ2luOjAgMCAwIDYwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRlbnRdLFtkYXRhLW1vbnN0ZXItcm9sZT1mb290ZXJdLFtkYXRhLW1vbnN0ZXItcm9sZT1oZWFkZXJde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBwYXJzZUxvY2FsZSB9IGZyb20gXCIuLi9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCIuLi9wcm92aWRlci5tanNcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuLi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmV4cG9ydCB7IEVtYmVkIH07XG5cbi8qKlxuICogVGhlIEVtYmVkIHByb3ZpZGVyIHJldHJpZXZlcyBhIEpTT04gZmlsZSBmcm9tIHRoZSBnaXZlbiBTY3JpcHQgVGFnLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzA2Nn1cbiAqL1xuY2xhc3MgRW1iZWQgZXh0ZW5kcyBQcm92aWRlciB7XG5cdC8qKlxuXHQgKiBgYGBodG1sXG5cdCAqIDxzY3JpcHQgaWQ9XCJ0cmFuc2xhdGlvbnNcIiB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxuXHQgKiB7XG5cdCAqICAgICBcImhlbGxvXCI6IFwiSGFsbG9cIlxuXHQgKiB9XG5cdCAqIDwvc2NyaXB0PlxuXHQgKiBgYGBcblx0ICpcblx0ICpcblx0ICogYGBgamF2YXNjcmlwdFxuXHQgKiBuZXcgRW1iZWQoJ3RyYW5zbGF0aW9ucycpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fHN0cmluZ30gZWxlbWVudE9ySWRcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVsZW1lbnRPcklkLCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zID0ge307XG5cdFx0fVxuXG5cdFx0aWYgKGVsZW1lbnRPcklkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogQHByb3BlcnR5IHtIVE1MRWxlbWVudHxzdHJpbmd9XG5cdFx0XHQgKi9cblx0XHRcdHRoaXMudHJhbnNsYXRlRWxlbWVudCA9IGVsZW1lbnRPcklkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvKipcblx0XHRcdCAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR8c3RyaW5nfVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnRyYW5zbGF0ZUVsZW1lbnQgPSBnZXREb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKFxuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyhlbGVtZW50T3JJZCksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHByb3BlcnR5IHtPYmplY3R9IG9wdGlvbnNcblx0XHQgKi9cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IGV4dGVuZChcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR0aGlzLmRlZmF1bHRzLFxuXHRcdFx0dmFsaWRhdGVPYmplY3Qob3B0aW9ucyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZhdWx0c1xuXHQgKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Z2V0VHJhbnNsYXRpb25zKGxvY2FsZSkge1xuXHRcdGlmIChpc1N0cmluZyhsb2NhbGUpKSB7XG5cdFx0XHRsb2NhbGUgPSBwYXJzZUxvY2FsZShsb2NhbGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRpZiAodGhpcy50cmFuc2xhdGVFbGVtZW50ID09PSBudWxsKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJUZXh0IG5vdCBmb3VuZFwiKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCEodGhpcy50cmFuc2xhdGVFbGVtZW50IGluc3RhbmNlb2YgSFRNTFNjcmlwdEVsZW1lbnQpKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJFbGVtZW50IGlzIG5vdCBhIHNjcmlwdCB0YWdcIikpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnRyYW5zbGF0ZUVsZW1lbnQudHlwZSAhPT0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIHtcblx0XHRcdFx0cmVqZWN0KFxuXHRcdFx0XHRcdG5ldyBFcnJvcihcIkVsZW1lbnQgaXMgbm90IGEgc2NyaXB0IHRhZyB3aXRoIHR5cGUgYXBwbGljYXRpb24vanNvblwiKSxcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgdHJhbnNsYXRpb25zID0gbnVsbDtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRyYW5zbGF0aW9ucyA9IEpTT04ucGFyc2UodGhpcy50cmFuc2xhdGVFbGVtZW50LmlubmVySFRNTC50cmltKCkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRyYW5zbGF0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiVHJhbnNsYXRpb25zIG5vdCBmb3VuZCBvciBpbnZhbGlkXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB0ID0gbmV3IFRyYW5zbGF0aW9ucyhsb2NhbGUpO1xuXHRcdFx0dC5hc3NpZ25UcmFuc2xhdGlvbnModHJhbnNsYXRpb25zKTtcblxuXHRcdFx0cmVzb2x2ZSh0KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgdHJhbnNsYXRpb25zIGZvciB0aGUgY3VycmVudCBkb2N1bWVudC5cblx0ICpcblx0ICogYHNjcmlwdFtkYXRhLW1vbnN0ZXItcm9sZT10cmFuc2xhdGlvbnNdYCBpcyBzZWFyY2hlZCBmb3IgYW5kIHRoZSB0cmFuc2xhdGlvbnMgYXJlIGFzc2lnbmVkIHRvIHRoZSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gZWxlbWVudFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxBd2FpdGVkPCpbXT4+fFByb21pc2U8QXdhaXRlZDx1bmtub3duPltdPn1cblx0ICovXG5cdHN0YXRpYyBhc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoZWxlbWVudCkge1xuXHRcdGNvbnN0IGQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0ZWxlbWVudCA9IGQucXVlcnlTZWxlY3RvcihcImJvZHlcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdCA9IGQucXVlcnlTZWxlY3RvckFsbChcInNjcmlwdFtkYXRhLW1vbnN0ZXItcm9sZT10cmFuc2xhdGlvbnNdXCIpO1xuXHRcdGlmIChsaXN0ID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0XHR9XG5cblx0XHRjb25zdCBwcm9taXNlcyA9IFtdO1xuXG5cdFx0bGlzdC5mb3JFYWNoKCh0cmFuc2xhdGlvbkVsZW1lbnQpID0+IHtcblx0XHRcdGNvbnN0IHAgPSBuZXcgRW1iZWQodHJhbnNsYXRpb25FbGVtZW50LCB7fSk7XG5cdFx0XHRwcm9taXNlcy5wdXNoKHAuYXNzaWduVG9FbGVtZW50KHVuZGVmaW5lZCwgZWxlbWVudCkpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldERvY3VtZW50LCBnZXRXaW5kb3cgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBkb21SZWFkeSwgd2luZG93UmVhZHkgfTtcblxuLyoqXG4gKiBUaGlzIHZhcmlhYmxlIGlzIGEgcHJvbWlzZSBmdWxmaWxsZWQgYXMgc29vbiBhcyB0aGUgZG9tIGlzIGF2YWlsYWJsZS5cbiAqXG4gKiBUaGUgRE9NQ29udGVudExvYWRlZCBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSBvcmlnaW5hbCBIVE1MIGRvY3VtZW50IGlzIGZ1bGx5IGxvYWRlZCBhbmQgcGFyc2VkXG4gKiB3aXRob3V0IHdhaXRpbmcgZm9yIHN0eWxlc2hlZXRzLCBpbWFnZXMsIGFuZCBzdWJmcmFtZXMgdG8gZmluaXNoIGxvYWRpbmcuXG4gKlxuICogZG9jdW1lbnQucmVhZHlTdGF0ZSBjaGFuZ2VzIHRvIGludGVyYWN0aXZlXG4gKiB3aW5kb3cncyBET01Db250ZW50TG9hZGVkIGV2ZW50IGdldHMgZmlyZWRcbiAqIGRvY3VtZW50LnJlYWR5U3RhdGUgY2hhbmdlcyB0byBjb21wbGV0ZVxuICogd2luZG93J3MgbG9hZCBldmVudCBnZXRzIGZpcmVkIGxvYWRcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMxLjBcbiAqIEBzdW1tYXJ5IHZhcmlhYmxlIHRvIGNoZWNrIGlmIGRvbSBpcyByZWFkeVxuICogQHR5cGUge1Byb21pc2V9XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9ET01Db250ZW50TG9hZGVkX2V2ZW50XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9yZWFkeVN0YXRlXG4gKi9cbmNvbnN0IGRvbVJlYWR5ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImxvYWRpbmdcIikge1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIHJlc29sdmUpO1xuXHR9IGVsc2Uge1xuXHRcdHJlc29sdmUoKTtcblx0fVxufSk7XG5cbi8qKlxuICogVGhpcyB2YXJpYWJsZSBpcyBhIHByb21pc2UgaXMgZnVsZmlsbGVkIGFzIHNvb24gYXMgdGhlIHdpbmRvd3MgaXMgYXZhaWxhYmxlLlxuICpcbiAqIFRoZSBsb2FkIGV2ZW50IGZpcmVzIHdoZW4gdGhlIGVudGlyZSBwYWdlIGlzIGxvYWRlZCwgaW5jbHVkaW5nIGFsbCBkZXBlbmRlbnQgcmVzb3VyY2VzIHN1Y2ggYXMgc3R5bGVzaGVldHMsXG4gKiBhc3NldHMsIGFuZCBpbWFnZXMuIFVubGlrZSBET01Db250ZW50TG9hZGVkLCB3aGljaCBmaXJlcyBhcyBzb29uIGFzIHRoZSBET00gb2YgdGhlIHBhZ2UgaXMgbG9hZGVkLFxuICogd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgcmVzb3VyY2VzIHRvIGZpbmlzaCBsb2FkaW5nLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMzEuMFxuICogQHN1bW1hcnkgdmFyaWFibGUgdG8gY2hlY2sgaWYgd2luZG93IGlzIHJlYWR5XG4gKiBAdHlwZSB7UHJvbWlzZX1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvdy9sb2FkX2V2ZW50XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9yZWFkeVN0YXRlXG4gKi9cbmNvbnN0IHdpbmRvd1JlYWR5ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXHRjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG5cdFx0cmVzb2x2ZSgpO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCByZXNvbHZlKTtcblx0fVxufSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgQmFzZVdpdGhPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiLi4vdHlwZXMvc3RhY2subWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IEZvY3VzTWFuYWdlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBLRVlfRE9DVU1FTlQgPSBcImRvY3VtZW50XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9DT05URVhUID0gXCJjb250ZXh0XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHN0YWNrU3ltYm9sID0gU3ltYm9sKFwic3RhY2tcIik7XG5cbi8qKlxuICogV2l0aCB0aGUgZm9jdXMgbWFuYWdlciB0aGUgZm9jdXMgY2FuIGJlIHN0b3JlZCBpbiBhIGRvY3VtZW50LCByZWNhbGxlZCBhbmQgbW92ZWQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGxvY2FsZVxuICogQHN1bW1hcnkgSGFuZGxlIHRoZSBmb2N1c1xuICovXG5jbGFzcyBGb2N1c01hbmFnZXIgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZSh0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpLCBIVE1MRG9jdW1lbnQpO1xuXG5cdFx0dGhpc1tzdGFja1N5bWJvbF0gPSBuZXcgU3RhY2soKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2ZvY3VzbWFuYWdlclwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge0hUTUxEb2N1bWVudH0gZG9jdW1lbnQgdGhlIGRvY3VtZW50IG9iamVjdCBpbnRvIHdoaWNoIHRoZSBub2RlIGlzIHRvIGJlIGFwcGVuZGVkXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdFtLRVlfRE9DVU1FTlRdOiBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKSxcblx0XHRcdFtLRVlfQ09OVEVYVF06IHVuZGVmaW5lZCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1lbWJlcnMgdGhlIGN1cnJlbnQgZm9jdXMgb24gYSBzdGFjay5cblx0ICogU2V2ZXJhbCBmb2N1cyBjYW4gYmUgc3RvcmVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5Gb2N1c01hbmFnZXJ9XG5cdCAqL1xuXHRzdG9yZUZvY3VzKCkge1xuXHRcdGNvbnN0IGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7XG5cdFx0aWYgKGFjdGl2ZSBpbnN0YW5jZW9mIE5vZGUpIHtcblx0XHRcdHRoaXNbc3RhY2tTeW1ib2xdLnB1c2goYWN0aXZlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGxhc3QgZm9jdXMgb24gdGhlIHN0YWNrIGlzIHNldCBhZ2FpblxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5Gb2N1c01hbmFnZXJ9XG5cdCAqL1xuXHRyZXN0b3JlRm9jdXMoKSB7XG5cdFx0Y29uc3QgbGFzdCA9IHRoaXNbc3RhY2tTeW1ib2xdLnBvcCgpO1xuXHRcdGlmIChsYXN0IGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0dGhpcy5mb2N1cyhsYXN0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnRcblx0ICogQHBhcmFtIHtib29sZWFufSBwcmV2ZW50U2Nyb2xsXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdGZvY3VzKGVsZW1lbnQsIHByZXZlbnRTY3JvbGwpIHtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIE5vZGUpO1xuXG5cdFx0ZWxlbWVudC5mb2N1cyh7XG5cdFx0XHRwcmV2ZW50U2Nyb2xsOiBwcmV2ZW50U2Nyb2xsID8/IGZhbHNlLFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7RWxlbWVudH1cblx0ICovXG5cdGdldEFjdGl2ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKS5hY3RpdmVFbGVtZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNlbGVjdCBhbGwgZWxlbWVudHMgdGhhdCBjYW4gYmUgZm9jdXNlZFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHF1ZXJ5XG5cdCAqIEByZXR1cm4ge2FycmF5fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKi9cblx0Z2V0Rm9jdXNhYmxlKHF1ZXJ5KSB7XG5cdFx0bGV0IGNvbnRleHRFbGVtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0NPTlRFWFQpO1xuXHRcdGlmIChjb250ZXh0RWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb250ZXh0RWxlbWVudCA9IHRoaXMuZ2V0T3B0aW9uKEtFWV9ET0NVTUVOVCk7XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVJbnN0YW5jZShjb250ZXh0RWxlbWVudCwgTm9kZSk7XG5cblx0XHRpZiAocXVlcnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsaWRhdGVTdHJpbmcocXVlcnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBbXG5cdFx0XHQuLi5jb250ZXh0RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdFx0XHQnZGV0YWlscywgYnV0dG9uLCBpbnB1dCwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pLCBzZWxlY3QsIHRleHRhcmVhLCBhW2hyZWZdLCBib2R5Jyxcblx0XHRcdCksXG5cdFx0XS5maWx0ZXIoKGVsZW1lbnQpID0+IHtcblx0XHRcdGlmIChxdWVyeSAhPT0gdW5kZWZpbmVkICYmICFlbGVtZW50Lm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikpIHJldHVybiBmYWxzZTtcblx0XHRcdGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpID09PSBcInRydWVcIikgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdGlmIChyZWN0LndpZHRoID09PSAwKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRpZiAocmVjdC5oZWlnaHQgPT09IDApIHJldHVybiBmYWxzZTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5XG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdGZvY3VzTmV4dChxdWVyeSkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldEFjdGl2ZSgpO1xuXHRcdGNvbnN0IGZvY3VzYWJsZSA9IHRoaXMuZ2V0Rm9jdXNhYmxlKHF1ZXJ5KTtcblxuXHRcdGlmICghaXNBcnJheShmb2N1c2FibGUpIHx8IGZvY3VzYWJsZS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmIChjdXJyZW50IGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBmb2N1c2FibGUuaW5kZXhPZihjdXJyZW50KTtcblxuXHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbaW5kZXggKyAxXSB8fCBmb2N1c2FibGVbMF0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbMF0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVswXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5XG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdGZvY3VzUHJldihxdWVyeSkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldEFjdGl2ZSgpO1xuXHRcdGNvbnN0IGZvY3VzYWJsZSA9IHRoaXMuZ2V0Rm9jdXNhYmxlKHF1ZXJ5KTtcblxuXHRcdGlmICghaXNBcnJheShmb2N1c2FibGUpIHx8IGZvY3VzYWJsZS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmIChjdXJyZW50IGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBmb2N1c2FibGUuaW5kZXhPZihjdXJyZW50KTtcblxuXHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbaW5kZXggLSAxXSB8fCBmb2N1c2FibGVbZm9jdXNhYmxlLmxlbmd0aCAtIDFdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZm9jdXMoZm9jdXNhYmxlW2ZvY3VzYWJsZS5sZW5ndGggLSAxXSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXMoZm9jdXNhYmxlW2ZvY3VzYWJsZS5sZW5ndGggLSAxXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IHBhcnNlRGF0YVVSTCB9IGZyb20gXCIuL2RhdGF1cmwubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4vaXMubWpzXCI7XG5cbmV4cG9ydCB7IGVxdWlwV2l0aEludGVybmFsIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IHByb3BlcnR5TmFtZSA9IFwiaW50ZXJuYWxEZWZhdWx0c1wiO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZXh0ZW5kcyB0aGUgZ2l2ZW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBtZXRob2RzOlxuICpcbiAqIC0gYXR0YWNoSW50ZXJuYWxPYnNlcnZlclxuICogLSBkZXRhY2hJbnRlcm5hbE9ic2VydmVyXG4gKiAtIGNvbnRhaW5zSW50ZXJuYWxPYnNlcnZlclxuICogLSBzZXRJbnRlcm5hbFxuICogLSBzZXRJbnRlcm5hbHNcbiAqIC0gZ2V0SW50ZXJuYWxcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjE1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGVxdWlwV2l0aEludGVybmFsKCkge1xuXHR2YWxpZGF0ZU9iamVjdCh0aGlzKTtcblxuXHRpZiAoIWhhc0dldHRlcih0aGlzLCBwcm9wZXJ0eU5hbWUpKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5TmFtZSwge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHRjb25zdCBkZWZhdWx0cyA9IGV4dGVuZCh7fSwgdGhpc1twcm9wZXJ0eU5hbWVdIHx8IHt9KTtcblx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBuZXcgUHJveHlPYnNlcnZlcihkZWZhdWx0cyk7XG5cblx0LyoqXG5cdCAqIEF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0dGhpc1tcImF0dGFjaEludGVybmFsT2JzZXJ2ZXJcIl0gPSAob2JzZXJ2ZXIpID0+IHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIERldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHR0aGlzW1wiZGV0YWNoSW50ZXJuYWxPYnNlcnZlclwiXSA9IChvYnNlcnZlcikgPT4ge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmRldGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYSBvYnNlcnZlciBpcyBhdHRhY2hlZFxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0dGhpc1tcImNvbnRhaW5zSW50ZXJuYWxPYnNlcnZlclwiXSA9IChvYnNlcnZlcikgPT4ge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5jb250YWluc09ic2VydmVyKG9ic2VydmVyKTtcblx0fTtcblxuXHQvKipcblx0ICogU2V0IGFuIGludGVybmFsIHZhbHVlLCBuZXN0ZWQgaW50ZXJuYWxzIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICovXG5cdHRoaXNbXCJzZXRJbnRlcm5hbFwiXSA9IChwYXRoLCB2YWx1ZSkgPT4ge1xuXHRcdG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKSkuc2V0VmlhKHBhdGgsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogc2V0IG11bHRpcGxlIGludGVybmFscyBhdCBvbmNlXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuXHQgKi9cblx0dGhpc1tcInNldEludGVybmFsc1wiXSA9IChvcHRpb25zKSA9PiB7XG5cdFx0aWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG5cdFx0XHRvcHRpb25zID0gcGFyc2VPcHRpb25zSlNPTihvcHRpb25zKTtcblx0XHR9XG5cblx0XHRleHRlbmQodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLCBkZWZhdWx0cywgb3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBpbnRlcm5hbHMgY2FuIGJlIHNwZWNpZmllZCBieSBwYXRoIGBhLmIuY2Bcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWVcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHRoaXNbXCJnZXRJbnRlcm5hbFwiXSA9IChwYXRoLCBkZWZhdWx0VmFsdWUpID0+IHtcblx0XHRsZXQgdmFsdWU7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFsdWUgPSBuZXcgUGF0aGZpbmRlcih0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpKS5nZXRWaWEoXG5cdFx0XHRcdHBhdGgsXG5cdFx0XHQpO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvYmpcbiAqIEBwYXJhbSBwcm9wXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBoYXNHZXR0ZXIob2JqLCBwcm9wKSB7XG5cdHdoaWxlIChpc09iamVjdChvYmopKSB7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKT8uW1wiZ2V0XCJdKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0b2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3B0aW9uc0pTT04oZGF0YSkge1xuXHRsZXQgb2JqID0ge307XG5cblx0aWYgKCFpc1N0cmluZyhkYXRhKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyB0aGUgY29uZmlndXJhdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgZGF0YSB1cmwuXG5cdHRyeSB7XG5cdFx0Y29uc3QgZGF0YVVybCA9IHBhcnNlRGF0YVVSTChkYXRhKTtcblx0XHRkYXRhID0gZGF0YVVybC5jb250ZW50O1xuXHR9IGNhdGNoIChlKSB7fVxuXG5cdHRyeSB7XG5cdFx0b2JqID0gSlNPTi5wYXJzZShkYXRhKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHRocm93IGU7XG5cdH1cblxuXHRyZXR1cm4gdmFsaWRhdGVPYmplY3Qob2JqKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN0YXRlU3ltYm9sLCBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IElEIH0gZnJvbSBcIi4uL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9DTEFTUyxcblx0QVRUUklCVVRFX0lELFxuXHRBVFRSSUJVVEVfVElUTEUsXG59IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUmVzb3VyY2UsIEtFWV9ET0NVTUVOVCwgS0VZX1FVRVJZLCByZWZlcmVuY2VTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgS0VZX0RPQ1VNRU5UID0gXCJkb2N1bWVudFwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBLRVlfUVVFUlkgPSBcInF1ZXJ5XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9USU1FT1VUID0gXCJ0aW1lb3V0XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlZmVyZW5jZVN5bWJvbCA9IFN5bWJvbChcInJlZmVyZW5jZVwiKTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgcmVzb3VyY2VzIHRvIGJlIGxvYWRlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKi9cbmNsYXNzIFJlc291cmNlIGV4dGVuZHMgQmFzZVdpdGhPcHRpb25zIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fHVuZGVmaW5lZH0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0bGV0IHVyaSA9IHRoaXMuZ2V0T3B0aW9uKHRoaXMuY29uc3RydWN0b3IuZ2V0VVJMQXR0cmlidXRlKCkpO1xuXG5cdFx0aWYgKHVyaSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHNvdXJjZVwiKTtcblx0XHR9IGVsc2UgaWYgKHVyaSBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdFx0dXJpID0gdXJpLnRvU3RyaW5nKCk7XG5cdFx0fSBlbHNlIGlmICghaXNTdHJpbmcodXJpKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdXJsIHR5cGVcIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bdGhpcy5jb25zdHJ1Y3Rvci5nZXRVUkxBdHRyaWJ1dGUoKV0gPSB1cmk7XG5cdFx0dGhpc1tpbnRlcm5hbFN0YXRlU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHtcblx0XHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0XHRlcnJvcjogdW5kZWZpbmVkLFxuXHRcdH0pO1xuXG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0Nvbm5lY3RlZCgpIHtcblx0XHRpZiAodGhpc1tyZWZlcmVuY2VTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHJldHVybiB0aGlzW3JlZmVyZW5jZVN5bWJvbF0uaXNDb25uZWN0ZWQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIG92ZXJyaWRkZW4gYnkgdGhlIHNwZWNpYWwgY2xhc3NlcyBhbmQgY3JlYXRlcyB0aGUgRE9NIG9iamVjdC5cblx0ICogVGhpcyBtZXRob2QgaXMgYWxzbyBjYWxsZWQgaW1wbGljaXRseSwgaWYgbm90IHlldCBkb25lIGV4cGxpY2l0bHksIGJ5IGNhbGxpbmcgYGNvbm5lY3QoKWAuXG5cdCAqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1xuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZX1cblx0ICovXG5cdGNyZWF0ZSgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIHRoZSBIVE1MRWxlbWVudCB0byB0aGUgc3BlY2lmaWVkIGRvY3VtZW50LlxuXHQgKiBJZiB0aGUgZWxlbWVudCBoYXMgbm90IHlldCBiZWVuIGNyZWF0ZWQsIGBjcmVhdGUoKWAgaXMgY2FsbGVkIGltcGxpY2l0bHkuXG5cdCAqXG5cdCAqIHRocm93cyB7RXJyb3J9IHRhcmdldCBub3QgZm91bmRcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2V9XG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdGlmICghKHRoaXNbcmVmZXJlbmNlU3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0dGhpcy5jcmVhdGUoKTtcblx0XHR9XG5cblx0XHRhcHBlbmRUb0RvY3VtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtEb2N1bWVudH0gZG9jdW1lbnQgdGhlIGRvY3VtZW50IG9iamVjdCBpbnRvIHdoaWNoIHRoZSBub2RlIGlzIHRvIGJlIGFwcGVuZGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzcmMvaHJlZiB1cmwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVzb3VyY2Vcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHF1ZXJ5IGRlZmluZXMgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSByZXNvdXJjZSBpcyB0byBiZSBob29rZWQgaW50byB0aGUgZG9tLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaWQgZWxlbWVudCBhdHRyaWJ1dGUgaWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRpdGxlIGVsZW1lbnQgYXR0cmlidXRlIHRpdGxlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzcyBlbGVtZW50IGF0dHJpYnV0ZSBjbGFzc1xuXHQgKiBAcHJvcGVydHkge2ludH0gdGltZW91dCB0aW1lb3V0XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdFt0aGlzLmNvbnN0cnVjdG9yLmdldFVSTEF0dHJpYnV0ZSgpXTogdW5kZWZpbmVkLFxuXHRcdFx0W0tFWV9ET0NVTUVOVF06IGdldEdsb2JhbE9iamVjdChcImRvY3VtZW50XCIpLFxuXHRcdFx0W0tFWV9RVUVSWV06IFwiaGVhZFwiLFxuXHRcdFx0W0tFWV9USU1FT1VUXTogMTAwMDAsXG5cdFx0XHRbQVRUUklCVVRFX0lEXTogbmV3IElEKFwicmVzb3VyY2VcIikudG9TdHJpbmcoKSxcblx0XHRcdFtBVFRSSUJVVEVfQ0xBU1NdOiB1bmRlZmluZWQsXG5cdFx0XHRbQVRUUklCVVRFX1RJVExFXTogdW5kZWZpbmVkLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpdGggYGF2YWlsYWJsZSgpYCB5b3UgY2FuIGNoZWNrIGlmIGEgcmVzb3VyY2UgaXMgYXZhaWxhYmxlLlxuXHQgKiBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gdGhlIHRhZyBpcyBpbmNsdWRlZCBhbmQgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGF2YWlsYWJsZSgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRpZiAoIShzZWxmW3JlZmVyZW5jZVN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIm5vIGVsZW1lbnRcIik7XG5cdFx0fVxuXG5cdFx0aWYgKCFzZWxmLmlzQ29ubmVjdGVkKCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcImVsZW1lbnQgbm90IGNvbm5lY3RlZFwiKTtcblx0XHR9XG5cblx0XHRpZiAoc2VsZltpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJsb2FkZWRcIl0gPT09IHRydWUpIHtcblx0XHRcdGlmIChzZWxmW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImVycm9yXCJdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uZ2V0U3ViamVjdCgpW1wiZXJyb3JcIl0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0cmVqZWN0KFwidGltZW91dFwiKTtcblx0XHRcdH0sIHNlbGYuZ2V0T3B0aW9uKFwidGltZW91dFwiKSk7XG5cblx0XHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IE9ic2VydmVyKCgpID0+IHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRzZWxmW2ludGVybmFsU3RhdGVTeW1ib2xdLmRldGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXNcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2VcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIHRocm93cyB7RXJyb3J9IHRhcmdldCBub3QgZm91bmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kVG9Eb2N1bWVudCgpIHtcblx0Y29uc3QgdGFyZ2V0Tm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRPcHRpb24oS0VZX1FVRVJZLCBcImhlYWRcIikpO1xuXHRpZiAoISh0YXJnZXROb2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGFyZ2V0IG5vdCBmb3VuZFwiKTtcblx0fVxuXG5cdGFkZEV2ZW50cy5jYWxsKHRoaXMpO1xuXHR0YXJnZXROb2RlLmFwcGVuZENoaWxkKHRoaXNbcmVmZXJlbmNlU3ltYm9sXSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2FkZEV2ZW50c31cbiAqL1xuZnVuY3Rpb24gYWRkRXZlbnRzKCkge1xuXHRjb25zdCBvbkVycm9yID0gKCkgPT4ge1xuXHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25FcnJvcik7XG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIG9uTG9hZCk7XG5cblx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdLnNldFN1YmplY3Qoe1xuXHRcdFx0bG9hZGVkOiB0cnVlLFxuXHRcdFx0ZXJyb3I6IGAke1xuXHRcdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF1bdGhpcy5jb25zdHJ1Y3Rvci5nZXRVUkxBdHRyaWJ1dGUoKV1cblx0XHRcdH0gaXMgbm90IGF2YWlsYWJsZWAsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm47XG5cdH07XG5cblx0Y29uc3Qgb25Mb2FkID0gKCkgPT4ge1xuXHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25FcnJvcik7XG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIG9uTG9hZCk7XG5cdFx0dGhpc1tpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJsb2FkZWRcIl0gPSB0cnVlO1xuXHR9O1xuXG5cdHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBvbkxvYWQsIGZhbHNlKTtcblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbkVycm9yLCBmYWxzZSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTdGF0ZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9TUkMsXG5cdEFUVFJJQlVURV9USVRMRSxcblx0QVRUUklCVVRFX1RZUEUsXG5cdFRBR19TQ1JJUFQsXG59IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRLRVlfRE9DVU1FTlQsXG5cdEtFWV9RVUVSWSxcblx0cmVmZXJlbmNlU3ltYm9sLFxuXHRSZXNvdXJjZSxcbn0gZnJvbSBcIi4uL3Jlc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhIH07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGVtYmVkIGRhdGEuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBEYXRhIFJlc291cmNlIGNsYXNzXG4gKi9cbmNsYXNzIERhdGEgZXh0ZW5kcyBSZXNvdXJjZSB7XG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbW9kZT1jb3JzIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9mZXRjaFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY3JlZGVudGlhbHM9c2FtZS1vcmlnaW4gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL2ZldGNoXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlPWFwcGxpY2F0aW9uL2pzb24ge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci10eXBlfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRtb2RlOiBcImNvcnNcIixcblx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHR0eXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZS5EYXRhfVxuXHQgKi9cblx0Y3JlYXRlKCkge1xuXHRcdGNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIHRoZSBIVE1MRWxlbWVudCB0byB0aGUgc3BlY2lmaWVkIGRvY3VtZW50XG5cdCAqXG5cdCAqIHRocm93cyB7RXJyb3J9IHRhcmdldCBub3QgZm91bmRcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2V9XG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGlmICghKHRoaXNbcmVmZXJlbmNlU3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0dGhpcy5jcmVhdGUoKTtcblx0XHR9XG5cblx0XHRhcHBlbmRUb0RvY3VtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZS9kYXRhXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG5cdFx0cmV0dXJuIEFUVFJJQlVURV9TUkM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuRGF0YX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpO1xuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFRBR19TQ1JJUFQpO1xuXG5cdGZvciAoY29uc3Qga2V5IG9mIFtcblx0XHRBVFRSSUJVVEVfVFlQRSxcblx0XHRBVFRSSUJVVEVfSUQsXG5cdFx0QVRUUklCVVRFX0NMQVNTLFxuXHRcdEFUVFJJQlVURV9USVRMRSxcblx0XSkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihrZXkpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXVtrZXldID0gdGhpcy5nZXRPcHRpb24oa2V5KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIHRocm93cyB7RXJyb3J9IHRhcmdldCBub3QgZm91bmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kVG9Eb2N1bWVudCgpIHtcblx0Y29uc3QgdGFyZ2V0Tm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRPcHRpb24oS0VZX1FVRVJZLCBcImhlYWRcIikpO1xuXHRpZiAoISh0YXJnZXROb2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGFyZ2V0IG5vdCBmb3VuZFwiKTtcblx0fVxuXG5cdHRhcmdldE5vZGUuYXBwZW5kQ2hpbGQodGhpc1tyZWZlcmVuY2VTeW1ib2xdKTtcblxuXHRnZXRHbG9iYWxGdW5jdGlvbihcImZldGNoXCIpKHRoaXMuZ2V0T3B0aW9uKEFUVFJJQlVURV9TUkMpLCB7XG5cdFx0bWV0aG9kOiBcIkdFVFwiLCAvLyAqR0VULCBQT1NULCBQVVQsIERFTEVURSwgZXRjLlxuXHRcdG1vZGU6IHRoaXMuZ2V0T3B0aW9uKFwibW9kZVwiLCBcImNvcnNcIiksIC8vIG5vLWNvcnMsICpjb3JzLCBzYW1lLW9yaWdpblxuXHRcdGNhY2hlOiBcIm5vLWNhY2hlXCIsIC8vICpkZWZhdWx0LCBuby1jYWNoZSwgcmVsb2FkLCBmb3JjZS1jYWNoZSwgb25seS1pZi1jYWNoZWRcblx0XHRjcmVkZW50aWFsczogdGhpcy5nZXRPcHRpb24oXCJjcmVkZW50aWFsc1wiLCBcInNhbWUtb3JpZ2luXCIpLCAvLyBpbmNsdWRlLCAqc2FtZS1vcmlnaW4sIG9taXRcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6IHRoaXMuZ2V0T3B0aW9uKFwidHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIiksXG5cdFx0fSxcblx0XHRyZWRpcmVjdDogXCJmb2xsb3dcIiwgLy8gbWFudWFsLCAqZm9sbG93LCBlcnJvclxuXHRcdHJlZmVycmVyUG9saWN5OiBcIm5vLXJlZmVycmVyXCIsIC8vIG5vLXJlZmVycmVyLFxuXHR9KVxuXHRcdC50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcblx0XHR9KVxuXHRcdC50aGVuKCh0ZXh0KSA9PiB7XG5cdFx0XHRjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpO1xuXHRcdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLmFwcGVuZENoaWxkKHRleHROb2RlKTtcblxuXHRcdFx0dGhpc1tpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJsb2FkZWRcIl0gPSB0cnVlO1xuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdLnNldFN1YmplY3Qoe1xuXHRcdFx0XHRsb2FkZWQ6IHRydWUsXG5cdFx0XHRcdGVycm9yOiBlLnRvU3RyaW5nKCksXG5cdFx0XHR9KTtcblxuXHRcdFx0dGFyZ2V0Tm9kZS5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHR9KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfQ0xBU1MsXG5cdEFUVFJJQlVURV9IUkVGLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9OT05DRSxcblx0QVRUUklCVVRFX1NSQyxcblx0QVRUUklCVVRFX1RJVExFLFxuXHRBVFRSSUJVVEVfVFlQRSxcblx0VEFHX0xJTkssXG59IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBLRVlfRE9DVU1FTlQsIHJlZmVyZW5jZVN5bWJvbCwgUmVzb3VyY2UgfSBmcm9tIFwiLi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBMaW5rIH07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGVtYmVkIGV4dGVybmFsIHJlc291cmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rXG4gKi9cbmNsYXNzIExpbmsgZXh0ZW5kcyBSZXNvdXJjZSB7XG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItYXN9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcm9zc09yaWdpbj1hbm9ueW1vdXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1jcm9zc29yaWdpbn1cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkaXNhYmxlZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaHJlZiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1ocmVmfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaHJlZmxhbmcge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItaHJlZmxhbmd9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbWFnZXNpemVzIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWltYWdlc2l6ZXN9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbWFnZXNyY3NldCB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1pbWFnZXNyY3NldH1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGludGVncml0eSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1pbnRlZ3JpdHl9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZWRpYSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1tZWRpYX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHByZWZldGNoIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLXByZWZldGNofVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVmZXJyZXJwb2xpY3kge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcmVmZXJyZXJwb2xpY3l9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWwge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcmVsfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci10eXBlfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gc2l6ZXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItc2l6ZXN9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBub25jZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLW5vbmNlfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRhczogdW5kZWZpbmVkLFxuXHRcdFx0Y3Jvc3NPcmlnaW46IFwiYW5vbnltb3VzXCIsXG5cdFx0XHRkaXNhYmxlZDogdW5kZWZpbmVkLFxuXHRcdFx0aHJlZjogdW5kZWZpbmVkLFxuXHRcdFx0aHJlZmxhbmc6IHVuZGVmaW5lZCxcblx0XHRcdGltYWdlc2l6ZXM6IHVuZGVmaW5lZCxcblx0XHRcdGltYWdlc3Jjc2V0OiB1bmRlZmluZWQsXG5cdFx0XHRpbnRlZ3JpdHk6IHVuZGVmaW5lZCxcblx0XHRcdG1lZGlhOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVmZXRjaDogdW5kZWZpbmVkLFxuXHRcdFx0cmVmZXJyZXJwb2xpY3k6IHVuZGVmaW5lZCxcblx0XHRcdHJlbDogdW5kZWZpbmVkLFxuXHRcdFx0c2l6ZXM6IHVuZGVmaW5lZCxcblx0XHRcdHR5cGU6IHVuZGVmaW5lZCxcblx0XHRcdG5vbmNlOiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZS9saW5rXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLkxpbmt9XG5cdCAqL1xuXHRjcmVhdGUoKSB7XG5cdFx0Y3JlYXRlRWxlbWVudC5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG5cdFx0cmV0dXJuIEFUVFJJQlVURV9IUkVGO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLkxpbmt9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKTtcblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChUQUdfTElOSyk7XG5cblx0Zm9yIChjb25zdCBrZXkgb2YgW1xuXHRcdFwiYXNcIixcblx0XHRcImNyb3NzT3JpZ2luXCIsXG5cdFx0XCJkaXNhYmxlZFwiLFxuXHRcdFwiaHJlZlwiLFxuXHRcdFwiaHJlZmxhbmdcIixcblx0XHRcImltYWdlc2l6ZXNcIixcblx0XHRcImltYWdlc3Jjc2V0XCIsXG5cdFx0XCJpbnRlZ3JpdHlcIixcblx0XHRcIm1lZGlhXCIsXG5cdFx0XCJwcmVmZXRjaFwiLFxuXHRcdFwicmVmZXJyZXJwb2xpY3lcIixcblx0XHRcInNpemVzXCIsXG5cdFx0XCJyZWxcIixcblx0XHRcInR5cGVcIixcblx0XHRBVFRSSUJVVEVfSFJFRixcblx0XHRBVFRSSUJVVEVfSUQsXG5cdFx0QVRUUklCVVRFX0NMQVNTLFxuXHRcdEFUVFJJQlVURV9USVRMRSxcblx0XHRBVFRSSUJVVEVfTk9OQ0UsXG5cdF0pIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oa2V5KSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF1ba2V5XSA9IHRoaXMuZ2V0T3B0aW9uKGtleSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgTGluayB9IGZyb20gXCIuLi9saW5rLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgU3R5bGVzaGVldCB9O1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBlbWJlZCBleHRlcm5hbCByZXNvdXJjZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBSZXNvdXJjZSBjbGFzc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGlua1xuICovXG5jbGFzcyBTdHlsZXNoZWV0IGV4dGVuZHMgTGluayB7XG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVsIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLXJlbH1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0cmVsOiBcInN0eWxlc2hlZXRcIixcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldFwiKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9DTEFTUyxcblx0QVRUUklCVVRFX0lELFxuXHRBVFRSSUJVVEVfTk9OQ0UsXG5cdEFUVFJJQlVURV9TUkMsXG5cdEFUVFJJQlVURV9USVRMRSxcblx0QVRUUklCVVRFX1RZUEUsXG5cdFRBR19TQ1JJUFQsXG59IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBLRVlfRE9DVU1FTlQsIHJlZmVyZW5jZVN5bWJvbCwgUmVzb3VyY2UgfSBmcm9tIFwiLi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBTY3JpcHQgfTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZW1iZWQgc2NyaXB0cy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKi9cbmNsYXNzIFNjcmlwdCBleHRlbmRzIFJlc291cmNlIHtcblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYXN5bmM9dHJ1ZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWFzeW5jfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY3Jvc3NPcmlnaW49YW5vbnltb3VzIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItY3Jvc3NvcmlnaW59XG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGVmZXI9ZmFsc2Uge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1kZWZlcn1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGludGVncml0eSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWludGVncml0eX1cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBub21vZHVsZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLW5vbW9kdWxlfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbm9uY2Uge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1ub25jZX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlZmVycmVycG9saWN5IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItcmVmZXJyZXJwb2xpY3l9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItdHlwZX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcblx0XHRcdGRlZmVyOiBmYWxzZSxcblx0XHRcdGludGVncml0eTogdW5kZWZpbmVkLFxuXHRcdFx0bm9tb2R1bGU6IGZhbHNlLFxuXHRcdFx0bm9uY2U6IHVuZGVmaW5lZCxcblx0XHRcdHJlZmVycmVycG9saWN5OiB1bmRlZmluZWQsXG5cdFx0XHR0eXBlOiBcInRleHQvamF2YXNjcmlwdFwiLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2Uvc2NyaXB0XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLlNjcmlwdH1cblx0ICovXG5cdGNyZWF0ZSgpIHtcblx0XHRjcmVhdGVFbGVtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcblx0XHRyZXR1cm4gQVRUUklCVVRFX1NSQztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZS5TY3JpcHR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKTtcblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChUQUdfU0NSSVBUKTtcblxuXHRmb3IgKGNvbnN0IGtleSBvZiBbXG5cdFx0XCJjcm9zc09yaWdpblwiLFxuXHRcdFwiZGVmZXJcIixcblx0XHRcImFzeW5jXCIsXG5cdFx0XCJpbnRlZ3JpdHlcIixcblx0XHRcIm5vbW9kdWxlXCIsXG5cdFx0QVRUUklCVVRFX05PTkNFLFxuXHRcdFwicmVmZXJyZXJwb2xpY3lcIixcblx0XHRBVFRSSUJVVEVfVFlQRSxcblx0XHRBVFRSSUJVVEVfU1JDLFxuXHRcdEFUVFJJQlVURV9JRCxcblx0XHRBVFRSSUJVVEVfQ0xBU1MsXG5cdFx0QVRUUklCVVRFX1RJVExFLFxuXHRdKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKGtleSkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdW2tleV0gPSB0aGlzLmdldE9wdGlvbihrZXkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBlcXVpcFdpdGhJbnRlcm5hbCB9IGZyb20gXCIuLi90eXBlcy9pbnRlcm5hbC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfSFJFRiwgQVRUUklCVVRFX1NSQyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IFJlc291cmNlIH0gZnJvbSBcIi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBEYXRhIH0gZnJvbSBcIi4vcmVzb3VyY2UvZGF0YS5tanNcIjtcbmltcG9ydCB7IFN0eWxlc2hlZXQgfSBmcm9tIFwiLi9yZXNvdXJjZS9saW5rL3N0eWxlc2hlZXQubWpzXCI7XG5pbXBvcnQgeyBTY3JpcHQgfSBmcm9tIFwiLi9yZXNvdXJjZS9zY3JpcHQubWpzXCI7XG5cbmV4cG9ydCB7IFJlc291cmNlTWFuYWdlciB9O1xuXG4vKipcbiAqIFRoZSBSZXNvdXJjZU1hbmFnZXIgaXMgYSBzaW5nbGV0b24gdGhhdCBtYW5hZ2VzIGFsbCByZXNvdXJjZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBSZXNvdXJjZSBjbGFzc1xuICovXG5jbGFzcyBSZXNvdXJjZU1hbmFnZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIHRocm93IHtFcnJvcn0gdW5zdXBwb3J0ZWQgZG9jdW1lbnQgdHlwZVxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXHRcdGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG5cblx0XHRpZiAoISh0aGlzLmdldE9wdGlvbihcImRvY3VtZW50XCIpIGluc3RhbmNlb2YgRG9jdW1lbnQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBkb2N1bWVudCB0eXBlXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjE1LjAgdXNlIGdldEludGVybmFsIGluc3RlYWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGJhc2V1cmxcblx0ICovXG5cdGdldE9wdGlvbihrZXkpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRJbnRlcm5hbChrZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBiYXNldXJsXG5cdCAqL1xuXHRnZXRCYXNlVVJMKCkge1xuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiZG9jdW1lbnRcIik/LmJhc2VVUkw7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGJhc2V1cmxcblx0ICogQGRlcHJlY2F0ZWQgc2luY2UgMy4xNS4wIHVzZSBpbnRlcm5hbERlZmF1bHRzIGluc3RlYWRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gdGhpcy5pbnRlcm5hbERlZmF1bHRzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7SFRNTERvY3VtZW50fSBkb2N1bWVudD1kb2N1bWVudCBEb2N1bWVudFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVzb3VyY2VzXG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IHJlc291cmNlcy5zY3JpcHRzPVtdIGFycmF5IHdpdGgge0BsaW5rIE1vbnN0ZXIuRE9NLlJlc291cmNlLlNjcmlwdH0gb2JqZWN0c1xuXHQgKiBAcHJvcGVydHkge0FycmF5fSByZXNvdXJjZXMuc3R5bGVzaGVldHM9W10gYXJyYXkgd2l0aCB7QGxpbmsgTW9uc3Rlci5ET00uUmVzb3VyY2UuTGluay5TdHlsZXNoZWV0fSBvYmplY3RzXG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IHJlc291cmNlcy5kYXRhPVtdIGFycmF5IHdpdGgge0BsaW5rIE1vbnN0ZXIuRE9NLlJlc291cmNlLkRhdGF9IG9iamVjdHNcblx0ICovXG5cdGdldCBpbnRlcm5hbERlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHR7XG5cdFx0XHRcdGRvY3VtZW50OiBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKSxcblx0XHRcdFx0cmVzb3VyY2VzOiB7XG5cdFx0XHRcdFx0c2NyaXB0czogW10sXG5cdFx0XHRcdFx0c3R5bGVzaGVldHM6IFtdLFxuXHRcdFx0XHRcdGRhdGE6IFtdLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGVuZCBUYWdzIHRvIERPTVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCByZXNvdXJjZSBkZWZpbml0aW9uXG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdHJ1blJlc291cmNlTWV0aG9kLmNhbGwodGhpcywgXCJjb25uZWN0XCIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGF2YWlsYWJsZVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgcmVzb3VyY2UgZGVmaW5pdGlvblxuXHQgKi9cblx0YXZhaWxhYmxlKCkge1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChydW5SZXNvdXJjZU1ldGhvZC5jYWxsKHRoaXMsIFwiYXZhaWxhYmxlXCIpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSBzY3JpcHRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcblx0ICogQHBhcmFtIFtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHNlZSBNb25zdGVyLkRPTS5SZXNvdXJjZS5TY3JpcHRcblx0ICovXG5cdGFkZFNjcmlwdCh1cmwsIG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gYWRkUmVzb3VyY2UuY2FsbCh0aGlzLCBcInNjcmlwdHNcIiwgdXJsLCBvcHRpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgU3R5bGVzaGVldFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0gW09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2VNYW5hZ2VyfVxuXHQgKiBAc2VlIE1vbnN0ZXIuRE9NLlJlc291cmNlLkxpbmsuU3R5bGVzaGVldFxuXHQgKi9cblx0YWRkU3R5bGVzaGVldCh1cmwsIG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gYWRkUmVzb3VyY2UuY2FsbCh0aGlzLCBcInN0eWxlc2hlZXRzXCIsIHVybCwgb3B0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIERhdGEgVGFnXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG5cdCAqIEBwYXJhbSBbT2JqZWN0fHVuZGVmaW5lZH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG5cdCAqIEBzZWUgTW9uc3Rlci5ET00uUmVzb3VyY2UuRGF0YVxuXHQgKi9cblx0YWRkRGF0YSh1cmwsIG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gYWRkUmVzb3VyY2UuY2FsbCh0aGlzLCBcImRhdGFcIiwgdXJsLCBvcHRpb25zKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gcnVuUmVzb3VyY2VNZXRob2QobWV0aG9kKSB7XG5cdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdGZvciAoY29uc3QgdHlwZSBvZiBbXCJzY3JpcHRzXCIsIFwic3R5bGVzaGVldHNcIiwgXCJkYXRhXCJdKSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5nZXRPcHRpb24oYHJlc291cmNlcy4ke3R5cGV9YCk7XG5cdFx0aWYgKCFpc0FycmF5KHJlc291cmNlcykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XG5cdFx0XHRpZiAoIShyZXNvdXJjZSBpbnN0YW5jZW9mIFJlc291cmNlKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCByZXNvdXJjZSBkZWZpbml0aW9uXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXN1bHQucHVzaChyZXNvdXJjZVttZXRob2RdKCkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICogQHBhcmFtIFtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRSZXNvdXJjZSh0eXBlLCB1cmwsIG9wdGlvbnMpIHtcblx0aWYgKHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHR9XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0bGV0IHJlc291cmNlO1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRjYXNlIFwic2NyaXB0c1wiOlxuXHRcdFx0cmVzb3VyY2UgPSBuZXcgU2NyaXB0KGV4dGVuZCh7fSwgb3B0aW9ucywgeyBbQVRUUklCVVRFX1NSQ106IHVybCB9KSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwic3R5bGVzaGVldHNcIjpcblx0XHRcdHJlc291cmNlID0gbmV3IFN0eWxlc2hlZXQoZXh0ZW5kKHt9LCBvcHRpb25zLCB7IFtBVFRSSUJVVEVfSFJFRl06IHVybCB9KSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiZGF0YVwiOlxuXHRcdFx0cmVzb3VyY2UgPSBuZXcgRGF0YShleHRlbmQoe30sIG9wdGlvbnMsIHsgW0FUVFJJQlVURV9TUkNdOiB1cmwgfSkpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZSAke3R5cGV9YCk7XG5cdH1cblxuXHR0aGlzLmdldE9wdGlvbihcInJlc291cmNlc1wiKT8uW3R5cGVdLnB1c2gocmVzb3VyY2UpO1xuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBDb25maWdNYW5hZ2VyU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQ29uZmlnTWFuYWdlclN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRDb25maWdNYW5hZ2VyU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBjb25maWdtYW5hZ2VyIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpub25lfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBDb25maWdNYW5hZ2VyU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvY29uZmlnLW1hbmFnZXIubWpzXCI7XG5pbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IENvbmZpZ01hbmFnZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW5kZXhEQkluc3RhbmNlU3ltYm9sID0gU3ltYm9sKFwiaW5kZXhEQkluc3RhbmNlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbml0aWFsaXplZFByb21pc2VTeW1ib2wgPSBTeW1ib2woXCJpbml0aWFsaXplZFByb21pc2VTeW1ib2xcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IE1PREVfUkVBRE9OTFkgPSBcInJlYWRvbmx5XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IE1PREVfUkVBRF9XUklURSA9IFwicmVhZHdyaXRlXCI7XG5cbi8qKlxuICogVGhlIENvbmZpZyBNYW5hZ2VyIGNvbXBvbmVudCBpcyB1c2VkIHRvIGVuY2Fwc3VsYXRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25maWcgbWFuYWdlciBjb21wb25lbnRcbiAqL1xuY2xhc3MgQ29uZmlnTWFuYWdlciBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL2NvbXBvbmVudC1ob3N0L2NvbmZpZy1tYW5hZ2VyQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEB0eXBlIHtzeW1ib2x9XG5cdFx0ICovXG5cdFx0dGhpc1tpbml0aWFsaXplZFByb21pc2VTeW1ib2xdID0gW107XG5cdFx0dGhpc1tpbmRleERCSW5zdGFuY2VTeW1ib2xdID0gbnVsbDtcblx0XHR0aGlzW2luaXRpYWxpemVkUHJvbWlzZVN5bWJvbF0ucHVzaChvcGVuRGF0YWJhc2UuY2FsbCh0aGlzKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHJlYWR5KCkge1xuXHRcdHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2luaXRpYWxpemVkUHJvbWlzZVN5bWJvbF0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0aW5kZXhEQjoge1xuXHRcdFx0XHRuYW1lOiBcIm1vbnN0ZXJcIixcblx0XHRcdFx0dmVyc2lvbjogMixcblx0XHRcdFx0b2JqZWN0U3RvcmU6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbmZpZ1wiLFxuXHRcdFx0XHRcdGtleVBhdGg6IFwia2V5XCIsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cblx0ICovXG5cdGdldENvbmZpZyhrZXkpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpLnRoZW4oKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGdldEJsb2IuY2FsbCh0aGlzLCBrZXkpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn1cblx0ICovXG5cdGhhc0NvbmZpZyhrZXkpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBnZXRCbG9iLmNhbGwodGhpcywga2V5KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlPHVua25vd24+fVxuXHQgKi9cblx0c2V0Q29uZmlnKGtleSwgdmFsdWUpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpLnRoZW4oKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHNldEJsb2IuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcblx0XHR9KTtcblx0fVxuXG5cdGRlbGV0ZUNvbmZpZyhrZXkpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpLnRoZW4oKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGRlbGV0ZUJsb2IuY2FsbCh0aGlzLCBrZXkpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1jb25maWctbWFuYWdlclwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbQ29uZmlnTWFuYWdlclN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIG9wZW5EYXRhYmFzZSgpIHtcblx0Y29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG5cblx0Y29uc3QgbmFtZSA9IHRoaXMuZ2V0T3B0aW9uKFwiaW5kZXhEQi5uYW1lXCIpO1xuXHRjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLnZlcnNpb25cIik7XG5cdGNvbnN0IHN0b3JhZ2VOYW1lID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLm9iamVjdFN0b3JlLm5hbWVcIik7XG5cdGNvbnN0IEtleVBhdGggPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIub2JqZWN0U3RvcmUua2V5UGF0aFwiKTtcblxuXHRpZiAoIW5hbWUgfHwgIXZlcnNpb24pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgZGF0YWJhc2UgbmFtZSBhbmQgdmVyc2lvbiBtdXN0IGJlIHNldC5cIik7XG5cdH1cblxuXHRjb25zdCByZXF1ZXN0ID0gd2luZG93LmluZGV4ZWREQi5vcGVuKG5hbWUsIHZlcnNpb24pO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0cmVxdWVzdC5vbmVycm9yID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiRXJyb3Igb3BlbmluZyBkYXRhYmFzZVwiLCBldmVudCk7XG5cdFx0XHRyZWplY3QocmVxdWVzdC5lcnJvcik7XG5cdFx0fTtcblxuXHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50KSA9PiB7XG5cdFx0XHR0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0gPSBldmVudD8udGFyZ2V0Py5yZXN1bHQ7XG5cdFx0XHRyZXNvbHZlKHJlcXVlc3QucmVzdWx0KTtcblx0XHR9O1xuXG5cdFx0cmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoZXZlbnQpID0+IHtcblx0XHRcdGNvbnN0IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcblxuXHRcdFx0bGV0IG9iamVjdFN0b3JlO1xuXHRcdFx0aWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHN0b3JhZ2VOYW1lKSkge1xuXHRcdFx0XHRvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKHN0b3JhZ2VOYW1lLCB7IGtleVBhdGg6IEtleVBhdGggfSk7XG5cdFx0XHR9XG5cblx0XHRcdG9iamVjdFN0b3JlLnRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc29sZS5sb2coXCJEYXRhYmFzZSB1cGdyYWRlIGNvbXBsZXRlXCIpO1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9O1xuXHRcdH07XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlIGVpdGhlciBcInJlYWRvbmx5XCIgb3IgXCJyZWFkd3JpdGVcIlxuICovXG5mdW5jdGlvbiBnZXRPYmplY3RTdG9yZShtb2RlKSB7XG5cdGNvbnN0IHN0b3JhZ2VOYW1lID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLm9iamVjdFN0b3JlLm5hbWVcIik7XG5cblx0aWYgKCF0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgZGF0YWJhc2UgaXMgbm90IG9wZW4uXCIpO1xuXHR9XG5cblx0Ly8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSURCRGF0YWJhc2UvdHJhbnNhY3Rpb25cblx0Ly8gdHJhbnNhY3Rpb24oc3RvcmVOYW1lcywgbW9kZSwgb3B0aW9ucylcblx0Y29uc3QgdHggPSB0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0udHJhbnNhY3Rpb24oc3RvcmFnZU5hbWUsIG1vZGUpO1xuXHRyZXR1cm4gdHgub2JqZWN0U3RvcmUoc3RvcmFnZU5hbWUpO1xufVxuXG4vKipcbiAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmZ1bmN0aW9uIGNsZWFyT2JqZWN0U3RvcmUoKSB7XG5cdGNvbnN0IHN0b3JlID0gZ2V0T2JqZWN0U3RvcmUuY2FsbCh0aGlzLCBcInJlYWR3cml0ZVwiKTtcblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGNvbnN0IHJlcSA9IHN0b3JlLmNsZWFyKCk7XG5cdFx0cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdGNvbnNvbGUubG9nKFwiY2xlYXJPYmplY3RTdG9yZSBjb21wbGV0ZWRcIik7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fTtcblx0XHRyZXEub25lcnJvciA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJjbGVhck9iamVjdFN0b3JlOlwiLCBldnQudGFyZ2V0LmVycm9yQ29kZSk7XG5cdFx0XHRyZWplY3QoZXZ0LnRhcmdldC5lcnJvckNvZGUpO1xuXHRcdH07XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRCbG9iKGtleSkge1xuXHRjb25zdCBzdG9yZSA9IGdldE9iamVjdFN0b3JlLmNhbGwodGhpcywgTU9ERV9SRUFET05MWSk7XG5cblx0Y29uc3QgcmVxID0gc3RvcmUuZ2V0KGtleSk7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRyZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBldnQudGFyZ2V0LnJlc3VsdDtcblx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlLmJsb2IpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRyZWplY3QobmV3IEVycm9yKFwiVGhlIHZhbHVlIG9mIHRoZSBrZXkgJ1wiICsga2V5ICsgXCInIGlzIG5vdCBkZWZpbmVkLlwiKSk7XG5cdFx0fTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGRlbGV0ZUJsb2Ioa2V5KSB7XG5cdGNvbnN0IHN0b3JlID0gZ2V0T2JqZWN0U3RvcmUuY2FsbCh0aGlzLCBNT0RFX1JFQURfV1JJVEUpO1xuXG5cdGNvbnN0IHJlcSA9IHN0b3JlLmRlbGV0ZShrZXkpO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9O1xuXG5cdFx0cmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiZGVsZXRlQmxvYjpcIiwgZXZ0LnRhcmdldC5lcnJvckNvZGUpO1xuXHRcdFx0cmVqZWN0KGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHR9O1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gc2V0QmxvYihrZXksIGJsb2IpIHtcblx0Y29uc3Qgc3RvcmUgPSBnZXRPYmplY3RTdG9yZS5jYWxsKHRoaXMsIE1PREVfUkVBRF9XUklURSk7XG5cblx0Y29uc3QgS2V5UGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwiaW5kZXhEQi5vYmplY3RTdG9yZS5rZXlQYXRoXCIpO1xuXHRjb25zdCBvYmogPSB7fTtcblx0b2JqW0tleVBhdGhdID0ga2V5O1xuXHRvYmouYmxvYiA9IGJsb2I7XG5cdGNvbnN0IHJlcSA9IHN0b3JlLnB1dChvYmopO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9O1xuXG5cdFx0cmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwic2V0QmxvYjpcIiwgZXZ0LnRhcmdldC5lcnJvckNvZGUpO1xuXHRcdFx0cmVqZWN0KGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHR9O1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoQ29uZmlnTWFuYWdlcik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IFwiLi4vbm90aWZ5L25vdGlmeS5tanNcIjtcbmltcG9ydCB7IEhvc3RTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9ob3N0Lm1qc1wiO1xuaW1wb3J0IHsgZ2V0TG9jYWxlT2ZEb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgRW1iZWQgfSBmcm9tIFwiLi4vLi4vaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuLi8uLi9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7IHdpbmRvd1JlYWR5IH0gZnJvbSBcIi4uLy4uL2RvbS9yZWFkeS5tanNcIjtcbmltcG9ydCB7IEZvY3VzTWFuYWdlciB9IGZyb20gXCIuLi8uLi9kb20vZm9jdXNtYW5hZ2VyLm1qc1wiO1xuaW1wb3J0IHsgUmVzb3VyY2VNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2RvbS9yZXNvdXJjZW1hbmFnZXIubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGlzSXRlcmFibGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgXCIuL2NvbmZpZy1tYW5hZ2VyLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBIb3N0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHByb21pc2VzU3ltYm9sID0gU3ltYm9sKFwicHJvbWlzZXNTeW1ib2xcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG5vdGlmeUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJub3RpZnlFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvdmVybGF5RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm92ZXJsYXlFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbmZpZ01hbmFnZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBmb2N1c01hbmFnZXJTeW1ib2wgPSBTeW1ib2woXCJmb2N1c01hbmFnZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc291cmNlTWFuYWdlclN5bWJvbCA9IFN5bWJvbChcInJlc291cmNlTWFuYWdlclwiKTtcblxuLyoqXG4gKiBUaGUgSG9zdCBjb21wb25lbnQgaXMgdXNlZCB0byBlbmNhcHN1bGF0ZSB0aGUgY29udGVudCBvZiBhIHdlYiBhcHAuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9ob3N0LnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItaG9zdCAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ob3N0Jyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItaG9zdD48L21vbnN0ZXItaG9zdD5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgJ0BzY2h1a2FpL2NvbXBvbmVudC1zdGF0ZS9zb3VyY2UvaG9zdC5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ob3N0Jyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgaG9zdC5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEhvc3RcbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBzaW1wbGUgaG9zdCBjb21wb25lbnRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0I21vbnN0ZXItaG9zdC1jb25uZWN0ZWRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0I21vbnN0ZXItaG9zdC1kaXNjb25uZWN0ZWRcbiAqL1xuY2xhc3MgSG9zdCBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL2NvbXBvbmVudC1ob3N0L0hvc3RAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgRmVhdHVyZSBkZWZpbml0aW9uc1xuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSBrZXlcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGdldENvbmZpZyhrZXkpIHtcblx0XHRpZiAodGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGNvbmZpZyBtYW5hZ2VyIGVsZW1lbnRcIik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXS5nZXRDb25maWcoa2V5KTtcblx0fVxuXG5cdGhhc0NvbmZpZyhrZXkpIHtcblx0XHRpZiAodGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGNvbmZpZyBtYW5hZ2VyIGVsZW1lbnRcIik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXS5oYXNDb25maWcoa2V5KTtcblx0fVxuXG5cdGRlbGV0ZUNvbmZpZyhrZXkpIHtcblx0XHRpZiAodGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGNvbmZpZyBtYW5hZ2VyIGVsZW1lbnRcIik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXS5kZWxldGVDb25maWcoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHNldENvbmZpZyhrZXksIHZhbHVlKSB7XG5cdFx0aWYgKHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBjb25maWcgbWFuYWdlciBlbGVtZW50XCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXS5zZXRDb25maWcoa2V5LCB2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3QjbW9uc3Rlci1ob3N0LWNvbm5lY3RlZFxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdC8qKlxuXHRcdCAqIHNob3cgdGhlIHNjcm9sbCBiYXIgYWx3YXlzXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKi9cblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gXCJzY3JvbGxcIjtcblxuXHRcdGNvbnN0IGNsYXNzTmFtZXMgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuYm9keVwiKTtcblxuXHRcdGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVzKSkge1xuXHRcdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZXMpO1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItaG9zdC1jb25uZWN0ZWRcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3QjbW9uc3Rlci1ob3N0LWRpc2Nvbm5lY3RlZFxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gXCJcIjtcblxuXHRcdGNvbnN0IGNsYXNzTmFtZXMgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuYm9keVwiKTtcblx0XHRpZiAoIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZXMpKSB7XG5cdFx0XHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lcyk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzSXRlcmFibGUodGhpc1twcm9taXNlc1N5bWJvbF0pID09PSBmYWxzZSkge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0XHR9XG5cblx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKFxuXHRcdFx0bmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFx0XCJtb25zdGVyLWhvc3QtY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0eyBvbmNlOiB0cnVlIH0sXG5cdFx0XHRcdCk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1ob3N0LWRpc2Nvbm5lY3RlZFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXSA9IFtdO1xuXHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdLnB1c2god2luZG93UmVhZHkpO1xuXG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdFx0aW5pdFRyYW5zbGF0aW9ucy5jYWxsKHRoaXMpO1xuXG5cdFx0dGhpc1tmb2N1c01hbmFnZXJTeW1ib2xdID0gbmV3IEZvY3VzTWFuYWdlcih0aGlzKTtcblx0XHR0aGlzW3Jlc291cmNlTWFuYWdlclN5bWJvbF0gPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKHRoaXMpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdLnB1c2godGhpc1tyZXNvdXJjZU1hbmFnZXJTeW1ib2xdLmF2YWlsYWJsZSgpKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaXNDb25uZWN0ZWQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKFxuXHRcdFx0XHRuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcdFx0XCJtb25zdGVyLWhvc3QtY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7IG9uY2U6IHRydWUgfSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBQcm9taXNlIGlzIHJlc29sdmVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgY29ubmVjdGVkIHRvIHRoZSBET00gYW5kIGFsbCByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZS5cblx0ICogSWYgdGhlIGVsZW1lbnQgaXMgbm90IGNvbm5lY3RlZCB0byB0aGUgRE9NLCB0aGUgUHJvbWlzZSBpcyByZWplY3RlZC5cblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdG9uUmVhZHkoKSB7XG5cdFx0aWYgKGlzSXRlcmFibGUodGhpc1twcm9taXNlc1N5bWJvbF0pID09PSBmYWxzZSkge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwodGhpc1twcm9taXNlc1N5bWJvbF0pLnRoZW4oKCkgPT4ge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvbW9uc3Rlci9Nb25zdGVyLkRPTS5Gb2N1c01hbmFnZXIuaHRtbHxNb25zdGVyLkRPTS5Gb2N1c01hbmFnZXJ9XG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRnZXQgZm9jdXNNYW5hZ2VyKCkge1xuXHRcdHJldHVybiB0aGlzW2ZvY3VzTWFuYWdlclN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy9tb25zdGVyL01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlci5odG1sfE1vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdGdldCByZXNvdXJjZU1hbmFnZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcmVzb3VyY2VNYW5hZ2VyU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXG5cdCAqL1xuXHR0b2dnbGVPdmVybGF5KCkge1xuXHRcdGlmICh0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLnRvZ2dsZSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0hvc3R9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGVyZSBpcyBubyBvdmVybGF5IGVsZW1lbnQgZGVmaW5lZC5cblx0ICovXG5cdG9wZW5PdmVybGF5KCkge1xuXHRcdGlmICh0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLm9wZW4oKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtIb3N0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXG5cdCAqL1xuXHRjbG9zZU92ZXJsYXkoKSB7XG5cdFx0aWYgKHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBvdmVybGF5IGVsZW1lbnQgZGVmaW5lZC5cIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0uY2xvc2UoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItaG9zdFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbSG9zdFN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuSTE4bi5Mb2NhbGV9XG5cdCAqL1xuXHRnZXQgbG9jYWxlKCkge1xuXHRcdHJldHVybiBnZXRMb2NhbGVPZkRvY3VtZW50KCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7VHJhbnNsYXRpb25zfVxuXHQgKi9cblx0Z2V0IHRyYW5zbGF0aW9ucygpIHtcblx0XHRyZXR1cm4gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xNZXNzYWdlfSBtZXNzYWdlXG5cdCAqL1xuXHRwdXNoTm90aWZpY2F0aW9uKG1lc3NhZ2UpIHtcblx0XHRpZiAodGhpc1tub3RpZnlFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gbm90aWZ5IGVsZW1lbnQgZGVmaW5lZC5cIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tub3RpZnlFbGVtZW50U3ltYm9sXS5wdXNoKG1lc3NhZ2UpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJtb25zdGVyLW92ZXJsYXlcIik7XG5cdHRoaXNbbm90aWZ5RWxlbWVudFN5bWJvbF0gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJtb25zdGVyLW5vdGlmeVwiKTtcblx0dGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJtb25zdGVyLWNvbmZpZy1tYW5hZ2VyXCIsXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGluaXRUcmFuc2xhdGlvbnMoKSB7XG5cdGlmIChpc0l0ZXJhYmxlKHRoaXNbcHJvbWlzZXNTeW1ib2xdKSA9PT0gZmFsc2UpIHtcblx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXSA9IFtdO1xuXHR9XG5cblx0dGhpc1twcm9taXNlc1N5bWJvbF0ucHVzaChFbWJlZC5hc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwiaG9zdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmhvc3QtY29udGFpbmVyLmNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInBhcnQgcGF0aDpob3N0LWNvbnRhaW5lci5uYW1lLCBkYXRhLW1vbnN0ZXItcm9sZSBwYXRoOmhvc3QtY29udGFpbmVyLm5hbWVcIj48L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiaG9zdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KEhvc3QpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IE92ZXJsYXlTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBPdmVybGF5U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdE92ZXJsYXlTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIG92ZXJsYXkgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1pbnB1dCxtZXRlcixwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWF7YWNjZW50LWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGgpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTttYXJnaW46MDtvdXRsaW5lOm5vbmV9aW5wdXQsc2VsZWN0LHRleHRhcmVhe2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtwYWRkaW5nOi40cmVtIC42cmVtfXRleHRhcmVhe21pbi1oZWlnaHQ6NnJlbTtyZXNpemU6dmVydGljYWx9aW5wdXRbdHlwZT1jb2xvcl17aGVpZ2h0OjJyZW07bWFyZ2luOjA7cGFkZGluZzouMXJlbTt3aWR0aDoycmVtfWlucHV0OmhvdmVyOm5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pOm5vdChbdHlwZT1yYW5nZV0pLHNlbGVjdDpob3Zlcix0ZXh0YXJlYTpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWlucHV0OmZvY3VzLHNlbGVjdDpmb2N1cyx0ZXh0YXJlYTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6M3B4fUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNTttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudH06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjFlbTtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9ub3NwYWNle2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2U6XFxcIkNvbnNvbGFzXFxcIixcXFwiQ291cmllciBOZXdcXFwiLFxcXCJSb2JvdG8gTW9ub1xcXCIsXFxcIlNvdXJjZSBDb2RlIFByb1xcXCIsXFxcIkZpcmEgTW9ub1xcXCIsbW9ub3NwYWNlOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjNweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjJweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheV0uaGlkZS1lbXB0eXtkaXNwbGF5Om5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXlde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtoZWlnaHQ6MTAwJTtsZWZ0OjA7b3ZlcmZsb3cteDpoaWRkZW47cG9zaXRpb246Zml4ZWQ7dG9wOjA7dHJhbnNpdGlvbjouNXM7d2lkdGg6MDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMpfVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5XSBbZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheS1jbG9zZV17Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjQwcHg7bGVmdDoxMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMHB4O3dpZHRoOjQwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXldIFtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LWNsb3NlXTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMi4xNDYgMi44NTRhLjUuNSAwIDEgMSAuNzA4LS43MDhMOCA3LjI5M2w1LjE0Ni01LjE0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsNS4xNDcgNS4xNDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC01LjE0NiA1LjE0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTIuMTQ2IDIuODU0YS41LjUgMCAxIDEgLjcwOC0uNzA4TDggNy4yOTNsNS4xNDYtNS4xNDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDUuMTQ3IDUuMTQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtNS4xNDYgNS4xNDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktb3Blbl17Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjQwcHg7bGVmdDoxMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMHB4O3dpZHRoOjQwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktb3Blbl06YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTEgMmExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xek0xIDdhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXpNMSAxMmExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xeicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTEgMmExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xek0xIDdhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXpNMSAxMmExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xeicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheV0ub3Blbnt3aWR0aDoxMDAlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgXCIuLi9ub3RpZnkvbm90aWZ5Lm1qc1wiO1xuaW1wb3J0IHsgT3ZlcmxheVN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L292ZXJsYXkubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0ZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQsXG5cdGZpcmVDdXN0b21FdmVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IE92ZXJsYXkgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3ZlcmxheUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvdmVybGF5RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3ZlcmxheUNsb3NlRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm92ZXJsYXlDbG9zZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvdmVybGF5T3BlbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvdmVybGF5T3BlbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG9wZW5FdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJvcGVuRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfVkFMVUVfT1ZFUkxBWV9PUEVOID0gXCJvdmVybGF5LW9wZW5cIjtcblxuLyoqXG4gKiBUaGUgT3ZlcmxheSBjb21wb25lbnQgaXMgdXNlZCB0byBzaG93IGFuIG92ZXJsYXkgYW5kIGEgYnV0dG9uIHRvIG9wZW4gdGhlIG92ZXJsYXkuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9vdmVybGF5LnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItb3ZlcmxheSAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1vdmVybGF5Jyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItb3ZlcmxheT48L21vbnN0ZXItb3ZlcmxheT5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgJ0BzY2h1a2FpL2NvbXBvbmVudC1zdGF0ZS9zb3VyY2Uvb3ZlcmxheS5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1vdmVybGF5Jyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgb3ZlcmxheS5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBPdmVybGF5XG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgc2ltcGxlIG92ZXJsYXkgY29tcG9uZW50XG4gKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LWJlZm9yZS1vcGVuXG4gKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LW9wZW5cbiAqIEBmaXJlcyBtb25zdGVyLW92ZXJsYXktYmVmb3JlLWNsb3NlXG4gKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LWNsb3NlZFxuICovXG5jbGFzcyBPdmVybGF5IGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2hvc3Qvb3ZlcmxheUBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb250YWluZXIgQ29udGFpbmVyIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IGNvbnRhaW5lciBDb250YWluZXIgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRhaW5lcltdLm5hbWUgTmFtZSBvZiB0aGUgY29udGFpbmVyXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250YWluZXJbXS5jb250ZW50IENvbnRlbnQgb2YgdGhlIGNvbnRhaW5lclxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGFpbmVyW10uY2xhc3MgQ3NzIGNsYXNzIG9mIHRoZSBjb250YWluZXJcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXMgQ3NzIGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuYm9keSBDc3MgY2xhc3MgdG8gaGlkZSB0aGUgYm9keS4gVGhpcyBjbGFzcyBpcyByZW1vdmVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyByZWFkeS5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMub3ZlcmxheSBDc3MgY2xhc3MgdG8gaGlkZSB0aGUgb3ZlcmxheS4gVGhpcyBjbGFzcyBpcyByZW1vdmVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyByZWFkeS5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIEZlYXR1cmUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5lc2NhcGVLZXkgSWYgdHJ1ZSB0aGUgb3ZlcmxheSBjYW4gYmUgY2xvc2VkIHdpdGggdGhlIGVzY2FwZSBrZXlcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5vcGVuQnV0dG9uIElmIHRydWUgdGhlIG92ZXJsYXkgY2FuIGJlIG9wZW5lZCB3aXRoIGEgYnV0dG9uXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRvdmVybGF5OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRlbnRcIixcblx0XHRcdFx0XHRjb250ZW50OiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdFx0XHRjbGFzczogXCJcIixcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJvZHk6IFwiaGlkZGVuXCIsXG5cdFx0XHRcdG92ZXJsYXk6IFwiaGlkZS1lbXB0eVwiLFxuXHRcdFx0fSxcblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdGVzY2FwZUtleTogdHJ1ZSxcblx0XHRcdFx0b3BlbkJ1dHRvbjogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHQvKipcblx0XHQgKiBzaG93IHRoZSBzY3JvbGwgYmFyIGFsd2F5c1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IFwic2Nyb2xsXCI7XG5cblx0XHRjb25zdCBjbGFzc05hbWVzID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmJvZHlcIik7XG5cblx0XHRpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lcykpIHtcblx0XHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWVzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheX1cblx0ICovXG5cdHRvZ2dsZSgpIHtcblx0XHRpZiAodGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwib3BlblwiKSkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9wZW4oKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheX1cblx0ICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtb3BlblxuXHQgKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LW9wZW5cblx0ICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtY2xvc2Vcblx0ICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1jbG9zZWRcblx0ICovXG5cdG9wZW4oKSB7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vdmVybGF5LWJlZm9yZS1vcGVuXCIsIHt9KTtcblxuXHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlLWVtcHR5XCIpO1xuXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwib3BlblwiKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW92ZXJsYXktb3BlblwiLCB7fSk7XG5cdFx0XHR9LCAwKTtcblx0XHR9LCAwKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXl9XG5cdCAqL1xuXHRjbG9zZSgpIHtcblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW92ZXJsYXktYmVmb3JlLWNsb3NlXCIsIHt9KTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJvcGVuXCIpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3ZlcmxheS1jbG9zZWRcIiwge30pO1xuXHRcdFx0fSwgMCk7XG5cdFx0fSwgMCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLW92ZXJsYXlcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW092ZXJsYXlTdHlsZVNoZWV0XTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKFwib3ZlcmxheVwiKTtcblx0dGhpc1tvdmVybGF5Q2xvc2VFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktY2xvc2VdXCIsXG5cdCk7XG5cdHRoaXNbb3ZlcmxheU9wZW5FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktb3Blbl1cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbY2xvc2VFdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0dGhpcy5jbG9zZSgpO1xuXHR9O1xuXG5cdHRoaXNbb3ZlcmxheUNsb3NlRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcImNsaWNrXCIsXG5cdFx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdCk7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW29wZW5FdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdEFUVFJJQlVURV9WQUxVRV9PVkVSTEFZX09QRU4sXG5cdFx0KTtcblx0XHRpZiAoZWxlbWVudCkge1xuXHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0fVxuXHR9O1xuXG5cdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXNbb3BlbkV2ZW50SGFuZGxlclN5bWJvbF0pO1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmVzY2FwZUtleVwiKSA9PT0gdHJ1ZSkge1xuXHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG5cdFx0XHRcdGNvbnN0IGlzTm90Q29tYmluZWRLZXkgPSAhKFxuXHRcdFx0XHRcdGV2ZW50LmN0cmxLZXkgfHxcblx0XHRcdFx0XHRldmVudC5hbHRLZXkgfHxcblx0XHRcdFx0XHRldmVudC5zaGlmdEtleVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoaXNOb3RDb21iaW5lZEtleSkge1xuXHRcdFx0XHRcdHRoaXMudG9nZ2xlT3ZlcmxheSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJob3N0LW92ZXJsYXlcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmhvc3Qtb3ZlcmxheS5jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJwYXJ0IHBhdGg6aG9zdC1vdmVybGF5Lm5hbWUsIGRhdGEtbW9uc3Rlci1yb2xlIHBhdGg6aG9zdC1jb250YWluZXIub3ZlcmxheVwiPjwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJvdmVybGF5LW9wZW5cIiBwYXJ0PVwib3BlblwiXG5cdFx0XHQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmZlYXR1cmVzLm9wZW5CdXR0b24gfCBpZjp2aXNpYmxlOmhpZGRlblwiPjwvZGl2PlxuXG4gICAgICAgIDxkaXYgaWQ9XCJvdmVybGF5XCIgZGF0YS1tb25zdGVyLXJvbGU9XCJvdmVybGF5XCIgcGFydD1cIm92ZXJsYXlcIiBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiaG9zdC1vdmVybGF5IHBhdGg6b3ZlcmxheVwiXG4gICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMub3ZlcmxheVwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm92ZXJsYXktY2xvc2VcIiBwYXJ0PVwiY2xvc2VcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE92ZXJsYXkpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcblxuZXhwb3J0IHsgZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkgfTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHVuaXF1ZSBjb25maWd1cmF0aW9uIGtleSBiYXNlZCBvbiB0aGUgY3VycmVudCBicm93c2VyIGxvY2F0aW9uLFxuICogY29tcG9uZW50IG5hbWUsIGlkLCBhbmQgYSBwcmVmaXguXG4gKlxuICogQHNpbmNlIDMuNTUuMCB0aGUgZnVuY3Rpb24gcmVtb3ZlIHRoZSBoYXNoIGZyb20gdGhlIGtleVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb21wb25lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IC0gQSBwcmVmaXggdG8gdXNlIGluIHRoZSB1bmlxdWUga2V5LlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZ2VuZXJhdGVkIHVuaXF1ZSBjb25maWd1cmF0aW9uIGtleS5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkoY29tcG9uZW50TmFtZSwgaWQsIHByZWZpeCkge1xuXHQvLyBHZXQgdGhlIGJyb3dzZXIgbG9jYXRpb24gd2l0aG91dCBwYXJhbWV0ZXJzXG5cdGNvbnN0IHVybFdpdGhvdXRQYXJhbXMgPSBnZXRXaW5kb3coKS5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiP1wiKVswXTtcblxuXHQvLyBXaXRob3V0IGhhc2ggKHNpbmNlIDMuNTUuMClcblx0Y29uc3QgdXJsV2l0aG91dFBhcmFtc0FuZEhhc2ggPSB1cmxXaXRob3V0UGFyYW1zLnNwbGl0KFwiI1wiKVswXTtcblxuXHQvLyBDb21iaW5lIHRoZSBwYXJ0cyB0byBjcmVhdGUgYSB1bmlxdWUga2V5XG5cdGNvbnN0IHVuaXF1ZUtleSA9IGAke3ByZWZpeH1fJHt1cmxXaXRob3V0UGFyYW1zQW5kSGFzaH1fJHtjb21wb25lbnROYW1lfV8ke2lkfWA7XG5cblx0Ly8gUmVwbGFjZSBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBzcGFjZXMgd2l0aCB1bmRlcnNjb3Jlc1xuXHRyZXR1cm4gdW5pcXVlS2V5LnJlcGxhY2UoL1teXFx3XFxzXS9naSwgXCJfXCIpLnJlcGxhY2UoL1xccysvZywgXCJfXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IERldGFpbHNTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBEZXRhaWxzU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdERldGFpbHNTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGRldGFpbHMgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeSwubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5LC5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZTpcXFwiQ29uc29sYXNcXFwiLFxcXCJDb3VyaWVyIE5ld1xcXCIsXFxcIlJvYm90byBNb25vXFxcIixcXFwiU291cmNlIENvZGUgUHJvXFxcIixcXFwiRmlyYSBNb25vXFxcIixtb25vc3BhY2U7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTIpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6M3B4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHg7LS1tb25zdGVyLWRyYWdnZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aDo0cHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodDo1MHB4fXNwYW4ubW9uc3Rlci1meC1yaXBwbGV7YW5pbWF0aW9uOm1vbnN0ZXItZngtcmlwcGxlIC42cyBsaW5lYXI7YmFja2dyb3VuZC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNyk7Ym9yZGVyLXJhZGl1czo1MCU7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnNjYWxlKDApfUBrZXlmcmFtZXMgbW9uc3Rlci1meC1yaXBwbGV7dG97b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSg0KX19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQVRUUklCVVRFX1BSRUZJWCB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsYCBjYW4gYmUgdXNlZCB0byBwYXNzIGxhYmVscy5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfQlVUVE9OX0xBQkVMID0gYCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24tbGFiZWxgO1xuXG5leHBvcnQgeyBBVFRSSUJVVEVfQlVUVE9OX0xBQkVMIH07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQ29sbGFwc2VTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBDb2xsYXBzZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRDb2xsYXBzZVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgY29sbGFwc2UgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeSwubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5LC5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZTpcXFwiQ29uc29sYXNcXFwiLFxcXCJDb3VyaWVyIE5ld1xcXCIsXFxcIlJvYm90byBNb25vXFxcIixcXFwiU291cmNlIENvZGUgUHJvXFxcIixcXFwiRmlyYSBNb25vXFxcIixtb25vc3BhY2U7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTIpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6M3B4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHg7LS1tb25zdGVyLWRyYWdnZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aDo0cHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodDo1MHB4fXNwYW4ubW9uc3Rlci1meC1yaXBwbGV7YW5pbWF0aW9uOm1vbnN0ZXItZngtcmlwcGxlIC42cyBsaW5lYXI7YmFja2dyb3VuZC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNyk7Ym9yZGVyLXJhZGl1czo1MCU7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnNjYWxlKDApfUBrZXlmcmFtZXMgbW9uc3Rlci1meC1yaXBwbGV7dG97b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSg0KX19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjZ9Lm92ZXJmbG93LWhpZGRlbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdmVyZmxvdzpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIGJ1dHRvbntib3JkZXItbGVmdDowO2JvcmRlci1yaWdodDowO2JvcmRlci10b3A6MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLmJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2hlaWdodDowO2xpbmUtaGVpZ2h0OjEuNjt0cmFuc2l0aW9uOmhlaWdodCAuNHMgZWFzZS1pbi1vdXQ7d2lkdGg6MTAwJX06aXMoW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxdKSAucGFkZGluZ3twYWRkaW5nOjFyZW19OmlzKFtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXSkgLmRlY28tbGluZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTtib3JkZXI6MDtoZWlnaHQ6MnB4O21hcmdpbjowO3BhZGRpbmc6MH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezppcyhbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF0pIC5kZWNvLWxpbmV7YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9fTppcyhbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF0pIC5kZWNvLWxpbmV7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC40cyBlYXNlLWluLW91dH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLmFjdGl2ZVtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxde2hlaWdodDp2YXIoLS1tb25zdGVyLWhlaWdodCk7dHJhbnNpdGlvbjpoZWlnaHQgLjRzIGVhc2UtaW4tb3V0fSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IENvbGxhcHNlU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvY29sbGFwc2UubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBIb3N0IH0gZnJvbSBcIi4uL2hvc3QvaG9zdC5tanNcIjtcbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IH0gZnJvbSBcIi4uL2hvc3QvdXRpbC5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IENvbGxhcHNlLCBuYW1lU3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkZXRhaWxzRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRldGFpbHNFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRldGFpbHNTbG90RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRldGFpbHNTbG90RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJkZXRhaWxzQ29udGFpbmVyRWxlbWVudFwiKTtcbi8qKlxuXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGV0YWlsc0RlY29FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZGV0YWlsc0RlY29FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBuYW1lU3ltYm9sID0gU3ltYm9sKFwibmFtZVwiKTtcblxuLyoqXG4gKiBBIENvbGxhcHNlIGNvbXBvbmVudFxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2xheW91dC9jb2xsYXBzZS9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvY29sbGFwc2Utc2ltcGxlXG4gKlxuICogQHNpbmNlIDMuNzQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5ICBBIHNpbXBsZSBjb2xsYXBzZSBjb21wb25lbnQuXG4gKi9cbmNsYXNzIENvbGxhcHNlIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2xheW91dC9jb2xsYXBzZUBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0Ly8gdGhlIG5hbWUgaXMgb25seSB1c2VkIGZvciB0aGUgaG9zdCBjb25maWcgYW5kIHRoZSBldmVudCBuYW1lXG5cdFx0dGhpc1tuYW1lU3ltYm9sXSA9IFwiY29sbGFwc2VcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXMgQ1NTIGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuY29udGFpbmVyIENTUyBjbGFzcyBmb3IgdGhlIGNvbnRhaW5lclxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgRmVhdHVyZSBjb25maWd1cmF0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuYWNjb3JkaW9uIEVuYWJsZSBhY2NvcmRpb24gbW9kZVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLnBlcnNpc3RTdGF0ZSBFbmFibGUgcGVyc2lzdCBzdGF0ZSAoSG9zdCBhbmQgQ29uZmlnLU1hbmFnZXIgcmVxdWlyZWQpXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMudXNlU2Nyb2xsVmFsdWVzIFVzZSBzY3JvbGwgdmFsdWVzIChzY3JvbGxIZWlnaHQpIGluc3RlYWQgb2YgY2xpZW50SGVpZ2h0IGZvciB0aGUgaGVpZ2h0IGNhbGN1bGF0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb3BlbkJ5RGVmYXVsdCBPcGVuIHRoZSBkZXRhaWxzIGJ5IGRlZmF1bHRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0Y29udGFpbmVyOiBcInBhZGRpbmdcIixcblx0XHRcdH0sXG5cdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHRhY2NvcmRpb246IHRydWUsXG5cdFx0XHRcdHBlcnNpc3RTdGF0ZTogdHJ1ZSxcblx0XHRcdFx0dXNlU2Nyb2xsVmFsdWVzOiBmYWxzZSxcblx0XHRcdH0sXG5cdFx0XHRvcGVuQnlEZWZhdWx0OiBmYWxzZSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0U3RhdGVGcm9tSG9zdENvbmZpZy5jYWxsKHRoaXMpO1xuXHRcdGluaXRSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcIm9wZW5CeURlZmF1bHRcIikpIHtcblx0XHRcdHRoaXMub3BlbigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHR1cGRhdGVSZXNpemVPYnNlcnZlck9ic2VydmF0aW9uLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q29sbGFwc2V9XG5cdCAqL1xuXHR0b2dnbGUoKSB7XG5cdFx0aWYgKHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKSkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9wZW4oKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ2xvc2VkKCkge1xuXHRcdHJldHVybiAhdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc09wZW4oKSB7XG5cdFx0cmV0dXJuICF0aGlzLmlzQ2xvc2VkKCk7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbiB0aGUgY29sbGFwc2Vcblx0ICogQHJldHVybiB7Q29sbGFwc2V9XG5cdCAqIEBmaXJlcyBtb25zdGVyLWNvbGxhcHNlLWJlZm9yZS1vcGVuIFRoaXMgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHRoZSBjb2xsYXBzZSBpcyBvcGVuZWQuXG5cdCAqIEBmaXJlcyBtb25zdGVyLWNvbGxhcHNlLW9wZW4gVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciB0aGUgY29sbGFwc2UgaXMgb3BlbmVkLlxuXHQgKi9cblx0b3BlbigpIHtcblx0XHRsZXQgbm9kZTtcblx0XHRpZiAodGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLWJlZm9yZS1vcGVuXCIsIHt9KTtcblxuXHRcdGFkanVzdEhlaWdodC5jYWxsKHRoaXMpO1xuXHRcdHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5hY2NvcmRpb25cIikgPT09IHRydWUpIHtcblx0XHRcdG5vZGUgPSB0aGlzO1xuXHRcdFx0d2hpbGUgKG5vZGUubmV4dEVsZW1lbnRTaWJsaW5nIGluc3RhbmNlb2YgQ29sbGFwc2UpIHtcblx0XHRcdFx0bm9kZSA9IG5vZGUubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0XHRub2RlLmNsb3NlKCk7XG5cdFx0XHR9XG5cblx0XHRcdG5vZGUgPSB0aGlzO1xuXHRcdFx0d2hpbGUgKG5vZGUucHJldmlvdXNFbGVtZW50U2libGluZyBpbnN0YW5jZW9mIENvbGxhcHNlKSB7XG5cdFx0XHRcdG5vZGUgPSBub2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG5cdFx0XHRcdG5vZGUuY2xvc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR1cGRhdGVTdGF0ZUNvbmZpZy5jYWxsKHRoaXMpO1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLW9wZW5cIiwge30pO1xuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwib3ZlcmZsb3ctaGlkZGVuXCIpO1xuXHRcdFx0XHR9LCA1MDApO1xuXHRcdFx0fSwgMCk7XG5cdFx0fSwgMCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZSB0aGUgY29sbGFwc2Vcblx0ICogQHJldHVybiB7Q29sbGFwc2V9XG5cdCAqIEBmaXJlcyBtb25zdGVyLWNvbGxhcHNlLWJlZm9yZS1jbG9zZSBUaGlzIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSB0aGUgY29sbGFwc2UgaXMgY2xvc2VkLlxuXHQgKiBAZmlyZXMgbW9uc3Rlci1jb2xsYXBzZS1jbG9zZWQgVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciB0aGUgY29sbGFwc2UgaXMgY2xvc2VkLlxuXHQgKi9cblx0Y2xvc2UoKSB7XG5cdFx0aWYgKCF0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItXCIgKyB0aGlzW25hbWVTeW1ib2xdICsgXCItYmVmb3JlLWNsb3NlXCIsIHt9KTtcblx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwib3ZlcmZsb3ctaGlkZGVuXCIpO1xuXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHVwZGF0ZVN0YXRlQ29uZmlnLmNhbGwodGhpcyk7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItXCIgKyB0aGlzW25hbWVTeW1ib2xdICsgXCItY2xvc2VkXCIsIHt9KTtcblx0XHRcdH0sIDApO1xuXHRcdH0sIDApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWNvbGxhcHNlXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW0NvbGxhcHNlU3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgaW5zZXJ0ZWQgaW50byBhIGRvY3VtZW50LCBpbmNsdWRpbmcgaW50byBhIHNoYWRvdyB0cmVlLlxuXHQgKiBAcmV0dXJuIHtDb2xsYXBzZX1cblx0ICogQGZpcmVzIG1vbnN0ZXItY29sbGFwc2UtYWRqdXN0LWhlaWdodCBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIGhlaWdodCBpcyBhZGp1c3RlZC4gQXMgYSBkZXRhaWwsIHRoZSBoZWlnaHQgaXMgcGFzc2VkLlxuXHQgKi9cblx0YWRqdXN0SGVpZ2h0KCkge1xuXHRcdGFkanVzdEhlaWdodC5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGFkanVzdEhlaWdodCgpIHtcblx0bGV0IGhlaWdodCA9IDA7XG5cblx0aWYgKHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMudXNlU2Nyb2xsVmFsdWVzXCIpKSB7XG5cdFx0XHRoZWlnaHQgKz0gdGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uc2Nyb2xsSGVpZ2h0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoZWlnaHQgKz0gdGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xpZW50SGVpZ2h0O1xuXHRcdH1cblx0fVxuXG5cdGlmICh0aGlzW2RldGFpbHNEZWNvRWxlbWVudFN5bWJvbF0pIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy51c2VTY3JvbGxWYWx1ZXNcIikpIHtcblx0XHRcdGhlaWdodCArPSB0aGlzW2RldGFpbHNEZWNvRWxlbWVudFN5bWJvbF0uc2Nyb2xsSGVpZ2h0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoZWlnaHQgKz0gdGhpc1tkZXRhaWxzRGVjb0VsZW1lbnRTeW1ib2xdLmNsaWVudEhlaWdodCArIDE7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGhlaWdodCA9PT0gMCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnVzZVNjcm9sbFZhbHVlc1wiKSkge1xuXHRcdFx0aGVpZ2h0ID0gdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uc2Nyb2xsSGVpZ2h0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoZWlnaHQgPSB0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGllbnRIZWlnaHQ7XG5cdFx0fVxuXG5cdFx0aWYgKGhlaWdodCA9PT0gMCkge1xuXHRcdFx0aGVpZ2h0ID0gXCJhdXRvXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGhlaWdodCArPSBcInB4XCI7XG5cdH1cblxuXHR0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcIi0tbW9uc3Rlci1oZWlnaHRcIixcblx0XHRoZWlnaHQsXG5cdFx0XCJpbXBvcnRhbnRcIixcblx0KTtcblxuXHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLWFkanVzdC1oZWlnaHRcIiwge1xuXHRcdGhlaWdodCxcblx0fSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlc2l6ZU9ic2VydmVyT2JzZXJ2YXRpb24oKSB7XG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblxuXHRjb25zdCBzbG90dGVkTm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzKTtcblx0c2xvdHRlZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKG5vZGUpO1xuXHR9KTtcblxuXHRpZiAodGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0pIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKTtcblx0fVxuXG5cdHRoaXMuYWRqdXN0SGVpZ2h0KCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0aW5pdFNsb3RDaGFuZ2VkSGFuZGxlci5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gaW5pdFNsb3RDaGFuZ2VkSGFuZGxlcigpIHtcblx0dGhpc1tkZXRhaWxzU2xvdEVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJzbG90Y2hhbmdlXCIsICgpID0+IHtcblx0XHR1cGRhdGVSZXNpemVPYnNlcnZlck9ic2VydmF0aW9uLmNhbGwodGhpcyk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1cIixcblx0KTtcblx0dGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxdXCIsXG5cdCk7XG5cdHRoaXNbZGV0YWlsc1Nsb3RFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwic2xvdFwiKTtcblx0dGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1jb250YWluZXJdXCIsXG5cdCk7XG5cdHRoaXNbZGV0YWlsc0RlY29FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWRlY29dXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZmlnS2V5KCkge1xuXHRyZXR1cm4gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkodGhpc1tuYW1lU3ltYm9sXSwgdGhpcy5pZCwgXCJzdGF0ZVwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVTdGF0ZUNvbmZpZygpIHtcblx0aWYgKCF0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnBlcnNpc3RTdGF0ZVwiKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICghdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cdGNvbnN0IGhvc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibW9uc3Rlci1ob3N0XCIpO1xuXHRpZiAoIShob3N0ICYmIHRoaXMuaWQpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgY29uZmlnS2V5ID0gZ2V0Q29uZmlnS2V5LmNhbGwodGhpcyk7XG5cblx0dHJ5IHtcblx0XHRob3N0LnNldENvbmZpZyhjb25maWdLZXksIHRoaXMuaXNPcGVuKCkpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIFN0cmluZyhlcnJvcikpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKi9cbmZ1bmN0aW9uIGluaXRTdGF0ZUZyb21Ib3N0Q29uZmlnKCkge1xuXHRpZiAoIXRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucGVyc2lzdFN0YXRlXCIpKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cdGNvbnN0IGhvc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibW9uc3Rlci1ob3N0XCIpO1xuXG5cdGlmICghKGhvc3QgJiYgdGhpcy5pZCkpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGNvbnN0IGNvbmZpZ0tleSA9IGdldENvbmZpZ0tleS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gaG9zdFxuXHRcdC5nZXRDb25maWcoY29uZmlnS2V5KVxuXHRcdC50aGVuKChzdGF0ZSkgPT4ge1xuXHRcdFx0aWYgKHN0YXRlID09PSB0cnVlKSB7XG5cdFx0XHRcdHRoaXMub3BlbigpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZXJyb3IudG9TdHJpbmcoKSk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdGNoZWNrQW5kUmVhcnJhbmdlQ29udGVudC5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gY2hlY2tBbmRSZWFycmFuZ2VDb250ZW50KCkge1xuXHR0aGlzLmFkanVzdEhlaWdodCgpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiBjbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImRldGFpbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuY29udGFpbmVyXCIgcGFydD1cImNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlY28tbGluZVwiIGRhdGEtbW9uc3Rlci1yb2xlPVwiZGVjb1wiIHBhcnQ9XCJkZWNvXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KENvbGxhcHNlKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBEZXRhaWxzU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvZGV0YWlscy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9CVVRUT05fTEFCRUwgfSBmcm9tIFwiLi4vaG9zdC9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IH0gZnJvbSBcIi4uL2hvc3QvdXRpbC5tanNcIjtcbmltcG9ydCB7IENvbGxhcHNlLCBuYW1lU3ltYm9sIH0gZnJvbSBcIi4vY29sbGFwc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IERldGFpbHMgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBBIERldGFpbHMgY29tcG9uZW50XG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvbGF5b3V0L2RldGFpbHMvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L2RldGFpbHMtc2ltcGxlXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlscy13aXRoLWxhYmVsXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlscy1hcy1hY2NvcmRpb25cbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9kZXRhaWxzLXdpdGgteW91ci1vd24tZGVzaWduXG4gKlxuICogQHNpbmNlIDMuNzQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgc2ltcGxlIGJ1dCBjb29sIGRldGFpbCBjb21wb25lbnQuIFRoaXMgaXMgYmFzZWQgb24gdGhlIGNvbGxhcHNlIGNvbXBvbmVudCBhbmQgZXh0ZW5kcyBpdCB3aXRoIGEgYnV0dG9uLlxuICogQHN1bW1hcnkgWW91IGNhbiBhbHNvIGVhc2lseSBidWlsZCBhbiBhY2NvcmRpb24gZnJvbSB0aGUgY29tcG9uZW50LlxuICovXG5jbGFzcyBEZXRhaWxzIGV4dGVuZHMgQ29sbGFwc2Uge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlsc0BAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0Ly8gdGhlIG5hbWUgaXMgb25seSB1c2VkIGZvciB0aGUgaG9zdCBjb25maWcgYW5kIHRoZSBldmVudCBuYW1lXG5cdFx0dGhpc1tuYW1lU3ltYm9sXSA9IFwiZGV0YWlsc1wiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgVGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gYnV0dG9uIEJ1dHRvbiBjb25maWd1cmF0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBidXR0b24ubGFiZWwgQnV0dG9uIGxhYmVsXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIkRldGFpbHNcIixcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0QnV0dG9uTGFiZWwuY2FsbCh0aGlzKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRjb25zdCBjb250YWluRG9jdW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q7XG5cblx0XHRpZiAoY29udGFpbkRvY3VtZW50ICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBwcmV2aW91c0VsZW1lbnQgPSB0aGlzLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG5cdFx0XHRpZiAocHJldmlvdXNFbGVtZW50ICYmIHByZXZpb3VzRWxlbWVudC50YWdOYW1lID09PSBcIk1PTlNURVItREVUQUlMU1wiKSB7XG5cdFx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc3R5bGUuYm9yZGVyVG9wID0gXCIwXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1kZXRhaWxzXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBjc3MgPSBzdXBlci5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0Y3NzLnB1c2goRGV0YWlsc1N0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBjc3M7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9YnV0dG9uXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbYnV0dG9uRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdHRoaXMudG9nZ2xlKCk7XG5cdH07XG5cblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFwiY2xpY2tcIixcblx0XHR0aGlzW2J1dHRvbkV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaW5pdEJ1dHRvbkxhYmVsKCkge1xuXHRsZXQgbGFiZWw7XG5cdGNvbnN0IHNldExhYmVsID0gZmFsc2U7XG5cdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMKSkge1xuXHRcdGxhYmVsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCk7XG5cdH0gZWxzZSB7XG5cdFx0bGFiZWwgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5idXR0b25cIiwgXCJEZXRhaWxzXCIpO1xuXHR9XG5cblx0aWYgKCFpc1N0cmluZyhsYWJlbCkpIHtcblx0XHRsYWJlbCA9IFwiXCI7XG5cdH1cblxuXHRpZiAobGFiZWwgPT09IFwiXCIpIHtcblx0XHRsYWJlbCA9IHRoaXMuaW5uZXJUZXh0O1xuXHR9XG5cblx0bGFiZWwgPSBsYWJlbC50cmltKCk7XG5cblx0aWYgKGxhYmVsID09PSBcIlwiKSB7XG5cdFx0bGFiZWwgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5idXR0b25cIiwgXCJEZXRhaWxzXCIpO1xuXHR9XG5cblx0aWYgKGxhYmVsLmxlbmd0aCA+IDEwMCkge1xuXHRcdGxhYmVsID0gYCR7bGFiZWwuc3Vic3RyaW5nKDAsIDk5KX1cdTIwMjZgO1xuXHR9XG5cblx0dGhpcy5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCwgbGFiZWwpO1xuXHR0aGlzLnNldE9wdGlvbihcImxhYmVscy5idXR0b25cIiwgbGFiZWwpO1xuXG5cdHJldHVybiBsYWJlbDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRDb25maWdLZXkoKSB7XG5cdHJldHVybiBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleShcImRldGFpbHNcIiwgdGhpcy5pZCwgXCJzdGF0ZVwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdW1tYXJ5XCIgcGFydD1cInN1bW1hcnlcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHBhcnQ9XCJidXR0b25cIiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b24gfCBkZWZhdWx0OmNsaWNrIG1lXCI+Y2xpY2sgbWVcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImRldGFpbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuY29udGFpbmVyXCIgcGFydD1cImNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8c2xvdCBwYXJ0PVwic2xvdFwiPjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJkZWNvLWxpbmVcIiBjbGFzcz1cImRlY28tbGluZVwiIGRhdGEtbW9uc3Rlci1yb2xlPVwiZGVjb1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChEZXRhaWxzKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBEZXRhaWxzIGFzIE5ld0RldGFpbHMgfSBmcm9tIFwiLi4vbGF5b3V0L2RldGFpbHMubWpzXCI7XG5leHBvcnQgeyBEZXRhaWxzIH07XG5cbi8qKlxuICogQHNpbmNlIDEuMTAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBkZXByZWNhdGVkIHNpbmNlIDMuNjQuMCB1c2Uge0BsaW5rIE1vbnN0ZXIuQ29tcG9uZW50cy5MYXlvdXQuRGV0YWlsc31cbiAqL1xuY2xhc3MgRGV0YWlscyBleHRlbmRzIE5ld0RldGFpbHMge31cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyByYW5kb20gfSBmcm9tIFwiLi4vbWF0aC9yYW5kb20ubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuL2lkLm1qc1wiO1xuXG5leHBvcnQgeyBSYW5kb21JRCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5sZXQgaW50ZXJuYWxDb3VudGVyID0gMDtcblxuLyoqXG4gKiBUaGUgYFJhbmRvbUlEYCBjbGFzcyBwcm92aWRlcyBhIHVuaXF1ZSBJRCBmb3IgYW4gaXRlbS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IGNsYXNzIHRvIGdlbmVyYXRlIHJhbmRvbSBudW1iZXJzXG4gKi9cbmNsYXNzIFJhbmRvbUlEIGV4dGVuZHMgSUQge1xuXHQvKipcblx0ICogY3JlYXRlIG5ldyBvYmplY3Rcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpbnRlcm5hbENvdW50ZXIgKz0gMTtcblxuXHRcdHRoaXMuaWQgPVxuXHRcdFx0Z2V0R2xvYmFsKClcblx0XHRcdFx0LmJ0b2EocmFuZG9tKDEsIDEwMDAwKSlcblx0XHRcdFx0LnJlcGxhY2UoLz0vZywgXCJcIilcblx0XHRcdFx0LyoqIE5vIG51bWJlcnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgSUQsIGJlY2F1c2Ugb2YgcG9zc2libGUgcHJvYmxlbXMgd2l0aCBET00gKi9cblx0XHRcdFx0LnJlcGxhY2UoL15bMC05XSsvLCBcIlhcIikgKyBpbnRlcm5hbENvdW50ZXI7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyByYW5kb20gfSBmcm9tIFwiLi4vbWF0aC9yYW5kb20ubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi9nbG9iYWwubWpzXCI7XG5cbmV4cG9ydCB7IFVVSUQgfTtcblxuLyoqXG4gKiBUaGUgVVVJRCBjbGFzcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBnZXQgYSB1bmlxdWUgVVVJRCBmb3IgYW4gb2JqZWN0LlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZFxuICovXG5jbGFzcyBVVUlEIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGxldCB1dWlkID0gY3JlYXRlV2l0aENyeXB0bygpO1xuXG5cdFx0aWYgKHV1aWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dXVpZCA9IGNyZWF0ZVdpdGhSYW5kb20oKTtcblx0XHR9XG5cblx0XHRpZiAodXVpZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZFwiKTtcblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHZhbHVlOiB1dWlkLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdW1widmFsdWVcIl07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlV2l0aFJhbmRvbSgpIHtcblx0cmV0dXJuIFwieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4XCIucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xuXHRcdGNvbnN0IHIgPSAocmFuZG9tKDAsIDY1MDAwKSAqIDE2KSB8IDA7XG5cdFx0Y29uc3QgdiA9IGMgPT09IFwieFwiID8gciA6IChyICYgMHgzKSB8IDB4ODtcblx0XHRyZXR1cm4gdi50b1N0cmluZygxNilbMF07XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBjcmVhdGVXaXRoQ3J5cHRvKCkge1xuXHRjb25zdCBjcnlwdCA9IGdldEdsb2JhbE9iamVjdChcImNyeXB0b1wiKTtcblx0aWYgKCFpc09iamVjdChjcnlwdCkpIHJldHVybjtcblx0aWYgKHR5cGVvZiBjcnlwdD8uW1wicmFuZG9tVVVJRFwiXSkgcmV0dXJuO1xuXHRyZXR1cm4gY3J5cHQucmFuZG9tVVVJRCgpO1xufVxuIiwgImlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0Jykge1xuXG4gICAgKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgc2F5c3dobyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LCB0ZW0sXG4gICAgICAgICAgICAgICAgTSA9IHVhLm1hdGNoKC8ob3BlcmF8Y2hyb21lfHNhZmFyaXxmaXJlZm94fG1zaWV8dHJpZGVudCg/PVxcLykpXFwvP1xccyooXFxkKykvaSkgfHwgW107XG4gICAgICAgICAgICBpZiAoL3RyaWRlbnQvaS50ZXN0KE1bMV0pKSB7XG4gICAgICAgICAgICAgICAgdGVtID0gL1xcYnJ2WyA6XSsoXFxkKykvZy5leGVjKHVhKSB8fCBbXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0lFICcgKyAodGVtWzFdIHx8ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNWzFdID09PSAnQ2hyb21lJykge1xuICAgICAgICAgICAgICAgIHRlbSA9IHVhLm1hdGNoKC9cXGIoT1BSfEVkZ2UpXFwvKFxcZCspLyk7XG4gICAgICAgICAgICAgICAgaWYgKHRlbSAhPSBudWxsKSByZXR1cm4gdGVtLnNsaWNlKDEpLmpvaW4oJyAnKS5yZXBsYWNlKCdPUFInLCAnT3BlcmEnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE0gPSBNWzJdID8gW01bMV0sIE1bMl1dIDogW25hdmlnYXRvci5hcHBOYW1lLCBuYXZpZ2F0b3IuYXBwVmVyc2lvbiwgJy0/J107XG4gICAgICAgICAgICBpZiAoKHRlbSA9IHVhLm1hdGNoKC92ZXJzaW9uXFwvKFxcZCspL2kpKSAhPSBudWxsKSBNLnNwbGljZSgxLCAxLCB0ZW1bMV0pO1xuICAgICAgICAgICAgcmV0dXJuIE0uam9pbignICcpO1xuICAgICAgICB9KSgpO1xuXG5cbiAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoMScpXG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MICs9IFwiIFwiICsgc2F5c3dobztcblxuICAgIH0pKCk7XG5cblxufVxuIiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuLy8gbGFuZ3VhZ2U9aHRtbFxubGV0IGh0bWwxID0gYFxuICAgIDxtb25zdGVyLXRhYnMgaWQ9XCJteXRhYnNcIj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsPVwiVEFCMVwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICBEYXMgaXN0IHRhYiAxXG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsPVwiVEFCMlwiPlxuICAgICAgICAgICAgRGFzIGlzdCB0YWIgMlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIERhcyBpc3QgdGFiIDMgb2huZSBidXR0b25cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+PC9kaXY+XG4gICAgPC9tb25zdGVyLXRhYnM+XG5gO1xuXG5sZXQgVGFicztcblxuZGVzY3JpYmUoJ1RhYnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG5cbiAgICAgICAgICAgIGlmICghZ2xvYmFsWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IENyeXB0byA9IG1bJ0NyeXB0byddO1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWxbJ2NyeXB0byddID0gbmV3IENyeXB0bygpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvdGFicy5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFRhYnMgPSBtWydUYWJzJ107XG4gICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCk9PntcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgYnV0dG9ucyBhbmQgdGFicycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXl0YWJzJylcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHRhYnMpLmlzLmluc3RhbmNlb2YoVGFicyk7XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmF2ID0gdGFicy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ25hdicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnV0dG9ucyA9IHRhYnMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b25bcGFydD1idXR0b25dJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoYnV0dG9uc1swXSkuaXMuaW5zdGFuY2VvZihIVE1MQnV0dG9uRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QobmF2Lmhhc0NoaWxkTm9kZXMoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChidXR0b25zLmxlbmd0aCkudG8uYmUuZXF1YWwoNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMClcblxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fY29tbW9uSlMgPSAoY2IsIG1vZCkgPT4gZnVuY3Rpb24gX19yZXF1aXJlKCkge1xuICByZXR1cm4gbW9kIHx8ICgwLCBjYltfX2dldE93blByb3BOYW1lcyhjYilbMF1dKSgobW9kID0geyBleHBvcnRzOiB7fSB9KS5leHBvcnRzLCBtb2QpLCBtb2QuZXhwb3J0cztcbn07XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG5cbi8vIChkaXNhYmxlZCk6dXRpbFxudmFyIHJlcXVpcmVfdXRpbCA9IF9fY29tbW9uSlMoe1xuICBcIihkaXNhYmxlZCk6dXRpbFwiKCkge1xuICB9XG59KTtcblxuLy8gbGliL2NoYWkvdXRpbHMvaW5kZXguanNcbnZhciB1dGlsc19leHBvcnRzID0ge307XG5fX2V4cG9ydCh1dGlsc19leHBvcnRzLCB7XG4gIGFkZENoYWluYWJsZU1ldGhvZDogKCkgPT4gYWRkQ2hhaW5hYmxlTWV0aG9kLFxuICBhZGRMZW5ndGhHdWFyZDogKCkgPT4gYWRkTGVuZ3RoR3VhcmQsXG4gIGFkZE1ldGhvZDogKCkgPT4gYWRkTWV0aG9kLFxuICBhZGRQcm9wZXJ0eTogKCkgPT4gYWRkUHJvcGVydHksXG4gIGNoZWNrRXJyb3I6ICgpID0+IGNoZWNrX2Vycm9yX2V4cG9ydHMsXG4gIGNvbXBhcmVCeUluc3BlY3Q6ICgpID0+IGNvbXBhcmVCeUluc3BlY3QsXG4gIGVxbDogKCkgPT4gZGVlcF9lcWxfZGVmYXVsdCxcbiAgZXhwZWN0VHlwZXM6ICgpID0+IGV4cGVjdFR5cGVzLFxuICBmbGFnOiAoKSA9PiBmbGFnLFxuICBnZXRBY3R1YWw6ICgpID0+IGdldEFjdHVhbCxcbiAgZ2V0TWVzc2FnZTogKCkgPT4gZ2V0TWVzc2FnZTIsXG4gIGdldE5hbWU6ICgpID0+IGdldE5hbWUsXG4gIGdldE9wZXJhdG9yOiAoKSA9PiBnZXRPcGVyYXRvcixcbiAgZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXM6ICgpID0+IGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzLFxuICBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzOiAoKSA9PiBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzLFxuICBnZXRQYXRoSW5mbzogKCkgPT4gZ2V0UGF0aEluZm8sXG4gIGhhc1Byb3BlcnR5OiAoKSA9PiBoYXNQcm9wZXJ0eSxcbiAgaW5zcGVjdDogKCkgPT4gaW5zcGVjdDIsXG4gIGlzTmFOOiAoKSA9PiBpc05hTjIsXG4gIGlzTnVtZXJpYzogKCkgPT4gaXNOdW1lcmljLFxuICBpc1Byb3h5RW5hYmxlZDogKCkgPT4gaXNQcm94eUVuYWJsZWQsXG4gIGlzUmVnRXhwOiAoKSA9PiBpc1JlZ0V4cDIsXG4gIG9iakRpc3BsYXk6ICgpID0+IG9iakRpc3BsYXksXG4gIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZDogKCkgPT4gb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kLFxuICBvdmVyd3JpdGVNZXRob2Q6ICgpID0+IG92ZXJ3cml0ZU1ldGhvZCxcbiAgb3ZlcndyaXRlUHJvcGVydHk6ICgpID0+IG92ZXJ3cml0ZVByb3BlcnR5LFxuICBwcm94aWZ5OiAoKSA9PiBwcm94aWZ5LFxuICB0ZXN0OiAoKSA9PiB0ZXN0LFxuICB0cmFuc2ZlckZsYWdzOiAoKSA9PiB0cmFuc2ZlckZsYWdzLFxuICB0eXBlOiAoKSA9PiB0eXBlXG59KTtcblxuLy8gbm9kZV9tb2R1bGVzL2NoZWNrLWVycm9yL2luZGV4LmpzXG52YXIgY2hlY2tfZXJyb3JfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoY2hlY2tfZXJyb3JfZXhwb3J0cywge1xuICBjb21wYXRpYmxlQ29uc3RydWN0b3I6ICgpID0+IGNvbXBhdGlibGVDb25zdHJ1Y3RvcixcbiAgY29tcGF0aWJsZUluc3RhbmNlOiAoKSA9PiBjb21wYXRpYmxlSW5zdGFuY2UsXG4gIGNvbXBhdGlibGVNZXNzYWdlOiAoKSA9PiBjb21wYXRpYmxlTWVzc2FnZSxcbiAgZ2V0Q29uc3RydWN0b3JOYW1lOiAoKSA9PiBnZXRDb25zdHJ1Y3Rvck5hbWUsXG4gIGdldE1lc3NhZ2U6ICgpID0+IGdldE1lc3NhZ2Vcbn0pO1xuZnVuY3Rpb24gaXNFcnJvckluc3RhbmNlKG9iaikge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRXJyb3IgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBFcnJvcl1cIjtcbn1cbl9fbmFtZShpc0Vycm9ySW5zdGFuY2UsIFwiaXNFcnJvckluc3RhbmNlXCIpO1xuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gXCJbb2JqZWN0IFJlZ0V4cF1cIjtcbn1cbl9fbmFtZShpc1JlZ0V4cCwgXCJpc1JlZ0V4cFwiKTtcbmZ1bmN0aW9uIGNvbXBhdGlibGVJbnN0YW5jZSh0aHJvd24sIGVycm9yTGlrZSkge1xuICByZXR1cm4gaXNFcnJvckluc3RhbmNlKGVycm9yTGlrZSkgJiYgdGhyb3duID09PSBlcnJvckxpa2U7XG59XG5fX25hbWUoY29tcGF0aWJsZUluc3RhbmNlLCBcImNvbXBhdGlibGVJbnN0YW5jZVwiKTtcbmZ1bmN0aW9uIGNvbXBhdGlibGVDb25zdHJ1Y3Rvcih0aHJvd24sIGVycm9yTGlrZSkge1xuICBpZiAoaXNFcnJvckluc3RhbmNlKGVycm9yTGlrZSkpIHtcbiAgICByZXR1cm4gdGhyb3duLmNvbnN0cnVjdG9yID09PSBlcnJvckxpa2UuY29uc3RydWN0b3IgfHwgdGhyb3duIGluc3RhbmNlb2YgZXJyb3JMaWtlLmNvbnN0cnVjdG9yO1xuICB9IGVsc2UgaWYgKCh0eXBlb2YgZXJyb3JMaWtlID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBlcnJvckxpa2UgPT09IFwiZnVuY3Rpb25cIikgJiYgZXJyb3JMaWtlLnByb3RvdHlwZSkge1xuICAgIHJldHVybiB0aHJvd24uY29uc3RydWN0b3IgPT09IGVycm9yTGlrZSB8fCB0aHJvd24gaW5zdGFuY2VvZiBlcnJvckxpa2U7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuX19uYW1lKGNvbXBhdGlibGVDb25zdHJ1Y3RvciwgXCJjb21wYXRpYmxlQ29uc3RydWN0b3JcIik7XG5mdW5jdGlvbiBjb21wYXRpYmxlTWVzc2FnZSh0aHJvd24sIGVyck1hdGNoZXIpIHtcbiAgY29uc3QgY29tcGFyaXNvblN0cmluZyA9IHR5cGVvZiB0aHJvd24gPT09IFwic3RyaW5nXCIgPyB0aHJvd24gOiB0aHJvd24ubWVzc2FnZTtcbiAgaWYgKGlzUmVnRXhwKGVyck1hdGNoZXIpKSB7XG4gICAgcmV0dXJuIGVyck1hdGNoZXIudGVzdChjb21wYXJpc29uU3RyaW5nKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXJyTWF0Y2hlciA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBjb21wYXJpc29uU3RyaW5nLmluZGV4T2YoZXJyTWF0Y2hlcikgIT09IC0xO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbl9fbmFtZShjb21wYXRpYmxlTWVzc2FnZSwgXCJjb21wYXRpYmxlTWVzc2FnZVwiKTtcbmZ1bmN0aW9uIGdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpIHtcbiAgbGV0IGNvbnN0cnVjdG9yTmFtZSA9IGVycm9yTGlrZTtcbiAgaWYgKGlzRXJyb3JJbnN0YW5jZShlcnJvckxpa2UpKSB7XG4gICAgY29uc3RydWN0b3JOYW1lID0gZXJyb3JMaWtlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yTGlrZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY29uc3RydWN0b3JOYW1lID0gZXJyb3JMaWtlLm5hbWU7XG4gICAgaWYgKGNvbnN0cnVjdG9yTmFtZSA9PT0gXCJcIikge1xuICAgICAgY29uc3QgbmV3Q29uc3RydWN0b3JOYW1lID0gbmV3IGVycm9yTGlrZSgpLm5hbWU7XG4gICAgICBjb25zdHJ1Y3Rvck5hbWUgPSBuZXdDb25zdHJ1Y3Rvck5hbWUgfHwgY29uc3RydWN0b3JOYW1lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29uc3RydWN0b3JOYW1lO1xufVxuX19uYW1lKGdldENvbnN0cnVjdG9yTmFtZSwgXCJnZXRDb25zdHJ1Y3Rvck5hbWVcIik7XG5mdW5jdGlvbiBnZXRNZXNzYWdlKGVycm9yTGlrZSkge1xuICBsZXQgbXNnID0gXCJcIjtcbiAgaWYgKGVycm9yTGlrZSAmJiBlcnJvckxpa2UubWVzc2FnZSkge1xuICAgIG1zZyA9IGVycm9yTGlrZS5tZXNzYWdlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvckxpa2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICBtc2cgPSBlcnJvckxpa2U7XG4gIH1cbiAgcmV0dXJuIG1zZztcbn1cbl9fbmFtZShnZXRNZXNzYWdlLCBcImdldE1lc3NhZ2VcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2ZsYWcuanNcbmZ1bmN0aW9uIGZsYWcob2JqLCBrZXksIHZhbHVlKSB7XG4gIHZhciBmbGFncyA9IG9iai5fX2ZsYWdzIHx8IChvYmouX19mbGFncyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBmbGFnc1trZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZsYWdzW2tleV07XG4gIH1cbn1cbl9fbmFtZShmbGFnLCBcImZsYWdcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL3Rlc3QuanNcbmZ1bmN0aW9uIHRlc3Qob2JqLCBhcmdzKSB7XG4gIHZhciBuZWdhdGUgPSBmbGFnKG9iaiwgXCJuZWdhdGVcIiksIGV4cHIgPSBhcmdzWzBdO1xuICByZXR1cm4gbmVnYXRlID8gIWV4cHIgOiBleHByO1xufVxuX19uYW1lKHRlc3QsIFwidGVzdFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvdHlwZS1kZXRlY3QuanNcbmZ1bmN0aW9uIHR5cGUob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gIH1cbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBcIm51bGxcIjtcbiAgfVxuICBjb25zdCBzdHJpbmdUYWcgPSBvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXTtcbiAgaWYgKHR5cGVvZiBzdHJpbmdUYWcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gc3RyaW5nVGFnO1xuICB9XG4gIGNvbnN0IHR5cGUzID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikuc2xpY2UoOCwgLTEpO1xuICByZXR1cm4gdHlwZTM7XG59XG5fX25hbWUodHlwZSwgXCJ0eXBlXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvYXNzZXJ0aW9uLWVycm9yL2luZGV4LmpzXG52YXIgY2FuRWxpZGVGcmFtZXMgPSBcImNhcHR1cmVTdGFja1RyYWNlXCIgaW4gRXJyb3I7XG52YXIgQXNzZXJ0aW9uRXJyb3IgPSBjbGFzcyBfQXNzZXJ0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiQXNzZXJ0aW9uRXJyb3JcIik7XG4gIH1cbiAgbWVzc2FnZTtcbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIFwiQXNzZXJ0aW9uRXJyb3JcIjtcbiAgfVxuICBnZXQgb2soKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSBcIlVuc3BlY2lmaWVkIEFzc2VydGlvbkVycm9yXCIsIHByb3BzLCBzc2YpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIGlmIChjYW5FbGlkZUZyYW1lcykge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgc3NmIHx8IF9Bc3NlcnRpb25FcnJvcik7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gdGhpcykpIHtcbiAgICAgICAgdGhpc1trZXldID0gcHJvcHNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdG9KU09OKHN0YWNrKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBvazogZmFsc2UsXG4gICAgICBzdGFjazogc3RhY2sgIT09IGZhbHNlID8gdGhpcy5zdGFjayA6IHZvaWQgMFxuICAgIH07XG4gIH1cbn07XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2V4cGVjdFR5cGVzLmpzXG5mdW5jdGlvbiBleHBlY3RUeXBlcyhvYmosIHR5cGVzKSB7XG4gIHZhciBmbGFnTXNnID0gZmxhZyhvYmosIFwibWVzc2FnZVwiKTtcbiAgdmFyIHNzZmkgPSBmbGFnKG9iaiwgXCJzc2ZpXCIpO1xuICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiO1xuICBvYmogPSBmbGFnKG9iaiwgXCJvYmplY3RcIik7XG4gIHR5cGVzID0gdHlwZXMubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gdC50b0xvd2VyQ2FzZSgpO1xuICB9KTtcbiAgdHlwZXMuc29ydCgpO1xuICB2YXIgc3RyID0gdHlwZXMubWFwKGZ1bmN0aW9uKHQsIGluZGV4KSB7XG4gICAgdmFyIGFydCA9IH5bXCJhXCIsIFwiZVwiLCBcImlcIiwgXCJvXCIsIFwidVwiXS5pbmRleE9mKHQuY2hhckF0KDApKSA/IFwiYW5cIiA6IFwiYVwiO1xuICAgIHZhciBvciA9IHR5cGVzLmxlbmd0aCA+IDEgJiYgaW5kZXggPT09IHR5cGVzLmxlbmd0aCAtIDEgPyBcIm9yIFwiIDogXCJcIjtcbiAgICByZXR1cm4gb3IgKyBhcnQgKyBcIiBcIiArIHQ7XG4gIH0pLmpvaW4oXCIsIFwiKTtcbiAgdmFyIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCF0eXBlcy5zb21lKGZ1bmN0aW9uKGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIG9ialR5cGUgPT09IGV4cGVjdGVkO1xuICB9KSkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIGZsYWdNc2cgKyBcIm9iamVjdCB0ZXN0ZWQgbXVzdCBiZSBcIiArIHN0ciArIFwiLCBidXQgXCIgKyBvYmpUeXBlICsgXCIgZ2l2ZW5cIixcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9XG59XG5fX25hbWUoZXhwZWN0VHlwZXMsIFwiZXhwZWN0VHlwZXNcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2dldEFjdHVhbC5qc1xuZnVuY3Rpb24gZ2V0QWN0dWFsKG9iaiwgYXJncykge1xuICByZXR1cm4gYXJncy5sZW5ndGggPiA0ID8gYXJnc1s0XSA6IG9iai5fb2JqO1xufVxuX19uYW1lKGdldEFjdHVhbCwgXCJnZXRBY3R1YWxcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvaGVscGVycy5qc1xudmFyIGFuc2lDb2xvcnMgPSB7XG4gIGJvbGQ6IFtcIjFcIiwgXCIyMlwiXSxcbiAgZGltOiBbXCIyXCIsIFwiMjJcIl0sXG4gIGl0YWxpYzogW1wiM1wiLCBcIjIzXCJdLFxuICB1bmRlcmxpbmU6IFtcIjRcIiwgXCIyNFwiXSxcbiAgLy8gNSAmIDYgYXJlIGJsaW5raW5nXG4gIGludmVyc2U6IFtcIjdcIiwgXCIyN1wiXSxcbiAgaGlkZGVuOiBbXCI4XCIsIFwiMjhcIl0sXG4gIHN0cmlrZTogW1wiOVwiLCBcIjI5XCJdLFxuICAvLyAxMC0yMCBhcmUgZm9udHNcbiAgLy8gMjEtMjkgYXJlIHJlc2V0cyBmb3IgMS05XG4gIGJsYWNrOiBbXCIzMFwiLCBcIjM5XCJdLFxuICByZWQ6IFtcIjMxXCIsIFwiMzlcIl0sXG4gIGdyZWVuOiBbXCIzMlwiLCBcIjM5XCJdLFxuICB5ZWxsb3c6IFtcIjMzXCIsIFwiMzlcIl0sXG4gIGJsdWU6IFtcIjM0XCIsIFwiMzlcIl0sXG4gIG1hZ2VudGE6IFtcIjM1XCIsIFwiMzlcIl0sXG4gIGN5YW46IFtcIjM2XCIsIFwiMzlcIl0sXG4gIHdoaXRlOiBbXCIzN1wiLCBcIjM5XCJdLFxuICBicmlnaHRibGFjazogW1wiMzA7MVwiLCBcIjM5XCJdLFxuICBicmlnaHRyZWQ6IFtcIjMxOzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0Z3JlZW46IFtcIjMyOzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0eWVsbG93OiBbXCIzMzsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodGJsdWU6IFtcIjM0OzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0bWFnZW50YTogW1wiMzU7MVwiLCBcIjM5XCJdLFxuICBicmlnaHRjeWFuOiBbXCIzNjsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodHdoaXRlOiBbXCIzNzsxXCIsIFwiMzlcIl0sXG4gIGdyZXk6IFtcIjkwXCIsIFwiMzlcIl1cbn07XG52YXIgc3R5bGVzID0ge1xuICBzcGVjaWFsOiBcImN5YW5cIixcbiAgbnVtYmVyOiBcInllbGxvd1wiLFxuICBiaWdpbnQ6IFwieWVsbG93XCIsXG4gIGJvb2xlYW46IFwieWVsbG93XCIsXG4gIHVuZGVmaW5lZDogXCJncmV5XCIsXG4gIG51bGw6IFwiYm9sZFwiLFxuICBzdHJpbmc6IFwiZ3JlZW5cIixcbiAgc3ltYm9sOiBcImdyZWVuXCIsXG4gIGRhdGU6IFwibWFnZW50YVwiLFxuICByZWdleHA6IFwicmVkXCJcbn07XG52YXIgdHJ1bmNhdG9yID0gXCJcXHUyMDI2XCI7XG5mdW5jdGlvbiBjb2xvcmlzZSh2YWx1ZSwgc3R5bGVUeXBlKSB7XG4gIGNvbnN0IGNvbG9yID0gYW5zaUNvbG9yc1tzdHlsZXNbc3R5bGVUeXBlXV0gfHwgYW5zaUNvbG9yc1tzdHlsZVR5cGVdIHx8IFwiXCI7XG4gIGlmICghY29sb3IpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gYFxceDFCWyR7Y29sb3JbMF19bSR7U3RyaW5nKHZhbHVlKX1cXHgxQlske2NvbG9yWzFdfW1gO1xufVxuX19uYW1lKGNvbG9yaXNlLCBcImNvbG9yaXNlXCIpO1xuZnVuY3Rpb24gbm9ybWFsaXNlT3B0aW9ucyh7XG4gIHNob3dIaWRkZW4gPSBmYWxzZSxcbiAgZGVwdGggPSAyLFxuICBjb2xvcnMgPSBmYWxzZSxcbiAgY3VzdG9tSW5zcGVjdCA9IHRydWUsXG4gIHNob3dQcm94eSA9IGZhbHNlLFxuICBtYXhBcnJheUxlbmd0aCA9IEluZmluaXR5LFxuICBicmVha0xlbmd0aCA9IEluZmluaXR5LFxuICBzZWVuID0gW10sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3dcbiAgdHJ1bmNhdGU6IHRydW5jYXRlMiA9IEluZmluaXR5LFxuICBzdHlsaXplID0gU3RyaW5nXG59ID0ge30sIGluc3BlY3QzKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgc2hvd0hpZGRlbjogQm9vbGVhbihzaG93SGlkZGVuKSxcbiAgICBkZXB0aDogTnVtYmVyKGRlcHRoKSxcbiAgICBjb2xvcnM6IEJvb2xlYW4oY29sb3JzKSxcbiAgICBjdXN0b21JbnNwZWN0OiBCb29sZWFuKGN1c3RvbUluc3BlY3QpLFxuICAgIHNob3dQcm94eTogQm9vbGVhbihzaG93UHJveHkpLFxuICAgIG1heEFycmF5TGVuZ3RoOiBOdW1iZXIobWF4QXJyYXlMZW5ndGgpLFxuICAgIGJyZWFrTGVuZ3RoOiBOdW1iZXIoYnJlYWtMZW5ndGgpLFxuICAgIHRydW5jYXRlOiBOdW1iZXIodHJ1bmNhdGUyKSxcbiAgICBzZWVuLFxuICAgIGluc3BlY3Q6IGluc3BlY3QzLFxuICAgIHN0eWxpemVcbiAgfTtcbiAgaWYgKG9wdGlvbnMuY29sb3JzKSB7XG4gICAgb3B0aW9ucy5zdHlsaXplID0gY29sb3Jpc2U7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5fX25hbWUobm9ybWFsaXNlT3B0aW9ucywgXCJub3JtYWxpc2VPcHRpb25zXCIpO1xuZnVuY3Rpb24gaXNIaWdoU3Vycm9nYXRlKGNoYXIpIHtcbiAgcmV0dXJuIGNoYXIgPj0gXCJcXHVEODAwXCIgJiYgY2hhciA8PSBcIlxcdURCRkZcIjtcbn1cbl9fbmFtZShpc0hpZ2hTdXJyb2dhdGUsIFwiaXNIaWdoU3Vycm9nYXRlXCIpO1xuZnVuY3Rpb24gdHJ1bmNhdGUoc3RyaW5nLCBsZW5ndGgsIHRhaWwgPSB0cnVuY2F0b3IpIHtcbiAgc3RyaW5nID0gU3RyaW5nKHN0cmluZyk7XG4gIGNvbnN0IHRhaWxMZW5ndGggPSB0YWlsLmxlbmd0aDtcbiAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgaWYgKHRhaWxMZW5ndGggPiBsZW5ndGggJiYgc3RyaW5nTGVuZ3RoID4gdGFpbExlbmd0aCkge1xuICAgIHJldHVybiB0YWlsO1xuICB9XG4gIGlmIChzdHJpbmdMZW5ndGggPiBsZW5ndGggJiYgc3RyaW5nTGVuZ3RoID4gdGFpbExlbmd0aCkge1xuICAgIGxldCBlbmQgPSBsZW5ndGggLSB0YWlsTGVuZ3RoO1xuICAgIGlmIChlbmQgPiAwICYmIGlzSGlnaFN1cnJvZ2F0ZShzdHJpbmdbZW5kIC0gMV0pKSB7XG4gICAgICBlbmQgPSBlbmQgLSAxO1xuICAgIH1cbiAgICByZXR1cm4gYCR7c3RyaW5nLnNsaWNlKDAsIGVuZCl9JHt0YWlsfWA7XG4gIH1cbiAgcmV0dXJuIHN0cmluZztcbn1cbl9fbmFtZSh0cnVuY2F0ZSwgXCJ0cnVuY2F0ZVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RMaXN0KGxpc3QsIG9wdGlvbnMsIGluc3BlY3RJdGVtLCBzZXBhcmF0b3IgPSBcIiwgXCIpIHtcbiAgaW5zcGVjdEl0ZW0gPSBpbnNwZWN0SXRlbSB8fCBvcHRpb25zLmluc3BlY3Q7XG4gIGNvbnN0IHNpemUgPSBsaXN0Lmxlbmd0aDtcbiAgaWYgKHNpemUgPT09IDApXG4gICAgcmV0dXJuIFwiXCI7XG4gIGNvbnN0IG9yaWdpbmFsTGVuZ3RoID0gb3B0aW9ucy50cnVuY2F0ZTtcbiAgbGV0IG91dHB1dCA9IFwiXCI7XG4gIGxldCBwZWVrID0gXCJcIjtcbiAgbGV0IHRydW5jYXRlZCA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSAxKSB7XG4gICAgY29uc3QgbGFzdCA9IGkgKyAxID09PSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBzZWNvbmRUb0xhc3QgPSBpICsgMiA9PT0gbGlzdC5sZW5ndGg7XG4gICAgdHJ1bmNhdGVkID0gYCR7dHJ1bmNhdG9yfSgke2xpc3QubGVuZ3RoIC0gaX0pYDtcbiAgICBjb25zdCB2YWx1ZSA9IGxpc3RbaV07XG4gICAgb3B0aW9ucy50cnVuY2F0ZSA9IG9yaWdpbmFsTGVuZ3RoIC0gb3V0cHV0Lmxlbmd0aCAtIChsYXN0ID8gMCA6IHNlcGFyYXRvci5sZW5ndGgpO1xuICAgIGNvbnN0IHN0cmluZyA9IHBlZWsgfHwgaW5zcGVjdEl0ZW0odmFsdWUsIG9wdGlvbnMpICsgKGxhc3QgPyBcIlwiIDogc2VwYXJhdG9yKTtcbiAgICBjb25zdCBuZXh0TGVuZ3RoID0gb3V0cHV0Lmxlbmd0aCArIHN0cmluZy5sZW5ndGg7XG4gICAgY29uc3QgdHJ1bmNhdGVkTGVuZ3RoID0gbmV4dExlbmd0aCArIHRydW5jYXRlZC5sZW5ndGg7XG4gICAgaWYgKGxhc3QgJiYgbmV4dExlbmd0aCA+IG9yaWdpbmFsTGVuZ3RoICYmIG91dHB1dC5sZW5ndGggKyB0cnVuY2F0ZWQubGVuZ3RoIDw9IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKCFsYXN0ICYmICFzZWNvbmRUb0xhc3QgJiYgdHJ1bmNhdGVkTGVuZ3RoID4gb3JpZ2luYWxMZW5ndGgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBwZWVrID0gbGFzdCA/IFwiXCIgOiBpbnNwZWN0SXRlbShsaXN0W2kgKyAxXSwgb3B0aW9ucykgKyAoc2Vjb25kVG9MYXN0ID8gXCJcIiA6IHNlcGFyYXRvcik7XG4gICAgaWYgKCFsYXN0ICYmIHNlY29uZFRvTGFzdCAmJiB0cnVuY2F0ZWRMZW5ndGggPiBvcmlnaW5hbExlbmd0aCAmJiBuZXh0TGVuZ3RoICsgcGVlay5sZW5ndGggPiBvcmlnaW5hbExlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIG91dHB1dCArPSBzdHJpbmc7XG4gICAgaWYgKCFsYXN0ICYmICFzZWNvbmRUb0xhc3QgJiYgbmV4dExlbmd0aCArIHBlZWsubGVuZ3RoID49IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICB0cnVuY2F0ZWQgPSBgJHt0cnVuY2F0b3J9KCR7bGlzdC5sZW5ndGggLSBpIC0gMX0pYDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0cnVuY2F0ZWQgPSBcIlwiO1xuICB9XG4gIHJldHVybiBgJHtvdXRwdXR9JHt0cnVuY2F0ZWR9YDtcbn1cbl9fbmFtZShpbnNwZWN0TGlzdCwgXCJpbnNwZWN0TGlzdFwiKTtcbmZ1bmN0aW9uIHF1b3RlQ29tcGxleEtleShrZXkpIHtcbiAgaWYgKGtleS5tYXRjaCgvXlthLXpBLVpfXVthLXpBLVpfMC05XSokLykpIHtcbiAgICByZXR1cm4ga2V5O1xuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShrZXkpLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKS5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykucmVwbGFjZSgvKF5cInxcIiQpL2csIFwiJ1wiKTtcbn1cbl9fbmFtZShxdW90ZUNvbXBsZXhLZXksIFwicXVvdGVDb21wbGV4S2V5XCIpO1xuZnVuY3Rpb24gaW5zcGVjdFByb3BlcnR5KFtrZXksIHZhbHVlXSwgb3B0aW9ucykge1xuICBvcHRpb25zLnRydW5jYXRlIC09IDI7XG4gIGlmICh0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiKSB7XG4gICAga2V5ID0gcXVvdGVDb21wbGV4S2V5KGtleSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleSAhPT0gXCJudW1iZXJcIikge1xuICAgIGtleSA9IGBbJHtvcHRpb25zLmluc3BlY3Qoa2V5LCBvcHRpb25zKX1dYDtcbiAgfVxuICBvcHRpb25zLnRydW5jYXRlIC09IGtleS5sZW5ndGg7XG4gIHZhbHVlID0gb3B0aW9ucy5pbnNwZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgcmV0dXJuIGAke2tleX06ICR7dmFsdWV9YDtcbn1cbl9fbmFtZShpbnNwZWN0UHJvcGVydHksIFwiaW5zcGVjdFByb3BlcnR5XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2FycmF5LmpzXG5mdW5jdGlvbiBpbnNwZWN0QXJyYXkoYXJyYXksIG9wdGlvbnMpIHtcbiAgY29uc3Qgbm9uSW5kZXhQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoYXJyYXkpLnNsaWNlKGFycmF5Lmxlbmd0aCk7XG4gIGlmICghYXJyYXkubGVuZ3RoICYmICFub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKVxuICAgIHJldHVybiBcIltdXCI7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gNDtcbiAgY29uc3QgbGlzdENvbnRlbnRzID0gaW5zcGVjdExpc3QoYXJyYXksIG9wdGlvbnMpO1xuICBvcHRpb25zLnRydW5jYXRlIC09IGxpc3RDb250ZW50cy5sZW5ndGg7XG4gIGxldCBwcm9wZXJ0eUNvbnRlbnRzID0gXCJcIjtcbiAgaWYgKG5vbkluZGV4UHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3Qobm9uSW5kZXhQcm9wZXJ0aWVzLm1hcCgoa2V5KSA9PiBba2V5LCBhcnJheVtrZXldXSksIG9wdGlvbnMsIGluc3BlY3RQcm9wZXJ0eSk7XG4gIH1cbiAgcmV0dXJuIGBbICR7bGlzdENvbnRlbnRzfSR7cHJvcGVydHlDb250ZW50cyA/IGAsICR7cHJvcGVydHlDb250ZW50c31gIDogXCJcIn0gXWA7XG59XG5fX25hbWUoaW5zcGVjdEFycmF5LCBcImluc3BlY3RBcnJheVwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi90eXBlZGFycmF5LmpzXG52YXIgZ2V0QXJyYXlOYW1lID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoYXJyYXkpID0+IHtcbiAgaWYgKHR5cGVvZiBCdWZmZXIgPT09IFwiZnVuY3Rpb25cIiAmJiBhcnJheSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgIHJldHVybiBcIkJ1ZmZlclwiO1xuICB9XG4gIGlmIChhcnJheVtTeW1ib2wudG9TdHJpbmdUYWddKSB7XG4gICAgcmV0dXJuIGFycmF5W1N5bWJvbC50b1N0cmluZ1RhZ107XG4gIH1cbiAgcmV0dXJuIGFycmF5LmNvbnN0cnVjdG9yLm5hbWU7XG59LCBcImdldEFycmF5TmFtZVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RUeXBlZEFycmF5KGFycmF5LCBvcHRpb25zKSB7XG4gIGNvbnN0IG5hbWUgPSBnZXRBcnJheU5hbWUoYXJyYXkpO1xuICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoICsgNDtcbiAgY29uc3Qgbm9uSW5kZXhQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoYXJyYXkpLnNsaWNlKGFycmF5Lmxlbmd0aCk7XG4gIGlmICghYXJyYXkubGVuZ3RoICYmICFub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKVxuICAgIHJldHVybiBgJHtuYW1lfVtdYDtcbiAgbGV0IG91dHB1dCA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzdHJpbmcgPSBgJHtvcHRpb25zLnN0eWxpemUodHJ1bmNhdGUoYXJyYXlbaV0sIG9wdGlvbnMudHJ1bmNhdGUpLCBcIm51bWJlclwiKX0ke2kgPT09IGFycmF5Lmxlbmd0aCAtIDEgPyBcIlwiIDogXCIsIFwifWA7XG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSBzdHJpbmcubGVuZ3RoO1xuICAgIGlmIChhcnJheVtpXSAhPT0gYXJyYXkubGVuZ3RoICYmIG9wdGlvbnMudHJ1bmNhdGUgPD0gMykge1xuICAgICAgb3V0cHV0ICs9IGAke3RydW5jYXRvcn0oJHthcnJheS5sZW5ndGggLSBhcnJheVtpXSArIDF9KWA7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgb3V0cHV0ICs9IHN0cmluZztcbiAgfVxuICBsZXQgcHJvcGVydHlDb250ZW50cyA9IFwiXCI7XG4gIGlmIChub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgcHJvcGVydHlDb250ZW50cyA9IGluc3BlY3RMaXN0KG5vbkluZGV4UHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgYXJyYXlba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICB9XG4gIHJldHVybiBgJHtuYW1lfVsgJHtvdXRwdXR9JHtwcm9wZXJ0eUNvbnRlbnRzID8gYCwgJHtwcm9wZXJ0eUNvbnRlbnRzfWAgOiBcIlwifSBdYDtcbn1cbl9fbmFtZShpbnNwZWN0VHlwZWRBcnJheSwgXCJpbnNwZWN0VHlwZWRBcnJheVwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9kYXRlLmpzXG5mdW5jdGlvbiBpbnNwZWN0RGF0ZShkYXRlT2JqZWN0LCBvcHRpb25zKSB7XG4gIGNvbnN0IHN0cmluZ1JlcHJlc2VudGF0aW9uID0gZGF0ZU9iamVjdC50b0pTT04oKTtcbiAgaWYgKHN0cmluZ1JlcHJlc2VudGF0aW9uID09PSBudWxsKSB7XG4gICAgcmV0dXJuIFwiSW52YWxpZCBEYXRlXCI7XG4gIH1cbiAgY29uc3Qgc3BsaXQgPSBzdHJpbmdSZXByZXNlbnRhdGlvbi5zcGxpdChcIlRcIik7XG4gIGNvbnN0IGRhdGUgPSBzcGxpdFswXTtcbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShgJHtkYXRlfVQke3RydW5jYXRlKHNwbGl0WzFdLCBvcHRpb25zLnRydW5jYXRlIC0gZGF0ZS5sZW5ndGggLSAxKX1gLCBcImRhdGVcIik7XG59XG5fX25hbWUoaW5zcGVjdERhdGUsIFwiaW5zcGVjdERhdGVcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvZnVuY3Rpb24uanNcbmZ1bmN0aW9uIGluc3BlY3RGdW5jdGlvbihmdW5jLCBvcHRpb25zKSB7XG4gIGNvbnN0IGZ1bmN0aW9uVHlwZSA9IGZ1bmNbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCBcIkZ1bmN0aW9uXCI7XG4gIGNvbnN0IG5hbWUgPSBmdW5jLm5hbWU7XG4gIGlmICghbmFtZSkge1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoYFske2Z1bmN0aW9uVHlwZX1dYCwgXCJzcGVjaWFsXCIpO1xuICB9XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUoYFske2Z1bmN0aW9uVHlwZX0gJHt0cnVuY2F0ZShuYW1lLCBvcHRpb25zLnRydW5jYXRlIC0gMTEpfV1gLCBcInNwZWNpYWxcIik7XG59XG5fX25hbWUoaW5zcGVjdEZ1bmN0aW9uLCBcImluc3BlY3RGdW5jdGlvblwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9tYXAuanNcbmZ1bmN0aW9uIGluc3BlY3RNYXBFbnRyeShba2V5LCB2YWx1ZV0sIG9wdGlvbnMpIHtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSA0O1xuICBrZXkgPSBvcHRpb25zLmluc3BlY3Qoa2V5LCBvcHRpb25zKTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBrZXkubGVuZ3RoO1xuICB2YWx1ZSA9IG9wdGlvbnMuaW5zcGVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIHJldHVybiBgJHtrZXl9ID0+ICR7dmFsdWV9YDtcbn1cbl9fbmFtZShpbnNwZWN0TWFwRW50cnksIFwiaW5zcGVjdE1hcEVudHJ5XCIpO1xuZnVuY3Rpb24gbWFwVG9FbnRyaWVzKG1hcCkge1xuICBjb25zdCBlbnRyaWVzID0gW107XG4gIG1hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgZW50cmllcy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0pO1xuICByZXR1cm4gZW50cmllcztcbn1cbl9fbmFtZShtYXBUb0VudHJpZXMsIFwibWFwVG9FbnRyaWVzXCIpO1xuZnVuY3Rpb24gaW5zcGVjdE1hcChtYXAsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc2l6ZSA9IG1hcC5zaXplIC0gMTtcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBcIk1hcHt9XCI7XG4gIH1cbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSA3O1xuICByZXR1cm4gYE1hcHsgJHtpbnNwZWN0TGlzdChtYXBUb0VudHJpZXMobWFwKSwgb3B0aW9ucywgaW5zcGVjdE1hcEVudHJ5KX0gfWA7XG59XG5fX25hbWUoaW5zcGVjdE1hcCwgXCJpbnNwZWN0TWFwXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL251bWJlci5qc1xudmFyIGlzTmFOID0gTnVtYmVyLmlzTmFOIHx8ICgoaSkgPT4gaSAhPT0gaSk7XG5mdW5jdGlvbiBpbnNwZWN0TnVtYmVyKG51bWJlciwgb3B0aW9ucykge1xuICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoXCJOYU5cIiwgXCJudW1iZXJcIik7XG4gIH1cbiAgaWYgKG51bWJlciA9PT0gSW5maW5pdHkpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKFwiSW5maW5pdHlcIiwgXCJudW1iZXJcIik7XG4gIH1cbiAgaWYgKG51bWJlciA9PT0gLUluZmluaXR5KSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShcIi1JbmZpbml0eVwiLCBcIm51bWJlclwiKTtcbiAgfVxuICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZSgxIC8gbnVtYmVyID09PSBJbmZpbml0eSA/IFwiKzBcIiA6IFwiLTBcIiwgXCJudW1iZXJcIik7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZSh0cnVuY2F0ZShTdHJpbmcobnVtYmVyKSwgb3B0aW9ucy50cnVuY2F0ZSksIFwibnVtYmVyXCIpO1xufVxuX19uYW1lKGluc3BlY3ROdW1iZXIsIFwiaW5zcGVjdE51bWJlclwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9iaWdpbnQuanNcbmZ1bmN0aW9uIGluc3BlY3RCaWdJbnQobnVtYmVyLCBvcHRpb25zKSB7XG4gIGxldCBudW1zID0gdHJ1bmNhdGUobnVtYmVyLnRvU3RyaW5nKCksIG9wdGlvbnMudHJ1bmNhdGUgLSAxKTtcbiAgaWYgKG51bXMgIT09IHRydW5jYXRvcilcbiAgICBudW1zICs9IFwiblwiO1xuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKG51bXMsIFwiYmlnaW50XCIpO1xufVxuX19uYW1lKGluc3BlY3RCaWdJbnQsIFwiaW5zcGVjdEJpZ0ludFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9yZWdleHAuanNcbmZ1bmN0aW9uIGluc3BlY3RSZWdFeHAodmFsdWUsIG9wdGlvbnMpIHtcbiAgY29uc3QgZmxhZ3MgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KFwiL1wiKVsyXTtcbiAgY29uc3Qgc291cmNlTGVuZ3RoID0gb3B0aW9ucy50cnVuY2F0ZSAtICgyICsgZmxhZ3MubGVuZ3RoKTtcbiAgY29uc3Qgc291cmNlID0gdmFsdWUuc291cmNlO1xuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKGAvJHt0cnVuY2F0ZShzb3VyY2UsIHNvdXJjZUxlbmd0aCl9LyR7ZmxhZ3N9YCwgXCJyZWdleHBcIik7XG59XG5fX25hbWUoaW5zcGVjdFJlZ0V4cCwgXCJpbnNwZWN0UmVnRXhwXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL3NldC5qc1xuZnVuY3Rpb24gYXJyYXlGcm9tU2V0KHNldDIpIHtcbiAgY29uc3QgdmFsdWVzID0gW107XG4gIHNldDIuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gdmFsdWVzO1xufVxuX19uYW1lKGFycmF5RnJvbVNldCwgXCJhcnJheUZyb21TZXRcIik7XG5mdW5jdGlvbiBpbnNwZWN0U2V0KHNldDIsIG9wdGlvbnMpIHtcbiAgaWYgKHNldDIuc2l6ZSA9PT0gMClcbiAgICByZXR1cm4gXCJTZXR7fVwiO1xuICBvcHRpb25zLnRydW5jYXRlIC09IDc7XG4gIHJldHVybiBgU2V0eyAke2luc3BlY3RMaXN0KGFycmF5RnJvbVNldChzZXQyKSwgb3B0aW9ucyl9IH1gO1xufVxuX19uYW1lKGluc3BlY3RTZXQsIFwiaW5zcGVjdFNldFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9zdHJpbmcuanNcbnZhciBzdHJpbmdFc2NhcGVDaGFycyA9IG5ldyBSZWdFeHAoXCJbJ1xcXFx1MDAwMC1cXFxcdTAwMWZcXFxcdTAwN2YtXFxcXHUwMDlmXFxcXHUwMGFkXFxcXHUwNjAwLVxcXFx1MDYwNFxcXFx1MDcwZlxcXFx1MTdiNFxcXFx1MTdiNVxcXFx1MjAwYy1cXFxcdTIwMGZcXFxcdTIwMjgtXFxcXHUyMDJmXFxcXHUyMDYwLVxcXFx1MjA2ZlxcXFx1ZmVmZlxcXFx1ZmZmMC1cXFxcdWZmZmZdXCIsIFwiZ1wiKTtcbnZhciBlc2NhcGVDaGFyYWN0ZXJzID0ge1xuICBcIlxcYlwiOiBcIlxcXFxiXCIsXG4gIFwiXHRcIjogXCJcXFxcdFwiLFxuICBcIlxcblwiOiBcIlxcXFxuXCIsXG4gIFwiXFxmXCI6IFwiXFxcXGZcIixcbiAgXCJcXHJcIjogXCJcXFxcclwiLFxuICBcIidcIjogXCJcXFxcJ1wiLFxuICBcIlxcXFxcIjogXCJcXFxcXFxcXFwiXG59O1xudmFyIGhleCA9IDE2O1xudmFyIHVuaWNvZGVMZW5ndGggPSA0O1xuZnVuY3Rpb24gZXNjYXBlKGNoYXIpIHtcbiAgcmV0dXJuIGVzY2FwZUNoYXJhY3RlcnNbY2hhcl0gfHwgYFxcXFx1JHtgMDAwMCR7Y2hhci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKGhleCl9YC5zbGljZSgtdW5pY29kZUxlbmd0aCl9YDtcbn1cbl9fbmFtZShlc2NhcGUsIFwiZXNjYXBlXCIpO1xuZnVuY3Rpb24gaW5zcGVjdFN0cmluZyhzdHJpbmcsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ0VzY2FwZUNoYXJzLnRlc3Qoc3RyaW5nKSkge1xuICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHN0cmluZ0VzY2FwZUNoYXJzLCBlc2NhcGUpO1xuICB9XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUoYCcke3RydW5jYXRlKHN0cmluZywgb3B0aW9ucy50cnVuY2F0ZSAtIDIpfSdgLCBcInN0cmluZ1wiKTtcbn1cbl9fbmFtZShpbnNwZWN0U3RyaW5nLCBcImluc3BlY3RTdHJpbmdcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvc3ltYm9sLmpzXG5mdW5jdGlvbiBpbnNwZWN0U3ltYm9sKHZhbHVlKSB7XG4gIGlmIChcImRlc2NyaXB0aW9uXCIgaW4gU3ltYm9sLnByb3RvdHlwZSkge1xuICAgIHJldHVybiB2YWx1ZS5kZXNjcmlwdGlvbiA/IGBTeW1ib2woJHt2YWx1ZS5kZXNjcmlwdGlvbn0pYCA6IFwiU3ltYm9sKClcIjtcbiAgfVxuICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbn1cbl9fbmFtZShpbnNwZWN0U3ltYm9sLCBcImluc3BlY3RTeW1ib2xcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvcHJvbWlzZS5qc1xudmFyIGdldFByb21pc2VWYWx1ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gXCJQcm9taXNle1xcdTIwMjZ9XCIsIFwiZ2V0UHJvbWlzZVZhbHVlXCIpO1xudHJ5IHtcbiAgY29uc3QgeyBnZXRQcm9taXNlRGV0YWlscywga1BlbmRpbmcsIGtSZWplY3RlZCB9ID0gcHJvY2Vzcy5iaW5kaW5nKFwidXRpbFwiKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZ2V0UHJvbWlzZURldGFpbHMoUHJvbWlzZS5yZXNvbHZlKCkpKSkge1xuICAgIGdldFByb21pc2VWYWx1ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlLCBvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBbc3RhdGUsIGlubmVyVmFsdWVdID0gZ2V0UHJvbWlzZURldGFpbHModmFsdWUpO1xuICAgICAgaWYgKHN0YXRlID09PSBrUGVuZGluZykge1xuICAgICAgICByZXR1cm4gXCJQcm9taXNlezxwZW5kaW5nPn1cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgUHJvbWlzZSR7c3RhdGUgPT09IGtSZWplY3RlZCA/IFwiIVwiIDogXCJcIn17JHtvcHRpb25zLmluc3BlY3QoaW5uZXJWYWx1ZSwgb3B0aW9ucyl9fWA7XG4gICAgfSwgXCJnZXRQcm9taXNlVmFsdWVcIik7XG4gIH1cbn0gY2F0Y2ggKG5vdE5vZGUpIHtcbn1cbnZhciBwcm9taXNlX2RlZmF1bHQgPSBnZXRQcm9taXNlVmFsdWU7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvb2JqZWN0LmpzXG5mdW5jdGlvbiBpbnNwZWN0T2JqZWN0KG9iamVjdCwgb3B0aW9ucykge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KTtcbiAgY29uc3Qgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCkgOiBbXTtcbiAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09PSAwICYmIHN5bWJvbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwie31cIjtcbiAgfVxuICBvcHRpb25zLnRydW5jYXRlIC09IDQ7XG4gIG9wdGlvbnMuc2VlbiA9IG9wdGlvbnMuc2VlbiB8fCBbXTtcbiAgaWYgKG9wdGlvbnMuc2Vlbi5pbmNsdWRlcyhvYmplY3QpKSB7XG4gICAgcmV0dXJuIFwiW0NpcmN1bGFyXVwiO1xuICB9XG4gIG9wdGlvbnMuc2Vlbi5wdXNoKG9iamVjdCk7XG4gIGNvbnN0IHByb3BlcnR5Q29udGVudHMgPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcCgoa2V5KSA9PiBba2V5LCBvYmplY3Rba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICBjb25zdCBzeW1ib2xDb250ZW50cyA9IGluc3BlY3RMaXN0KHN5bWJvbHMubWFwKChrZXkpID0+IFtrZXksIG9iamVjdFtrZXldXSksIG9wdGlvbnMsIGluc3BlY3RQcm9wZXJ0eSk7XG4gIG9wdGlvbnMuc2Vlbi5wb3AoKTtcbiAgbGV0IHNlcCA9IFwiXCI7XG4gIGlmIChwcm9wZXJ0eUNvbnRlbnRzICYmIHN5bWJvbENvbnRlbnRzKSB7XG4gICAgc2VwID0gXCIsIFwiO1xuICB9XG4gIHJldHVybiBgeyAke3Byb3BlcnR5Q29udGVudHN9JHtzZXB9JHtzeW1ib2xDb250ZW50c30gfWA7XG59XG5fX25hbWUoaW5zcGVjdE9iamVjdCwgXCJpbnNwZWN0T2JqZWN0XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2NsYXNzLmpzXG52YXIgdG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIFN5bWJvbC50b1N0cmluZ1RhZyA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IGZhbHNlO1xuZnVuY3Rpb24gaW5zcGVjdENsYXNzKHZhbHVlLCBvcHRpb25zKSB7XG4gIGxldCBuYW1lID0gXCJcIjtcbiAgaWYgKHRvU3RyaW5nVGFnICYmIHRvU3RyaW5nVGFnIGluIHZhbHVlKSB7XG4gICAgbmFtZSA9IHZhbHVlW3RvU3RyaW5nVGFnXTtcbiAgfVxuICBuYW1lID0gbmFtZSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAoIW5hbWUgfHwgbmFtZSA9PT0gXCJfY2xhc3NcIikge1xuICAgIG5hbWUgPSBcIjxBbm9ueW1vdXMgQ2xhc3M+XCI7XG4gIH1cbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBuYW1lLmxlbmd0aDtcbiAgcmV0dXJuIGAke25hbWV9JHtpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKX1gO1xufVxuX19uYW1lKGluc3BlY3RDbGFzcywgXCJpbnNwZWN0Q2xhc3NcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvYXJndW1lbnRzLmpzXG5mdW5jdGlvbiBpbnNwZWN0QXJndW1lbnRzKGFyZ3MsIG9wdGlvbnMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiBcIkFyZ3VtZW50c1tdXCI7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gMTM7XG4gIHJldHVybiBgQXJndW1lbnRzWyAke2luc3BlY3RMaXN0KGFyZ3MsIG9wdGlvbnMpfSBdYDtcbn1cbl9fbmFtZShpbnNwZWN0QXJndW1lbnRzLCBcImluc3BlY3RBcmd1bWVudHNcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvZXJyb3IuanNcbnZhciBlcnJvcktleXMgPSBbXG4gIFwic3RhY2tcIixcbiAgXCJsaW5lXCIsXG4gIFwiY29sdW1uXCIsXG4gIFwibmFtZVwiLFxuICBcIm1lc3NhZ2VcIixcbiAgXCJmaWxlTmFtZVwiLFxuICBcImxpbmVOdW1iZXJcIixcbiAgXCJjb2x1bW5OdW1iZXJcIixcbiAgXCJudW1iZXJcIixcbiAgXCJkZXNjcmlwdGlvblwiLFxuICBcImNhdXNlXCJcbl07XG5mdW5jdGlvbiBpbnNwZWN0T2JqZWN0MihlcnJvciwgb3B0aW9ucykge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpLmZpbHRlcigoa2V5KSA9PiBlcnJvcktleXMuaW5kZXhPZihrZXkpID09PSAtMSk7XG4gIGNvbnN0IG5hbWUgPSBlcnJvci5uYW1lO1xuICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoO1xuICBsZXQgbWVzc2FnZSA9IFwiXCI7XG4gIGlmICh0eXBlb2YgZXJyb3IubWVzc2FnZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIG1lc3NhZ2UgPSB0cnVuY2F0ZShlcnJvci5tZXNzYWdlLCBvcHRpb25zLnRydW5jYXRlKTtcbiAgfSBlbHNlIHtcbiAgICBwcm9wZXJ0aWVzLnVuc2hpZnQoXCJtZXNzYWdlXCIpO1xuICB9XG4gIG1lc3NhZ2UgPSBtZXNzYWdlID8gYDogJHttZXNzYWdlfWAgOiBcIlwiO1xuICBvcHRpb25zLnRydW5jYXRlIC09IG1lc3NhZ2UubGVuZ3RoICsgNTtcbiAgb3B0aW9ucy5zZWVuID0gb3B0aW9ucy5zZWVuIHx8IFtdO1xuICBpZiAob3B0aW9ucy5zZWVuLmluY2x1ZGVzKGVycm9yKSkge1xuICAgIHJldHVybiBcIltDaXJjdWxhcl1cIjtcbiAgfVxuICBvcHRpb25zLnNlZW4ucHVzaChlcnJvcik7XG4gIGNvbnN0IHByb3BlcnR5Q29udGVudHMgPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcCgoa2V5KSA9PiBba2V5LCBlcnJvcltrZXldXSksIG9wdGlvbnMsIGluc3BlY3RQcm9wZXJ0eSk7XG4gIHJldHVybiBgJHtuYW1lfSR7bWVzc2FnZX0ke3Byb3BlcnR5Q29udGVudHMgPyBgIHsgJHtwcm9wZXJ0eUNvbnRlbnRzfSB9YCA6IFwiXCJ9YDtcbn1cbl9fbmFtZShpbnNwZWN0T2JqZWN0MiwgXCJpbnNwZWN0T2JqZWN0XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2h0bWwuanNcbmZ1bmN0aW9uIGluc3BlY3RBdHRyaWJ1dGUoW2tleSwgdmFsdWVdLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gMztcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBgJHtvcHRpb25zLnN0eWxpemUoU3RyaW5nKGtleSksIFwieWVsbG93XCIpfWA7XG4gIH1cbiAgcmV0dXJuIGAke29wdGlvbnMuc3R5bGl6ZShTdHJpbmcoa2V5KSwgXCJ5ZWxsb3dcIil9PSR7b3B0aW9ucy5zdHlsaXplKGBcIiR7dmFsdWV9XCJgLCBcInN0cmluZ1wiKX1gO1xufVxuX19uYW1lKGluc3BlY3RBdHRyaWJ1dGUsIFwiaW5zcGVjdEF0dHJpYnV0ZVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RIVE1MQ29sbGVjdGlvbihjb2xsZWN0aW9uLCBvcHRpb25zKSB7XG4gIHJldHVybiBpbnNwZWN0TGlzdChjb2xsZWN0aW9uLCBvcHRpb25zLCBpbnNwZWN0SFRNTCwgXCJcXG5cIik7XG59XG5fX25hbWUoaW5zcGVjdEhUTUxDb2xsZWN0aW9uLCBcImluc3BlY3RIVE1MQ29sbGVjdGlvblwiKTtcbmZ1bmN0aW9uIGluc3BlY3RIVE1MKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKTtcbiAgY29uc3QgbmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBoZWFkID0gb3B0aW9ucy5zdHlsaXplKGA8JHtuYW1lfWAsIFwic3BlY2lhbFwiKTtcbiAgY29uc3QgaGVhZENsb3NlID0gb3B0aW9ucy5zdHlsaXplKGA+YCwgXCJzcGVjaWFsXCIpO1xuICBjb25zdCB0YWlsID0gb3B0aW9ucy5zdHlsaXplKGA8LyR7bmFtZX0+YCwgXCJzcGVjaWFsXCIpO1xuICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoICogMiArIDU7XG4gIGxldCBwcm9wZXJ0eUNvbnRlbnRzID0gXCJcIjtcbiAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgIHByb3BlcnR5Q29udGVudHMgKz0gXCIgXCI7XG4gICAgcHJvcGVydHlDb250ZW50cyArPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcCgoa2V5KSA9PiBba2V5LCBlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpXSksIG9wdGlvbnMsIGluc3BlY3RBdHRyaWJ1dGUsIFwiIFwiKTtcbiAgfVxuICBvcHRpb25zLnRydW5jYXRlIC09IHByb3BlcnR5Q29udGVudHMubGVuZ3RoO1xuICBjb25zdCB0cnVuY2F0ZTIgPSBvcHRpb25zLnRydW5jYXRlO1xuICBsZXQgY2hpbGRyZW4gPSBpbnNwZWN0SFRNTENvbGxlY3Rpb24oZWxlbWVudC5jaGlsZHJlbiwgb3B0aW9ucyk7XG4gIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggPiB0cnVuY2F0ZTIpIHtcbiAgICBjaGlsZHJlbiA9IGAke3RydW5jYXRvcn0oJHtlbGVtZW50LmNoaWxkcmVuLmxlbmd0aH0pYDtcbiAgfVxuICByZXR1cm4gYCR7aGVhZH0ke3Byb3BlcnR5Q29udGVudHN9JHtoZWFkQ2xvc2V9JHtjaGlsZHJlbn0ke3RhaWx9YDtcbn1cbl9fbmFtZShpbnNwZWN0SFRNTCwgXCJpbnNwZWN0SFRNTFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9pbmRleC5qc1xudmFyIHN5bWJvbHNTdXBwb3J0ZWQgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5mb3IgPT09IFwiZnVuY3Rpb25cIjtcbnZhciBjaGFpSW5zcGVjdCA9IHN5bWJvbHNTdXBwb3J0ZWQgPyBTeW1ib2wuZm9yKFwiY2hhaS9pbnNwZWN0XCIpIDogXCJAQGNoYWkvaW5zcGVjdFwiO1xudmFyIG5vZGVJbnNwZWN0ID0gZmFsc2U7XG50cnkge1xuICBjb25zdCBub2RlVXRpbCA9IHJlcXVpcmVfdXRpbCgpO1xuICBub2RlSW5zcGVjdCA9IG5vZGVVdGlsLmluc3BlY3QgPyBub2RlVXRpbC5pbnNwZWN0LmN1c3RvbSA6IGZhbHNlO1xufSBjYXRjaCAobm9Ob2RlSW5zcGVjdCkge1xuICBub2RlSW5zcGVjdCA9IGZhbHNlO1xufVxudmFyIGNvbnN0cnVjdG9yTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgc3RyaW5nVGFnTWFwID0ge307XG52YXIgYmFzZVR5cGVzTWFwID0ge1xuICB1bmRlZmluZWQ6ICh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFwidW5kZWZpbmVkXCIsIFwidW5kZWZpbmVkXCIpLFxuICBudWxsOiAodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuc3R5bGl6ZShcIm51bGxcIiwgXCJudWxsXCIpLFxuICBib29sZWFuOiAodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuc3R5bGl6ZShTdHJpbmcodmFsdWUpLCBcImJvb2xlYW5cIiksXG4gIEJvb2xlYW46ICh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFN0cmluZyh2YWx1ZSksIFwiYm9vbGVhblwiKSxcbiAgbnVtYmVyOiBpbnNwZWN0TnVtYmVyLFxuICBOdW1iZXI6IGluc3BlY3ROdW1iZXIsXG4gIGJpZ2ludDogaW5zcGVjdEJpZ0ludCxcbiAgQmlnSW50OiBpbnNwZWN0QmlnSW50LFxuICBzdHJpbmc6IGluc3BlY3RTdHJpbmcsXG4gIFN0cmluZzogaW5zcGVjdFN0cmluZyxcbiAgZnVuY3Rpb246IGluc3BlY3RGdW5jdGlvbixcbiAgRnVuY3Rpb246IGluc3BlY3RGdW5jdGlvbixcbiAgc3ltYm9sOiBpbnNwZWN0U3ltYm9sLFxuICAvLyBBIFN5bWJvbCBwb2x5ZmlsbCB3aWxsIHJldHVybiBgU3ltYm9sYCBub3QgYHN5bWJvbGAgZnJvbSB0eXBlZGV0ZWN0XG4gIFN5bWJvbDogaW5zcGVjdFN5bWJvbCxcbiAgQXJyYXk6IGluc3BlY3RBcnJheSxcbiAgRGF0ZTogaW5zcGVjdERhdGUsXG4gIE1hcDogaW5zcGVjdE1hcCxcbiAgU2V0OiBpbnNwZWN0U2V0LFxuICBSZWdFeHA6IGluc3BlY3RSZWdFeHAsXG4gIFByb21pc2U6IHByb21pc2VfZGVmYXVsdCxcbiAgLy8gV2Vha1NldCwgV2Vha01hcCBhcmUgdG90YWxseSBvcGFxdWUgdG8gdXNcbiAgV2Vha1NldDogKHZhbHVlLCBvcHRpb25zKSA9PiBvcHRpb25zLnN0eWxpemUoXCJXZWFrU2V0e1xcdTIwMjZ9XCIsIFwic3BlY2lhbFwiKSxcbiAgV2Vha01hcDogKHZhbHVlLCBvcHRpb25zKSA9PiBvcHRpb25zLnN0eWxpemUoXCJXZWFrTWFwe1xcdTIwMjZ9XCIsIFwic3BlY2lhbFwiKSxcbiAgQXJndW1lbnRzOiBpbnNwZWN0QXJndW1lbnRzLFxuICBJbnQ4QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBVaW50OEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgVWludDhDbGFtcGVkQXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBJbnQxNkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgVWludDE2QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBJbnQzMkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgVWludDMyQXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBGbG9hdDMyQXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBGbG9hdDY0QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBHZW5lcmF0b3I6ICgpID0+IFwiXCIsXG4gIERhdGFWaWV3OiAoKSA9PiBcIlwiLFxuICBBcnJheUJ1ZmZlcjogKCkgPT4gXCJcIixcbiAgRXJyb3I6IGluc3BlY3RPYmplY3QyLFxuICBIVE1MQ29sbGVjdGlvbjogaW5zcGVjdEhUTUxDb2xsZWN0aW9uLFxuICBOb2RlTGlzdDogaW5zcGVjdEhUTUxDb2xsZWN0aW9uXG59O1xudmFyIGluc3BlY3RDdXN0b20gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSwgb3B0aW9ucywgdHlwZTMpID0+IHtcbiAgaWYgKGNoYWlJbnNwZWN0IGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZVtjaGFpSW5zcGVjdF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB2YWx1ZVtjaGFpSW5zcGVjdF0ob3B0aW9ucyk7XG4gIH1cbiAgaWYgKG5vZGVJbnNwZWN0ICYmIG5vZGVJbnNwZWN0IGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZVtub2RlSW5zcGVjdF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB2YWx1ZVtub2RlSW5zcGVjdF0ob3B0aW9ucy5kZXB0aCwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKFwiaW5zcGVjdFwiIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5pbnNwZWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5zcGVjdChvcHRpb25zLmRlcHRoLCBvcHRpb25zKTtcbiAgfVxuICBpZiAoXCJjb25zdHJ1Y3RvclwiIGluIHZhbHVlICYmIGNvbnN0cnVjdG9yTWFwLmhhcyh2YWx1ZS5jb25zdHJ1Y3RvcikpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3JNYXAuZ2V0KHZhbHVlLmNvbnN0cnVjdG9yKSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKHN0cmluZ1RhZ01hcFt0eXBlM10pIHtcbiAgICByZXR1cm4gc3RyaW5nVGFnTWFwW3R5cGUzXSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIFwiXCI7XG59LCBcImluc3BlY3RDdXN0b21cIik7XG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuZnVuY3Rpb24gaW5zcGVjdCh2YWx1ZSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBub3JtYWxpc2VPcHRpb25zKG9wdHMsIGluc3BlY3QpO1xuICBjb25zdCB7IGN1c3RvbUluc3BlY3QgfSA9IG9wdGlvbnM7XG4gIGxldCB0eXBlMyA9IHZhbHVlID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlMyA9PT0gXCJvYmplY3RcIikge1xuICAgIHR5cGUzID0gdG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpO1xuICB9XG4gIGlmICh0eXBlMyBpbiBiYXNlVHlwZXNNYXApIHtcbiAgICByZXR1cm4gYmFzZVR5cGVzTWFwW3R5cGUzXSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKGN1c3RvbUluc3BlY3QgJiYgdmFsdWUpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBpbnNwZWN0Q3VzdG9tKHZhbHVlLCBvcHRpb25zLCB0eXBlMyk7XG4gICAgaWYgKG91dHB1dCkge1xuICAgICAgaWYgKHR5cGVvZiBvdXRwdXQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICByZXR1cm4gaW5zcGVjdChvdXRwdXQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBjb25zdCBwcm90byA9IHZhbHVlID8gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA6IGZhbHNlO1xuICBpZiAocHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gaW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKHZhbHVlICYmIHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJmdW5jdGlvblwiICYmIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICByZXR1cm4gaW5zcGVjdEhUTUwodmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIGlmIChcImNvbnN0cnVjdG9yXCIgaW4gdmFsdWUpIHtcbiAgICBpZiAodmFsdWUuY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgICAgcmV0dXJuIGluc3BlY3RDbGFzcyh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuICBpZiAodmFsdWUgPT09IE9iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gaW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShTdHJpbmcodmFsdWUpLCB0eXBlMyk7XG59XG5fX25hbWUoaW5zcGVjdCwgXCJpbnNwZWN0XCIpO1xuXG4vLyBsaWIvY2hhaS9jb25maWcuanNcbnZhciBjb25maWcgPSB7XG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLmluY2x1ZGVTdGFja1xuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgaW5mbHVlbmNlcyB3aGV0aGVyIHN0YWNrIHRyYWNlXG4gICAqIGlzIGluY2x1ZGVkIGluIEFzc2VydGlvbiBlcnJvciBtZXNzYWdlLiBEZWZhdWx0IG9mIGZhbHNlXG4gICAqIHN1cHByZXNzZXMgc3RhY2sgdHJhY2UgaW4gdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgPSB0cnVlOyAgLy8gZW5hYmxlIHN0YWNrIG9uIGVycm9yXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgaW5jbHVkZVN0YWNrOiBmYWxzZSxcbiAgLyoqXG4gICAqICMjIyBjb25maWcuc2hvd0RpZmZcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGluZmx1ZW5jZXMgd2hldGhlciBvciBub3RcbiAgICogdGhlIGBzaG93RGlmZmAgZmxhZyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHRocm93blxuICAgKiBBc3NlcnRpb25FcnJvcnMuIGBmYWxzZWAgd2lsbCBhbHdheXMgYmUgYGZhbHNlYDsgYHRydWVgXG4gICAqIHdpbGwgYmUgdHJ1ZSB3aGVuIHRoZSBhc3NlcnRpb24gaGFzIHJlcXVlc3RlZCBhIGRpZmZcbiAgICogYmUgc2hvd24uXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgc2hvd0RpZmY6IHRydWUsXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLnRydW5jYXRlVGhyZXNob2xkXG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBzZXRzIGxlbmd0aCB0aHJlc2hvbGQgZm9yIGFjdHVhbCBhbmRcbiAgICogZXhwZWN0ZWQgdmFsdWVzIGluIGFzc2VydGlvbiBlcnJvcnMuIElmIHRoaXMgdGhyZXNob2xkIGlzIGV4Y2VlZGVkLCBmb3JcbiAgICogZXhhbXBsZSBmb3IgbGFyZ2UgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgdmFsdWUgaXMgcmVwbGFjZWQgd2l0aCBzb21ldGhpbmdcbiAgICogbGlrZSBgWyBBcnJheSgzKSBdYCBvciBgeyBPYmplY3QgKHByb3AxLCBwcm9wMikgfWAuXG4gICAqXG4gICAqIFNldCBpdCB0byB6ZXJvIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgdHJ1bmNhdGluZyBhbHRvZ2V0aGVyLlxuICAgKlxuICAgKiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlcmZ1bCB3aGVuIGRvaW5nIGFzc2VydGlvbnMgb24gYXJyYXlzOiBoYXZpbmcgdGhpc1xuICAgKiBzZXQgdG8gYSByZWFzb25hYmxlIGxhcmdlIHZhbHVlIG1ha2VzIHRoZSBmYWlsdXJlIG1lc3NhZ2VzIHJlYWRpbHlcbiAgICogaW5zcGVjdGFibGUuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCA9IDA7ICAvLyBkaXNhYmxlIHRydW5jYXRpbmdcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9XG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHRydW5jYXRlVGhyZXNob2xkOiA0MCxcbiAgLyoqXG4gICAqICMjIyBjb25maWcudXNlUHJveHlcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGRlZmluZXMgaWYgY2hhaSB3aWxsIHVzZSBhIFByb3h5IHRvIHRocm93XG4gICAqIGFuIGVycm9yIHdoZW4gYSBub24tZXhpc3RlbnQgcHJvcGVydHkgaXMgcmVhZCwgd2hpY2ggcHJvdGVjdHMgdXNlcnNcbiAgICogZnJvbSB0eXBvcyB3aGVuIHVzaW5nIHByb3BlcnR5LWJhc2VkIGFzc2VydGlvbnMuXG4gICAqXG4gICAqIFNldCBpdCB0byBmYWxzZSBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS5cbiAgICpcbiAgICogICAgIGNoYWkuY29uZmlnLnVzZVByb3h5ID0gZmFsc2U7ICAvLyBkaXNhYmxlIHVzZSBvZiBQcm94eVxuICAgKlxuICAgKiBUaGlzIGZlYXR1cmUgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCByZWdhcmRsZXNzIG9mIHRoaXMgY29uZmlnIHZhbHVlXG4gICAqIGluIGVudmlyb25tZW50cyB0aGF0IGRvbid0IHN1cHBvcnQgcHJveGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufVxuICAgKiBAcHVibGljXG4gICAqL1xuICB1c2VQcm94eTogdHJ1ZSxcbiAgLyoqXG4gICAqICMjIyBjb25maWcucHJveHlFeGNsdWRlZEtleXNcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGRlZmluZXMgd2hpY2ggcHJvcGVydGllcyBzaG91bGQgYmUgaWdub3JlZFxuICAgKiBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yIGlmIHRoZXkgZG8gbm90IGV4aXN0IG9uIHRoZSBhc3NlcnRpb24uXG4gICAqIFRoaXMgaXMgb25seSBhcHBsaWVkIGlmIHRoZSBlbnZpcm9ubWVudCBDaGFpIGlzIHJ1bm5pbmcgaW4gc3VwcG9ydHMgcHJveGllcyBhbmRcbiAgICogaWYgdGhlIGB1c2VQcm94eWAgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzIGVuYWJsZWQuXG4gICAqIEJ5IGRlZmF1bHQsIGB0aGVuYCBhbmQgYGluc3BlY3RgIHdpbGwgbm90IHRocm93IGFuIGVycm9yIGlmIHRoZXkgZG8gbm90IGV4aXN0IG9uIHRoZVxuICAgKiBhc3NlcnRpb24gb2JqZWN0IGJlY2F1c2UgdGhlIGAuaW5zcGVjdGAgcHJvcGVydHkgaXMgcmVhZCBieSBgdXRpbC5pbnNwZWN0YCAoZm9yIGV4YW1wbGUsIHdoZW5cbiAgICogdXNpbmcgYGNvbnNvbGUubG9nYCBvbiB0aGUgYXNzZXJ0aW9uIG9iamVjdCkgYW5kIGAudGhlbmAgaXMgbmVjZXNzYXJ5IGZvciBwcm9taXNlIHR5cGUtY2hlY2tpbmcuXG4gICAqXG4gICAqICAgICAvLyBCeSBkZWZhdWx0IHRoZXNlIGtleXMgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgaWYgdGhleSBkbyBub3QgZXhpc3Qgb24gdGhlIGFzc2VydGlvbiBvYmplY3RcbiAgICogICAgIGNoYWkuY29uZmlnLnByb3h5RXhjbHVkZWRLZXlzID0gWyd0aGVuJywgJ2luc3BlY3QnXTtcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHJveHlFeGNsdWRlZEtleXM6IFtcInRoZW5cIiwgXCJjYXRjaFwiLCBcImluc3BlY3RcIiwgXCJ0b0pTT05cIl0sXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLmRlZXBFcXVhbFxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgZGVmaW5lcyB3aGljaCBhIGN1c3RvbSBmdW5jdGlvbiB0byB1c2UgZm9yIGRlZXBFcXVhbFxuICAgKiBjb21wYXJpc29ucy5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGZ1bmN0aW9uIHVzZWQgaXMgdGhlIG9uZSBmcm9tIHRoZSBgZGVlcC1lcWxgIHBhY2thZ2Ugd2l0aG91dCBjdXN0b20gY29tcGFyYXRvci5cbiAgICpcbiAgICogICAgIC8vIHVzZSBhIGN1c3RvbSBjb21wYXJhdG9yXG4gICAqICAgICBjaGFpLmNvbmZpZy5kZWVwRXF1YWwgPSAoZXhwZWN0ZWQsIGFjdHVhbCkgPT4ge1xuICAgKiAgICAgICAgIHJldHVybiBjaGFpLnV0aWwuZXFsKGV4cGVjdGVkLCBhY3R1YWwsIHtcbiAgICogICAgICAgICAgICAgY29tcGFyYXRvcjogKGV4cGVjdGVkLCBhY3R1YWwpID0+IHtcbiAgICogICAgICAgICAgICAgICAgIC8vIGZvciBub24gbnVtYmVyIGNvbXBhcmlzb24sIHVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvclxuICAgKiAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGV4cGVjdGVkICE9PSAnbnVtYmVyJykgcmV0dXJuIG51bGw7XG4gICAqICAgICAgICAgICAgICAgICAvLyBhbGxvdyBhIGRpZmZlcmVuY2Ugb2YgMTAgYmV0d2VlbiBjb21wYXJlZCBudW1iZXJzXG4gICAqICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFjdHVhbCA9PT0gJ251bWJlcicgJiYgTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgMTBcbiAgICogICAgICAgICAgICAgfVxuICAgKiAgICAgICAgIH0pXG4gICAqICAgICB9O1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufVxuICAgKiBAcHVibGljXG4gICAqL1xuICBkZWVwRXF1YWw6IG51bGxcbn07XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2luc3BlY3QuanNcbmZ1bmN0aW9uIGluc3BlY3QyKG9iaiwgc2hvd0hpZGRlbiwgZGVwdGgsIGNvbG9ycykge1xuICB2YXIgb3B0aW9ucyA9IHtcbiAgICBjb2xvcnMsXG4gICAgZGVwdGg6IHR5cGVvZiBkZXB0aCA9PT0gXCJ1bmRlZmluZWRcIiA/IDIgOiBkZXB0aCxcbiAgICBzaG93SGlkZGVuLFxuICAgIHRydW5jYXRlOiBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgPyBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgOiBJbmZpbml0eVxuICB9O1xuICByZXR1cm4gaW5zcGVjdChvYmosIG9wdGlvbnMpO1xufVxuX19uYW1lKGluc3BlY3QyLCBcImluc3BlY3RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL29iakRpc3BsYXkuanNcbmZ1bmN0aW9uIG9iakRpc3BsYXkob2JqKSB7XG4gIHZhciBzdHIgPSBpbnNwZWN0MihvYmopLCB0eXBlMyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xuICBpZiAoY29uZmlnLnRydW5jYXRlVGhyZXNob2xkICYmIHN0ci5sZW5ndGggPj0gY29uZmlnLnRydW5jYXRlVGhyZXNob2xkKSB7XG4gICAgaWYgKHR5cGUzID09PSBcIltvYmplY3QgRnVuY3Rpb25dXCIpIHtcbiAgICAgIHJldHVybiAhb2JqLm5hbWUgfHwgb2JqLm5hbWUgPT09IFwiXCIgPyBcIltGdW5jdGlvbl1cIiA6IFwiW0Z1bmN0aW9uOiBcIiArIG9iai5uYW1lICsgXCJdXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlMyA9PT0gXCJbb2JqZWN0IEFycmF5XVwiKSB7XG4gICAgICByZXR1cm4gXCJbIEFycmF5KFwiICsgb2JqLmxlbmd0aCArIFwiKSBdXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlMyA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIikge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopLCBrc3RyID0ga2V5cy5sZW5ndGggPiAyID8ga2V5cy5zcGxpY2UoMCwgMikuam9pbihcIiwgXCIpICsgXCIsIC4uLlwiIDoga2V5cy5qb2luKFwiLCBcIik7XG4gICAgICByZXR1cm4gXCJ7IE9iamVjdCAoXCIgKyBrc3RyICsgXCIpIH1cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuX19uYW1lKG9iakRpc3BsYXksIFwib2JqRGlzcGxheVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0TWVzc2FnZS5qc1xuZnVuY3Rpb24gZ2V0TWVzc2FnZTIob2JqLCBhcmdzKSB7XG4gIHZhciBuZWdhdGUgPSBmbGFnKG9iaiwgXCJuZWdhdGVcIiksIHZhbCA9IGZsYWcob2JqLCBcIm9iamVjdFwiKSwgZXhwZWN0ZWQgPSBhcmdzWzNdLCBhY3R1YWwgPSBnZXRBY3R1YWwob2JqLCBhcmdzKSwgbXNnID0gbmVnYXRlID8gYXJnc1syXSA6IGFyZ3NbMV0sIGZsYWdNc2cgPSBmbGFnKG9iaiwgXCJtZXNzYWdlXCIpO1xuICBpZiAodHlwZW9mIG1zZyA9PT0gXCJmdW5jdGlvblwiKVxuICAgIG1zZyA9IG1zZygpO1xuICBtc2cgPSBtc2cgfHwgXCJcIjtcbiAgbXNnID0gbXNnLnJlcGxhY2UoLyNcXHt0aGlzXFx9L2csIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvYmpEaXNwbGF5KHZhbCk7XG4gIH0pLnJlcGxhY2UoLyNcXHthY3RcXH0vZywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG9iakRpc3BsYXkoYWN0dWFsKTtcbiAgfSkucmVwbGFjZSgvI1xce2V4cFxcfS9nLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb2JqRGlzcGxheShleHBlY3RlZCk7XG4gIH0pO1xuICByZXR1cm4gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgKyBtc2cgOiBtc2c7XG59XG5fX25hbWUoZ2V0TWVzc2FnZTIsIFwiZ2V0TWVzc2FnZVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvdHJhbnNmZXJGbGFncy5qc1xuZnVuY3Rpb24gdHJhbnNmZXJGbGFncyhhc3NlcnRpb24sIG9iamVjdCwgaW5jbHVkZUFsbCkge1xuICB2YXIgZmxhZ3MgPSBhc3NlcnRpb24uX19mbGFncyB8fCAoYXNzZXJ0aW9uLl9fZmxhZ3MgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIGlmICghb2JqZWN0Ll9fZmxhZ3MpIHtcbiAgICBvYmplY3QuX19mbGFncyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG4gIGluY2x1ZGVBbGwgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gaW5jbHVkZUFsbCA6IHRydWU7XG4gIGZvciAodmFyIGZsYWczIGluIGZsYWdzKSB7XG4gICAgaWYgKGluY2x1ZGVBbGwgfHwgZmxhZzMgIT09IFwib2JqZWN0XCIgJiYgZmxhZzMgIT09IFwic3NmaVwiICYmIGZsYWczICE9PSBcImxvY2tTc2ZpXCIgJiYgZmxhZzMgIT0gXCJtZXNzYWdlXCIpIHtcbiAgICAgIG9iamVjdC5fX2ZsYWdzW2ZsYWczXSA9IGZsYWdzW2ZsYWczXTtcbiAgICB9XG4gIH1cbn1cbl9fbmFtZSh0cmFuc2ZlckZsYWdzLCBcInRyYW5zZmVyRmxhZ3NcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9kZWVwLWVxbC9pbmRleC5qc1xuZnVuY3Rpb24gdHlwZTIob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gIH1cbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBcIm51bGxcIjtcbiAgfVxuICBjb25zdCBzdHJpbmdUYWcgPSBvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXTtcbiAgaWYgKHR5cGVvZiBzdHJpbmdUYWcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gc3RyaW5nVGFnO1xuICB9XG4gIGNvbnN0IHNsaWNlU3RhcnQgPSA4O1xuICBjb25zdCBzbGljZUVuZCA9IC0xO1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikuc2xpY2Uoc2xpY2VTdGFydCwgc2xpY2VFbmQpO1xufVxuX19uYW1lKHR5cGUyLCBcInR5cGVcIik7XG5mdW5jdGlvbiBGYWtlTWFwKCkge1xuICB0aGlzLl9rZXkgPSBcImNoYWkvZGVlcC1lcWxfX1wiICsgTWF0aC5yYW5kb20oKSArIERhdGUubm93KCk7XG59XG5fX25hbWUoRmFrZU1hcCwgXCJGYWtlTWFwXCIpO1xuRmFrZU1hcC5wcm90b3R5cGUgPSB7XG4gIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIGtleVt0aGlzLl9rZXldO1xuICB9LCBcImdldFwiKSxcbiAgc2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGtleSwgdGhpcy5fa2V5LCB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgXCJzZXRcIilcbn07XG52YXIgTWVtb2l6ZU1hcCA9IHR5cGVvZiBXZWFrTWFwID09PSBcImZ1bmN0aW9uXCIgPyBXZWFrTWFwIDogRmFrZU1hcDtcbmZ1bmN0aW9uIG1lbW9pemVDb21wYXJlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbWVtb2l6ZU1hcCkge1xuICBpZiAoIW1lbW9pemVNYXAgfHwgaXNQcmltaXRpdmUobGVmdEhhbmRPcGVyYW5kKSB8fCBpc1ByaW1pdGl2ZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciBsZWZ0SGFuZE1hcCA9IG1lbW9pemVNYXAuZ2V0KGxlZnRIYW5kT3BlcmFuZCk7XG4gIGlmIChsZWZ0SGFuZE1hcCkge1xuICAgIHZhciByZXN1bHQgPSBsZWZ0SGFuZE1hcC5nZXQocmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbl9fbmFtZShtZW1vaXplQ29tcGFyZSwgXCJtZW1vaXplQ29tcGFyZVwiKTtcbmZ1bmN0aW9uIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBtZW1vaXplTWFwLCByZXN1bHQpIHtcbiAgaWYgKCFtZW1vaXplTWFwIHx8IGlzUHJpbWl0aXZlKGxlZnRIYW5kT3BlcmFuZCkgfHwgaXNQcmltaXRpdmUocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGxlZnRIYW5kTWFwID0gbWVtb2l6ZU1hcC5nZXQobGVmdEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kTWFwKSB7XG4gICAgbGVmdEhhbmRNYXAuc2V0KHJpZ2h0SGFuZE9wZXJhbmQsIHJlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgbGVmdEhhbmRNYXAgPSBuZXcgTWVtb2l6ZU1hcCgpO1xuICAgIGxlZnRIYW5kTWFwLnNldChyaWdodEhhbmRPcGVyYW5kLCByZXN1bHQpO1xuICAgIG1lbW9pemVNYXAuc2V0KGxlZnRIYW5kT3BlcmFuZCwgbGVmdEhhbmRNYXApO1xuICB9XG59XG5fX25hbWUobWVtb2l6ZVNldCwgXCJtZW1vaXplU2V0XCIpO1xudmFyIGRlZXBfZXFsX2RlZmF1bHQgPSBkZWVwRXF1YWw7XG5mdW5jdGlvbiBkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY29tcGFyYXRvcikge1xuICAgIHJldHVybiBleHRlbnNpdmVEZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgfVxuICB2YXIgc2ltcGxlUmVzdWx0ID0gc2ltcGxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgaWYgKHNpbXBsZVJlc3VsdCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBzaW1wbGVSZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGV4dGVuc2l2ZURlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xufVxuX19uYW1lKGRlZXBFcXVhbCwgXCJkZWVwRXF1YWxcIik7XG5mdW5jdGlvbiBzaW1wbGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgaWYgKGxlZnRIYW5kT3BlcmFuZCA9PT0gcmlnaHRIYW5kT3BlcmFuZCkge1xuICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQgIT09IDAgfHwgMSAvIGxlZnRIYW5kT3BlcmFuZCA9PT0gMSAvIHJpZ2h0SGFuZE9wZXJhbmQ7XG4gIH1cbiAgaWYgKGxlZnRIYW5kT3BlcmFuZCAhPT0gbGVmdEhhbmRPcGVyYW5kICYmIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJpZ2h0SGFuZE9wZXJhbmQgIT09IHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNQcmltaXRpdmUobGVmdEhhbmRPcGVyYW5kKSB8fCBpc1ByaW1pdGl2ZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbl9fbmFtZShzaW1wbGVFcXVhbCwgXCJzaW1wbGVFcXVhbFwiKTtcbmZ1bmN0aW9uIGV4dGVuc2l2ZURlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMubWVtb2l6ZSA9IG9wdGlvbnMubWVtb2l6ZSA9PT0gZmFsc2UgPyBmYWxzZSA6IG9wdGlvbnMubWVtb2l6ZSB8fCBuZXcgTWVtb2l6ZU1hcCgpO1xuICB2YXIgY29tcGFyYXRvciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb21wYXJhdG9yO1xuICB2YXIgbWVtb2l6ZVJlc3VsdExlZnQgPSBtZW1vaXplQ29tcGFyZShsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSk7XG4gIGlmIChtZW1vaXplUmVzdWx0TGVmdCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBtZW1vaXplUmVzdWx0TGVmdDtcbiAgfVxuICB2YXIgbWVtb2l6ZVJlc3VsdFJpZ2h0ID0gbWVtb2l6ZUNvbXBhcmUocmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUpO1xuICBpZiAobWVtb2l6ZVJlc3VsdFJpZ2h0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIG1lbW9pemVSZXN1bHRSaWdodDtcbiAgfVxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIHZhciBjb21wYXJhdG9yUmVzdWx0ID0gY29tcGFyYXRvcihsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGlmIChjb21wYXJhdG9yUmVzdWx0ID09PSBmYWxzZSB8fCBjb21wYXJhdG9yUmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCBjb21wYXJhdG9yUmVzdWx0KTtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yUmVzdWx0O1xuICAgIH1cbiAgICB2YXIgc2ltcGxlUmVzdWx0ID0gc2ltcGxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgICBpZiAoc2ltcGxlUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gc2ltcGxlUmVzdWx0O1xuICAgIH1cbiAgfVxuICB2YXIgbGVmdEhhbmRUeXBlID0gdHlwZTIobGVmdEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kVHlwZSAhPT0gdHlwZTIocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCBmYWxzZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUsIHRydWUpO1xuICB2YXIgcmVzdWx0ID0gZXh0ZW5zaXZlRGVlcEVxdWFsQnlUeXBlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRUeXBlLCBvcHRpb25zKTtcbiAgbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbl9fbmFtZShleHRlbnNpdmVEZWVwRXF1YWwsIFwiZXh0ZW5zaXZlRGVlcEVxdWFsXCIpO1xuZnVuY3Rpb24gZXh0ZW5zaXZlRGVlcEVxdWFsQnlUeXBlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRUeXBlLCBvcHRpb25zKSB7XG4gIHN3aXRjaCAobGVmdEhhbmRUeXBlKSB7XG4gICAgY2FzZSBcIlN0cmluZ1wiOlxuICAgIGNhc2UgXCJOdW1iZXJcIjpcbiAgICBjYXNlIFwiQm9vbGVhblwiOlxuICAgIGNhc2UgXCJEYXRlXCI6XG4gICAgICByZXR1cm4gZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZC52YWx1ZU9mKCksIHJpZ2h0SGFuZE9wZXJhbmQudmFsdWVPZigpKTtcbiAgICBjYXNlIFwiUHJvbWlzZVwiOlxuICAgIGNhc2UgXCJTeW1ib2xcIjpcbiAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICBjYXNlIFwiV2Vha01hcFwiOlxuICAgIGNhc2UgXCJXZWFrU2V0XCI6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kID09PSByaWdodEhhbmRPcGVyYW5kO1xuICAgIGNhc2UgXCJFcnJvclwiOlxuICAgICAgcmV0dXJuIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIFtcIm5hbWVcIiwgXCJtZXNzYWdlXCIsIFwiY29kZVwiXSwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIkFyZ3VtZW50c1wiOlxuICAgIGNhc2UgXCJJbnQ4QXJyYXlcIjpcbiAgICBjYXNlIFwiVWludDhBcnJheVwiOlxuICAgIGNhc2UgXCJVaW50OENsYW1wZWRBcnJheVwiOlxuICAgIGNhc2UgXCJJbnQxNkFycmF5XCI6XG4gICAgY2FzZSBcIlVpbnQxNkFycmF5XCI6XG4gICAgY2FzZSBcIkludDMyQXJyYXlcIjpcbiAgICBjYXNlIFwiVWludDMyQXJyYXlcIjpcbiAgICBjYXNlIFwiRmxvYXQzMkFycmF5XCI6XG4gICAgY2FzZSBcIkZsb2F0NjRBcnJheVwiOlxuICAgIGNhc2UgXCJBcnJheVwiOlxuICAgICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiUmVnRXhwXCI6XG4gICAgICByZXR1cm4gcmVnZXhwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgICBjYXNlIFwiR2VuZXJhdG9yXCI6XG4gICAgICByZXR1cm4gZ2VuZXJhdG9yRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiRGF0YVZpZXdcIjpcbiAgICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKG5ldyBVaW50OEFycmF5KGxlZnRIYW5kT3BlcmFuZC5idWZmZXIpLCBuZXcgVWludDhBcnJheShyaWdodEhhbmRPcGVyYW5kLmJ1ZmZlciksIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJBcnJheUJ1ZmZlclwiOlxuICAgICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobmV3IFVpbnQ4QXJyYXkobGVmdEhhbmRPcGVyYW5kKSwgbmV3IFVpbnQ4QXJyYXkocmlnaHRIYW5kT3BlcmFuZCksIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJTZXRcIjpcbiAgICAgIHJldHVybiBlbnRyaWVzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiTWFwXCI6XG4gICAgICByZXR1cm4gZW50cmllc0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIlRlbXBvcmFsLlBsYWluRGF0ZVwiOlxuICAgIGNhc2UgXCJUZW1wb3JhbC5QbGFpblRpbWVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5EYXRlVGltZVwiOlxuICAgIGNhc2UgXCJUZW1wb3JhbC5JbnN0YW50XCI6XG4gICAgY2FzZSBcIlRlbXBvcmFsLlpvbmVkRGF0ZVRpbWVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5ZZWFyTW9udGhcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5Nb250aERheVwiOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC5lcXVhbHMocmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgY2FzZSBcIlRlbXBvcmFsLkR1cmF0aW9uXCI6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kLnRvdGFsKFwibmFub3NlY29uZHNcIikgPT09IHJpZ2h0SGFuZE9wZXJhbmQudG90YWwoXCJuYW5vc2Vjb25kc1wiKTtcbiAgICBjYXNlIFwiVGVtcG9yYWwuVGltZVpvbmVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuQ2FsZW5kYXJcIjpcbiAgICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQudG9TdHJpbmcoKSA9PT0gcmlnaHRIYW5kT3BlcmFuZC50b1N0cmluZygpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gb2JqZWN0RXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgfVxufVxuX19uYW1lKGV4dGVuc2l2ZURlZXBFcXVhbEJ5VHlwZSwgXCJleHRlbnNpdmVEZWVwRXF1YWxCeVR5cGVcIik7XG5mdW5jdGlvbiByZWdleHBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC50b1N0cmluZygpID09PSByaWdodEhhbmRPcGVyYW5kLnRvU3RyaW5nKCk7XG59XG5fX25hbWUocmVnZXhwRXF1YWwsIFwicmVnZXhwRXF1YWxcIik7XG5mdW5jdGlvbiBlbnRyaWVzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHRyeSB7XG4gICAgaWYgKGxlZnRIYW5kT3BlcmFuZC5zaXplICE9PSByaWdodEhhbmRPcGVyYW5kLnNpemUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGxlZnRIYW5kT3BlcmFuZC5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNpemVFcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGVmdEhhbmRJdGVtcyA9IFtdO1xuICB2YXIgcmlnaHRIYW5kSXRlbXMgPSBbXTtcbiAgbGVmdEhhbmRPcGVyYW5kLmZvckVhY2goLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBnYXRoZXJFbnRyaWVzKGtleSwgdmFsdWUpIHtcbiAgICBsZWZ0SGFuZEl0ZW1zLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSwgXCJnYXRoZXJFbnRyaWVzXCIpKTtcbiAgcmlnaHRIYW5kT3BlcmFuZC5mb3JFYWNoKC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gZ2F0aGVyRW50cmllcyhrZXksIHZhbHVlKSB7XG4gICAgcmlnaHRIYW5kSXRlbXMucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LCBcImdhdGhlckVudHJpZXNcIikpO1xuICByZXR1cm4gaXRlcmFibGVFcXVhbChsZWZ0SGFuZEl0ZW1zLnNvcnQoKSwgcmlnaHRIYW5kSXRlbXMuc29ydCgpLCBvcHRpb25zKTtcbn1cbl9fbmFtZShlbnRyaWVzRXF1YWwsIFwiZW50cmllc0VxdWFsXCIpO1xuZnVuY3Rpb24gaXRlcmFibGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgdmFyIGxlbmd0aCA9IGxlZnRIYW5kT3BlcmFuZC5sZW5ndGg7XG4gIGlmIChsZW5ndGggIT09IHJpZ2h0SGFuZE9wZXJhbmQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChsZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZFtpbmRleF0sIHJpZ2h0SGFuZE9wZXJhbmRbaW5kZXhdLCBvcHRpb25zKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5fX25hbWUoaXRlcmFibGVFcXVhbCwgXCJpdGVyYWJsZUVxdWFsXCIpO1xuZnVuY3Rpb24gZ2VuZXJhdG9yRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHJldHVybiBpdGVyYWJsZUVxdWFsKGdldEdlbmVyYXRvckVudHJpZXMobGVmdEhhbmRPcGVyYW5kKSwgZ2V0R2VuZXJhdG9yRW50cmllcyhyaWdodEhhbmRPcGVyYW5kKSwgb3B0aW9ucyk7XG59XG5fX25hbWUoZ2VuZXJhdG9yRXF1YWwsIFwiZ2VuZXJhdG9yRXF1YWxcIik7XG5mdW5jdGlvbiBoYXNJdGVyYXRvckZ1bmN0aW9uKHRhcmdldCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgdGFyZ2V0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHRhcmdldFtTeW1ib2wuaXRlcmF0b3JdID09PSBcImZ1bmN0aW9uXCI7XG59XG5fX25hbWUoaGFzSXRlcmF0b3JGdW5jdGlvbiwgXCJoYXNJdGVyYXRvckZ1bmN0aW9uXCIpO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JFbnRyaWVzKHRhcmdldCkge1xuICBpZiAoaGFzSXRlcmF0b3JGdW5jdGlvbih0YXJnZXQpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBnZXRHZW5lcmF0b3JFbnRyaWVzKHRhcmdldFtTeW1ib2wuaXRlcmF0b3JdKCkpO1xuICAgIH0gY2F0Y2ggKGl0ZXJhdG9yRXJyb3IpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuX19uYW1lKGdldEl0ZXJhdG9yRW50cmllcywgXCJnZXRJdGVyYXRvckVudHJpZXNcIik7XG5mdW5jdGlvbiBnZXRHZW5lcmF0b3JFbnRyaWVzKGdlbmVyYXRvcikge1xuICB2YXIgZ2VuZXJhdG9yUmVzdWx0ID0gZ2VuZXJhdG9yLm5leHQoKTtcbiAgdmFyIGFjY3VtdWxhdG9yID0gW2dlbmVyYXRvclJlc3VsdC52YWx1ZV07XG4gIHdoaWxlIChnZW5lcmF0b3JSZXN1bHQuZG9uZSA9PT0gZmFsc2UpIHtcbiAgICBnZW5lcmF0b3JSZXN1bHQgPSBnZW5lcmF0b3IubmV4dCgpO1xuICAgIGFjY3VtdWxhdG9yLnB1c2goZ2VuZXJhdG9yUmVzdWx0LnZhbHVlKTtcbiAgfVxuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5fX25hbWUoZ2V0R2VuZXJhdG9yRW50cmllcywgXCJnZXRHZW5lcmF0b3JFbnRyaWVzXCIpO1xuZnVuY3Rpb24gZ2V0RW51bWVyYWJsZUtleXModGFyZ2V0KSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4ga2V5cztcbn1cbl9fbmFtZShnZXRFbnVtZXJhYmxlS2V5cywgXCJnZXRFbnVtZXJhYmxlS2V5c1wiKTtcbmZ1bmN0aW9uIGdldEVudW1lcmFibGVTeW1ib2xzKHRhcmdldCkge1xuICB2YXIga2V5cyA9IFtdO1xuICB2YXIgYWxsS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxLZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGtleSA9IGFsbEtleXNbaV07XG4gICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpLmVudW1lcmFibGUpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ga2V5cztcbn1cbl9fbmFtZShnZXRFbnVtZXJhYmxlU3ltYm9scywgXCJnZXRFbnVtZXJhYmxlU3ltYm9sc1wiKTtcbmZ1bmN0aW9uIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGtleXMsIG9wdGlvbnMpIHtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kW2tleXNbaV1dLCByaWdodEhhbmRPcGVyYW5kW2tleXNbaV1dLCBvcHRpb25zKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5fX25hbWUoa2V5c0VxdWFsLCBcImtleXNFcXVhbFwiKTtcbmZ1bmN0aW9uIG9iamVjdEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICB2YXIgbGVmdEhhbmRLZXlzID0gZ2V0RW51bWVyYWJsZUtleXMobGVmdEhhbmRPcGVyYW5kKTtcbiAgdmFyIHJpZ2h0SGFuZEtleXMgPSBnZXRFbnVtZXJhYmxlS2V5cyhyaWdodEhhbmRPcGVyYW5kKTtcbiAgdmFyIGxlZnRIYW5kU3ltYm9scyA9IGdldEVudW1lcmFibGVTeW1ib2xzKGxlZnRIYW5kT3BlcmFuZCk7XG4gIHZhciByaWdodEhhbmRTeW1ib2xzID0gZ2V0RW51bWVyYWJsZVN5bWJvbHMocmlnaHRIYW5kT3BlcmFuZCk7XG4gIGxlZnRIYW5kS2V5cyA9IGxlZnRIYW5kS2V5cy5jb25jYXQobGVmdEhhbmRTeW1ib2xzKTtcbiAgcmlnaHRIYW5kS2V5cyA9IHJpZ2h0SGFuZEtleXMuY29uY2F0KHJpZ2h0SGFuZFN5bWJvbHMpO1xuICBpZiAobGVmdEhhbmRLZXlzLmxlbmd0aCAmJiBsZWZ0SGFuZEtleXMubGVuZ3RoID09PSByaWdodEhhbmRLZXlzLmxlbmd0aCkge1xuICAgIGlmIChpdGVyYWJsZUVxdWFsKG1hcFN5bWJvbHMobGVmdEhhbmRLZXlzKS5zb3J0KCksIG1hcFN5bWJvbHMocmlnaHRIYW5kS2V5cykuc29ydCgpKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGxlZnRIYW5kS2V5cywgb3B0aW9ucyk7XG4gIH1cbiAgdmFyIGxlZnRIYW5kRW50cmllcyA9IGdldEl0ZXJhdG9yRW50cmllcyhsZWZ0SGFuZE9wZXJhbmQpO1xuICB2YXIgcmlnaHRIYW5kRW50cmllcyA9IGdldEl0ZXJhdG9yRW50cmllcyhyaWdodEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kRW50cmllcy5sZW5ndGggJiYgbGVmdEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gcmlnaHRIYW5kRW50cmllcy5sZW5ndGgpIHtcbiAgICBsZWZ0SGFuZEVudHJpZXMuc29ydCgpO1xuICAgIHJpZ2h0SGFuZEVudHJpZXMuc29ydCgpO1xuICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKGxlZnRIYW5kRW50cmllcywgcmlnaHRIYW5kRW50cmllcywgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKGxlZnRIYW5kS2V5cy5sZW5ndGggPT09IDAgJiYgbGVmdEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gMCAmJiByaWdodEhhbmRLZXlzLmxlbmd0aCA9PT0gMCAmJiByaWdodEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbl9fbmFtZShvYmplY3RFcXVhbCwgXCJvYmplY3RFcXVhbFwiKTtcbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCI7XG59XG5fX25hbWUoaXNQcmltaXRpdmUsIFwiaXNQcmltaXRpdmVcIik7XG5mdW5jdGlvbiBtYXBTeW1ib2xzKGFycikge1xuICByZXR1cm4gYXJyLm1hcCgvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIG1hcFN5bWJvbChlbnRyeSkge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgIHJldHVybiBlbnRyeS50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG4gIH0sIFwibWFwU3ltYm9sXCIpKTtcbn1cbl9fbmFtZShtYXBTeW1ib2xzLCBcIm1hcFN5bWJvbHNcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9wYXRodmFsL2luZGV4LmpzXG5mdW5jdGlvbiBoYXNQcm9wZXJ0eShvYmosIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgfHwgb2JqID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBuYW1lIGluIE9iamVjdChvYmopO1xufVxuX19uYW1lKGhhc1Byb3BlcnR5LCBcImhhc1Byb3BlcnR5XCIpO1xuZnVuY3Rpb24gcGFyc2VQYXRoKHBhdGgpIHtcbiAgY29uc3Qgc3RyID0gcGF0aC5yZXBsYWNlKC8oW15cXFxcXSlcXFsvZywgXCIkMS5bXCIpO1xuICBjb25zdCBwYXJ0cyA9IHN0ci5tYXRjaCgvKFxcXFxcXC58W14uXSs/KSsvZyk7XG4gIHJldHVybiBwYXJ0cy5tYXAoKHZhbHVlKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBcImNvbnN0cnVjdG9yXCIgfHwgdmFsdWUgPT09IFwiX19wcm90b19fXCIgfHwgdmFsdWUgPT09IFwicHJvdG90eXBlXCIpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcmVnZXhwID0gL15cXFsoXFxkKylcXF0kLztcbiAgICBjb25zdCBtQXJyID0gcmVnZXhwLmV4ZWModmFsdWUpO1xuICAgIGxldCBwYXJzZWQgPSBudWxsO1xuICAgIGlmIChtQXJyKSB7XG4gICAgICBwYXJzZWQgPSB7IGk6IHBhcnNlRmxvYXQobUFyclsxXSkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkID0geyBwOiB2YWx1ZS5yZXBsYWNlKC9cXFxcKFsuW1xcXV0pL2csIFwiJDFcIikgfTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSk7XG59XG5fX25hbWUocGFyc2VQYXRoLCBcInBhcnNlUGF0aFwiKTtcbmZ1bmN0aW9uIGludGVybmFsR2V0UGF0aFZhbHVlKG9iaiwgcGFyc2VkLCBwYXRoRGVwdGgpIHtcbiAgbGV0IHRlbXBvcmFyeVZhbHVlID0gb2JqO1xuICBsZXQgcmVzID0gbnVsbDtcbiAgcGF0aERlcHRoID0gdHlwZW9mIHBhdGhEZXB0aCA9PT0gXCJ1bmRlZmluZWRcIiA/IHBhcnNlZC5sZW5ndGggOiBwYXRoRGVwdGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aERlcHRoOyBpKyspIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFyc2VkW2ldO1xuICAgIGlmICh0ZW1wb3JhcnlWYWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwYXJ0LnAgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgdGVtcG9yYXJ5VmFsdWUgPSB0ZW1wb3JhcnlWYWx1ZVtwYXJ0LmldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVtcG9yYXJ5VmFsdWUgPSB0ZW1wb3JhcnlWYWx1ZVtwYXJ0LnBdO1xuICAgICAgfVxuICAgICAgaWYgKGkgPT09IHBhdGhEZXB0aCAtIDEpIHtcbiAgICAgICAgcmVzID0gdGVtcG9yYXJ5VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5fX25hbWUoaW50ZXJuYWxHZXRQYXRoVmFsdWUsIFwiaW50ZXJuYWxHZXRQYXRoVmFsdWVcIik7XG5mdW5jdGlvbiBnZXRQYXRoSW5mbyhvYmosIHBhdGgpIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VQYXRoKHBhdGgpO1xuICBjb25zdCBsYXN0ID0gcGFyc2VkW3BhcnNlZC5sZW5ndGggLSAxXTtcbiAgY29uc3QgaW5mbyA9IHtcbiAgICBwYXJlbnQ6IHBhcnNlZC5sZW5ndGggPiAxID8gaW50ZXJuYWxHZXRQYXRoVmFsdWUob2JqLCBwYXJzZWQsIHBhcnNlZC5sZW5ndGggLSAxKSA6IG9iaixcbiAgICBuYW1lOiBsYXN0LnAgfHwgbGFzdC5pLFxuICAgIHZhbHVlOiBpbnRlcm5hbEdldFBhdGhWYWx1ZShvYmosIHBhcnNlZClcbiAgfTtcbiAgaW5mby5leGlzdHMgPSBoYXNQcm9wZXJ0eShpbmZvLnBhcmVudCwgaW5mby5uYW1lKTtcbiAgcmV0dXJuIGluZm87XG59XG5fX25hbWUoZ2V0UGF0aEluZm8sIFwiZ2V0UGF0aEluZm9cIik7XG5cbi8vIGxpYi9jaGFpL2Fzc2VydGlvbi5qc1xuZnVuY3Rpb24gQXNzZXJ0aW9uKG9iaiwgbXNnLCBzc2ZpLCBsb2NrU3NmaSkge1xuICBmbGFnKHRoaXMsIFwic3NmaVwiLCBzc2ZpIHx8IEFzc2VydGlvbik7XG4gIGZsYWcodGhpcywgXCJsb2NrU3NmaVwiLCBsb2NrU3NmaSk7XG4gIGZsYWcodGhpcywgXCJvYmplY3RcIiwgb2JqKTtcbiAgZmxhZyh0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgZmxhZyh0aGlzLCBcImVxbFwiLCBjb25maWcuZGVlcEVxdWFsIHx8IGRlZXBfZXFsX2RlZmF1bHQpO1xuICByZXR1cm4gcHJveGlmeSh0aGlzKTtcbn1cbl9fbmFtZShBc3NlcnRpb24sIFwiQXNzZXJ0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEFzc2VydGlvbiwgXCJpbmNsdWRlU3RhY2tcIiwge1xuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIGNvbnNvbGUud2FybihcIkFzc2VydGlvbi5pbmNsdWRlU3RhY2sgaXMgZGVwcmVjYXRlZCwgdXNlIGNoYWkuY29uZmlnLmluY2x1ZGVTdGFjayBpbnN0ZWFkLlwiKTtcbiAgICByZXR1cm4gY29uZmlnLmluY2x1ZGVTdGFjaztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIGNvbnNvbGUud2FybihcIkFzc2VydGlvbi5pbmNsdWRlU3RhY2sgaXMgZGVwcmVjYXRlZCwgdXNlIGNoYWkuY29uZmlnLmluY2x1ZGVTdGFjayBpbnN0ZWFkLlwiKTtcbiAgICBjb25maWcuaW5jbHVkZVN0YWNrID0gdmFsdWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEFzc2VydGlvbiwgXCJzaG93RGlmZlwiLCB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgY29uc29sZS53YXJuKFwiQXNzZXJ0aW9uLnNob3dEaWZmIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5zaG93RGlmZiBpbnN0ZWFkLlwiKTtcbiAgICByZXR1cm4gY29uZmlnLnNob3dEaWZmO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgY29uc29sZS53YXJuKFwiQXNzZXJ0aW9uLnNob3dEaWZmIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5zaG93RGlmZiBpbnN0ZWFkLlwiKTtcbiAgICBjb25maWcuc2hvd0RpZmYgPSB2YWx1ZTtcbiAgfVxufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkgPSBmdW5jdGlvbihuYW1lLCBmbikge1xuICBhZGRQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4pO1xufTtcbkFzc2VydGlvbi5hZGRNZXRob2QgPSBmdW5jdGlvbihuYW1lLCBmbikge1xuICBhZGRNZXRob2QodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbn07XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kID0gZnVuY3Rpb24obmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgYWRkQ2hhaW5hYmxlTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcik7XG59O1xuQXNzZXJ0aW9uLm92ZXJ3cml0ZVByb3BlcnR5ID0gZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgb3ZlcndyaXRlUHJvcGVydHkodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbn07XG5Bc3NlcnRpb24ub3ZlcndyaXRlTWV0aG9kID0gZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgb3ZlcndyaXRlTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG59O1xuQXNzZXJ0aW9uLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCA9IGZ1bmN0aW9uKG5hbWUsIGZuLCBjaGFpbmluZ0JlaGF2aW9yKSB7XG4gIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpO1xufTtcbkFzc2VydGlvbi5wcm90b3R5cGUuYXNzZXJ0ID0gZnVuY3Rpb24oZXhwciwgbXNnLCBuZWdhdGVNc2csIGV4cGVjdGVkLCBfYWN0dWFsLCBzaG93RGlmZikge1xuICB2YXIgb2sgPSB0ZXN0KHRoaXMsIGFyZ3VtZW50cyk7XG4gIGlmIChmYWxzZSAhPT0gc2hvd0RpZmYpXG4gICAgc2hvd0RpZmYgPSB0cnVlO1xuICBpZiAodm9pZCAwID09PSBleHBlY3RlZCAmJiB2b2lkIDAgPT09IF9hY3R1YWwpXG4gICAgc2hvd0RpZmYgPSBmYWxzZTtcbiAgaWYgKHRydWUgIT09IGNvbmZpZy5zaG93RGlmZilcbiAgICBzaG93RGlmZiA9IGZhbHNlO1xuICBpZiAoIW9rKSB7XG4gICAgbXNnID0gZ2V0TWVzc2FnZTIodGhpcywgYXJndW1lbnRzKTtcbiAgICB2YXIgYWN0dWFsID0gZ2V0QWN0dWFsKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdmFyIGFzc2VydGlvbkVycm9yT2JqZWN0UHJvcGVydGllcyA9IHtcbiAgICAgIGFjdHVhbCxcbiAgICAgIGV4cGVjdGVkLFxuICAgICAgc2hvd0RpZmZcbiAgICB9O1xuICAgIHZhciBvcGVyYXRvciA9IGdldE9wZXJhdG9yKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKG9wZXJhdG9yKSB7XG4gICAgICBhc3NlcnRpb25FcnJvck9iamVjdFByb3BlcnRpZXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgbXNnLFxuICAgICAgYXNzZXJ0aW9uRXJyb3JPYmplY3RQcm9wZXJ0aWVzLFxuICAgICAgY29uZmlnLmluY2x1ZGVTdGFjayA/IHRoaXMuYXNzZXJ0IDogZmxhZyh0aGlzLCBcInNzZmlcIilcbiAgICApO1xuICB9XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICBBc3NlcnRpb24ucHJvdG90eXBlLFxuICBcIl9vYmpcIixcbiAge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZmxhZyh0aGlzLCBcIm9iamVjdFwiKTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgICBmbGFnKHRoaXMsIFwib2JqZWN0XCIsIHZhbCk7XG4gICAgfVxuICB9XG4pO1xuXG4vLyBsaWIvY2hhaS91dGlscy9pc1Byb3h5RW5hYmxlZC5qc1xuZnVuY3Rpb24gaXNQcm94eUVuYWJsZWQoKSB7XG4gIHJldHVybiBjb25maWcudXNlUHJveHkgJiYgdHlwZW9mIFByb3h5ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiO1xufVxuX19uYW1lKGlzUHJveHlFbmFibGVkLCBcImlzUHJveHlFbmFibGVkXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9hZGRQcm9wZXJ0eS5qc1xuZnVuY3Rpb24gYWRkUHJvcGVydHkoY3R4LCBuYW1lLCBnZXR0ZXIpIHtcbiAgZ2V0dGVyID0gZ2V0dGVyID09PSB2b2lkIDAgPyBmdW5jdGlvbigpIHtcbiAgfSA6IGdldHRlcjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgIGN0eCxcbiAgICBuYW1lLFxuICAgIHtcbiAgICAgIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwcm9wZXJ0eUdldHRlcigpIHtcbiAgICAgICAgaWYgKCFpc1Byb3h5RW5hYmxlZCgpICYmICFmbGFnKHRoaXMsIFwibG9ja1NzZmlcIikpIHtcbiAgICAgICAgICBmbGFnKHRoaXMsIFwic3NmaVwiLCBwcm9wZXJ0eUdldHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3VsdCA9IGdldHRlci5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgICAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICAgICAgfSwgXCJwcm9wZXJ0eUdldHRlclwiKSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgKTtcbn1cbl9fbmFtZShhZGRQcm9wZXJ0eSwgXCJhZGRQcm9wZXJ0eVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvYWRkTGVuZ3RoR3VhcmQuanNcbnZhciBmbkxlbmd0aERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZ1bmN0aW9uKCkge1xufSwgXCJsZW5ndGhcIik7XG5mdW5jdGlvbiBhZGRMZW5ndGhHdWFyZChmbiwgYXNzZXJ0aW9uTmFtZSwgaXNDaGFpbmFibGUpIHtcbiAgaWYgKCFmbkxlbmd0aERlc2MuY29uZmlndXJhYmxlKVxuICAgIHJldHVybiBmbjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChpc0NoYWluYWJsZSkge1xuICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgQ2hhaSBwcm9wZXJ0eTogXCIgKyBhc3NlcnRpb25OYW1lICsgJy5sZW5ndGguIER1ZSB0byBhIGNvbXBhdGliaWxpdHkgaXNzdWUsIFwibGVuZ3RoXCIgY2Fubm90IGRpcmVjdGx5IGZvbGxvdyBcIicgKyBhc3NlcnRpb25OYW1lICsgJ1wiLiBVc2UgXCInICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoT2ZcIiBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoLiBTZWUgZG9jcyBmb3IgcHJvcGVyIHVzYWdlIG9mIFwiJyArIGFzc2VydGlvbk5hbWUgKyAnXCIuJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZuO1xufVxuX19uYW1lKGFkZExlbmd0aEd1YXJkLCBcImFkZExlbmd0aEd1YXJkXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9nZXRQcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiBnZXRQcm9wZXJ0aWVzKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KTtcbiAgZnVuY3Rpb24gYWRkUHJvcGVydHkyKHByb3BlcnR5KSB7XG4gICAgaWYgKHJlc3VsdC5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHByb3BlcnR5KTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKGFkZFByb3BlcnR5MiwgXCJhZGRQcm9wZXJ0eVwiKTtcbiAgdmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gIHdoaWxlIChwcm90byAhPT0gbnVsbCkge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKS5mb3JFYWNoKGFkZFByb3BlcnR5Mik7XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5fX25hbWUoZ2V0UHJvcGVydGllcywgXCJnZXRQcm9wZXJ0aWVzXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9wcm94aWZ5LmpzXG52YXIgYnVpbHRpbnMgPSBbXCJfX2ZsYWdzXCIsIFwiX19tZXRob2RzXCIsIFwiX29ialwiLCBcImFzc2VydFwiXTtcbmZ1bmN0aW9uIHByb3hpZnkob2JqLCBub25DaGFpbmFibGVNZXRob2ROYW1lKSB7XG4gIGlmICghaXNQcm94eUVuYWJsZWQoKSlcbiAgICByZXR1cm4gb2JqO1xuICByZXR1cm4gbmV3IFByb3h5KG9iaiwge1xuICAgIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwcm94eUdldHRlcih0YXJnZXQsIHByb3BlcnR5KSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSBcInN0cmluZ1wiICYmIGNvbmZpZy5wcm94eUV4Y2x1ZGVkS2V5cy5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEgJiYgIVJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHkpKSB7XG4gICAgICAgIGlmIChub25DaGFpbmFibGVNZXRob2ROYW1lKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgbm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSArIFwiLlwiICsgcHJvcGVydHkgKyAnLiBTZWUgZG9jcyBmb3IgcHJvcGVyIHVzYWdlIG9mIFwiJyArIG5vbkNoYWluYWJsZU1ldGhvZE5hbWUgKyAnXCIuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN1Z2dlc3Rpb24gPSBudWxsO1xuICAgICAgICB2YXIgc3VnZ2VzdGlvbkRpc3RhbmNlID0gNDtcbiAgICAgICAgZ2V0UHJvcGVydGllcyh0YXJnZXQpLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiBidWlsdGlucy5pbmRleE9mKHByb3ApID09PSAtMSkge1xuICAgICAgICAgICAgdmFyIGRpc3QgPSBzdHJpbmdEaXN0YW5jZUNhcHBlZChcbiAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICAgIHByb3AsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25EaXN0YW5jZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChkaXN0IDwgc3VnZ2VzdGlvbkRpc3RhbmNlKSB7XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24gPSBwcm9wO1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uRGlzdGFuY2UgPSBkaXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChzdWdnZXN0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgcHJvcGVydHkgKyAnLiBEaWQgeW91IG1lYW4gXCInICsgc3VnZ2VzdGlvbiArICdcIj8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgQ2hhaSBwcm9wZXJ0eTogXCIgKyBwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChidWlsdGlucy5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEgJiYgIWZsYWcodGFyZ2V0LCBcImxvY2tTc2ZpXCIpKSB7XG4gICAgICAgIGZsYWcodGFyZ2V0LCBcInNzZmlcIiwgcHJveHlHZXR0ZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHkpO1xuICAgIH0sIFwicHJveHlHZXR0ZXJcIilcbiAgfSk7XG59XG5fX25hbWUocHJveGlmeSwgXCJwcm94aWZ5XCIpO1xuZnVuY3Rpb24gc3RyaW5nRGlzdGFuY2VDYXBwZWQoc3RyQSwgc3RyQiwgY2FwKSB7XG4gIGlmIChNYXRoLmFicyhzdHJBLmxlbmd0aCAtIHN0ckIubGVuZ3RoKSA+PSBjYXApIHtcbiAgICByZXR1cm4gY2FwO1xuICB9XG4gIHZhciBtZW1vID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDw9IHN0ckEubGVuZ3RoOyBpKyspIHtcbiAgICBtZW1vW2ldID0gQXJyYXkoc3RyQi5sZW5ndGggKyAxKS5maWxsKDApO1xuICAgIG1lbW9baV1bMF0gPSBpO1xuICB9XG4gIGZvciAodmFyIGogPSAwOyBqIDwgc3RyQi5sZW5ndGg7IGorKykge1xuICAgIG1lbW9bMF1bal0gPSBqO1xuICB9XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHN0ckEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2ggPSBzdHJBLmNoYXJDb2RlQXQoaSAtIDEpO1xuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IHN0ckIubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChNYXRoLmFicyhpIC0gaikgPj0gY2FwKSB7XG4gICAgICAgIG1lbW9baV1bal0gPSBjYXA7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbWVtb1tpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICBtZW1vW2kgLSAxXVtqXSArIDEsXG4gICAgICAgIG1lbW9baV1baiAtIDFdICsgMSxcbiAgICAgICAgbWVtb1tpIC0gMV1baiAtIDFdICsgKGNoID09PSBzdHJCLmNoYXJDb2RlQXQoaiAtIDEpID8gMCA6IDEpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWVtb1tzdHJBLmxlbmd0aF1bc3RyQi5sZW5ndGhdO1xufVxuX19uYW1lKHN0cmluZ0Rpc3RhbmNlQ2FwcGVkLCBcInN0cmluZ0Rpc3RhbmNlQ2FwcGVkXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9hZGRNZXRob2QuanNcbmZ1bmN0aW9uIGFkZE1ldGhvZChjdHgsIG5hbWUsIG1ldGhvZCkge1xuICB2YXIgbWV0aG9kV3JhcHBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgaWYgKCFmbGFnKHRoaXMsIFwibG9ja1NzZmlcIikpIHtcbiAgICAgIGZsYWcodGhpcywgXCJzc2ZpXCIsIG1ldGhvZFdyYXBwZXIpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICB9LCBcIm1ldGhvZFdyYXBwZXJcIik7XG4gIGFkZExlbmd0aEd1YXJkKG1ldGhvZFdyYXBwZXIsIG5hbWUsIGZhbHNlKTtcbiAgY3R4W25hbWVdID0gcHJveGlmeShtZXRob2RXcmFwcGVyLCBuYW1lKTtcbn1cbl9fbmFtZShhZGRNZXRob2QsIFwiYWRkTWV0aG9kXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9vdmVyd3JpdGVQcm9wZXJ0eS5qc1xuZnVuY3Rpb24gb3ZlcndyaXRlUHJvcGVydHkoY3R4LCBuYW1lLCBnZXR0ZXIpIHtcbiAgdmFyIF9nZXQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN0eCwgbmFtZSksIF9zdXBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIH0sIFwiX3N1cGVyXCIpO1xuICBpZiAoX2dldCAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfZ2V0LmdldClcbiAgICBfc3VwZXIgPSBfZ2V0LmdldDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgIGN0eCxcbiAgICBuYW1lLFxuICAgIHtcbiAgICAgIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBvdmVyd3JpdGluZ1Byb3BlcnR5R2V0dGVyKCkge1xuICAgICAgICBpZiAoIWlzUHJveHlFbmFibGVkKCkgJiYgIWZsYWcodGhpcywgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgICAgIGZsYWcodGhpcywgXCJzc2ZpXCIsIG92ZXJ3cml0aW5nUHJvcGVydHlHZXR0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvcmlnTG9ja1NzZmkgPSBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIik7XG4gICAgICAgIGZsYWcodGhpcywgXCJsb2NrU3NmaVwiLCB0cnVlKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGdldHRlcihfc3VwZXIpLmNhbGwodGhpcyk7XG4gICAgICAgIGZsYWcodGhpcywgXCJsb2NrU3NmaVwiLCBvcmlnTG9ja1NzZmkpO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICAgICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgICAgIH0sIFwib3ZlcndyaXRpbmdQcm9wZXJ0eUdldHRlclwiKSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgKTtcbn1cbl9fbmFtZShvdmVyd3JpdGVQcm9wZXJ0eSwgXCJvdmVyd3JpdGVQcm9wZXJ0eVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlTWV0aG9kLmpzXG5mdW5jdGlvbiBvdmVyd3JpdGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QpIHtcbiAgdmFyIF9tZXRob2QgPSBjdHhbbmFtZV0sIF9zdXBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG5hbWUgKyBcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgfSwgXCJfc3VwZXJcIik7XG4gIGlmIChfbWV0aG9kICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9tZXRob2QpXG4gICAgX3N1cGVyID0gX21ldGhvZDtcbiAgdmFyIG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgaWYgKCFmbGFnKHRoaXMsIFwibG9ja1NzZmlcIikpIHtcbiAgICAgIGZsYWcodGhpcywgXCJzc2ZpXCIsIG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlcik7XG4gICAgfVxuICAgIHZhciBvcmlnTG9ja1NzZmkgPSBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIik7XG4gICAgZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIsIHRydWUpO1xuICAgIHZhciByZXN1bHQgPSBtZXRob2QoX3N1cGVyKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGZsYWcodGhpcywgXCJsb2NrU3NmaVwiLCBvcmlnTG9ja1NzZmkpO1xuICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgfSwgXCJvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXJcIik7XG4gIGFkZExlbmd0aEd1YXJkKG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlciwgbmFtZSwgZmFsc2UpO1xuICBjdHhbbmFtZV0gPSBwcm94aWZ5KG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlciwgbmFtZSk7XG59XG5fX25hbWUob3ZlcndyaXRlTWV0aG9kLCBcIm92ZXJ3cml0ZU1ldGhvZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvYWRkQ2hhaW5hYmxlTWV0aG9kLmpzXG52YXIgY2FuU2V0UHJvdG90eXBlID0gdHlwZW9mIE9iamVjdC5zZXRQcm90b3R5cGVPZiA9PT0gXCJmdW5jdGlvblwiO1xudmFyIHRlc3RGbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG59LCBcInRlc3RGblwiKTtcbnZhciBleGNsdWRlTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0Rm4pLmZpbHRlcihmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBwcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGVzdEZuLCBuYW1lKTtcbiAgaWYgKHR5cGVvZiBwcm9wRGVzYyAhPT0gXCJvYmplY3RcIilcbiAgICByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuICFwcm9wRGVzYy5jb25maWd1cmFibGU7XG59KTtcbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG52YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5mdW5jdGlvbiBhZGRDaGFpbmFibGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QsIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgaWYgKHR5cGVvZiBjaGFpbmluZ0JlaGF2aW9yICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjaGFpbmluZ0JlaGF2aW9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICB9LCBcImNoYWluaW5nQmVoYXZpb3JcIik7XG4gIH1cbiAgdmFyIGNoYWluYWJsZUJlaGF2aW9yID0ge1xuICAgIG1ldGhvZCxcbiAgICBjaGFpbmluZ0JlaGF2aW9yXG4gIH07XG4gIGlmICghY3R4Ll9fbWV0aG9kcykge1xuICAgIGN0eC5fX21ldGhvZHMgPSB7fTtcbiAgfVxuICBjdHguX19tZXRob2RzW25hbWVdID0gY2hhaW5hYmxlQmVoYXZpb3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICBjdHgsXG4gICAgbmFtZSxcbiAgICB7XG4gICAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gY2hhaW5hYmxlTWV0aG9kR2V0dGVyKCkge1xuICAgICAgICBjaGFpbmFibGVCZWhhdmlvci5jaGFpbmluZ0JlaGF2aW9yLmNhbGwodGhpcyk7XG4gICAgICAgIHZhciBjaGFpbmFibGVNZXRob2RXcmFwcGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoIWZsYWcodGhpcywgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgICAgICAgZmxhZyh0aGlzLCBcInNzZmlcIiwgY2hhaW5hYmxlTWV0aG9kV3JhcHBlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciByZXN1bHQgPSBjaGFpbmFibGVCZWhhdmlvci5tZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgICAgICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gICAgICAgIH0sIFwiY2hhaW5hYmxlTWV0aG9kV3JhcHBlclwiKTtcbiAgICAgICAgYWRkTGVuZ3RoR3VhcmQoY2hhaW5hYmxlTWV0aG9kV3JhcHBlciwgbmFtZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChjYW5TZXRQcm90b3R5cGUpIHtcbiAgICAgICAgICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICAgICAgICBwcm90b3R5cGUuY2FsbCA9IGNhbGw7XG4gICAgICAgICAgcHJvdG90eXBlLmFwcGx5ID0gYXBwbHk7XG4gICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGNoYWluYWJsZU1ldGhvZFdyYXBwZXIsIHByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGFzc2VydGVyTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdHgpO1xuICAgICAgICAgIGFzc2VydGVyTmFtZXMuZm9yRWFjaChmdW5jdGlvbihhc3NlcnRlck5hbWUpIHtcbiAgICAgICAgICAgIGlmIChleGNsdWRlTmFtZXMuaW5kZXhPZihhc3NlcnRlck5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN0eCwgYXNzZXJ0ZXJOYW1lKTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGFpbmFibGVNZXRob2RXcmFwcGVyLCBhc3NlcnRlck5hbWUsIHBkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIGNoYWluYWJsZU1ldGhvZFdyYXBwZXIpO1xuICAgICAgICByZXR1cm4gcHJveGlmeShjaGFpbmFibGVNZXRob2RXcmFwcGVyKTtcbiAgICAgIH0sIFwiY2hhaW5hYmxlTWV0aG9kR2V0dGVyXCIpLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICApO1xufVxuX19uYW1lKGFkZENoYWluYWJsZU1ldGhvZCwgXCJhZGRDaGFpbmFibGVNZXRob2RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL292ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZC5qc1xuZnVuY3Rpb24gb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKGN0eCwgbmFtZSwgbWV0aG9kLCBjaGFpbmluZ0JlaGF2aW9yKSB7XG4gIHZhciBjaGFpbmFibGVCZWhhdmlvciA9IGN0eC5fX21ldGhvZHNbbmFtZV07XG4gIHZhciBfY2hhaW5pbmdCZWhhdmlvciA9IGNoYWluYWJsZUJlaGF2aW9yLmNoYWluaW5nQmVoYXZpb3I7XG4gIGNoYWluYWJsZUJlaGF2aW9yLmNoYWluaW5nQmVoYXZpb3IgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIG92ZXJ3cml0aW5nQ2hhaW5hYmxlTWV0aG9kR2V0dGVyKCkge1xuICAgIHZhciByZXN1bHQgPSBjaGFpbmluZ0JlaGF2aW9yKF9jaGFpbmluZ0JlaGF2aW9yKS5jYWxsKHRoaXMpO1xuICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgfSwgXCJvdmVyd3JpdGluZ0NoYWluYWJsZU1ldGhvZEdldHRlclwiKTtcbiAgdmFyIF9tZXRob2QgPSBjaGFpbmFibGVCZWhhdmlvci5tZXRob2Q7XG4gIGNoYWluYWJsZUJlaGF2aW9yLm1ldGhvZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gb3ZlcndyaXRpbmdDaGFpbmFibGVNZXRob2RXcmFwcGVyKCkge1xuICAgIHZhciByZXN1bHQgPSBtZXRob2QoX21ldGhvZCkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gIH0sIFwib3ZlcndyaXRpbmdDaGFpbmFibGVNZXRob2RXcmFwcGVyXCIpO1xufVxuX19uYW1lKG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCwgXCJvdmVyd3JpdGVDaGFpbmFibGVNZXRob2RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2NvbXBhcmVCeUluc3BlY3QuanNcbmZ1bmN0aW9uIGNvbXBhcmVCeUluc3BlY3QoYSwgYikge1xuICByZXR1cm4gaW5zcGVjdDIoYSkgPCBpbnNwZWN0MihiKSA/IC0xIDogMTtcbn1cbl9fbmFtZShjb21wYXJlQnlJbnNwZWN0LCBcImNvbXBhcmVCeUluc3BlY3RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2dldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMuanNcbmZ1bmN0aW9uIGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMob2JqKSB7XG4gIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiBbXTtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKS5maWx0ZXIoZnVuY3Rpb24oc3ltKSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBzeW0pLmVudW1lcmFibGU7XG4gIH0pO1xufVxuX19uYW1lKGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMsIFwiZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9sc1wiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMuanNcbmZ1bmN0aW9uIGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5jb25jYXQoZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyhvYmopKTtcbn1cbl9fbmFtZShnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcywgXCJnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllc1wiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvaXNOYU4uanNcbmZ1bmN0aW9uIF9pc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuX19uYW1lKF9pc05hTiwgXCJfaXNOYU5cIik7XG52YXIgaXNOYU4yID0gTnVtYmVyLmlzTmFOIHx8IF9pc05hTjtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0T3BlcmF0b3IuanNcbmZ1bmN0aW9uIGlzT2JqZWN0VHlwZShvYmopIHtcbiAgdmFyIG9iamVjdFR5cGUgPSB0eXBlKG9iaik7XG4gIHZhciBvYmplY3RUeXBlcyA9IFtcIkFycmF5XCIsIFwiT2JqZWN0XCIsIFwiRnVuY3Rpb25cIl07XG4gIHJldHVybiBvYmplY3RUeXBlcy5pbmRleE9mKG9iamVjdFR5cGUpICE9PSAtMTtcbn1cbl9fbmFtZShpc09iamVjdFR5cGUsIFwiaXNPYmplY3RUeXBlXCIpO1xuZnVuY3Rpb24gZ2V0T3BlcmF0b3Iob2JqLCBhcmdzKSB7XG4gIHZhciBvcGVyYXRvciA9IGZsYWcob2JqLCBcIm9wZXJhdG9yXCIpO1xuICB2YXIgbmVnYXRlID0gZmxhZyhvYmosIFwibmVnYXRlXCIpO1xuICB2YXIgZXhwZWN0ZWQgPSBhcmdzWzNdO1xuICB2YXIgbXNnID0gbmVnYXRlID8gYXJnc1syXSA6IGFyZ3NbMV07XG4gIGlmIChvcGVyYXRvcikge1xuICAgIHJldHVybiBvcGVyYXRvcjtcbiAgfVxuICBpZiAodHlwZW9mIG1zZyA9PT0gXCJmdW5jdGlvblwiKVxuICAgIG1zZyA9IG1zZygpO1xuICBtc2cgPSBtc2cgfHwgXCJcIjtcbiAgaWYgKCFtc2cpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIGlmICgvXFxzaGF2ZVxccy8udGVzdChtc2cpKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICB2YXIgaXNPYmplY3QgPSBpc09iamVjdFR5cGUoZXhwZWN0ZWQpO1xuICBpZiAoL1xcc25vdFxccy8udGVzdChtc2cpKSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0ID8gXCJub3REZWVwU3RyaWN0RXF1YWxcIiA6IFwibm90U3RyaWN0RXF1YWxcIjtcbiAgfVxuICByZXR1cm4gaXNPYmplY3QgPyBcImRlZXBTdHJpY3RFcXVhbFwiIDogXCJzdHJpY3RFcXVhbFwiO1xufVxuX19uYW1lKGdldE9wZXJhdG9yLCBcImdldE9wZXJhdG9yXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9pbmRleC5qc1xuZnVuY3Rpb24gZ2V0TmFtZShmbikge1xuICByZXR1cm4gZm4ubmFtZTtcbn1cbl9fbmFtZShnZXROYW1lLCBcImdldE5hbWVcIik7XG5mdW5jdGlvbiBpc1JlZ0V4cDIob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gXCJbb2JqZWN0IFJlZ0V4cF1cIjtcbn1cbl9fbmFtZShpc1JlZ0V4cDIsIFwiaXNSZWdFeHBcIik7XG5mdW5jdGlvbiBpc051bWVyaWMob2JqKSB7XG4gIHJldHVybiBbXCJOdW1iZXJcIiwgXCJCaWdJbnRcIl0uaW5jbHVkZXModHlwZShvYmopKTtcbn1cbl9fbmFtZShpc051bWVyaWMsIFwiaXNOdW1lcmljXCIpO1xuXG4vLyBsaWIvY2hhaS9jb3JlL2Fzc2VydGlvbnMuanNcbnZhciB7IGZsYWc6IGZsYWcyIH0gPSB1dGlsc19leHBvcnRzO1xuW1xuICBcInRvXCIsXG4gIFwiYmVcIixcbiAgXCJiZWVuXCIsXG4gIFwiaXNcIixcbiAgXCJhbmRcIixcbiAgXCJoYXNcIixcbiAgXCJoYXZlXCIsXG4gIFwid2l0aFwiLFxuICBcInRoYXRcIixcbiAgXCJ3aGljaFwiLFxuICBcImF0XCIsXG4gIFwib2ZcIixcbiAgXCJzYW1lXCIsXG4gIFwiYnV0XCIsXG4gIFwiZG9lc1wiLFxuICBcInN0aWxsXCIsXG4gIFwiYWxzb1wiXG5dLmZvckVhY2goZnVuY3Rpb24oY2hhaW4pIHtcbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KGNoYWluKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwibm90XCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiLCB0cnVlKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZGVlcFwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJkZWVwXCIsIHRydWUpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJuZXN0ZWRcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwibmVzdGVkXCIsIHRydWUpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJvd25cIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwib3duXCIsIHRydWUpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJvcmRlcmVkXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcIm9yZGVyZWRcIiwgdHJ1ZSk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImFueVwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJhbnlcIiwgdHJ1ZSk7XG4gIGZsYWcyKHRoaXMsIFwiYWxsXCIsIGZhbHNlKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiYWxsXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcImFsbFwiLCB0cnVlKTtcbiAgZmxhZzIodGhpcywgXCJhbnlcIiwgZmFsc2UpO1xufSk7XG52YXIgZnVuY3Rpb25UeXBlcyA9IHtcbiAgXCJmdW5jdGlvblwiOiBbXCJmdW5jdGlvblwiLCBcImFzeW5jZnVuY3Rpb25cIiwgXCJnZW5lcmF0b3JmdW5jdGlvblwiLCBcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIl0sXG4gIFwiYXN5bmNmdW5jdGlvblwiOiBbXCJhc3luY2Z1bmN0aW9uXCIsIFwiYXN5bmNnZW5lcmF0b3JmdW5jdGlvblwiXSxcbiAgXCJnZW5lcmF0b3JmdW5jdGlvblwiOiBbXCJnZW5lcmF0b3JmdW5jdGlvblwiLCBcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIl0sXG4gIFwiYXN5bmNnZW5lcmF0b3JmdW5jdGlvblwiOiBbXCJhc3luY2dlbmVyYXRvcmZ1bmN0aW9uXCJdXG59O1xuZnVuY3Rpb24gYW4odHlwZTMsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB0eXBlMyA9IHR5cGUzLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgYXJ0aWNsZSA9IH5bXCJhXCIsIFwiZVwiLCBcImlcIiwgXCJvXCIsIFwidVwiXS5pbmRleE9mKHR5cGUzLmNoYXJBdCgwKSkgPyBcImFuIFwiIDogXCJhIFwiO1xuICBjb25zdCBkZXRlY3RlZFR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGZ1bmN0aW9uVHlwZXNbXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlMykpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGZ1bmN0aW9uVHlwZXNbdHlwZTNdLmluY2x1ZGVzKGRldGVjdGVkVHlwZSksXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgXCIgKyBhcnRpY2xlICsgdHlwZTMsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIFwiICsgYXJ0aWNsZSArIHR5cGUzXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIHR5cGUzID09PSBkZXRlY3RlZFR5cGUsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgXCIgKyBhcnRpY2xlICsgdHlwZTMsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIFwiICsgYXJ0aWNsZSArIHR5cGUzXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFuLCBcImFuXCIpO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImFuXCIsIGFuKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJhXCIsIGFuKTtcbmZ1bmN0aW9uIFNhbWVWYWx1ZVplcm8oYSwgYikge1xuICByZXR1cm4gaXNOYU4yKGEpICYmIGlzTmFOMihiKSB8fCBhID09PSBiO1xufVxuX19uYW1lKFNhbWVWYWx1ZVplcm8sIFwiU2FtZVZhbHVlWmVyb1wiKTtcbmZ1bmN0aW9uIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKCkge1xuICBmbGFnMih0aGlzLCBcImNvbnRhaW5zXCIsIHRydWUpO1xufVxuX19uYW1lKGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yLCBcImluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yXCIpO1xuZnVuY3Rpb24gaW5jbHVkZSh2YWwsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgbmVnYXRlID0gZmxhZzIodGhpcywgXCJuZWdhdGVcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGlzRGVlcCA9IGZsYWcyKHRoaXMsIFwiZGVlcFwiKSwgZGVzY3JpcHRvciA9IGlzRGVlcCA/IFwiZGVlcCBcIiA6IFwiXCIsIGlzRXFsID0gaXNEZWVwID8gZmxhZzIodGhpcywgXCJlcWxcIikgOiBTYW1lVmFsdWVaZXJvO1xuICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiO1xuICB2YXIgaW5jbHVkZWQgPSBmYWxzZTtcbiAgc3dpdGNoIChvYmpUeXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgaW5jbHVkZWQgPSBvYmouaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ3ZWFrc2V0XCI6XG4gICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICBmbGFnTXNnICsgXCJ1bmFibGUgdG8gdXNlIC5kZWVwLmluY2x1ZGUgd2l0aCBXZWFrU2V0XCIsXG4gICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgIHNzZmlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGluY2x1ZGVkID0gb2JqLmhhcyh2YWwpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm1hcFwiOlxuICAgICAgb2JqLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICBpbmNsdWRlZCA9IGluY2x1ZGVkIHx8IGlzRXFsKGl0ZW0sIHZhbCk7XG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgb2JqLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgIGluY2x1ZGVkID0gaW5jbHVkZWQgfHwgaXNFcWwoaXRlbSwgdmFsKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmNsdWRlZCA9IG9iai5oYXModmFsKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICBpbmNsdWRlZCA9IG9iai5zb21lKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gaXNFcWwoaXRlbSwgdmFsKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmNsdWRlZCA9IG9iai5pbmRleE9mKHZhbCkgIT09IC0xO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh2YWwgIT09IE9iamVjdCh2YWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICBmbGFnTXNnICsgXCJ0aGUgZ2l2ZW4gY29tYmluYXRpb24gb2YgYXJndW1lbnRzIChcIiArIG9ialR5cGUgKyBcIiBhbmQgXCIgKyB0eXBlKHZhbCkudG9Mb3dlckNhc2UoKSArIFwiKSBpcyBpbnZhbGlkIGZvciB0aGlzIGFzc2VydGlvbi4gWW91IGNhbiB1c2UgYW4gYXJyYXksIGEgbWFwLCBhbiBvYmplY3QsIGEgc2V0LCBhIHN0cmluZywgb3IgYSB3ZWFrc2V0IGluc3RlYWQgb2YgYSBcIiArIHR5cGUodmFsKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcHMgPSBPYmplY3Qua2V5cyh2YWwpLCBmaXJzdEVyciA9IG51bGwsIG51bUVycnMgPSAwO1xuICAgICAgcHJvcHMuZm9yRWFjaChmdW5jdGlvbihwcm9wKSB7XG4gICAgICAgIHZhciBwcm9wQXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbihvYmopO1xuICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIHByb3BBc3NlcnRpb24sIHRydWUpO1xuICAgICAgICBmbGFnMihwcm9wQXNzZXJ0aW9uLCBcImxvY2tTc2ZpXCIsIHRydWUpO1xuICAgICAgICBpZiAoIW5lZ2F0ZSB8fCBwcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBwcm9wQXNzZXJ0aW9uLnByb3BlcnR5KHByb3AsIHZhbFtwcm9wXSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcHJvcEFzc2VydGlvbi5wcm9wZXJ0eShwcm9wLCB2YWxbcHJvcF0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAoIWNoZWNrX2Vycm9yX2V4cG9ydHMuY29tcGF0aWJsZUNvbnN0cnVjdG9yKGVyciwgQXNzZXJ0aW9uRXJyb3IpKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaXJzdEVyciA9PT0gbnVsbClcbiAgICAgICAgICAgIGZpcnN0RXJyID0gZXJyO1xuICAgICAgICAgIG51bUVycnMrKztcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcyk7XG4gICAgICBpZiAobmVnYXRlICYmIHByb3BzLmxlbmd0aCA+IDEgJiYgbnVtRXJycyA9PT0gcHJvcHMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IGZpcnN0RXJyO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICB9XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGluY2x1ZGVkLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBcIiArIGRlc2NyaXB0b3IgKyBcImluY2x1ZGUgXCIgKyBpbnNwZWN0Mih2YWwpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgXCIgKyBkZXNjcmlwdG9yICsgXCJpbmNsdWRlIFwiICsgaW5zcGVjdDIodmFsKVxuICApO1xufVxuX19uYW1lKGluY2x1ZGUsIFwiaW5jbHVkZVwiKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJpbmNsdWRlXCIsIGluY2x1ZGUsIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJjb250YWluXCIsIGluY2x1ZGUsIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJjb250YWluc1wiLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiaW5jbHVkZXNcIiwgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwib2tcIiwgZnVuY3Rpb24oKSB7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB0cnV0aHlcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc3lcIlxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJ0cnVlXCIsIGZ1bmN0aW9uKCkge1xuICB0aGlzLmFzc2VydChcbiAgICB0cnVlID09PSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgdHJ1ZVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmYWxzZVwiLFxuICAgIGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpID8gZmFsc2UgOiB0cnVlXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm51bWVyaWNcIiwgZnVuY3Rpb24oKSB7XG4gIGNvbnN0IG9iamVjdCA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB0aGlzLmFzc2VydChcbiAgICBbXCJOdW1iZXJcIiwgXCJCaWdJbnRcIl0uaW5jbHVkZXModHlwZShvYmplY3QpKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgbnVtZXJpY1wiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgbnVtZXJpY1wiLFxuICAgIGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpID8gZmFsc2UgOiB0cnVlXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImNhbGxhYmxlXCIsIGZ1bmN0aW9uKCkge1xuICBjb25zdCB2YWwgPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgY29uc3Qgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgY29uc3QgbWVzc2FnZSA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKTtcbiAgY29uc3QgbXNnID0gbWVzc2FnZSA/IGAke21lc3NhZ2V9OiBgIDogXCJcIjtcbiAgY29uc3QgbmVnYXRlID0gZmxhZzIodGhpcywgXCJuZWdhdGVcIik7XG4gIGNvbnN0IGFzc2VydGlvbk1lc3NhZ2UgPSBuZWdhdGUgPyBgJHttc2d9ZXhwZWN0ZWQgJHtpbnNwZWN0Mih2YWwpfSBub3QgdG8gYmUgYSBjYWxsYWJsZSBmdW5jdGlvbmAgOiBgJHttc2d9ZXhwZWN0ZWQgJHtpbnNwZWN0Mih2YWwpfSB0byBiZSBhIGNhbGxhYmxlIGZ1bmN0aW9uYDtcbiAgY29uc3QgaXNDYWxsYWJsZSA9IFtcIkZ1bmN0aW9uXCIsIFwiQXN5bmNGdW5jdGlvblwiLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIsIFwiQXN5bmNHZW5lcmF0b3JGdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlKHZhbCkpO1xuICBpZiAoaXNDYWxsYWJsZSAmJiBuZWdhdGUgfHwgIWlzQ2FsbGFibGUgJiYgIW5lZ2F0ZSkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIGFzc2VydGlvbk1lc3NhZ2UsXG4gICAgICB2b2lkIDAsXG4gICAgICBzc2ZpXG4gICAgKTtcbiAgfVxufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJmYWxzZVwiLCBmdW5jdGlvbigpIHtcbiAgdGhpcy5hc3NlcnQoXG4gICAgZmFsc2UgPT09IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmYWxzZVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB0cnVlXCIsXG4gICAgZmxhZzIodGhpcywgXCJuZWdhdGVcIikgPyB0cnVlIDogZmFsc2VcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwibnVsbFwiLCBmdW5jdGlvbigpIHtcbiAgdGhpcy5hc3NlcnQoXG4gICAgbnVsbCA9PT0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIG51bGxcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIG51bGxcIlxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJ1bmRlZmluZWRcIiwgZnVuY3Rpb24oKSB7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHZvaWQgMCA9PT0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIHVuZGVmaW5lZFwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgdW5kZWZpbmVkXCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiTmFOXCIsIGZ1bmN0aW9uKCkge1xuICB0aGlzLmFzc2VydChcbiAgICBpc05hTjIoZmxhZzIodGhpcywgXCJvYmplY3RcIikpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBOYU5cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIE5hTlwiXG4gICk7XG59KTtcbmZ1bmN0aW9uIGFzc2VydEV4aXN0KCkge1xuICB2YXIgdmFsID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHZvaWQgMCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZXhpc3RcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGV4aXN0XCJcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRFeGlzdCwgXCJhc3NlcnRFeGlzdFwiKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImV4aXN0XCIsIGFzc2VydEV4aXN0KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImV4aXN0c1wiLCBhc3NlcnRFeGlzdCk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJlbXB0eVwiLCBmdW5jdGlvbigpIHtcbiAgdmFyIHZhbCA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBpdGVtc0NvdW50O1xuICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiO1xuICBzd2l0Y2ggKHR5cGUodmFsKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSBcImFycmF5XCI6XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgaXRlbXNDb3VudCA9IHZhbC5sZW5ndGg7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibWFwXCI6XG4gICAgY2FzZSBcInNldFwiOlxuICAgICAgaXRlbXNDb3VudCA9IHZhbC5zaXplO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIndlYWttYXBcIjpcbiAgICBjYXNlIFwid2Vha3NldFwiOlxuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBmbGFnTXNnICsgXCIuZW1wdHkgd2FzIHBhc3NlZCBhIHdlYWsgY29sbGVjdGlvblwiLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHNzZmlcbiAgICAgICk7XG4gICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICB2YXIgbXNnID0gZmxhZ01zZyArIFwiLmVtcHR5IHdhcyBwYXNzZWQgYSBmdW5jdGlvbiBcIiArIGdldE5hbWUodmFsKTtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtc2cudHJpbSgpLCB2b2lkIDAsIHNzZmkpO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodmFsICE9PSBPYmplY3QodmFsKSkge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArIFwiLmVtcHR5IHdhcyBwYXNzZWQgbm9uLXN0cmluZyBwcmltaXRpdmUgXCIgKyBpbnNwZWN0Mih2YWwpLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpdGVtc0NvdW50ID0gT2JqZWN0LmtleXModmFsKS5sZW5ndGg7XG4gIH1cbiAgdGhpcy5hc3NlcnQoXG4gICAgMCA9PT0gaXRlbXNDb3VudCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZW1wdHlcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIGVtcHR5XCJcbiAgKTtcbn0pO1xuZnVuY3Rpb24gY2hlY2tBcmd1bWVudHMoKSB7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgdHlwZTMgPSB0eXBlKG9iaik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIFwiQXJndW1lbnRzXCIgPT09IHR5cGUzLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhcmd1bWVudHMgYnV0IGdvdCBcIiArIHR5cGUzLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYXJndW1lbnRzXCJcbiAgKTtcbn1cbl9fbmFtZShjaGVja0FyZ3VtZW50cywgXCJjaGVja0FyZ3VtZW50c1wiKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImFyZ3VtZW50c1wiLCBjaGVja0FyZ3VtZW50cyk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJBcmd1bWVudHNcIiwgY2hlY2tBcmd1bWVudHMpO1xuZnVuY3Rpb24gYXNzZXJ0RXF1YWwodmFsLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICBpZiAoZmxhZzIodGhpcywgXCJkZWVwXCIpKSB7XG4gICAgdmFyIHByZXZMb2NrU3NmaSA9IGZsYWcyKHRoaXMsIFwibG9ja1NzZmlcIik7XG4gICAgZmxhZzIodGhpcywgXCJsb2NrU3NmaVwiLCB0cnVlKTtcbiAgICB0aGlzLmVxbCh2YWwpO1xuICAgIGZsYWcyKHRoaXMsIFwibG9ja1NzZmlcIiwgcHJldkxvY2tTc2ZpKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIHZhbCA9PT0gb2JqLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGVxdWFsICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBlcXVhbCAje2V4cH1cIixcbiAgICAgIHZhbCxcbiAgICAgIHRoaXMuX29iaixcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG59XG5fX25hbWUoYXNzZXJ0RXF1YWwsIFwiYXNzZXJ0RXF1YWxcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZXF1YWxcIiwgYXNzZXJ0RXF1YWwpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxdWFsc1wiLCBhc3NlcnRFcXVhbCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZXFcIiwgYXNzZXJ0RXF1YWwpO1xuZnVuY3Rpb24gYXNzZXJ0RXFsKG9iaiwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBlcWwgPSBmbGFnMih0aGlzLCBcImVxbFwiKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgZXFsKG9iaiwgZmxhZzIodGhpcywgXCJvYmplY3RcIikpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwbHkgZXF1YWwgI3tleHB9XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBkZWVwbHkgZXF1YWwgI3tleHB9XCIsXG4gICAgb2JqLFxuICAgIHRoaXMuX29iaixcbiAgICB0cnVlXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0RXFsLCBcImFzc2VydEVxbFwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJlcWxcIiwgYXNzZXJ0RXFsKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJlcWxzXCIsIGFzc2VydEVxbCk7XG5mdW5jdGlvbiBhc3NlcnRBYm92ZShuLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09IFwiZGF0ZVwiICYmIG5UeXBlICE9PSBcImRhdGVcIikpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gYWJvdmUgbXVzdCBiZSBhIGRhdGVcIiwgdm9pZCAwLCBzc2ZpKTtcbiAgfSBlbHNlIGlmICghaXNOdW1lcmljKG4pICYmIChkb0xlbmd0aCB8fCBpc051bWVyaWMob2JqKSkpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gYWJvdmUgbXVzdCBiZSBhIG51bWJlclwiLCB2b2lkIDAsIHNzZmkpO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gXCJkYXRlXCIgJiYgIWlzTnVtZXJpYyhvYmopKSkge1xuICAgIHZhciBwcmludE9iaiA9IG9ialR5cGUgPT09IFwic3RyaW5nXCIgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIiwgdm9pZCAwLCBzc2ZpKTtcbiAgfVxuICBpZiAoZG9MZW5ndGgpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IFwibGVuZ3RoXCIsIGl0ZW1zQ291bnQ7XG4gICAgaWYgKG9ialR5cGUgPT09IFwibWFwXCIgfHwgb2JqVHlwZSA9PT0gXCJzZXRcIikge1xuICAgICAgZGVzY3JpcHRvciA9IFwic2l6ZVwiO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpdGVtc0NvdW50ID4gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYWJvdmUgI3tleHB9IGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBhYm92ZSAje2V4cH1cIixcbiAgICAgIG4sXG4gICAgICBpdGVtc0NvdW50XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIG9iaiA+IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYWJvdmUgI3tleHB9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbW9zdCAje2V4cH1cIixcbiAgICAgIG5cbiAgICApO1xuICB9XG59XG5fX25hbWUoYXNzZXJ0QWJvdmUsIFwiYXNzZXJ0QWJvdmVcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiYWJvdmVcIiwgYXNzZXJ0QWJvdmUpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImd0XCIsIGFzc2VydEFib3ZlKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJncmVhdGVyVGhhblwiLCBhc3NlcnRBYm92ZSk7XG5mdW5jdGlvbiBhc3NlcnRMZWFzdChuLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKSwgZXJyb3JNZXNzYWdlLCBzaG91bGRUaHJvdyA9IHRydWU7XG4gIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcIm1hcFwiICYmIG9ialR5cGUgIT09IFwic2V0XCIpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgfVxuICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSBcImRhdGVcIiAmJiBuVHlwZSAhPT0gXCJkYXRlXCIpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gbGVhc3QgbXVzdCBiZSBhIGRhdGVcIjtcbiAgfSBlbHNlIGlmICghaXNOdW1lcmljKG4pICYmIChkb0xlbmd0aCB8fCBpc051bWVyaWMob2JqKSkpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudCB0byBsZWFzdCBtdXN0IGJlIGEgbnVtYmVyXCI7XG4gIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpKSB7XG4gICAgdmFyIHByaW50T2JqID0gb2JqVHlwZSA9PT0gXCJzdHJpbmdcIiA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJleHBlY3RlZCBcIiArIHByaW50T2JqICsgXCIgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlXCI7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgfVxuICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZXJyb3JNZXNzYWdlLCB2b2lkIDAsIHNzZmkpO1xuICB9XG4gIGlmIChkb0xlbmd0aCkge1xuICAgIHZhciBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgICBpZiAob2JqVHlwZSA9PT0gXCJtYXBcIiB8fCBvYmpUeXBlID09PSBcInNldFwiKSB7XG4gICAgICBkZXNjcmlwdG9yID0gXCJzaXplXCI7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgIH1cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGl0ZW1zQ291bnQgPj0gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYXQgbGVhc3QgI3tleHB9IGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGJlbG93ICN7ZXhwfVwiLFxuICAgICAgbixcbiAgICAgIGl0ZW1zQ291bnRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgb2JqID49IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbGVhc3QgI3tleHB9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYmVsb3cgI3tleHB9XCIsXG4gICAgICBuXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFzc2VydExlYXN0LCBcImFzc2VydExlYXN0XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImxlYXN0XCIsIGFzc2VydExlYXN0KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJndGVcIiwgYXNzZXJ0TGVhc3QpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImdyZWF0ZXJUaGFuT3JFcXVhbFwiLCBhc3NlcnRMZWFzdCk7XG5mdW5jdGlvbiBhc3NlcnRCZWxvdyhuLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKSwgZXJyb3JNZXNzYWdlLCBzaG91bGRUaHJvdyA9IHRydWU7XG4gIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcIm1hcFwiICYmIG9ialR5cGUgIT09IFwic2V0XCIpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgfVxuICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSBcImRhdGVcIiAmJiBuVHlwZSAhPT0gXCJkYXRlXCIpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gYmVsb3cgbXVzdCBiZSBhIGRhdGVcIjtcbiAgfSBlbHNlIGlmICghaXNOdW1lcmljKG4pICYmIChkb0xlbmd0aCB8fCBpc051bWVyaWMob2JqKSkpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudCB0byBiZWxvdyBtdXN0IGJlIGEgbnVtYmVyXCI7XG4gIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpKSB7XG4gICAgdmFyIHByaW50T2JqID0gb2JqVHlwZSA9PT0gXCJzdHJpbmdcIiA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJleHBlY3RlZCBcIiArIHByaW50T2JqICsgXCIgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlXCI7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgfVxuICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZXJyb3JNZXNzYWdlLCB2b2lkIDAsIHNzZmkpO1xuICB9XG4gIGlmIChkb0xlbmd0aCkge1xuICAgIHZhciBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgICBpZiAob2JqVHlwZSA9PT0gXCJtYXBcIiB8fCBvYmpUeXBlID09PSBcInNldFwiKSB7XG4gICAgICBkZXNjcmlwdG9yID0gXCJzaXplXCI7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgIH1cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGl0ZW1zQ291bnQgPCBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBiZWxvdyAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGJlbG93ICN7ZXhwfVwiLFxuICAgICAgbixcbiAgICAgIGl0ZW1zQ291bnRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgb2JqIDwgbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBiZWxvdyAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBsZWFzdCAje2V4cH1cIixcbiAgICAgIG5cbiAgICApO1xuICB9XG59XG5fX25hbWUoYXNzZXJ0QmVsb3csIFwiYXNzZXJ0QmVsb3dcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiYmVsb3dcIiwgYXNzZXJ0QmVsb3cpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImx0XCIsIGFzc2VydEJlbG93KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJsZXNzVGhhblwiLCBhc3NlcnRCZWxvdyk7XG5mdW5jdGlvbiBhc3NlcnRNb3N0KG4sIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGRvTGVuZ3RoID0gZmxhZzIodGhpcywgXCJkb0xlbmd0aFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgbXNnUHJlZml4ID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCksIG5UeXBlID0gdHlwZShuKS50b0xvd2VyQ2FzZSgpLCBlcnJvck1lc3NhZ2UsIHNob3VsZFRocm93ID0gdHJ1ZTtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09IFwiZGF0ZVwiICYmIG5UeXBlICE9PSBcImRhdGVcIikpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudCB0byBtb3N0IG11c3QgYmUgYSBkYXRlXCI7XG4gIH0gZWxzZSBpZiAoIWlzTnVtZXJpYyhuKSAmJiAoZG9MZW5ndGggfHwgaXNOdW1lcmljKG9iaikpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gbW9zdCBtdXN0IGJlIGEgbnVtYmVyXCI7XG4gIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpKSB7XG4gICAgdmFyIHByaW50T2JqID0gb2JqVHlwZSA9PT0gXCJzdHJpbmdcIiA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJleHBlY3RlZCBcIiArIHByaW50T2JqICsgXCIgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlXCI7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgfVxuICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZXJyb3JNZXNzYWdlLCB2b2lkIDAsIHNzZmkpO1xuICB9XG4gIGlmIChkb0xlbmd0aCkge1xuICAgIHZhciBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgICBpZiAob2JqVHlwZSA9PT0gXCJtYXBcIiB8fCBvYmpUeXBlID09PSBcInNldFwiKSB7XG4gICAgICBkZXNjcmlwdG9yID0gXCJzaXplXCI7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgIH1cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGl0ZW1zQ291bnQgPD0gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYXQgbW9zdCAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYWJvdmUgI3tleHB9XCIsXG4gICAgICBuLFxuICAgICAgaXRlbXNDb3VudFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBvYmogPD0gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBtb3N0ICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFib3ZlICN7ZXhwfVwiLFxuICAgICAgblxuICAgICk7XG4gIH1cbn1cbl9fbmFtZShhc3NlcnRNb3N0LCBcImFzc2VydE1vc3RcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibW9zdFwiLCBhc3NlcnRNb3N0KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJsdGVcIiwgYXNzZXJ0TW9zdCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibGVzc1RoYW5PckVxdWFsXCIsIGFzc2VydE1vc3QpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIndpdGhpblwiLCBmdW5jdGlvbihzdGFydCwgZmluaXNoLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBzdGFydFR5cGUgPSB0eXBlKHN0YXJ0KS50b0xvd2VyQ2FzZSgpLCBmaW5pc2hUeXBlID0gdHlwZShmaW5pc2gpLnRvTG93ZXJDYXNlKCksIGVycm9yTWVzc2FnZSwgc2hvdWxkVGhyb3cgPSB0cnVlLCByYW5nZSA9IHN0YXJ0VHlwZSA9PT0gXCJkYXRlXCIgJiYgZmluaXNoVHlwZSA9PT0gXCJkYXRlXCIgPyBzdGFydC50b0lTT1N0cmluZygpICsgXCIuLlwiICsgZmluaXNoLnRvSVNPU3RyaW5nKCkgOiBzdGFydCArIFwiLi5cIiArIGZpbmlzaDtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09IFwiZGF0ZVwiICYmIChzdGFydFR5cGUgIT09IFwiZGF0ZVwiIHx8IGZpbmlzaFR5cGUgIT09IFwiZGF0ZVwiKSkpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudHMgdG8gd2l0aGluIG11c3QgYmUgZGF0ZXNcIjtcbiAgfSBlbHNlIGlmICgoIWlzTnVtZXJpYyhzdGFydCkgfHwgIWlzTnVtZXJpYyhmaW5pc2gpKSAmJiAoZG9MZW5ndGggfHwgaXNOdW1lcmljKG9iaikpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnRzIHRvIHdpdGhpbiBtdXN0IGJlIG51bWJlcnNcIjtcbiAgfSBlbHNlIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgIT09IFwiZGF0ZVwiICYmICFpc051bWVyaWMob2JqKSkpIHtcbiAgICB2YXIgcHJpbnRPYmogPSBvYmpUeXBlID09PSBcInN0cmluZ1wiID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIjtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICB9XG4gIGlmIChzaG91bGRUaHJvdykge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICAgIGlmIChvYmpUeXBlID09PSBcIm1hcFwiIHx8IG9ialR5cGUgPT09IFwic2V0XCIpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXRlbXNDb3VudCA+PSBzdGFydCAmJiBpdGVtc0NvdW50IDw9IGZpbmlzaCxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgd2l0aGluIFwiICsgcmFuZ2UsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiB3aXRoaW4gXCIgKyByYW5nZVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBvYmogPj0gc3RhcnQgJiYgb2JqIDw9IGZpbmlzaCxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB3aXRoaW4gXCIgKyByYW5nZSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgd2l0aGluIFwiICsgcmFuZ2VcbiAgICApO1xuICB9XG59KTtcbmZ1bmN0aW9uIGFzc2VydEluc3RhbmNlT2YoY29uc3RydWN0b3IsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgdGFyZ2V0ID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHZhciBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICB2YXIgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKTtcbiAgdHJ5IHtcbiAgICB2YXIgaXNJbnN0YW5jZU9mID0gdGFyZ2V0IGluc3RhbmNlb2YgY29uc3RydWN0b3I7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHtcbiAgICAgIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCI7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgIGZsYWdNc2cgKyBcIlRoZSBpbnN0YW5jZW9mIGFzc2VydGlvbiBuZWVkcyBhIGNvbnN0cnVjdG9yIGJ1dCBcIiArIHR5cGUoY29uc3RydWN0b3IpICsgXCIgd2FzIGdpdmVuLlwiLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHNzZmlcbiAgICAgICk7XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxuICB2YXIgbmFtZSA9IGdldE5hbWUoY29uc3RydWN0b3IpO1xuICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgbmFtZSA9IFwiYW4gdW5uYW1lZCBjb25zdHJ1Y3RvclwiO1xuICB9XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGlzSW5zdGFuY2VPZixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYW4gaW5zdGFuY2Ugb2YgXCIgKyBuYW1lLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYW4gaW5zdGFuY2Ugb2YgXCIgKyBuYW1lXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0SW5zdGFuY2VPZiwgXCJhc3NlcnRJbnN0YW5jZU9mXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImluc3RhbmNlb2ZcIiwgYXNzZXJ0SW5zdGFuY2VPZik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaW5zdGFuY2VPZlwiLCBhc3NlcnRJbnN0YW5jZU9mKTtcbmZ1bmN0aW9uIGFzc2VydFByb3BlcnR5KG5hbWUsIHZhbCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBpc05lc3RlZCA9IGZsYWcyKHRoaXMsIFwibmVzdGVkXCIpLCBpc093biA9IGZsYWcyKHRoaXMsIFwib3duXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgbmFtZVR5cGUgPSB0eXBlb2YgbmFtZTtcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgaWYgKGlzTmVzdGVkKSB7XG4gICAgaWYgKG5hbWVUeXBlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgIGZsYWdNc2cgKyBcInRoZSBhcmd1bWVudCB0byBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nIHdoZW4gdXNpbmcgbmVzdGVkIHN5bnRheFwiLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHNzZmlcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChuYW1lVHlwZSAhPT0gXCJzdHJpbmdcIiAmJiBuYW1lVHlwZSAhPT0gXCJudW1iZXJcIiAmJiBuYW1lVHlwZSAhPT0gXCJzeW1ib2xcIikge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBmbGFnTXNnICsgXCJ0aGUgYXJndW1lbnQgdG8gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZywgbnVtYmVyLCBvciBzeW1ib2xcIixcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoaXNOZXN0ZWQgJiYgaXNPd24pIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnICsgJ1RoZSBcIm5lc3RlZFwiIGFuZCBcIm93blwiIGZsYWdzIGNhbm5vdCBiZSBjb21iaW5lZC4nLFxuICAgICAgdm9pZCAwLFxuICAgICAgc3NmaVxuICAgICk7XG4gIH1cbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIGZsYWdNc2cgKyBcIlRhcmdldCBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuXCIsXG4gICAgICB2b2lkIDAsXG4gICAgICBzc2ZpXG4gICAgKTtcbiAgfVxuICB2YXIgaXNEZWVwID0gZmxhZzIodGhpcywgXCJkZWVwXCIpLCBuZWdhdGUgPSBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSwgcGF0aEluZm8gPSBpc05lc3RlZCA/IGdldFBhdGhJbmZvKG9iaiwgbmFtZSkgOiBudWxsLCB2YWx1ZSA9IGlzTmVzdGVkID8gcGF0aEluZm8udmFsdWUgOiBvYmpbbmFtZV0sIGlzRXFsID0gaXNEZWVwID8gZmxhZzIodGhpcywgXCJlcWxcIikgOiAodmFsMSwgdmFsMikgPT4gdmFsMSA9PT0gdmFsMjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBcIlwiO1xuICBpZiAoaXNEZWVwKVxuICAgIGRlc2NyaXB0b3IgKz0gXCJkZWVwIFwiO1xuICBpZiAoaXNPd24pXG4gICAgZGVzY3JpcHRvciArPSBcIm93biBcIjtcbiAgaWYgKGlzTmVzdGVkKVxuICAgIGRlc2NyaXB0b3IgKz0gXCJuZXN0ZWQgXCI7XG4gIGRlc2NyaXB0b3IgKz0gXCJwcm9wZXJ0eSBcIjtcbiAgdmFyIGhhc1Byb3BlcnR5MjtcbiAgaWYgKGlzT3duKVxuICAgIGhhc1Byb3BlcnR5MiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIG5hbWUpO1xuICBlbHNlIGlmIChpc05lc3RlZClcbiAgICBoYXNQcm9wZXJ0eTIgPSBwYXRoSW5mby5leGlzdHM7XG4gIGVsc2VcbiAgICBoYXNQcm9wZXJ0eTIgPSBoYXNQcm9wZXJ0eShvYmosIG5hbWUpO1xuICBpZiAoIW5lZ2F0ZSB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBoYXNQcm9wZXJ0eTIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKVxuICAgICk7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBoYXNQcm9wZXJ0eTIgJiYgaXNFcWwodmFsLCB2YWx1ZSksXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9mICN7ZXhwfSwgYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9mICN7YWN0fVwiLFxuICAgICAgdmFsLFxuICAgICAgdmFsdWVcbiAgICApO1xuICB9XG4gIGZsYWcyKHRoaXMsIFwib2JqZWN0XCIsIHZhbHVlKTtcbn1cbl9fbmFtZShhc3NlcnRQcm9wZXJ0eSwgXCJhc3NlcnRQcm9wZXJ0eVwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJwcm9wZXJ0eVwiLCBhc3NlcnRQcm9wZXJ0eSk7XG5mdW5jdGlvbiBhc3NlcnRPd25Qcm9wZXJ0eShuYW1lLCB2YWx1ZSwgbXNnKSB7XG4gIGZsYWcyKHRoaXMsIFwib3duXCIsIHRydWUpO1xuICBhc3NlcnRQcm9wZXJ0eS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuX19uYW1lKGFzc2VydE93blByb3BlcnR5LCBcImFzc2VydE93blByb3BlcnR5XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIm93blByb3BlcnR5XCIsIGFzc2VydE93blByb3BlcnR5KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJoYXZlT3duUHJvcGVydHlcIiwgYXNzZXJ0T3duUHJvcGVydHkpO1xuZnVuY3Rpb24gYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5hbWUsIGRlc2NyaXB0b3IsIG1zZykge1xuICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICBtc2cgPSBkZXNjcmlwdG9yO1xuICAgIGRlc2NyaXB0b3IgPSBudWxsO1xuICB9XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdmFyIGFjdHVhbERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdChvYmopLCBuYW1lKTtcbiAgdmFyIGVxbCA9IGZsYWcyKHRoaXMsIFwiZXFsXCIpO1xuICBpZiAoYWN0dWFsRGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBlcWwoZGVzY3JpcHRvciwgYWN0dWFsRGVzY3JpcHRvciksXG4gICAgICBcImV4cGVjdGVkIHRoZSBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgXCIgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9uICN7dGhpc30gdG8gbWF0Y2ggXCIgKyBpbnNwZWN0MihkZXNjcmlwdG9yKSArIFwiLCBnb3QgXCIgKyBpbnNwZWN0MihhY3R1YWxEZXNjcmlwdG9yKSxcbiAgICAgIFwiZXhwZWN0ZWQgdGhlIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciBcIiArIGluc3BlY3QyKG5hbWUpICsgXCIgb24gI3t0aGlzfSB0byBub3QgbWF0Y2ggXCIgKyBpbnNwZWN0MihkZXNjcmlwdG9yKSxcbiAgICAgIGRlc2NyaXB0b3IsXG4gICAgICBhY3R1YWxEZXNjcmlwdG9yLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBhY3R1YWxEZXNjcmlwdG9yLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYW4gb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIFwiICsgaW5zcGVjdDIobmFtZSksXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYW4gb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIFwiICsgaW5zcGVjdDIobmFtZSlcbiAgICApO1xuICB9XG4gIGZsYWcyKHRoaXMsIFwib2JqZWN0XCIsIGFjdHVhbERlc2NyaXB0b3IpO1xufVxuX19uYW1lKGFzc2VydE93blByb3BlcnR5RGVzY3JpcHRvciwgXCJhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3JcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwib3duUHJvcGVydHlEZXNjcmlwdG9yXCIsIGFzc2VydE93blByb3BlcnR5RGVzY3JpcHRvcik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaGF2ZU93blByb3BlcnR5RGVzY3JpcHRvclwiLCBhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpO1xuZnVuY3Rpb24gYXNzZXJ0TGVuZ3RoQ2hhaW4oKSB7XG4gIGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiwgdHJ1ZSk7XG59XG5fX25hbWUoYXNzZXJ0TGVuZ3RoQ2hhaW4sIFwiYXNzZXJ0TGVuZ3RoQ2hhaW5cIik7XG5mdW5jdGlvbiBhc3NlcnRMZW5ndGgobiwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgc3dpdGNoIChvYmpUeXBlKSB7XG4gICAgY2FzZSBcIm1hcFwiOlxuICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICB9XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGl0ZW1zQ291bnQgPT0gbixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIG9mICN7ZXhwfSBidXQgZ290ICN7YWN0fVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIG9mICN7YWN0fVwiLFxuICAgIG4sXG4gICAgaXRlbXNDb3VudFxuICApO1xufVxuX19uYW1lKGFzc2VydExlbmd0aCwgXCJhc3NlcnRMZW5ndGhcIik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwibGVuZ3RoXCIsIGFzc2VydExlbmd0aCwgYXNzZXJ0TGVuZ3RoQ2hhaW4pO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImxlbmd0aE9mXCIsIGFzc2VydExlbmd0aCwgYXNzZXJ0TGVuZ3RoQ2hhaW4pO1xuZnVuY3Rpb24gYXNzZXJ0TWF0Y2gocmUsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHJlLmV4ZWMob2JqKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbWF0Y2ggXCIgKyByZSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIG1hdGNoIFwiICsgcmVcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRNYXRjaCwgXCJhc3NlcnRNYXRjaFwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJtYXRjaFwiLCBhc3NlcnRNYXRjaCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibWF0Y2hlc1wiLCBhc3NlcnRNYXRjaCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwic3RyaW5nXCIsIGZ1bmN0aW9uKHN0ciwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJzdHJpbmdcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIH5vYmouaW5kZXhPZihzdHIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBjb250YWluIFwiICsgaW5zcGVjdDIoc3RyKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGNvbnRhaW4gXCIgKyBpbnNwZWN0MihzdHIpXG4gICk7XG59KTtcbmZ1bmN0aW9uIGFzc2VydEtleXMoa2V5cykge1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIG9ialR5cGUgPSB0eXBlKG9iaiksIGtleXNUeXBlID0gdHlwZShrZXlzKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgaXNEZWVwID0gZmxhZzIodGhpcywgXCJkZWVwXCIpLCBzdHIsIGRlZXBTdHIgPSBcIlwiLCBhY3R1YWwsIG9rID0gdHJ1ZSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKTtcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgdmFyIG1peGVkQXJnc01zZyA9IGZsYWdNc2cgKyBcIndoZW4gdGVzdGluZyBrZXlzIGFnYWluc3QgYW4gb2JqZWN0IG9yIGFuIGFycmF5IHlvdSBtdXN0IGdpdmUgYSBzaW5nbGUgQXJyYXl8T2JqZWN0fFN0cmluZyBhcmd1bWVudCBvciBtdWx0aXBsZSBTdHJpbmcgYXJndW1lbnRzXCI7XG4gIGlmIChvYmpUeXBlID09PSBcIk1hcFwiIHx8IG9ialR5cGUgPT09IFwiU2V0XCIpIHtcbiAgICBkZWVwU3RyID0gaXNEZWVwID8gXCJkZWVwbHkgXCIgOiBcIlwiO1xuICAgIGFjdHVhbCA9IFtdO1xuICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uKHZhbCwga2V5KSB7XG4gICAgICBhY3R1YWwucHVzaChrZXkpO1xuICAgIH0pO1xuICAgIGlmIChrZXlzVHlwZSAhPT0gXCJBcnJheVwiKSB7XG4gICAgICBrZXlzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYWN0dWFsID0gZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMob2JqKTtcbiAgICBzd2l0Y2ggKGtleXNUeXBlKSB7XG4gICAgICBjYXNlIFwiQXJyYXlcIjpcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1peGVkQXJnc01zZywgdm9pZCAwLCBzc2ZpKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJPYmplY3RcIjpcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1peGVkQXJnc01zZywgdm9pZCAwLCBzc2ZpKTtcbiAgICAgICAgfVxuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoa2V5cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAga2V5cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIGtleXMgPSBrZXlzLm1hcChmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSBcInN5bWJvbFwiID8gdmFsIDogU3RyaW5nKHZhbCk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKCFrZXlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihmbGFnTXNnICsgXCJrZXlzIHJlcXVpcmVkXCIsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgdmFyIGxlbiA9IGtleXMubGVuZ3RoLCBhbnkgPSBmbGFnMih0aGlzLCBcImFueVwiKSwgYWxsID0gZmxhZzIodGhpcywgXCJhbGxcIiksIGV4cGVjdGVkID0ga2V5cywgaXNFcWwgPSBpc0RlZXAgPyBmbGFnMih0aGlzLCBcImVxbFwiKSA6ICh2YWwxLCB2YWwyKSA9PiB2YWwxID09PSB2YWwyO1xuICBpZiAoIWFueSAmJiAhYWxsKSB7XG4gICAgYWxsID0gdHJ1ZTtcbiAgfVxuICBpZiAoYW55KSB7XG4gICAgb2sgPSBleHBlY3RlZC5zb21lKGZ1bmN0aW9uKGV4cGVjdGVkS2V5KSB7XG4gICAgICByZXR1cm4gYWN0dWFsLnNvbWUoZnVuY3Rpb24oYWN0dWFsS2V5KSB7XG4gICAgICAgIHJldHVybiBpc0VxbChleHBlY3RlZEtleSwgYWN0dWFsS2V5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGlmIChhbGwpIHtcbiAgICBvayA9IGV4cGVjdGVkLmV2ZXJ5KGZ1bmN0aW9uKGV4cGVjdGVkS2V5KSB7XG4gICAgICByZXR1cm4gYWN0dWFsLnNvbWUoZnVuY3Rpb24oYWN0dWFsS2V5KSB7XG4gICAgICAgIHJldHVybiBpc0VxbChleHBlY3RlZEtleSwgYWN0dWFsS2V5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmICghZmxhZzIodGhpcywgXCJjb250YWluc1wiKSkge1xuICAgICAgb2sgPSBvayAmJiBrZXlzLmxlbmd0aCA9PSBhY3R1YWwubGVuZ3RoO1xuICAgIH1cbiAgfVxuICBpZiAobGVuID4gMSkge1xuICAgIGtleXMgPSBrZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBpbnNwZWN0MihrZXkpO1xuICAgIH0pO1xuICAgIHZhciBsYXN0ID0ga2V5cy5wb3AoKTtcbiAgICBpZiAoYWxsKSB7XG4gICAgICBzdHIgPSBrZXlzLmpvaW4oXCIsIFwiKSArIFwiLCBhbmQgXCIgKyBsYXN0O1xuICAgIH1cbiAgICBpZiAoYW55KSB7XG4gICAgICBzdHIgPSBrZXlzLmpvaW4oXCIsIFwiKSArIFwiLCBvciBcIiArIGxhc3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN0ciA9IGluc3BlY3QyKGtleXNbMF0pO1xuICB9XG4gIHN0ciA9IChsZW4gPiAxID8gXCJrZXlzIFwiIDogXCJrZXkgXCIpICsgc3RyO1xuICBzdHIgPSAoZmxhZzIodGhpcywgXCJjb250YWluc1wiKSA/IFwiY29udGFpbiBcIiA6IFwiaGF2ZSBcIikgKyBzdHI7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIG9rLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBcIiArIGRlZXBTdHIgKyBzdHIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBcIiArIGRlZXBTdHIgKyBzdHIsXG4gICAgZXhwZWN0ZWQuc2xpY2UoMCkuc29ydChjb21wYXJlQnlJbnNwZWN0KSxcbiAgICBhY3R1YWwuc29ydChjb21wYXJlQnlJbnNwZWN0KSxcbiAgICB0cnVlXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0S2V5cywgXCJhc3NlcnRLZXlzXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImtleXNcIiwgYXNzZXJ0S2V5cyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwia2V5XCIsIGFzc2VydEtleXMpO1xuZnVuY3Rpb24gYXNzZXJ0VGhyb3dzKGVycm9yTGlrZSwgZXJyTXNnTWF0Y2hlciwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgbmVnYXRlID0gZmxhZzIodGhpcywgXCJuZWdhdGVcIikgfHwgZmFsc2U7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gIGlmIChpc1JlZ0V4cDIoZXJyb3JMaWtlKSB8fCB0eXBlb2YgZXJyb3JMaWtlID09PSBcInN0cmluZ1wiKSB7XG4gICAgZXJyTXNnTWF0Y2hlciA9IGVycm9yTGlrZTtcbiAgICBlcnJvckxpa2UgPSBudWxsO1xuICB9XG4gIGxldCBjYXVnaHRFcnI7XG4gIGxldCBlcnJvcldhc1Rocm93biA9IGZhbHNlO1xuICB0cnkge1xuICAgIG9iaigpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvcldhc1Rocm93biA9IHRydWU7XG4gICAgY2F1Z2h0RXJyID0gZXJyO1xuICB9XG4gIHZhciBldmVyeUFyZ0lzVW5kZWZpbmVkID0gZXJyb3JMaWtlID09PSB2b2lkIDAgJiYgZXJyTXNnTWF0Y2hlciA9PT0gdm9pZCAwO1xuICB2YXIgZXZlcnlBcmdJc0RlZmluZWQgPSBCb29sZWFuKGVycm9yTGlrZSAmJiBlcnJNc2dNYXRjaGVyKTtcbiAgdmFyIGVycm9yTGlrZUZhaWwgPSBmYWxzZTtcbiAgdmFyIGVyck1zZ01hdGNoZXJGYWlsID0gZmFsc2U7XG4gIGlmIChldmVyeUFyZ0lzVW5kZWZpbmVkIHx8ICFldmVyeUFyZ0lzVW5kZWZpbmVkICYmICFuZWdhdGUpIHtcbiAgICB2YXIgZXJyb3JMaWtlU3RyaW5nID0gXCJhbiBlcnJvclwiO1xuICAgIGlmIChlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgZXJyb3JMaWtlU3RyaW5nID0gXCIje2V4cH1cIjtcbiAgICB9IGVsc2UgaWYgKGVycm9yTGlrZSkge1xuICAgICAgZXJyb3JMaWtlU3RyaW5nID0gY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKTtcbiAgICB9XG4gICAgbGV0IGFjdHVhbCA9IGNhdWdodEVycjtcbiAgICBpZiAoY2F1Z2h0RXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGFjdHVhbCA9IGNhdWdodEVyci50b1N0cmluZygpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNhdWdodEVyciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgYWN0dWFsID0gY2F1Z2h0RXJyO1xuICAgIH0gZWxzZSBpZiAoY2F1Z2h0RXJyICYmICh0eXBlb2YgY2F1Z2h0RXJyID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYXVnaHRFcnIgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjdHVhbCA9IGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0Q29uc3RydWN0b3JOYW1lKGNhdWdodEVycik7XG4gICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgZXJyb3JXYXNUaHJvd24sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgXCIgKyBlcnJvckxpa2VTdHJpbmcsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93IGFuIGVycm9yIGJ1dCAje2FjdH0gd2FzIHRocm93blwiLFxuICAgICAgZXJyb3JMaWtlICYmIGVycm9yTGlrZS50b1N0cmluZygpLFxuICAgICAgYWN0dWFsXG4gICAgKTtcbiAgfVxuICBpZiAoZXJyb3JMaWtlICYmIGNhdWdodEVycikge1xuICAgIGlmIChlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgdmFyIGlzQ29tcGF0aWJsZUluc3RhbmNlID0gY2hlY2tfZXJyb3JfZXhwb3J0cy5jb21wYXRpYmxlSW5zdGFuY2UoY2F1Z2h0RXJyLCBlcnJvckxpa2UpO1xuICAgICAgaWYgKGlzQ29tcGF0aWJsZUluc3RhbmNlID09PSBuZWdhdGUpIHtcbiAgICAgICAgaWYgKGV2ZXJ5QXJnSXNEZWZpbmVkICYmIG5lZ2F0ZSkge1xuICAgICAgICAgIGVycm9yTGlrZUZhaWwgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgbmVnYXRlLFxuICAgICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93ICN7ZXhwfSBidXQgI3thY3R9IHdhcyB0aHJvd25cIixcbiAgICAgICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgI3tleHB9XCIgKyAoY2F1Z2h0RXJyICYmICFuZWdhdGUgPyBcIiBidXQgI3thY3R9IHdhcyB0aHJvd25cIiA6IFwiXCIpLFxuICAgICAgICAgICAgZXJyb3JMaWtlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBjYXVnaHRFcnIudG9TdHJpbmcoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGlzQ29tcGF0aWJsZUNvbnN0cnVjdG9yID0gY2hlY2tfZXJyb3JfZXhwb3J0cy5jb21wYXRpYmxlQ29uc3RydWN0b3IoY2F1Z2h0RXJyLCBlcnJvckxpa2UpO1xuICAgIGlmIChpc0NvbXBhdGlibGVDb25zdHJ1Y3RvciA9PT0gbmVnYXRlKSB7XG4gICAgICBpZiAoZXZlcnlBcmdJc0RlZmluZWQgJiYgbmVnYXRlKSB7XG4gICAgICAgIGVycm9yTGlrZUZhaWwgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgbmVnYXRlLFxuICAgICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyAje2V4cH0gYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIsXG4gICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCB0aHJvdyAje2V4cH1cIiArIChjYXVnaHRFcnIgPyBcIiBidXQgI3thY3R9IHdhcyB0aHJvd25cIiA6IFwiXCIpLFxuICAgICAgICAgIGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JMaWtlLnRvU3RyaW5nKCkgOiBlcnJvckxpa2UgJiYgY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKSxcbiAgICAgICAgICBjYXVnaHRFcnIgaW5zdGFuY2VvZiBFcnJvciA/IGNhdWdodEVyci50b1N0cmluZygpIDogY2F1Z2h0RXJyICYmIGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0Q29uc3RydWN0b3JOYW1lKGNhdWdodEVycilcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGNhdWdodEVyciAmJiBlcnJNc2dNYXRjaGVyICE9PSB2b2lkIDAgJiYgZXJyTXNnTWF0Y2hlciAhPT0gbnVsbCkge1xuICAgIHZhciBwbGFjZWhvbGRlciA9IFwiaW5jbHVkaW5nXCI7XG4gICAgaWYgKGlzUmVnRXhwMihlcnJNc2dNYXRjaGVyKSkge1xuICAgICAgcGxhY2Vob2xkZXIgPSBcIm1hdGNoaW5nXCI7XG4gICAgfVxuICAgIHZhciBpc0NvbXBhdGlibGVNZXNzYWdlID0gY2hlY2tfZXJyb3JfZXhwb3J0cy5jb21wYXRpYmxlTWVzc2FnZShjYXVnaHRFcnIsIGVyck1zZ01hdGNoZXIpO1xuICAgIGlmIChpc0NvbXBhdGlibGVNZXNzYWdlID09PSBuZWdhdGUpIHtcbiAgICAgIGlmIChldmVyeUFyZ0lzRGVmaW5lZCAmJiBuZWdhdGUpIHtcbiAgICAgICAgZXJyTXNnTWF0Y2hlckZhaWwgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgbmVnYXRlLFxuICAgICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyBlcnJvciBcIiArIHBsYWNlaG9sZGVyICsgXCIgI3tleHB9IGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93IGVycm9yIG5vdCBcIiArIHBsYWNlaG9sZGVyICsgXCIgI3tleHB9XCIsXG4gICAgICAgICAgZXJyTXNnTWF0Y2hlcixcbiAgICAgICAgICBjaGVja19lcnJvcl9leHBvcnRzLmdldE1lc3NhZ2UoY2F1Z2h0RXJyKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoZXJyb3JMaWtlRmFpbCAmJiBlcnJNc2dNYXRjaGVyRmFpbCkge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgbmVnYXRlLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93ICN7ZXhwfSBidXQgI3thY3R9IHdhcyB0aHJvd25cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgI3tleHB9XCIgKyAoY2F1Z2h0RXJyID8gXCIgYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIgOiBcIlwiKSxcbiAgICAgIGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JMaWtlLnRvU3RyaW5nKCkgOiBlcnJvckxpa2UgJiYgY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKSxcbiAgICAgIGNhdWdodEVyciBpbnN0YW5jZW9mIEVycm9yID8gY2F1Z2h0RXJyLnRvU3RyaW5nKCkgOiBjYXVnaHRFcnIgJiYgY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoY2F1Z2h0RXJyKVxuICAgICk7XG4gIH1cbiAgZmxhZzIodGhpcywgXCJvYmplY3RcIiwgY2F1Z2h0RXJyKTtcbn1cbl9fbmFtZShhc3NlcnRUaHJvd3MsIFwiYXNzZXJ0VGhyb3dzXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInRocm93XCIsIGFzc2VydFRocm93cyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwidGhyb3dzXCIsIGFzc2VydFRocm93cyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiVGhyb3dcIiwgYXNzZXJ0VGhyb3dzKTtcbmZ1bmN0aW9uIHJlc3BvbmRUbyhtZXRob2QsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGl0c2VsZiA9IGZsYWcyKHRoaXMsIFwiaXRzZWxmXCIpLCBjb250ZXh0ID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygb2JqICYmICFpdHNlbGYgPyBvYmoucHJvdG90eXBlW21ldGhvZF0gOiBvYmpbbWV0aG9kXTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29udGV4dCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gcmVzcG9uZCB0byBcIiArIGluc3BlY3QyKG1ldGhvZCksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCByZXNwb25kIHRvIFwiICsgaW5zcGVjdDIobWV0aG9kKVxuICApO1xufVxuX19uYW1lKHJlc3BvbmRUbywgXCJyZXNwb25kVG9cIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwicmVzcG9uZFRvXCIsIHJlc3BvbmRUbyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwicmVzcG9uZHNUb1wiLCByZXNwb25kVG8pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiaXRzZWxmXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcIml0c2VsZlwiLCB0cnVlKTtcbn0pO1xuZnVuY3Rpb24gc2F0aXNmeShtYXRjaGVyLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB2YXIgcmVzdWx0ID0gbWF0Y2hlcihvYmopO1xuICB0aGlzLmFzc2VydChcbiAgICByZXN1bHQsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHNhdGlzZnkgXCIgKyBvYmpEaXNwbGF5KG1hdGNoZXIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3Qgc2F0aXNmeVwiICsgb2JqRGlzcGxheShtYXRjaGVyKSxcbiAgICBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSA/IGZhbHNlIDogdHJ1ZSxcbiAgICByZXN1bHRcbiAgKTtcbn1cbl9fbmFtZShzYXRpc2Z5LCBcInNhdGlzZnlcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwic2F0aXNmeVwiLCBzYXRpc2Z5KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJzYXRpc2ZpZXNcIiwgc2F0aXNmeSk7XG5mdW5jdGlvbiBjbG9zZVRvKGV4cGVjdGVkLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLm51bWVyaWM7XG4gIGxldCBtZXNzYWdlID0gXCJBIGBkZWx0YWAgdmFsdWUgaXMgcmVxdWlyZWQgZm9yIGBjbG9zZVRvYFwiO1xuICBpZiAoZGVsdGEgPT0gdm9pZCAwKVxuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihmbGFnTXNnID8gYCR7ZmxhZ01zZ306ICR7bWVzc2FnZX1gIDogbWVzc2FnZSwgdm9pZCAwLCBzc2ZpKTtcbiAgbmV3IEFzc2VydGlvbihkZWx0YSwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMubnVtZXJpYztcbiAgbWVzc2FnZSA9IFwiQSBgZXhwZWN0ZWRgIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBgY2xvc2VUb2BcIjtcbiAgaWYgKGV4cGVjdGVkID09IHZvaWQgMClcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZmxhZ01zZyA/IGAke2ZsYWdNc2d9OiAke21lc3NhZ2V9YCA6IG1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIG5ldyBBc3NlcnRpb24oZXhwZWN0ZWQsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLm51bWVyaWM7XG4gIGNvbnN0IGFicyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHgpID0+IHggPCAwbiA/IC14IDogeCwgXCJhYnNcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGFicyhvYmogLSBleHBlY3RlZCkgPD0gZGVsdGEsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGNsb3NlIHRvIFwiICsgZXhwZWN0ZWQgKyBcIiArLy0gXCIgKyBkZWx0YSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIGNsb3NlIHRvIFwiICsgZXhwZWN0ZWQgKyBcIiArLy0gXCIgKyBkZWx0YVxuICApO1xufVxuX19uYW1lKGNsb3NlVG8sIFwiY2xvc2VUb1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJjbG9zZVRvXCIsIGNsb3NlVG8pO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImFwcHJveGltYXRlbHlcIiwgY2xvc2VUbyk7XG5mdW5jdGlvbiBpc1N1YnNldE9mKF9zdWJzZXQsIF9zdXBlcnNldCwgY21wLCBjb250YWlucywgb3JkZXJlZCkge1xuICBsZXQgc3VwZXJzZXQgPSBBcnJheS5mcm9tKF9zdXBlcnNldCk7XG4gIGxldCBzdWJzZXQgPSBBcnJheS5mcm9tKF9zdWJzZXQpO1xuICBpZiAoIWNvbnRhaW5zKSB7XG4gICAgaWYgKHN1YnNldC5sZW5ndGggIT09IHN1cGVyc2V0Lmxlbmd0aClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBzdXBlcnNldCA9IHN1cGVyc2V0LnNsaWNlKCk7XG4gIH1cbiAgcmV0dXJuIHN1YnNldC5ldmVyeShmdW5jdGlvbihlbGVtLCBpZHgpIHtcbiAgICBpZiAob3JkZXJlZClcbiAgICAgIHJldHVybiBjbXAgPyBjbXAoZWxlbSwgc3VwZXJzZXRbaWR4XSkgOiBlbGVtID09PSBzdXBlcnNldFtpZHhdO1xuICAgIGlmICghY21wKSB7XG4gICAgICB2YXIgbWF0Y2hJZHggPSBzdXBlcnNldC5pbmRleE9mKGVsZW0pO1xuICAgICAgaWYgKG1hdGNoSWR4ID09PSAtMSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCFjb250YWlucylcbiAgICAgICAgc3VwZXJzZXQuc3BsaWNlKG1hdGNoSWR4LCAxKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXJzZXQuc29tZShmdW5jdGlvbihlbGVtMiwgbWF0Y2hJZHgyKSB7XG4gICAgICBpZiAoIWNtcChlbGVtLCBlbGVtMikpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghY29udGFpbnMpXG4gICAgICAgIHN1cGVyc2V0LnNwbGljZShtYXRjaElkeDIsIDEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH0pO1xufVxuX19uYW1lKGlzU3Vic2V0T2YsIFwiaXNTdWJzZXRPZlwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJtZW1iZXJzXCIsIGZ1bmN0aW9uKHN1YnNldCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmJlLml0ZXJhYmxlO1xuICBuZXcgQXNzZXJ0aW9uKHN1YnNldCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uYmUuaXRlcmFibGU7XG4gIHZhciBjb250YWlucyA9IGZsYWcyKHRoaXMsIFwiY29udGFpbnNcIik7XG4gIHZhciBvcmRlcmVkID0gZmxhZzIodGhpcywgXCJvcmRlcmVkXCIpO1xuICB2YXIgc3ViamVjdCwgZmFpbE1zZywgZmFpbE5lZ2F0ZU1zZztcbiAgaWYgKGNvbnRhaW5zKSB7XG4gICAgc3ViamVjdCA9IG9yZGVyZWQgPyBcImFuIG9yZGVyZWQgc3VwZXJzZXRcIiA6IFwiYSBzdXBlcnNldFwiO1xuICAgIGZhaWxNc2cgPSBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgXCIgKyBzdWJqZWN0ICsgXCIgb2YgI3tleHB9XCI7XG4gICAgZmFpbE5lZ2F0ZU1zZyA9IFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgXCIgKyBzdWJqZWN0ICsgXCIgb2YgI3tleHB9XCI7XG4gIH0gZWxzZSB7XG4gICAgc3ViamVjdCA9IG9yZGVyZWQgPyBcIm9yZGVyZWQgbWVtYmVyc1wiIDogXCJtZW1iZXJzXCI7XG4gICAgZmFpbE1zZyA9IFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIHRoZSBzYW1lIFwiICsgc3ViamVjdCArIFwiIGFzICN7ZXhwfVwiO1xuICAgIGZhaWxOZWdhdGVNc2cgPSBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgdGhlIHNhbWUgXCIgKyBzdWJqZWN0ICsgXCIgYXMgI3tleHB9XCI7XG4gIH1cbiAgdmFyIGNtcCA9IGZsYWcyKHRoaXMsIFwiZGVlcFwiKSA/IGZsYWcyKHRoaXMsIFwiZXFsXCIpIDogdm9pZCAwO1xuICB0aGlzLmFzc2VydChcbiAgICBpc1N1YnNldE9mKHN1YnNldCwgb2JqLCBjbXAsIGNvbnRhaW5zLCBvcmRlcmVkKSxcbiAgICBmYWlsTXNnLFxuICAgIGZhaWxOZWdhdGVNc2csXG4gICAgc3Vic2V0LFxuICAgIG9iaixcbiAgICB0cnVlXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIml0ZXJhYmxlXCIsIGZ1bmN0aW9uKG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIG9iaiAhPSB2b2lkIDAgJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl0sXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFuIGl0ZXJhYmxlXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBhbiBpdGVyYWJsZVwiLFxuICAgIG9ialxuICApO1xufSk7XG5mdW5jdGlvbiBvbmVPZihsaXN0LCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIGV4cGVjdGVkID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGNvbnRhaW5zID0gZmxhZzIodGhpcywgXCJjb250YWluc1wiKSwgaXNEZWVwID0gZmxhZzIodGhpcywgXCJkZWVwXCIpLCBlcWwgPSBmbGFnMih0aGlzLCBcImVxbFwiKTtcbiAgbmV3IEFzc2VydGlvbihsaXN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5iZS5hbihcImFycmF5XCIpO1xuICBpZiAoY29udGFpbnMpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGxpc3Quc29tZShmdW5jdGlvbihwb3NzaWJpbGl0eSkge1xuICAgICAgICByZXR1cm4gZXhwZWN0ZWQuaW5kZXhPZihwb3NzaWJpbGl0eSkgPiAtMTtcbiAgICAgIH0pLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGNvbnRhaW4gb25lIG9mICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBjb250YWluIG9uZSBvZiAje2V4cH1cIixcbiAgICAgIGxpc3QsXG4gICAgICBleHBlY3RlZFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVlcCkge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGxpc3Quc29tZShmdW5jdGlvbihwb3NzaWJpbGl0eSkge1xuICAgICAgICAgIHJldHVybiBlcWwoZXhwZWN0ZWQsIHBvc3NpYmlsaXR5KTtcbiAgICAgICAgfSksXG4gICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwbHkgZXF1YWwgb25lIG9mICN7ZXhwfVwiLFxuICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZGVlcGx5IGVxdWFsIG9uZSBvZiAje2V4cH1cIixcbiAgICAgICAgbGlzdCxcbiAgICAgICAgZXhwZWN0ZWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBsaXN0LmluZGV4T2YoZXhwZWN0ZWQpID4gLTEsXG4gICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBvbmUgb2YgI3tleHB9XCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgb25lIG9mICN7ZXhwfVwiLFxuICAgICAgICBsaXN0LFxuICAgICAgICBleHBlY3RlZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbl9fbmFtZShvbmVPZiwgXCJvbmVPZlwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJvbmVPZlwiLCBvbmVPZik7XG5mdW5jdGlvbiBhc3NlcnRDaGFuZ2VzKHN1YmplY3QsIHByb3AsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgZm4gPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihmbiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICB2YXIgaW5pdGlhbDtcbiAgaWYgKCFwcm9wKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gICAgaW5pdGlhbCA9IHN1YmplY3QoKTtcbiAgfSBlbHNlIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG4gICAgaW5pdGlhbCA9IHN1YmplY3RbcHJvcF07XG4gIH1cbiAgZm4oKTtcbiAgdmFyIGZpbmFsID0gcHJvcCA9PT0gdm9pZCAwIHx8IHByb3AgPT09IG51bGwgPyBzdWJqZWN0KCkgOiBzdWJqZWN0W3Byb3BdO1xuICB2YXIgbXNnT2JqID0gcHJvcCA9PT0gdm9pZCAwIHx8IHByb3AgPT09IG51bGwgPyBpbml0aWFsIDogXCIuXCIgKyBwcm9wO1xuICBmbGFnMih0aGlzLCBcImRlbHRhTXNnT2JqXCIsIG1zZ09iaik7XG4gIGZsYWcyKHRoaXMsIFwiaW5pdGlhbERlbHRhVmFsdWVcIiwgaW5pdGlhbCk7XG4gIGZsYWcyKHRoaXMsIFwiZmluYWxEZWx0YVZhbHVlXCIsIGZpbmFsKTtcbiAgZmxhZzIodGhpcywgXCJkZWx0YUJlaGF2aW9yXCIsIFwiY2hhbmdlXCIpO1xuICBmbGFnMih0aGlzLCBcInJlYWxEZWx0YVwiLCBmaW5hbCAhPT0gaW5pdGlhbCk7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGluaXRpYWwgIT09IGZpbmFsLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBjaGFuZ2VcIixcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gbm90IGNoYW5nZVwiXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0Q2hhbmdlcywgXCJhc3NlcnRDaGFuZ2VzXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImNoYW5nZVwiLCBhc3NlcnRDaGFuZ2VzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJjaGFuZ2VzXCIsIGFzc2VydENoYW5nZXMpO1xuZnVuY3Rpb24gYXNzZXJ0SW5jcmVhc2VzKHN1YmplY3QsIHByb3AsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgZm4gPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihmbiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICB2YXIgaW5pdGlhbDtcbiAgaWYgKCFwcm9wKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gICAgaW5pdGlhbCA9IHN1YmplY3QoKTtcbiAgfSBlbHNlIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG4gICAgaW5pdGlhbCA9IHN1YmplY3RbcHJvcF07XG4gIH1cbiAgbmV3IEFzc2VydGlvbihpbml0aWFsLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwibnVtYmVyXCIpO1xuICBmbigpO1xuICB2YXIgZmluYWwgPSBwcm9wID09PSB2b2lkIDAgfHwgcHJvcCA9PT0gbnVsbCA/IHN1YmplY3QoKSA6IHN1YmplY3RbcHJvcF07XG4gIHZhciBtc2dPYmogPSBwcm9wID09PSB2b2lkIDAgfHwgcHJvcCA9PT0gbnVsbCA/IGluaXRpYWwgOiBcIi5cIiArIHByb3A7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFNc2dPYmpcIiwgbXNnT2JqKTtcbiAgZmxhZzIodGhpcywgXCJpbml0aWFsRGVsdGFWYWx1ZVwiLCBpbml0aWFsKTtcbiAgZmxhZzIodGhpcywgXCJmaW5hbERlbHRhVmFsdWVcIiwgZmluYWwpO1xuICBmbGFnMih0aGlzLCBcImRlbHRhQmVoYXZpb3JcIiwgXCJpbmNyZWFzZVwiKTtcbiAgZmxhZzIodGhpcywgXCJyZWFsRGVsdGFcIiwgZmluYWwgLSBpbml0aWFsKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgZmluYWwgLSBpbml0aWFsID4gMCxcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gaW5jcmVhc2VcIixcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gbm90IGluY3JlYXNlXCJcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRJbmNyZWFzZXMsIFwiYXNzZXJ0SW5jcmVhc2VzXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImluY3JlYXNlXCIsIGFzc2VydEluY3JlYXNlcyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaW5jcmVhc2VzXCIsIGFzc2VydEluY3JlYXNlcyk7XG5mdW5jdGlvbiBhc3NlcnREZWNyZWFzZXMoc3ViamVjdCwgcHJvcCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBmbiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBuZXcgQXNzZXJ0aW9uKGZuLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gIHZhciBpbml0aWFsO1xuICBpZiAoIXByb3ApIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgICBpbml0aWFsID0gc3ViamVjdCgpO1xuICB9IGVsc2Uge1xuICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbiAgICBpbml0aWFsID0gc3ViamVjdFtwcm9wXTtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGluaXRpYWwsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJudW1iZXJcIik7XG4gIGZuKCk7XG4gIHZhciBmaW5hbCA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gc3ViamVjdCgpIDogc3ViamVjdFtwcm9wXTtcbiAgdmFyIG1zZ09iaiA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gaW5pdGlhbCA6IFwiLlwiICsgcHJvcDtcbiAgZmxhZzIodGhpcywgXCJkZWx0YU1zZ09ialwiLCBtc2dPYmopO1xuICBmbGFnMih0aGlzLCBcImluaXRpYWxEZWx0YVZhbHVlXCIsIGluaXRpYWwpO1xuICBmbGFnMih0aGlzLCBcImZpbmFsRGVsdGFWYWx1ZVwiLCBmaW5hbCk7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFCZWhhdmlvclwiLCBcImRlY3JlYXNlXCIpO1xuICBmbGFnMih0aGlzLCBcInJlYWxEZWx0YVwiLCBpbml0aWFsIC0gZmluYWwpO1xuICB0aGlzLmFzc2VydChcbiAgICBmaW5hbCAtIGluaXRpYWwgPCAwLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBkZWNyZWFzZVwiLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBub3QgZGVjcmVhc2VcIlxuICApO1xufVxuX19uYW1lKGFzc2VydERlY3JlYXNlcywgXCJhc3NlcnREZWNyZWFzZXNcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZGVjcmVhc2VcIiwgYXNzZXJ0RGVjcmVhc2VzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJkZWNyZWFzZXNcIiwgYXNzZXJ0RGVjcmVhc2VzKTtcbmZ1bmN0aW9uIGFzc2VydERlbHRhKGRlbHRhLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG1zZ09iaiA9IGZsYWcyKHRoaXMsIFwiZGVsdGFNc2dPYmpcIik7XG4gIHZhciBpbml0aWFsID0gZmxhZzIodGhpcywgXCJpbml0aWFsRGVsdGFWYWx1ZVwiKTtcbiAgdmFyIGZpbmFsID0gZmxhZzIodGhpcywgXCJmaW5hbERlbHRhVmFsdWVcIik7XG4gIHZhciBiZWhhdmlvciA9IGZsYWcyKHRoaXMsIFwiZGVsdGFCZWhhdmlvclwiKTtcbiAgdmFyIHJlYWxEZWx0YSA9IGZsYWcyKHRoaXMsIFwicmVhbERlbHRhXCIpO1xuICB2YXIgZXhwcmVzc2lvbjtcbiAgaWYgKGJlaGF2aW9yID09PSBcImNoYW5nZVwiKSB7XG4gICAgZXhwcmVzc2lvbiA9IE1hdGguYWJzKGZpbmFsIC0gaW5pdGlhbCkgPT09IE1hdGguYWJzKGRlbHRhKTtcbiAgfSBlbHNlIHtcbiAgICBleHByZXNzaW9uID0gcmVhbERlbHRhID09PSBNYXRoLmFicyhkZWx0YSk7XG4gIH1cbiAgdGhpcy5hc3NlcnQoXG4gICAgZXhwcmVzc2lvbixcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gXCIgKyBiZWhhdmlvciArIFwiIGJ5IFwiICsgZGVsdGEsXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIG5vdCBcIiArIGJlaGF2aW9yICsgXCIgYnkgXCIgKyBkZWx0YVxuICApO1xufVxuX19uYW1lKGFzc2VydERlbHRhLCBcImFzc2VydERlbHRhXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImJ5XCIsIGFzc2VydERlbHRhKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImV4dGVuc2libGVcIiwgZnVuY3Rpb24oKSB7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdmFyIGlzRXh0ZW5zaWJsZSA9IG9iaiA9PT0gT2JqZWN0KG9iaikgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShvYmopO1xuICB0aGlzLmFzc2VydChcbiAgICBpc0V4dGVuc2libGUsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGV4dGVuc2libGVcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGV4dGVuc2libGVcIlxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJzZWFsZWRcIiwgZnVuY3Rpb24oKSB7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdmFyIGlzU2VhbGVkID0gb2JqID09PSBPYmplY3Qob2JqKSA/IE9iamVjdC5pc1NlYWxlZChvYmopIDogdHJ1ZTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNTZWFsZWQsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIHNlYWxlZFwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgc2VhbGVkXCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZnJvemVuXCIsIGZ1bmN0aW9uKCkge1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHZhciBpc0Zyb3plbiA9IG9iaiA9PT0gT2JqZWN0KG9iaikgPyBPYmplY3QuaXNGcm96ZW4ob2JqKSA6IHRydWU7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGlzRnJvemVuLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmcm96ZW5cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGZyb3plblwiXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImZpbml0ZVwiLCBmdW5jdGlvbihtc2cpIHtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB0aGlzLmFzc2VydChcbiAgICB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiICYmIGlzRmluaXRlKG9iaiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGEgZmluaXRlIG51bWJlclwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYSBmaW5pdGUgbnVtYmVyXCJcbiAgKTtcbn0pO1xuXG4vLyBsaWIvY2hhaS9pbnRlcmZhY2UvZXhwZWN0LmpzXG5mdW5jdGlvbiBleHBlY3QodmFsLCBtZXNzYWdlKSB7XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKHZhbCwgbWVzc2FnZSk7XG59XG5fX25hbWUoZXhwZWN0LCBcImV4cGVjdFwiKTtcbmV4cGVjdC5mYWlsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgbWVzc2FnZSA9IGFjdHVhbDtcbiAgICBhY3R1YWwgPSB2b2lkIDA7XG4gIH1cbiAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgXCJleHBlY3QuZmFpbCgpXCI7XG4gIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtZXNzYWdlLCB7XG4gICAgYWN0dWFsLFxuICAgIGV4cGVjdGVkLFxuICAgIG9wZXJhdG9yXG4gIH0sIGV4cGVjdC5mYWlsKTtcbn07XG5cbi8vIGxpYi9jaGFpL2ludGVyZmFjZS9zaG91bGQuanNcbnZhciBzaG91bGRfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoc2hvdWxkX2V4cG9ydHMsIHtcbiAgU2hvdWxkOiAoKSA9PiBTaG91bGQsXG4gIHNob3VsZDogKCkgPT4gc2hvdWxkXG59KTtcbmZ1bmN0aW9uIGxvYWRTaG91bGQoKSB7XG4gIGZ1bmN0aW9uIHNob3VsZEdldHRlcigpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFN0cmluZyB8fCB0aGlzIGluc3RhbmNlb2YgTnVtYmVyIHx8IHRoaXMgaW5zdGFuY2VvZiBCb29sZWFuIHx8IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0aGlzIGluc3RhbmNlb2YgU3ltYm9sIHx8IHR5cGVvZiBCaWdJbnQgPT09IFwiZnVuY3Rpb25cIiAmJiB0aGlzIGluc3RhbmNlb2YgQmlnSW50KSB7XG4gICAgICByZXR1cm4gbmV3IEFzc2VydGlvbih0aGlzLnZhbHVlT2YoKSwgbnVsbCwgc2hvdWxkR2V0dGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odGhpcywgbnVsbCwgc2hvdWxkR2V0dGVyKTtcbiAgfVxuICBfX25hbWUoc2hvdWxkR2V0dGVyLCBcInNob3VsZEdldHRlclwiKTtcbiAgZnVuY3Rpb24gc2hvdWxkU2V0dGVyKHZhbHVlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwic2hvdWxkXCIsIHtcbiAgICAgIHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgX19uYW1lKHNob3VsZFNldHRlciwgXCJzaG91bGRTZXR0ZXJcIik7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCBcInNob3VsZFwiLCB7XG4gICAgc2V0OiBzaG91bGRTZXR0ZXIsXG4gICAgZ2V0OiBzaG91bGRHZXR0ZXIsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuICB2YXIgc2hvdWxkMiA9IHt9O1xuICBzaG91bGQyLmZhaWwgPSBmdW5jdGlvbihhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgbWVzc2FnZSA9IGFjdHVhbDtcbiAgICAgIGFjdHVhbCA9IHZvaWQgMDtcbiAgICB9XG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgXCJzaG91bGQuZmFpbCgpXCI7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1lc3NhZ2UsIHtcbiAgICAgIGFjdHVhbCxcbiAgICAgIGV4cGVjdGVkLFxuICAgICAgb3BlcmF0b3JcbiAgICB9LCBzaG91bGQyLmZhaWwpO1xuICB9O1xuICBzaG91bGQyLmVxdWFsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0dWFsLCBtZXNzYWdlKS50by5lcXVhbChleHBlY3RlZCk7XG4gIH07XG4gIHNob3VsZDIuVGhyb3cgPSBmdW5jdGlvbihmbiwgZXJydCwgZXJycywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihmbiwgbXNnKS50by5UaHJvdyhlcnJ0LCBlcnJzKTtcbiAgfTtcbiAgc2hvdWxkMi5leGlzdCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8uZXhpc3Q7XG4gIH07XG4gIHNob3VsZDIubm90ID0ge307XG4gIHNob3VsZDIubm90LmVxdWFsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihhY3R1YWwsIG1zZykudG8ubm90LmVxdWFsKGV4cGVjdGVkKTtcbiAgfTtcbiAgc2hvdWxkMi5ub3QuVGhyb3cgPSBmdW5jdGlvbihmbiwgZXJydCwgZXJycywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihmbiwgbXNnKS50by5ub3QuVGhyb3coZXJydCwgZXJycyk7XG4gIH07XG4gIHNob3VsZDIubm90LmV4aXN0ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnKS50by5ub3QuZXhpc3Q7XG4gIH07XG4gIHNob3VsZDJbXCJ0aHJvd1wiXSA9IHNob3VsZDJbXCJUaHJvd1wiXTtcbiAgc2hvdWxkMi5ub3RbXCJ0aHJvd1wiXSA9IHNob3VsZDIubm90W1wiVGhyb3dcIl07XG4gIHJldHVybiBzaG91bGQyO1xufVxuX19uYW1lKGxvYWRTaG91bGQsIFwibG9hZFNob3VsZFwiKTtcbnZhciBzaG91bGQgPSBsb2FkU2hvdWxkO1xudmFyIFNob3VsZCA9IGxvYWRTaG91bGQ7XG5cbi8vIGxpYi9jaGFpL2ludGVyZmFjZS9hc3NlcnQuanNcbmZ1bmN0aW9uIGFzc2VydChleHByZXNzLCBlcnJtc2cpIHtcbiAgdmFyIHRlc3QyID0gbmV3IEFzc2VydGlvbihudWxsLCBudWxsLCBhc3NlcnQsIHRydWUpO1xuICB0ZXN0Mi5hc3NlcnQoXG4gICAgZXhwcmVzcyxcbiAgICBlcnJtc2csXG4gICAgXCJbIG5lZ2F0aW9uIG1lc3NhZ2UgdW5hdmFpbGFibGUgXVwiXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0LCBcImFzc2VydFwiKTtcbmFzc2VydC5mYWlsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgbWVzc2FnZSA9IGFjdHVhbDtcbiAgICBhY3R1YWwgPSB2b2lkIDA7XG4gIH1cbiAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgXCJhc3NlcnQuZmFpbCgpXCI7XG4gIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtZXNzYWdlLCB7XG4gICAgYWN0dWFsLFxuICAgIGV4cGVjdGVkLFxuICAgIG9wZXJhdG9yXG4gIH0sIGFzc2VydC5mYWlsKTtcbn07XG5hc3NlcnQuaXNPayA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc09rLCB0cnVlKS5pcy5vaztcbn07XG5hc3NlcnQuaXNOb3RPayA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE9rLCB0cnVlKS5pcy5ub3Qub2s7XG59O1xuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24oYWN0LCBleHAsIG1zZykge1xuICB2YXIgdGVzdDIgPSBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuZXF1YWwsIHRydWUpO1xuICB0ZXN0Mi5hc3NlcnQoXG4gICAgZXhwID09IGZsYWcodGVzdDIsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2V4cH1cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGVxdWFsICN7YWN0fVwiLFxuICAgIGV4cCxcbiAgICBhY3QsXG4gICAgdHJ1ZVxuICApO1xufTtcbmFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBtc2cpIHtcbiAgdmFyIHRlc3QyID0gbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0Lm5vdEVxdWFsLCB0cnVlKTtcbiAgdGVzdDIuYXNzZXJ0KFxuICAgIGV4cCAhPSBmbGFnKHRlc3QyLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGVxdWFsICN7ZXhwfVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2FjdH1cIixcbiAgICBleHAsXG4gICAgYWN0LFxuICAgIHRydWVcbiAgKTtcbn07XG5hc3NlcnQuc3RyaWN0RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5zdHJpY3RFcXVhbCwgdHJ1ZSkudG8uZXF1YWwoZXhwKTtcbn07XG5hc3NlcnQubm90U3RyaWN0RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5ub3RTdHJpY3RFcXVhbCwgdHJ1ZSkudG8ubm90LmVxdWFsKGV4cCk7XG59O1xuYXNzZXJ0LmRlZXBFcXVhbCA9IGFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5kZWVwRXF1YWwsIHRydWUpLnRvLmVxbChleHApO1xufTtcbmFzc2VydC5ub3REZWVwRXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5ub3REZWVwRXF1YWwsIHRydWUpLnRvLm5vdC5lcWwoZXhwKTtcbn07XG5hc3NlcnQuaXNBYm92ZSA9IGZ1bmN0aW9uKHZhbCwgYWJ2LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQWJvdmUsIHRydWUpLnRvLmJlLmFib3ZlKGFidik7XG59O1xuYXNzZXJ0LmlzQXRMZWFzdCA9IGZ1bmN0aW9uKHZhbCwgYXRsc3QsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBdExlYXN0LCB0cnVlKS50by5iZS5sZWFzdChhdGxzdCk7XG59O1xuYXNzZXJ0LmlzQmVsb3cgPSBmdW5jdGlvbih2YWwsIGJsdywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0JlbG93LCB0cnVlKS50by5iZS5iZWxvdyhibHcpO1xufTtcbmFzc2VydC5pc0F0TW9zdCA9IGZ1bmN0aW9uKHZhbCwgYXRtc3QsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBdE1vc3QsIHRydWUpLnRvLmJlLm1vc3QoYXRtc3QpO1xufTtcbmFzc2VydC5pc1RydWUgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNUcnVlLCB0cnVlKS5pc1tcInRydWVcIl07XG59O1xuYXNzZXJ0LmlzTm90VHJ1ZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdFRydWUsIHRydWUpLnRvLm5vdC5lcXVhbCh0cnVlKTtcbn07XG5hc3NlcnQuaXNGYWxzZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0ZhbHNlLCB0cnVlKS5pc1tcImZhbHNlXCJdO1xufTtcbmFzc2VydC5pc05vdEZhbHNlID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90RmFsc2UsIHRydWUpLnRvLm5vdC5lcXVhbChmYWxzZSk7XG59O1xuYXNzZXJ0LmlzTnVsbCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc051bGwsIHRydWUpLnRvLmVxdWFsKG51bGwpO1xufTtcbmFzc2VydC5pc05vdE51bGwgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3ROdWxsLCB0cnVlKS50by5ub3QuZXF1YWwobnVsbCk7XG59O1xuYXNzZXJ0LmlzTmFOID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTmFOLCB0cnVlKS50by5iZS5OYU47XG59O1xuYXNzZXJ0LmlzTm90TmFOID0gZnVuY3Rpb24odmFsdWUsIG1lc3NhZ2UpIHtcbiAgbmV3IEFzc2VydGlvbih2YWx1ZSwgbWVzc2FnZSwgYXNzZXJ0LmlzTm90TmFOLCB0cnVlKS5ub3QudG8uYmUuTmFOO1xufTtcbmFzc2VydC5leGlzdHMgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuZXhpc3RzLCB0cnVlKS50by5leGlzdDtcbn07XG5hc3NlcnQubm90RXhpc3RzID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0Lm5vdEV4aXN0cywgdHJ1ZSkudG8ubm90LmV4aXN0O1xufTtcbmFzc2VydC5pc1VuZGVmaW5lZCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc1VuZGVmaW5lZCwgdHJ1ZSkudG8uZXF1YWwodm9pZCAwKTtcbn07XG5hc3NlcnQuaXNEZWZpbmVkID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzRGVmaW5lZCwgdHJ1ZSkudG8ubm90LmVxdWFsKHZvaWQgMCk7XG59O1xuYXNzZXJ0LmlzQ2FsbGFibGUgPSBmdW5jdGlvbih2YWx1ZSwgbWVzc2FnZSkge1xuICBuZXcgQXNzZXJ0aW9uKHZhbHVlLCBtZXNzYWdlLCBhc3NlcnQuaXNDYWxsYWJsZSwgdHJ1ZSkuaXMuY2FsbGFibGU7XG59O1xuYXNzZXJ0LmlzTm90Q2FsbGFibGUgPSBmdW5jdGlvbih2YWx1ZSwgbWVzc2FnZSkge1xuICBuZXcgQXNzZXJ0aW9uKHZhbHVlLCBtZXNzYWdlLCBhc3NlcnQuaXNOb3RDYWxsYWJsZSwgdHJ1ZSkuaXMubm90LmNhbGxhYmxlO1xufTtcbmFzc2VydC5pc09iamVjdCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc09iamVjdCwgdHJ1ZSkudG8uYmUuYShcIm9iamVjdFwiKTtcbn07XG5hc3NlcnQuaXNOb3RPYmplY3QgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RPYmplY3QsIHRydWUpLnRvLm5vdC5iZS5hKFwib2JqZWN0XCIpO1xufTtcbmFzc2VydC5pc0FycmF5ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQXJyYXksIHRydWUpLnRvLmJlLmFuKFwiYXJyYXlcIik7XG59O1xuYXNzZXJ0LmlzTm90QXJyYXkgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RBcnJheSwgdHJ1ZSkudG8ubm90LmJlLmFuKFwiYXJyYXlcIik7XG59O1xuYXNzZXJ0LmlzU3RyaW5nID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzU3RyaW5nLCB0cnVlKS50by5iZS5hKFwic3RyaW5nXCIpO1xufTtcbmFzc2VydC5pc05vdFN0cmluZyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdFN0cmluZywgdHJ1ZSkudG8ubm90LmJlLmEoXCJzdHJpbmdcIik7XG59O1xuYXNzZXJ0LmlzTnVtYmVyID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTnVtYmVyLCB0cnVlKS50by5iZS5hKFwibnVtYmVyXCIpO1xufTtcbmFzc2VydC5pc05vdE51bWJlciA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE51bWJlciwgdHJ1ZSkudG8ubm90LmJlLmEoXCJudW1iZXJcIik7XG59O1xuYXNzZXJ0LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc051bWVyaWMsIHRydWUpLmlzLm51bWVyaWM7XG59O1xuYXNzZXJ0LmlzTm90TnVtZXJpYyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE51bWVyaWMsIHRydWUpLmlzLm5vdC5udW1lcmljO1xufTtcbmFzc2VydC5pc0Zpbml0ZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0Zpbml0ZSwgdHJ1ZSkudG8uYmUuZmluaXRlO1xufTtcbmFzc2VydC5pc0Jvb2xlYW4gPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNCb29sZWFuLCB0cnVlKS50by5iZS5hKFwiYm9vbGVhblwiKTtcbn07XG5hc3NlcnQuaXNOb3RCb29sZWFuID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90Qm9vbGVhbiwgdHJ1ZSkudG8ubm90LmJlLmEoXCJib29sZWFuXCIpO1xufTtcbmFzc2VydC50eXBlT2YgPSBmdW5jdGlvbih2YWwsIHR5cGUzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LnR5cGVPZiwgdHJ1ZSkudG8uYmUuYSh0eXBlMyk7XG59O1xuYXNzZXJ0Lm5vdFR5cGVPZiA9IGZ1bmN0aW9uKHZhbHVlLCB0eXBlMywgbWVzc2FnZSkge1xuICBuZXcgQXNzZXJ0aW9uKHZhbHVlLCBtZXNzYWdlLCBhc3NlcnQubm90VHlwZU9mLCB0cnVlKS50by5ub3QuYmUuYSh0eXBlMyk7XG59O1xuYXNzZXJ0Lmluc3RhbmNlT2YgPSBmdW5jdGlvbih2YWwsIHR5cGUzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0Lmluc3RhbmNlT2YsIHRydWUpLnRvLmJlLmluc3RhbmNlT2YodHlwZTMpO1xufTtcbmFzc2VydC5ub3RJbnN0YW5jZU9mID0gZnVuY3Rpb24odmFsLCB0eXBlMywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5ub3RJbnN0YW5jZU9mLCB0cnVlKS50by5ub3QuYmUuaW5zdGFuY2VPZih0eXBlMyk7XG59O1xuYXNzZXJ0LmluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5pbmNsdWRlLCB0cnVlKS5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3RJbmNsdWRlLCB0cnVlKS5ub3QuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5kZWVwSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBJbmNsdWRlLCB0cnVlKS5kZWVwLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubm90RGVlcEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3REZWVwSW5jbHVkZSwgdHJ1ZSkubm90LmRlZXAuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5uZXN0ZWRJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubmVzdGVkSW5jbHVkZSwgdHJ1ZSkubmVzdGVkLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubm90TmVzdGVkSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdE5lc3RlZEluY2x1ZGUsIHRydWUpLm5vdC5uZXN0ZWQuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5kZWVwTmVzdGVkSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBOZXN0ZWRJbmNsdWRlLCB0cnVlKS5kZWVwLm5lc3RlZC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90RGVlcE5lc3RlZEluY2x1ZGUsIHRydWUpLm5vdC5kZWVwLm5lc3RlZC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm93bkluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5vd25JbmNsdWRlLCB0cnVlKS5vd24uaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5ub3RPd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90T3duSW5jbHVkZSwgdHJ1ZSkubm90Lm93bi5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0LmRlZXBPd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQuZGVlcE93bkluY2x1ZGUsIHRydWUpLmRlZXAub3duLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubm90RGVlcE93bkluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3REZWVwT3duSW5jbHVkZSwgdHJ1ZSkubm90LmRlZXAub3duLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubWF0Y2ggPSBmdW5jdGlvbihleHAsIHJlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm1hdGNoLCB0cnVlKS50by5tYXRjaChyZSk7XG59O1xuYXNzZXJ0Lm5vdE1hdGNoID0gZnVuY3Rpb24oZXhwLCByZSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3RNYXRjaCwgdHJ1ZSkudG8ubm90Lm1hdGNoKHJlKTtcbn07XG5hc3NlcnQucHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQucHJvcGVydHksIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG59O1xuYXNzZXJ0Lm5vdFByb3BlcnR5ID0gZnVuY3Rpb24ob2JqLCBwcm9wLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdFByb3BlcnR5LCB0cnVlKS50by5ub3QuaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQucHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5wcm9wZXJ0eVZhbCwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5ub3RQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdFByb3BlcnR5VmFsLCB0cnVlKS50by5ub3QuaGF2ZS5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5kZWVwUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kZWVwUHJvcGVydHlWYWwsIHRydWUpLnRvLmhhdmUuZGVlcC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwsIHRydWUpLnRvLm5vdC5oYXZlLmRlZXAucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQub3duUHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQub3duUHJvcGVydHksIHRydWUpLnRvLmhhdmUub3duLnByb3BlcnR5KHByb3ApO1xufTtcbmFzc2VydC5ub3RPd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSwgdHJ1ZSkudG8ubm90LmhhdmUub3duLnByb3BlcnR5KHByb3ApO1xufTtcbmFzc2VydC5vd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQub3duUHJvcGVydHlWYWwsIHRydWUpLnRvLmhhdmUub3duLnByb3BlcnR5KHByb3AsIHZhbHVlKTtcbn07XG5hc3NlcnQubm90T3duUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdE93blByb3BlcnR5VmFsLCB0cnVlKS50by5ub3QuaGF2ZS5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xufTtcbmFzc2VydC5kZWVwT3duUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRlZXBPd25Qcm9wZXJ0eVZhbCwgdHJ1ZSkudG8uaGF2ZS5kZWVwLm93bi5wcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG59O1xuYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90RGVlcE93blByb3BlcnR5VmFsLCB0cnVlKS50by5ub3QuaGF2ZS5kZWVwLm93bi5wcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG59O1xuYXNzZXJ0Lm5lc3RlZFByb3BlcnR5ID0gZnVuY3Rpb24ob2JqLCBwcm9wLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5lc3RlZFByb3BlcnR5LCB0cnVlKS50by5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQubm90TmVzdGVkUHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90TmVzdGVkUHJvcGVydHksIHRydWUpLnRvLm5vdC5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQubmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5uZXN0ZWRQcm9wZXJ0eVZhbCwgdHJ1ZSkudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQubm90TmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3ROZXN0ZWRQcm9wZXJ0eVZhbCwgdHJ1ZSkudG8ubm90LmhhdmUubmVzdGVkLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0LmRlZXBOZXN0ZWRQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRlZXBOZXN0ZWRQcm9wZXJ0eVZhbCwgdHJ1ZSkudG8uaGF2ZS5kZWVwLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwsIHRydWUpLnRvLm5vdC5oYXZlLmRlZXAubmVzdGVkLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0Lmxlbmd0aE9mID0gZnVuY3Rpb24oZXhwLCBsZW4sIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubGVuZ3RoT2YsIHRydWUpLnRvLmhhdmUubGVuZ3RoT2YobGVuKTtcbn07XG5hc3NlcnQuaGFzQW55S2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbnlLZXlzLCB0cnVlKS50by5oYXZlLmFueS5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5oYXNBbGxLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lmhhc0FsbEtleXMsIHRydWUpLnRvLmhhdmUuYWxsLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0LmNvbnRhaW5zQWxsS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5jb250YWluc0FsbEtleXMsIHRydWUpLnRvLmNvbnRhaW4uYWxsLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0LmRvZXNOb3RIYXZlQW55S2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kb2VzTm90SGF2ZUFueUtleXMsIHRydWUpLnRvLm5vdC5oYXZlLmFueS5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5kb2VzTm90SGF2ZUFsbEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZG9lc05vdEhhdmVBbGxLZXlzLCB0cnVlKS50by5ub3QuaGF2ZS5hbGwua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuaGFzQW55RGVlcEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaGFzQW55RGVlcEtleXMsIHRydWUpLnRvLmhhdmUuYW55LmRlZXAua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuaGFzQWxsRGVlcEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaGFzQWxsRGVlcEtleXMsIHRydWUpLnRvLmhhdmUuYWxsLmRlZXAua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuY29udGFpbnNBbGxEZWVwS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5jb250YWluc0FsbERlZXBLZXlzLCB0cnVlKS50by5jb250YWluLmFsbC5kZWVwLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0LmRvZXNOb3RIYXZlQW55RGVlcEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZG9lc05vdEhhdmVBbnlEZWVwS2V5cywgdHJ1ZSkudG8ubm90LmhhdmUuYW55LmRlZXAua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuZG9lc05vdEhhdmVBbGxEZWVwS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzLCB0cnVlKS50by5ub3QuaGF2ZS5hbGwuZGVlcC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC50aHJvd3MgPSBmdW5jdGlvbihmbiwgZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyLCBtc2cpIHtcbiAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBlcnJvckxpa2UgfHwgZXJyb3JMaWtlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgZXJyTXNnTWF0Y2hlciA9IGVycm9yTGlrZTtcbiAgICBlcnJvckxpa2UgPSBudWxsO1xuICB9XG4gIHZhciBhc3NlcnRFcnIgPSBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC50aHJvd3MsIHRydWUpLnRvLnRocm93KGVycm9yTGlrZSwgZXJyTXNnTWF0Y2hlcik7XG4gIHJldHVybiBmbGFnKGFzc2VydEVyciwgXCJvYmplY3RcIik7XG59O1xuYXNzZXJ0LmRvZXNOb3RUaHJvdyA9IGZ1bmN0aW9uKGZuLCBlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIsIG1lc3NhZ2UpIHtcbiAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBlcnJvckxpa2UgfHwgZXJyb3JMaWtlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgZXJyTXNnTWF0Y2hlciA9IGVycm9yTGlrZTtcbiAgICBlcnJvckxpa2UgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1lc3NhZ2UsIGFzc2VydC5kb2VzTm90VGhyb3csIHRydWUpLnRvLm5vdC50aHJvdyhlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIpO1xufTtcbmFzc2VydC5vcGVyYXRvciA9IGZ1bmN0aW9uKHZhbCwgb3BlcmF0b3IsIHZhbDIsIG1zZykge1xuICB2YXIgb2s7XG4gIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICBjYXNlIFwiPT1cIjpcbiAgICAgIG9rID0gdmFsID09IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPT09XCI6XG4gICAgICBvayA9IHZhbCA9PT0gdmFsMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCI+XCI6XG4gICAgICBvayA9IHZhbCA+IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPj1cIjpcbiAgICAgIG9rID0gdmFsID49IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPFwiOlxuICAgICAgb2sgPSB2YWwgPCB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIjw9XCI6XG4gICAgICBvayA9IHZhbCA8PSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIiE9XCI6XG4gICAgICBvayA9IHZhbCAhPSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIiE9PVwiOlxuICAgICAgb2sgPSB2YWwgIT09IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbXNnID0gbXNnID8gbXNnICsgXCI6IFwiIDogbXNnO1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBtc2cgKyAnSW52YWxpZCBvcGVyYXRvciBcIicgKyBvcGVyYXRvciArICdcIicsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgYXNzZXJ0Lm9wZXJhdG9yXG4gICAgICApO1xuICB9XG4gIHZhciB0ZXN0MiA9IG5ldyBBc3NlcnRpb24ob2ssIG1zZywgYXNzZXJ0Lm9wZXJhdG9yLCB0cnVlKTtcbiAgdGVzdDIuYXNzZXJ0KFxuICAgIHRydWUgPT09IGZsYWcodGVzdDIsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBpbnNwZWN0Mih2YWwpICsgXCIgdG8gYmUgXCIgKyBvcGVyYXRvciArIFwiIFwiICsgaW5zcGVjdDIodmFsMiksXG4gICAgXCJleHBlY3RlZCBcIiArIGluc3BlY3QyKHZhbCkgKyBcIiB0byBub3QgYmUgXCIgKyBvcGVyYXRvciArIFwiIFwiICsgaW5zcGVjdDIodmFsMilcbiAgKTtcbn07XG5hc3NlcnQuY2xvc2VUbyA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBkZWx0YSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5jbG9zZVRvLCB0cnVlKS50by5iZS5jbG9zZVRvKGV4cCwgZGVsdGEpO1xufTtcbmFzc2VydC5hcHByb3hpbWF0ZWx5ID0gZnVuY3Rpb24oYWN0LCBleHAsIGRlbHRhLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LmFwcHJveGltYXRlbHksIHRydWUpLnRvLmJlLmFwcHJveGltYXRlbHkoZXhwLCBkZWx0YSk7XG59O1xuYXNzZXJ0LnNhbWVNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQuc2FtZU1lbWJlcnMsIHRydWUpLnRvLmhhdmUuc2FtZS5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5ub3RTYW1lTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0Lm5vdFNhbWVNZW1iZXJzLCB0cnVlKS50by5ub3QuaGF2ZS5zYW1lLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0LnNhbWVEZWVwTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0LnNhbWVEZWVwTWVtYmVycywgdHJ1ZSkudG8uaGF2ZS5zYW1lLmRlZXAubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQubm90U2FtZURlZXBNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQubm90U2FtZURlZXBNZW1iZXJzLCB0cnVlKS50by5ub3QuaGF2ZS5zYW1lLmRlZXAubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQuc2FtZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQuc2FtZU9yZGVyZWRNZW1iZXJzLCB0cnVlKS50by5oYXZlLnNhbWUub3JkZXJlZC5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5ub3RTYW1lT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLm5vdC5oYXZlLnNhbWUub3JkZXJlZC5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5zYW1lRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQuc2FtZURlZXBPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8uaGF2ZS5zYW1lLmRlZXAub3JkZXJlZC5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5ub3RTYW1lRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQubm90U2FtZURlZXBPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8ubm90LmhhdmUuc2FtZS5kZWVwLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQuaW5jbHVkZU1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQuaW5jbHVkZU1lbWJlcnMsIHRydWUpLnRvLmluY2x1ZGUubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5ub3RJbmNsdWRlTWVtYmVycyA9IGZ1bmN0aW9uKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5ub3RJbmNsdWRlTWVtYmVycywgdHJ1ZSkudG8ubm90LmluY2x1ZGUubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5pbmNsdWRlRGVlcE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQuaW5jbHVkZURlZXBNZW1iZXJzLCB0cnVlKS50by5pbmNsdWRlLmRlZXAubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5ub3RJbmNsdWRlRGVlcE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZURlZXBNZW1iZXJzLCB0cnVlKS50by5ub3QuaW5jbHVkZS5kZWVwLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQuaW5jbHVkZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8uaW5jbHVkZS5vcmRlcmVkLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQubm90SW5jbHVkZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0Lm5vdEluY2x1ZGVPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8ubm90LmluY2x1ZGUub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0LmluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQuaW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8uaW5jbHVkZS5kZWVwLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5ub3RJbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLm5vdC5pbmNsdWRlLmRlZXAub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0Lm9uZU9mID0gZnVuY3Rpb24oaW5MaXN0LCBsaXN0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihpbkxpc3QsIG1zZywgYXNzZXJ0Lm9uZU9mLCB0cnVlKS50by5iZS5vbmVPZihsaXN0KTtcbn07XG5hc3NlcnQuaXNJdGVyYWJsZSA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIGlmIChvYmogPT0gdm9pZCAwIHx8ICFvYmpbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgIG1zZyA9IG1zZyA/IGAke21zZ30gZXhwZWN0ZWQgJHtpbnNwZWN0MihvYmopfSB0byBiZSBhbiBpdGVyYWJsZWAgOiBgZXhwZWN0ZWQgJHtpbnNwZWN0MihvYmopfSB0byBiZSBhbiBpdGVyYWJsZWA7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgbXNnLFxuICAgICAgdm9pZCAwLFxuICAgICAgYXNzZXJ0LmlzSXRlcmFibGVcbiAgICApO1xuICB9XG59O1xuYXNzZXJ0LmNoYW5nZXMgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbXNnID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5jaGFuZ2VzLCB0cnVlKS50by5jaGFuZ2Uob2JqLCBwcm9wKTtcbn07XG5hc3NlcnQuY2hhbmdlc0J5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmNoYW5nZXNCeSwgdHJ1ZSkudG8uY2hhbmdlKG9iaiwgcHJvcCkuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5kb2VzTm90Q2hhbmdlID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1zZyA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRvZXNOb3RDaGFuZ2UsIHRydWUpLnRvLm5vdC5jaGFuZ2Uob2JqLCBwcm9wKTtcbn07XG5hc3NlcnQuY2hhbmdlc0J1dE5vdEJ5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmNoYW5nZXNCdXROb3RCeSwgdHJ1ZSkudG8uY2hhbmdlKG9iaiwgcHJvcCkuYnV0Lm5vdC5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmluY3JlYXNlcyA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtc2cgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5pbmNyZWFzZXMsIHRydWUpLnRvLmluY3JlYXNlKG9iaiwgcHJvcCk7XG59O1xuYXNzZXJ0LmluY3JlYXNlc0J5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmluY3JlYXNlc0J5LCB0cnVlKS50by5pbmNyZWFzZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuZG9lc05vdEluY3JlYXNlID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1zZyA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRvZXNOb3RJbmNyZWFzZSwgdHJ1ZSkudG8ubm90LmluY3JlYXNlKG9iaiwgcHJvcCk7XG59O1xuYXNzZXJ0LmluY3JlYXNlc0J1dE5vdEJ5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmluY3JlYXNlc0J1dE5vdEJ5LCB0cnVlKS50by5pbmNyZWFzZShvYmosIHByb3ApLmJ1dC5ub3QuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5kZWNyZWFzZXMgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbXNnID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZGVjcmVhc2VzLCB0cnVlKS50by5kZWNyZWFzZShvYmosIHByb3ApO1xufTtcbmFzc2VydC5kZWNyZWFzZXNCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kZWNyZWFzZXNCeSwgdHJ1ZSkudG8uZGVjcmVhc2Uob2JqLCBwcm9wKS5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmRvZXNOb3REZWNyZWFzZSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtc2cgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90RGVjcmVhc2UsIHRydWUpLnRvLm5vdC5kZWNyZWFzZShvYmosIHByb3ApO1xufTtcbmFzc2VydC5kb2VzTm90RGVjcmVhc2VCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdERlY3JlYXNlQnksIHRydWUpLnRvLm5vdC5kZWNyZWFzZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuZGVjcmVhc2VzQnV0Tm90QnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZGVjcmVhc2VzQnV0Tm90QnksIHRydWUpLnRvLmRlY3JlYXNlKG9iaiwgcHJvcCkuYnV0Lm5vdC5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmlmRXJyb3IgPSBmdW5jdGlvbih2YWwpIHtcbiAgaWYgKHZhbCkge1xuICAgIHRocm93IHZhbDtcbiAgfVxufTtcbmFzc2VydC5pc0V4dGVuc2libGUgPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNFeHRlbnNpYmxlLCB0cnVlKS50by5iZS5leHRlbnNpYmxlO1xufTtcbmFzc2VydC5pc05vdEV4dGVuc2libGUgPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNOb3RFeHRlbnNpYmxlLCB0cnVlKS50by5ub3QuYmUuZXh0ZW5zaWJsZTtcbn07XG5hc3NlcnQuaXNTZWFsZWQgPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNTZWFsZWQsIHRydWUpLnRvLmJlLnNlYWxlZDtcbn07XG5hc3NlcnQuaXNOb3RTZWFsZWQgPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNOb3RTZWFsZWQsIHRydWUpLnRvLm5vdC5iZS5zZWFsZWQ7XG59O1xuYXNzZXJ0LmlzRnJvemVuID0gZnVuY3Rpb24ob2JqLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzRnJvemVuLCB0cnVlKS50by5iZS5mcm96ZW47XG59O1xuYXNzZXJ0LmlzTm90RnJvemVuID0gZnVuY3Rpb24ob2JqLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzTm90RnJvemVuLCB0cnVlKS50by5ub3QuYmUuZnJvemVuO1xufTtcbmFzc2VydC5pc0VtcHR5ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzRW1wdHksIHRydWUpLnRvLmJlLmVtcHR5O1xufTtcbmFzc2VydC5pc05vdEVtcHR5ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90RW1wdHksIHRydWUpLnRvLm5vdC5iZS5lbXB0eTtcbn07XG4oLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbGlhcyhuYW1lLCBhcykge1xuICBhc3NlcnRbYXNdID0gYXNzZXJ0W25hbWVdO1xuICByZXR1cm4gYWxpYXM7XG59LCBcImFsaWFzXCIpKShcImlzT2tcIiwgXCJva1wiKShcImlzTm90T2tcIiwgXCJub3RPa1wiKShcInRocm93c1wiLCBcInRocm93XCIpKFwidGhyb3dzXCIsIFwiVGhyb3dcIikoXCJpc0V4dGVuc2libGVcIiwgXCJleHRlbnNpYmxlXCIpKFwiaXNOb3RFeHRlbnNpYmxlXCIsIFwibm90RXh0ZW5zaWJsZVwiKShcImlzU2VhbGVkXCIsIFwic2VhbGVkXCIpKFwiaXNOb3RTZWFsZWRcIiwgXCJub3RTZWFsZWRcIikoXCJpc0Zyb3plblwiLCBcImZyb3plblwiKShcImlzTm90RnJvemVuXCIsIFwibm90RnJvemVuXCIpKFwiaXNFbXB0eVwiLCBcImVtcHR5XCIpKFwiaXNOb3RFbXB0eVwiLCBcIm5vdEVtcHR5XCIpKFwiaXNDYWxsYWJsZVwiLCBcImlzRnVuY3Rpb25cIikoXCJpc05vdENhbGxhYmxlXCIsIFwiaXNOb3RGdW5jdGlvblwiKTtcblxuLy8gbGliL2NoYWkuanNcbnZhciB1c2VkID0gW107XG5mdW5jdGlvbiB1c2UoZm4pIHtcbiAgY29uc3QgZXhwb3J0cyA9IHtcbiAgICBBc3NlcnRpb25FcnJvcixcbiAgICB1dGlsOiB1dGlsc19leHBvcnRzLFxuICAgIGNvbmZpZyxcbiAgICBleHBlY3QsXG4gICAgYXNzZXJ0LFxuICAgIEFzc2VydGlvbixcbiAgICAuLi5zaG91bGRfZXhwb3J0c1xuICB9O1xuICBpZiAoIX51c2VkLmluZGV4T2YoZm4pKSB7XG4gICAgZm4oZXhwb3J0cywgdXRpbHNfZXhwb3J0cyk7XG4gICAgdXNlZC5wdXNoKGZuKTtcbiAgfVxuICByZXR1cm4gZXhwb3J0cztcbn1cbl9fbmFtZSh1c2UsIFwidXNlXCIpO1xuZXhwb3J0IHtcbiAgQXNzZXJ0aW9uLFxuICBBc3NlcnRpb25FcnJvcixcbiAgU2hvdWxkLFxuICBhc3NlcnQsXG4gIGNvbmZpZyxcbiAgZXhwZWN0LFxuICBzaG91bGQsXG4gIHVzZSxcbiAgdXRpbHNfZXhwb3J0cyBhcyB1dGlsXG59O1xuLyohXG4gKiBDaGFpIC0gZmxhZyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIHRlc3QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBleHBlY3RUeXBlcyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGdldEFjdHVhbCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIG1lc3NhZ2UgY29tcG9zaXRpb24gdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSB0cmFuc2ZlckZsYWdzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBjaGFpXG4gKiBodHRwOi8vY2hhaWpzLmNvbVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBpc1Byb3h5RW5hYmxlZCBoZWxwZXJcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gYWRkUHJvcGVydHkgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBhZGRMZW5ndGhHdWFyZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGdldFByb3BlcnRpZXMgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBwcm94aWZ5IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gYWRkTWV0aG9kIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gb3ZlcndyaXRlUHJvcGVydHkgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBvdmVyd3JpdGVNZXRob2QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBhZGRDaGFpbmluZ01ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGNvbXBhcmVCeUluc3BlY3QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBpc05hTiB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE1IFNha3RoaXByaXlhbiBWYWlyYW1hbmkgPHRoZWNoYXJnaW5ndm9sY2Fub0BnbWFpbC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBjaGFpXG4gKiBDb3B5cmlnaHQoYykgMjAxMSBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIGNoYWlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjpcblxuZGVlcC1lcWwvaW5kZXguanM6XG4gICgqIVxuICAgKiBkZWVwLWVxbFxuICAgKiBDb3B5cmlnaHQoYykgMjAxMyBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAgICogTUlUIExpY2Vuc2VkXG4gICAqKVxuICAoKiFcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBNZW1vaXplTWFwIGhhcyByZWNvcmRlZCBhIHJlc3VsdCBvZiB0aGUgdHdvIG9wZXJhbmRzXG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7TWVtb2l6ZU1hcH0gbWVtb2l6ZU1hcFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbnxudWxsfSByZXN1bHRcbiAgKilcbiAgKCohXG4gICAqIFNldCB0aGUgcmVzdWx0IG9mIHRoZSBlcXVhbGl0eSBpbnRvIHRoZSBNZW1vaXplTWFwXG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7TWVtb2l6ZU1hcH0gbWVtb2l6ZU1hcFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlc3VsdFxuICAqKVxuICAoKiFcbiAgICogUHJpbWFyeSBFeHBvcnRcbiAgICopXG4gICgqIVxuICAgKiBUaGUgbWFpbiBsb2dpYyBvZiB0aGUgYGRlZXBFcXVhbGAgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKG9wdGlvbmFsKSBBZGRpdGlvbmFsIG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMuY29tcGFyYXRvcl0gKG9wdGlvbmFsKSBPdmVycmlkZSBkZWZhdWx0IGFsZ29yaXRobSwgZGV0ZXJtaW5pbmcgY3VzdG9tIGVxdWFsaXR5LlxuICAgKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5tZW1vaXplXSAob3B0aW9uYWwpIFByb3ZpZGUgYSBjdXN0b20gbWVtb2l6YXRpb24gb2JqZWN0IHdoaWNoIHdpbGwgY2FjaGUgdGhlIHJlc3VsdHMgb2ZcbiAgICAgIGNvbXBsZXggb2JqZWN0cyBmb3IgYSBzcGVlZCBib29zdC4gQnkgcGFzc2luZyBgZmFsc2VgIHlvdSBjYW4gZGlzYWJsZSBtZW1vaXphdGlvbiwgYnV0IHRoaXMgd2lsbCBjYXVzZSBjaXJjdWxhclxuICAgICAgcmVmZXJlbmNlcyB0byBibG93IHRoZSBzdGFjay5cbiAgICogQHJldHVybiB7Qm9vbGVhbn0gZXF1YWwgbWF0Y2hcbiAgKilcbiAgKCohXG4gICAqIENvbXBhcmUgdHdvIFJlZ3VsYXIgRXhwcmVzc2lvbnMgZm9yIGVxdWFsaXR5LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7UmVnRXhwfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiAgKCohXG4gICAqIENvbXBhcmUgdHdvIFNldHMvTWFwcyBmb3IgZXF1YWxpdHkuIEZhc3RlciB0aGFuIG90aGVyIGVxdWFsaXR5IGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtTZXR9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge1NldH0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqKVxuICAoKiFcbiAgICogU2ltcGxlIGVxdWFsaXR5IGZvciBmbGF0IGl0ZXJhYmxlIG9iamVjdHMgc3VjaCBhcyBBcnJheXMsIFR5cGVkQXJyYXlzIG9yIE5vZGUuanMgYnVmZmVycy5cbiAgICpcbiAgICogQHBhcmFtIHtJdGVyYWJsZX0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7SXRlcmFibGV9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiAgKCohXG4gICAqIFNpbXBsZSBlcXVhbGl0eSBmb3IgZ2VuZXJhdG9yIG9iamVjdHMgc3VjaCBhcyB0aG9zZSByZXR1cm5lZCBieSBnZW5lcmF0b3IgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0l0ZXJhYmxlfSBsZWZ0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtJdGVyYWJsZX0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqKVxuICAoKiFcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiBvYmplY3QgaGFzIGFuIEBAaXRlcmF0b3IgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBvYmplY3QgaGFzIGFuIEBAaXRlcmF0b3IgZnVuY3Rpb24uXG4gICAqKVxuICAoKiFcbiAgICogR2V0cyBhbGwgaXRlcmF0b3IgZW50cmllcyBmcm9tIHRoZSBnaXZlbiBPYmplY3QuIElmIHRoZSBPYmplY3QgaGFzIG5vIEBAaXRlcmF0b3IgZnVuY3Rpb24sIHJldHVybnMgYW4gZW1wdHkgYXJyYXkuXG4gICAqIFRoaXMgd2lsbCBjb25zdW1lIHRoZSBpdGVyYXRvciAtIHdoaWNoIGNvdWxkIGhhdmUgc2lkZSBlZmZlY3RzIGRlcGVuZGluZyBvbiB0aGUgQEBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFuIGFycmF5IG9mIGVudHJpZXMgZnJvbSB0aGUgQEBpdGVyYXRvciBmdW5jdGlvblxuICAgKilcbiAgKCohXG4gICAqIEdldHMgYWxsIGVudHJpZXMgZnJvbSBhIEdlbmVyYXRvci4gVGhpcyB3aWxsIGNvbnN1bWUgdGhlIGdlbmVyYXRvciAtIHdoaWNoIGNvdWxkIGhhdmUgc2lkZSBlZmZlY3RzLlxuICAgKlxuICAgKiBAcGFyYW0ge0dlbmVyYXRvcn0gdGFyZ2V0XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYW4gYXJyYXkgb2YgZW50cmllcyBmcm9tIHRoZSBHZW5lcmF0b3IuXG4gICAqKVxuICAoKiFcbiAgICogR2V0cyBhbGwgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBrZXlzIGZyb20gYSB0YXJnZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAgICogQHJldHVybnMge0FycmF5fSBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIGtleXMgZnJvbSB0aGUgdGFyZ2V0LlxuICAgKilcbiAgKCohXG4gICAqIERldGVybWluZXMgaWYgdHdvIG9iamVjdHMgaGF2ZSBtYXRjaGluZyB2YWx1ZXMsIGdpdmVuIGEgc2V0IG9mIGtleXMuIERlZmVycyB0byBkZWVwRXF1YWwgZm9yIHRoZSBlcXVhbGl0eSBjaGVjayBvZlxuICAgKiBlYWNoIGtleS4gSWYgYW55IHZhbHVlIG9mIHRoZSBnaXZlbiBrZXkgaXMgbm90IGVxdWFsLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gZmFsc2UgKGVhcmx5KS5cbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtBcnJheX0ga2V5cyBBbiBhcnJheSBvZiBrZXlzIHRvIGNvbXBhcmUgdGhlIHZhbHVlcyBvZiBsZWZ0SGFuZE9wZXJhbmQgYW5kIHJpZ2h0SGFuZE9wZXJhbmQgYWdhaW5zdFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqKVxuICAoKiFcbiAgICogUmVjdXJzaXZlbHkgY2hlY2sgdGhlIGVxdWFsaXR5IG9mIHR3byBPYmplY3RzLiBPbmNlIGJhc2ljIHNhbWVuZXNzIGhhcyBiZWVuIGVzdGFibGlzaGVkIGl0IHdpbGwgZGVmZXIgdG8gYGRlZXBFcXVhbGBcbiAgICogZm9yIGVhY2ggZW51bWVyYWJsZSBrZXkgaW4gdGhlIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiAgKCohXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSBwcmltaXRpdmUuXG4gICAqXG4gICAqIFRoaXMgaW50ZW50aW9uYWxseSByZXR1cm5zIHRydWUgZm9yIGFsbCBvYmplY3RzIHRoYXQgY2FuIGJlIGNvbXBhcmVkIGJ5IHJlZmVyZW5jZSxcbiAgICogaW5jbHVkaW5nIGZ1bmN0aW9ucyBhbmQgc3ltYm9scy5cbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqKVxuKi9cbiIsICIvKioqKioqKipcblxuIENvbnZlcnQgY2hhaS1kb20gMS44LjEgdG8gZXMgbW9kdWxlLCB3aXRob3V0IGFueSBvdGhlciBtb2RpZmljYXRpb24uXG4gRnJvbSBodHRwczovL2dpdGh1Yi5jb20vbmF0aGFuYm9rdGFlL2NoYWktZG9tL2Jsb2IvODZjMzQyMy9jaGFpLWRvbS5qc1xuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbmF0aGFuYm9rdGFlL2NoYWktZG9tL2lzc3Vlcy8zOFxuXG4gVXNhZ2U6XG4gaW1wb3J0IHsgY2hhaURvbSB9IGZyb20gJzxwYXRoLXRvPi9jaGFpLWRvbSc7XG4gY2hhaS51c2UoY2hhaURvbSk7XG5cbiBDb3B5cmlnaHQgKGMpIDIwMTUgTmF0aGFuIEJsYWNrIGFuZCBvdGhlciBjb250cmlidXRvcnNcblxuIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBsaWNlbnNlLiBGb3IgYSBjb3B5LCBzZWUgPGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUPi5cblxuICoqKioqKioqKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFpRG9tKGNoYWksIHV0aWxzKSB7XG4gICAgdmFyIGZsYWcgPSB1dGlscy5mbGFnLFxuXG4gICAgICAgIGVsVG9TdHJpbmcgPSBmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgbGV0IGRlc2NcbiAgICAgICAgICAgIGlmIChpc05vZGVMaXN0KGVsKSkge1xuICAgICAgICAgICAgICAgIGlmIChlbC5sZW5ndGggPT09IDApIHJldHVybiAnZW1wdHkgTm9kZUxpc3QnXG4gICAgICAgICAgICAgICAgZGVzYyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGVsLCAwLCA1KS5tYXAoZWxUb1N0cmluZykuam9pbignLCAnKVxuICAgICAgICAgICAgICAgIHJldHVybiBlbC5sZW5ndGggPiA1ID8gZGVzYyArICcuLi4gKCsnICsgKGVsLmxlbmd0aCAtIDUpICsgJyBtb3JlKScgOiBkZXNjXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVzYyA9IGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgaWYgKGVsLmlkKSB7XG4gICAgICAgICAgICAgICAgZGVzYyArPSAnIycgKyBlbC5pZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgIGRlc2MgKz0gJy4nICsgU3RyaW5nKGVsLmNsYXNzTmFtZSkucmVwbGFjZSgvXFxzKy9nLCAnLicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGVsLmF0dHJpYnV0ZXMsIGZ1bmN0aW9uKGF0dHIpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0ci5uYW1lICE9PSAnY2xhc3MnICYmIGF0dHIubmFtZSAhPT0gJ2lkJykge1xuICAgICAgICAgICAgICAgICAgICBkZXNjICs9ICdbJyArIGF0dHIubmFtZSArIChhdHRyLnZhbHVlID8gJz1cIicgKyBhdHRyLnZhbHVlICsgJ1wiXScgOiAnXScpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVybiBkZXNjXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXR0ckFzc2VydCA9IGZ1bmN0aW9uKG5hbWUsIHZhbCkge1xuICAgICAgICAgICAgbGV0IGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksIGFjdHVhbCA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKVxuXG4gICAgICAgICAgICBpZiAoIWZsYWcodGhpcywgJ25lZ2F0ZScpIHx8IHVuZGVmaW5lZCA9PT0gdmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICEhZWwuYXR0cmlidXRlc1tuYW1lXVxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgYW4gYXR0cmlidXRlICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBhbiBhdHRyaWJ1dGUgI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsIG5hbWVcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh1bmRlZmluZWQgIT09IHZhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICB2YWwgPT09IGFjdHVhbFxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgYW4gYXR0cmlidXRlICcgKyB1dGlscy5pbnNwZWN0KG5hbWUpICsgJyB3aXRoIHRoZSB2YWx1ZSAje2V4cH0sIGJ1dCB0aGUgdmFsdWUgd2FzICN7YWN0fSdcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBhbiBhdHRyaWJ1dGUgJyArIHV0aWxzLmluc3BlY3QobmFtZSkgKyAnIHdpdGggdGhlIHZhbHVlICN7YWN0fSdcbiAgICAgICAgICAgICAgICAgICAgLCB2YWxcbiAgICAgICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcsIGFjdHVhbClcbiAgICAgICAgfSxcblxuICAgICAgICBpc0hUTUxFbGVtZW50ID0gZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBlbC5ub2RlVHlwZSA9PT0gMSAvLyB3aW5kb3cuTm9kZS5FTEVNRU5UX05PREVcbiAgICAgICAgfSxcblxuICAgICAgICBpc05vZGVMaXN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE5vZGVMaXN0XSdcbiAgICAgICAgfVxuXG4gICAgdXRpbHMuZWxUb1N0cmluZyA9IGVsVG9TdHJpbmdcbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2F0dHInLCBhdHRyQXNzZXJ0KVxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnYXR0cmlidXRlJywgYXR0ckFzc2VydClcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnY2xhc3MnLCBmdW5jdGlvbihjbGFzc05hbWUpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKVxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBoYXZlIGNsYXNzICN7ZXhwfSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgbm90IHRvIGhhdmUgY2xhc3MgI3tleHB9J1xuICAgICAgICAgICAgLCBjbGFzc05hbWVcbiAgICAgICAgKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2lkJywgZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBlbC5pZCA9PSBpZFxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBoYXZlIGlkICN7ZXhwfSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgbm90IHRvIGhhdmUgaWQgI3tleHB9J1xuICAgICAgICAgICAgLCBpZFxuICAgICAgICApXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaHRtbCcsIGZ1bmN0aW9uKGh0bWwpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksIGFjdHVhbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLmlubmVySFRNTFxuXG4gICAgICAgIGlmIChmbGFnKHRoaXMsICdjb250YWlucycpKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICBhY3R1YWwuaW5kZXhPZihodG1sKSA+PSAwXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgI3thY3R9IHRvIGNvbnRhaW4gSFRNTCAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgI3thY3R9IG5vdCB0byBjb250YWluIEhUTUwgI3tleHB9J1xuICAgICAgICAgICAgICAgICwgaHRtbFxuICAgICAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICBhY3R1YWwgPT09IGh0bWxcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgSFRNTCAje2V4cH0sIGJ1dCB0aGUgSFRNTCB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgbm90IHRvIGhhdmUgSFRNTCAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCBodG1sXG4gICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoJ3RyaW1tZWQnLCBudWxsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgZmxhZyh0aGlzLCAndHJpbS10ZXh0JywgdHJ1ZSlcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCd0ZXh0JywgZnVuY3Rpb24odGV4dCkge1xuICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksIGNvbnRhaW5zID0gZmxhZyh0aGlzLCAnY29udGFpbnMnKSxcbiAgICAgICAgICAgIHRyaW0gPSBmbGFnKHRoaXMsICd0cmltLXRleHQnKSwgYWN0dWFsLCByZXN1bHRcblxuICAgICAgICBpZiAoaXNOb2RlTGlzdChvYmopKSB7XG4gICAgICAgICAgICBhY3R1YWwgPSBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwob2JqLCBmdW5jdGlvbihlbCkgeyByZXR1cm4gdHJpbSA/IGVsLnRleHRDb250ZW50LnRyaW0oKSA6IGVsLnRleHRDb250ZW50IH0pXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0ZXh0KSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRhaW5zID9cbiAgICAgICAgICAgICAgICAgICAgdGV4dFtmbGFnKHRoaXMsICduZWdhdGUnKSA/ICdzb21lJyA6ICdldmVyeSddKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc29tZS5jYWxsKG9iaiwgZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRyaW0gPyBlbC50ZXh0Q29udGVudC50cmltKCkgOiBlbC50ZXh0Q29udGVudCkgPT09IHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgdXRpbHMuZXFsKGFjdHVhbCwgdGV4dClcblxuICAgICAgICAgICAgICAgIGFjdHVhbCA9IGFjdHVhbC5qb2luKClcbiAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5qb2luKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0dWFsID0gYWN0dWFsLmpvaW4oJycpXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29udGFpbnMgPyBhY3R1YWwuaW5kZXhPZih0ZXh0KSA+PSAwIDogYWN0dWFsID09PSB0ZXh0XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY3R1YWwgPSB0cmltID8gb2JqLnRleHRDb250ZW50LnRyaW0oKSA6IG9iai50ZXh0Q29udGVudFxuICAgICAgICAgICAgcmVzdWx0ID0gY29udGFpbnMgPyBhY3R1YWwuaW5kZXhPZih0ZXh0KSA+PSAwIDogYWN0dWFsID09PSB0ZXh0XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb2JqRGVzYyA9IGVsVG9TdHJpbmcob2JqKSwgdGV4dE1zZyA9IHRyaW0gPyAndHJpbW1lZCB0ZXh0JyA6ICd0ZXh0J1xuICAgICAgICBpZiAoY29udGFpbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIHJlc3VsdFxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBvYmpEZXNjICsgJyB0byBjb250YWluICN7ZXhwfSwgYnV0IHRoZSAnICsgdGV4dE1zZyArICcgd2FzICN7YWN0fSdcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgb2JqRGVzYyArICcgbm90IHRvIGNvbnRhaW4gI3tleHB9LCBidXQgdGhlICcgKyB0ZXh0TXNnICsgJyB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICwgdGV4dFxuICAgICAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICByZXN1bHRcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgb2JqRGVzYyArICcgdG8gaGF2ZSAnICsgdGV4dE1zZyArICcgI3tleHB9LCBidXQgdGhlICcgKyB0ZXh0TXNnICsgJyB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBvYmpEZXNjICsgJyBub3QgdG8gaGF2ZSAnICsgdGV4dE1zZyArICcgI3tleHB9J1xuICAgICAgICAgICAgICAgICwgdGV4dFxuICAgICAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCd2YWx1ZScsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHZhciBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLCBhY3R1YWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKS52YWx1ZVxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcpLnZhbHVlID09PSB2YWx1ZVxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBoYXZlIHZhbHVlICN7ZXhwfSwgYnV0IHRoZSB2YWx1ZSB3YXMgI3thY3R9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSB2YWx1ZSAje2V4cH0nXG4gICAgICAgICAgICAsIHZhbHVlXG4gICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICApXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZVByb3BlcnR5KCdleGlzdCcsIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgICAgIGlmIChpc05vZGVMaXN0KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgb2JqLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgYW4gZW1wdHkgTm9kZUxpc3QgdG8gaGF2ZSBub2RlcydcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGV4aXN0JylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVQcm9wZXJ0eSgnZW1wdHknLCBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgICAgICBpZiAoaXNIVE1MRWxlbWVudChvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIG9iai5jaGlsZHJlbi5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gYmUgZW1wdHknXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBiZSBlbXB0eScpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZUxpc3Qob2JqKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICBvYmoubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGJlIGVtcHR5J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgYmUgZW1wdHknKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCgnbGVuZ3RoJyxcbiAgICAgICAgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgaWYgKGlzTm9kZUxpc3Qob2JqKSB8fCBpc0hUTUxFbGVtZW50KG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFjdHVhbExlbmd0aCA9IG9iai5jaGlsZHJlbiA/IG9iai5jaGlsZHJlbi5sZW5ndGggOiBvYmoubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsTGVuZ3RoID09PSBsZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGhhdmUgI3tleHB9IGNoaWxkcmVuIGJ1dCBpdCBoYWQgI3thY3R9IGNoaWxkcmVuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGhhdmUgI3tleHB9IGNoaWxkcmVuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgLCBsZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICwgYWN0dWFsTGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgX3N1cGVyLmNhbGwodGhpcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIClcblxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlTWV0aG9kKCdtYXRjaCcsIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgICAgICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICAgICAgaWYgKGlzSFRNTEVsZW1lbnQob2JqKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICBvYmoubWF0Y2hlcyhzZWxlY3RvcilcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbWF0Y2ggI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgbWF0Y2ggI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsIHNlbGVjdG9yXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc05vZGVMaXN0KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgKCEhb2JqLmxlbmd0aCAmJiBBcnJheS5wcm90b3R5cGUuZXZlcnkuY2FsbChvYmosIGZ1bmN0aW9uKGVsKSB7IHJldHVybiBlbC5tYXRjaGVzKHNlbGVjdG9yKSB9KSlcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbWF0Y2ggI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgbWF0Y2ggI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsIHNlbGVjdG9yXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCgnY29udGFpbicsXG4gICAgICAgIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN1Yml0ZW0pIHtcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICBpZiAoaXNIVE1MRWxlbWVudChvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3ViaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhb2JqLnF1ZXJ5U2VsZWN0b3Ioc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBjb250YWluICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgY29udGFpbiAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBzdWJpdGVtKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmNvbnRhaW5zKHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gY29udGFpbiAnICsgZWxUb1N0cmluZyhzdWJpdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBjb250YWluICcgKyBlbFRvU3RyaW5nKHN1Yml0ZW0pKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIF9zdXBlci5jYWxsKHRoaXMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2Rlc2NlbmRhbnQnLCBmdW5jdGlvbihzdWJpdGVtKSB7XG4gICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgYWN0dWFsID0gc3ViaXRlbVxuXG4gICAgICAgIGlmICh0eXBlb2Ygc3ViaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGFjdHVhbCA9IG9iai5xdWVyeVNlbGVjdG9yKHN1Yml0ZW0pXG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAhIWFjdHVhbFxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGhhdmUgZGVzY2VuZGFudCAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGhhdmUgZGVzY2VuZGFudCAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCBzdWJpdGVtKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgb2JqLmNvbnRhaW5zKHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gY29udGFpbiAnICsgZWxUb1N0cmluZyhzdWJpdGVtKVxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBjb250YWluICcgKyBlbFRvU3RyaW5nKHN1Yml0ZW0pKVxuICAgICAgICB9XG5cbiAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgYWN0dWFsKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2Rlc2NlbmRhbnRzJywgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpLFxuICAgICAgICAgICAgYWN0dWFsID0gb2JqLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpXG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgISFhY3R1YWwubGVuZ3RoXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBoYXZlIGRlc2NlbmRhbnRzICN7ZXhwfSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBoYXZlIGRlc2NlbmRhbnRzICN7ZXhwfSdcbiAgICAgICAgICAgICwgc2VsZWN0b3IpXG4gICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcsIGFjdHVhbClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkUHJvcGVydHkoJ2Rpc3BsYXllZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSxcbiAgICAgICAgICAgIGFjdHVhbCA9IGRvY3VtZW50LmJvZHkuY29udGFpbnMoZWwpID8gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLmRpc3BsYXkgOiBlbC5zdHlsZS5kaXNwbGF5XG5cbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBhY3R1YWwgIT09ICdub25lJ1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBiZSBkaXNwbGF5ZWQsIGJ1dCBpdCB3YXMgbm90J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBub3QgYmUgZGlzcGxheWVkLCBidXQgaXQgd2FzIGFzICcgKyBhY3R1YWxcbiAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgIClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkUHJvcGVydHkoJ3Zpc2libGUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksXG4gICAgICAgICAgICBhY3R1YWwgPSBkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGVsKSA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKS52aXNpYmlsaXR5IDogZWwuc3R5bGUudmlzaWJpbGl0eVxuXG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgYWN0dWFsICE9PSAnaGlkZGVuJyAmJiBhY3R1YWwgIT09ICdjb2xsYXBzZSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gYmUgdmlzaWJsZSwgYnV0IGl0IHdhcyAnICsgKGFjdHVhbCA9PT0gJ2hpZGRlbicgPyAnaGlkZGVuJyA6ICdjb2xsYXBzZWQnKVxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBub3QgYmUgdmlzaWJsZSwgYnV0IGl0IHdhcydcbiAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgIClcbiAgICB9KVxufSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXh0ZW5kfSBmcm9tIFwiLi4vLi4vc291cmNlL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5leHBvcnQgY29uc3QgaXNCcm93c2VyID0gbmV3IEZ1bmN0aW9uKFwidHJ5IHtyZXR1cm4gdGhpcz09PXdpbmRvdzt9Y2F0Y2goZSl7IHJldHVybiBmYWxzZTt9XCIpO1xuZXhwb3J0IGNvbnN0IGlzTm9kZSA9IG5ldyBGdW5jdGlvbihcInRyeSB7cmV0dXJuIHRoaXM9PT1nbG9iYWw7fWNhdGNoKGUpe3JldHVybiBmYWxzZTt9XCIpO1xuXG5sZXQgSlNET01FeHBvcnQgPSBudWxsO1xuXG4vKipcbiAqIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGRvbSBzdGFjayBpbiB0aGUgbm9kZSBlbnZpcm9ubWVudFxuICpcbiAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj58UHJvbWlzZTx2b2lkPn1cbiAqL1xuZnVuY3Rpb24gaW5pdEpTRE9NKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJiB3aW5kb3dbJ0RPTVBhcnNlciddKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICBjb25zdCBnID0gZ2V0R2xvYmFsKCk7XG5cbiAgICBvcHRpb25zID0gZXh0ZW5kKHt9LCB7XG4gICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlLFxuICAgICAgICBjb250ZW50VHlwZTogXCJ0ZXh0L2h0bWxcIixcbiAgICAgICAgaW5jbHVkZU5vZGVMb2NhdGlvbnM6IHRydWUsXG4gICAgICAgIHN0b3JhZ2VRdW90YTogMTAwMDAwMDAsXG4gICAgICAgIHJ1blNjcmlwdHM6IFwiZGFuZ2Vyb3VzbHlcIixcbiAgICAgICAgcmVzb3VyY2VzOiBcInVzYWJsZVwiXG4gICAgfSwgb3B0aW9ucyB8fCB7fSlcblxuICAgIHJldHVybiBpbXBvcnQoXCJqc2RvbVwiKS50aGVuKCh7SlNET019KSA9PiB7XG4gICAgICAgIEpTRE9NRXhwb3J0ID0gSlNET007XG4gICAgICAgIGNvbnN0IHt3aW5kb3d9ID0gbmV3IEpTRE9NKGA8IURPQ1RZUEUgaHRtbD48aHRtbCBsYW5nPVwiZW5cIj48aGVhZD48dGl0bGU+VGVzdDwvdGl0bGU+PC9oZWFkPjxib2R5PjxkaXYgaWQ9XCJtb2Nrc1wiPjwvZGl2PjwvYm9keT48L2h0bWw+YCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZ1snd2luZG93J10gPSB3aW5kb3c7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICdCbG9iJyxcbiAgICAgICAgICAgICAgICAgICAgJ0NTU1N0eWxlU2hlZXQnLFxuICAgICAgICAgICAgICAgICAgICAnY3VzdG9tRWxlbWVudHMnLFxuICAgICAgICAgICAgICAgICAgICAnQ3VzdG9tRXZlbnQnLFxuICAgICAgICAgICAgICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRE9NRXhjZXB0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ0RPTUltcGxlbWVudGF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ0RvY3VtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRE9NUGFyc2VyJyxcbiAgICAgICAgICAgICAgICAgICAgJ0VsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRWxlbWVudEludGVybmFscycsXG4gICAgICAgICAgICAgICAgICAgICdFdmVudCcsXG4gICAgICAgICAgICAgICAgICAgICdFdmVudFRhcmdldCcsXG4gICAgICAgICAgICAgICAgICAgICdnZXRDb21wdXRlZFN0eWxlJyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxCdXR0b25FbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxEaXZFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxEb2N1bWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MRm9ybUVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTElucHV0RWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MU2NyaXB0RWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTFNlbGVjdEVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTFRlbXBsYXRlRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MVGV4dEFyZWFFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0lucHV0RXZlbnQnLFxuICAgICAgICAgICAgICAgICAgICAnS2V5Ym9hcmRFdmVudCcsXG4gICAgICAgICAgICAgICAgICAgICdNdXRhdGlvbk9ic2VydmVyJyxcbiAgICAgICAgICAgICAgICAgICAgJ25hdmlnYXRvcicsXG4gICAgICAgICAgICAgICAgICAgICdOb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgJ05vZGVGaWx0ZXInLFxuICAgICAgICAgICAgICAgICAgICAnTm9kZUxpc3QnLFxuICAgICAgICAgICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICAgICAgICAgICdTaGFkb3dSb290JyxcbiAgICAgICAgICAgICAgICAgICAgJ1hNTFNlcmlhbGl6ZXInLFxuICAgICAgICAgICAgICAgIF0uZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ1trZXldID0gd2luZG93W2tleV0gICAgXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHNldHRpbmcga2V5XCIsIGtleSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGltcG9ydChcImRvbS1zdG9yYWdlXCIpLnRoZW4oKHtkZWZhdWx0OiBTdG9yYWdlfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZy5sb2NhbFN0b3JhZ2UgPSBuZXcgU3RvcmFnZShudWxsLCB7c3RyaWN0OiB0cnVlfSk7XG4gICAgICAgICAgICAgICAgICAgIGcuc2Vzc2lvblN0b3JhZ2UgPSBuZXcgU3RvcmFnZShudWxsLCB7c3RyaWN0OiB0cnVlfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgd2luZG93Wydsb2NhbFN0b3JhZ2UnXSA9IGcubG9jYWxTdG9yYWdlO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3dbJ3Nlc3Npb25TdG9yYWdlJ10gPSBnLnNlc3Npb25TdG9yYWdlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZyk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgbG9hZGluZyBkb20tc3RvcmFnZVwiLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG5cbiAgICB9KTtcbn1cblxuZXhwb3J0IHtpbml0SlNET00sIEpTRE9NRXhwb3J0fSBcblxuIiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuLy8gbGFuZ3VhZ2U9aHRtbFxubGV0IGh0bWwxID0gYFxuICAgIDxtb25zdGVyLXNwbGl0LXBhbmVsIGlkPVwibXktc3BsaXQtcGFuZWxcIj5cbiAgICAgICBcbiAgICA8L21vbnN0ZXItc3BsaXQtcGFuZWw+XG5gO1xuXG5sZXQgU3BsaXRTY3JlZW47XG5cbmRlc2NyaWJlKCdTcGxpdFNjcmVlbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IHByb21pc2VzID0gW11cblxuICAgICAgICAgICAgaWYgKCFnbG9iYWxbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgQ3J5cHRvID0gbVsnQ3J5cHRvJ107XG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFsnY3J5cHRvJ10gPSBuZXcgQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zcGxpdC1wYW5lbC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFNwbGl0U2NyZWVuID0gbVsnU3BsaXRQYW5lbCddO1xuICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpPT57XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIGJ1dHRvbnMgYW5kIFNwbGl0U2NyZWVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgU3BsaXRTY3JlZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXktc3BsaXQtcGFuZWwnKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoU3BsaXRTY3JlZW4pLmlzLmluc3RhbmNlb2YoSFRNTEVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRpdiA9IFNwbGl0U2NyZWVuLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZGl2Lmhhc0NoaWxkTm9kZXMoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbi8vIGxhbmd1YWdlPWh0bWxcbmxldCBodG1sMSA9IGBcbiAgICA8bW9uc3Rlci1wYW5lbCBpZD1cIm15LXBhbmVsXCI+XG4gICAgICAgXG4gICAgPC9tb25zdGVyLXBhbmVsPlxuYDtcblxubGV0IFNwbGl0U2NyZWVuO1xuXG5kZXNjcmliZSgnU3BsaXRTY3JlZW4nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG5cbiAgICAgICAgICAgIGlmICghZ2xvYmFsWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IENyeXB0byA9IG1bJ0NyeXB0byddO1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWxbJ2NyeXB0byddID0gbmV3IENyeXB0bygpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvcGFuZWwubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBTcGxpdFNjcmVlbiA9IG1bJ1BhbmVsJ107XG4gICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCk9PntcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgYnV0dG9ucyBhbmQgU3BsaXRTY3JlZW4nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBTcGxpdFNjcmVlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteS1wYW5lbCcpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChTcGxpdFNjcmVlbikuaXMuaW5zdGFuY2VvZihIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGl2ID0gU3BsaXRTY3JlZW4uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdkaXYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChkaXYuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApXG5cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7aW5zdGFuY2VTeW1ib2x9IGZyb20gXCIuLi8uLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuICAgIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG4gICAgQVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcbiAgICBhc3NlbWJsZU1ldGhvZFN5bWJvbCwgZ2V0U2xvdHRlZEVsZW1lbnRzLFxuICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHtUZXh0U3R5bGVTaGVldH0gZnJvbSBcIi4vc3R5bGVzaGVldC90ZXh0Lm1qc1wiO1xuXG5pbXBvcnQge1BsdWdpbiwgcmFuZ2VTeW1ib2x9IGZyb20gXCIuLi9wbHVnaW4ubWpzXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi9mb3JtL2J1dHRvbi5tanNcIjtcbmltcG9ydCBcIi4uLy4uLy4uL2Zvcm0vYnV0dG9uLWJhci5tanNcIjtcbmltcG9ydCB7ZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnR9IGZyb20gXCIuLi8uLi8uLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuXG5pbXBvcnQge2NvbXB1dGVQb3NpdGlvbiwgb2Zmc2V0LCBmbGlwfSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcblxuXG5leHBvcnQge1RleHR9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBlZGl0b3JFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZWRpdG9yRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udGVudGVkaXRhYmxlRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRlbnRlZGl0YWJsZUVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRvb2xiYXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwidG9vbGJhckVsZW1lbnRcIik7XG5cblxuLyoqXG4gKiBBbiBFZGl0b3JcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9jb21wb25lbnRzL2NvbnRlbnQvZWRpdG9yL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2NvbXBvbmVudHMvY29udGVudC9lZGl0b3Itc2ltcGxlXG4gKlxuICogQHNpbmNlIDMuODkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIEVkaXRvciB0aGF0IGNhbiBtYWtlIHlvdXIgbGlmZSBlYXNpZXIgYW5kIGFsc28gbG9va3MgZ29vZC5cbiAqL1xuY2xhc3MgVGV4dCBleHRlbmRzIFBsdWdpbiB7XG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG4gICAgICogQHJldHVybnMge3N5bWJvbH1cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG4gICAgICAgIHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2NvbnRlbnQvZWRpdG9yL3BsdWdpbi90ZXh0QEBpbnN0YW5jZVwiKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHJldHVybiB7Q29tcG9uZW50cy5Db250ZW50LkVkaXRvclxuICAgICAqL1xuICAgIFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG4gICAgICAgIHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuICAgICAgICBpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcbiAgICAgICAgaW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuICAgICAgICBpbml0Q29udGVudEVkaXRhYmxlLmNhbGwodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgVGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuICAgICAqXG4gICAgICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuICAgICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsYWJlbHMgTGFiZWwgZGVmaW5pdGlvbnNcbiAgICAgKiBAcHJvcGVydHkge09iamVjdH0gYWN0aW9ucyBDYWxsYmFja3NcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gYWN0aW9ucy5jbGljaz1cInRocm93IEVycm9yXCIgQ2FsbGJhY2sgd2hlbiBjbGlja2VkXG4gICAgICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIEZlYXR1cmVzXG4gICAgICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXMgQ1NTIGNsYXNzZXNcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRpc2FibGVkPWZhbHNlIERpc2FibGVkIHN0YXRlXG4gICAgICovXG4gICAgZ2V0IGRlZmF1bHRzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcbiAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgIG1haW46IGdldFRlbXBsYXRlKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFiZWxzOiB7fSxcbiAgICAgICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZmVhdHVyZXM6IHt9LFxuICAgICAgICAgICAgYWN0aW9uczoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRoZSBjbGljayBhY3Rpb24gaXMgbm90IGRlZmluZWRcIik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgICAqIEByZXR1cm5zIHtQbHVnaW59XG4gICAgICovXG4gICAgc2V0UmFuZ2UocmFuZ2UpIHtcbiAgICAgICAgc3VwZXIuc2V0UmFuZ2UocmFuZ2UpO1xuXG4gICAgICAgIGlmIChyYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyICYmIHJhbmdlLnN0YXJ0T2Zmc2V0ID09PSByYW5nZS5lbmRPZmZzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc2hvd1Rvb2xiYXIuY2FsbCh0aGlzKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7VGV4dH1cbiAgICAgKi9cbiAgICByZXNldFJhbmdlKCkge1xuICAgICAgICBzdXBlci5yZXNldFJhbmdlKCk7XG4gICAgICAgIGhpZGVUb29sYmFyLmNhbGwodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICByZXR1cm4gXCJtb25zdGVyLWVkaXRvci1wbHVnaW4tdGV4dFwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcbiAgICAgICAgcmV0dXJuIFtUZXh0U3R5bGVTaGVldF07XG4gICAgfVxuXG5cbn1cblxuZnVuY3Rpb24gaW5pdENvbnRlbnRFZGl0YWJsZSgpIHtcbiAgICBjb25zdCBzbG90dGVkID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcyk7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHNsb3R0ZWQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIiwgXCJ0cnVlXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmZ1bmN0aW9uIHNob3dUb29sYmFyKCkge1xuICAgIFxuICAgIGlmKHNob3VsZFNob3dUZXh0Rm9ybWF0dGluZ1Rvb2xiYXIodGhpcy5nZXRSYW5nZSgpKSkge1xuICAgICAgICB0aGlzW3Rvb2xiYXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gXCJmbGV4XCI7XG4gICAgICAgIHBvc2l0aW9uVG9vbGJhcih0aGlzW3Rvb2xiYXJFbGVtZW50U3ltYm9sXSwgdGhpc1tlZGl0b3JFbGVtZW50U3ltYm9sXSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBoaWRlVG9vbGJhcigpIHtcbiAgICB0aGlzW3Rvb2xiYXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0YWJsZVdyYXBwZXJTaG91bGRTaG93VGV4dEZvcm1hdHRpbmdUb29sYmFyKHJhbmdlKSB7XG4gICAgcmV0dXJuIHNob3VsZFNob3dUZXh0Rm9ybWF0dGluZ1Rvb2xiYXIocmFuZ2UpO1xufVxuXG4vKipcbiAqIDxkaXY+fEhlbGxvLCB3b3JsZCF8PC9kaXY+ICgxKVxuICpcbiAqIDxkaXY+fEhlbGxvLCB8d29ybGR8ITwvZGl2PiAoMilcbiAqXG4gKiA8cD58SGVsbG8sIDwvcD48ZGl2PndvcmxkfCE8L2Rpdj4gICgzKVxuICpcbiAqIHw8ZGl2PkhlbGxvLCB3b3JsZCE8L2Rpdj58ICg0KVxuICpcbiAqIDxkaXY+SGVsbG8sIDxzcGFuPnx3b3JsZHw8L3NwYW4+ITwvZGl2PiAoNSlcbiAqIFxuICogPGRpdj5IZWxsbywgfDxzcGFuPndvcmxkPC9zcGFuPiB0ZXN0fCE8L2Rpdj4gKDYpXG4gKlxuICogPGgxPnxTdGFydCBvZiB0aXRsZTwvaDE+PHA+YW5kIHNvbWUgdGV4dHwgaW4gYSBwYXJhZ3JhcGguPC9wPiAoNylcbiAqXG4gKiA8ZGl2PkhlbGxvIDxzcGFuPnx3b3JsZDwvc3Bhbj4gYmVhdXRpZnVsPC9kaXY+IHBsYW5ldHwgKDgpXG4gKlxuICogfDxkaXY+SGVsbG8sIDxzcGFuPndvcmxkPC9zcGFuPiE8L2Rpdj4gQW5kIG1vcmUgdGV4dHwgKDkpXG4gKlxuICogPHA+U29tZSA8YSBocmVmPVwiI1wiPnxsaW5rZWQgdGV4dHw8L2E+IGhlcmUuPC9wPiAoMTApXG4gKlxuICogPHA+fFNvbWUgdGV4dCA8aW1nIHNyYz1cImV4YW1wbGUuanBnXCI+IGFuZCBtb3JlIHRleHR8IGNvbnRpbnVlcy48L3A+ICgxMSlcbiAqXG4gKiA8cD58Rmlyc3QgcGFyYWdyYXBofC48L3A+ICgxMilcbiAqIDxwPlVuc2VsZWN0ZWQgbWlkZGxlIHBhcmFncmFwaC48L3A+XG4gKiA8cD58TGFzdCBwYXJhZ3JhcGh8LjwvcD5cbiAqXG4gKiA8dWw+ICgxMylcbiAqICAgPGxpPnxJdGVtIDE8L2xpPlxuICogICA8bGk+SXRlbSAyPC9saT5cbiAqICAgPGxpPkl0ZW0gM3w8L2xpPlxuICogPC91bD5cbiAqXG4gKiA8aDE+fEhlYWRlcjwvaDE+ICgxNClcbiAqIDxkaXY+U29tZSA8c3Bhbj50ZXh0IHxpbiBhPC9zcGFuPiBkaXYuPC9kaXY+ICgxNSlcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSBUaGUgcmFuZ2Ugb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLlxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHRvb2xiYXIgc2hvdWxkIGJlIHZpc2libGUsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkU2hvd1RleHRGb3JtYXR0aW5nVG9vbGJhcihyYW5nZSkge1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBub2RlIG9yIGl0cyBwYXJlbnQgY2FuIGJlIGZvcm1hdHRlZFxuICAgIGZ1bmN0aW9uIGlzRm9ybWF0QWJsZShub2RlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdEFibGVUYWdzID0gWydTUEFOJywgJ0RJVicsICdQJywgJ1NUUk9ORycsICdFTScsICdCJywgJ0knLCAnTEFCRUwnXTtcbiAgICAgICAgbGV0IGN1cnJlbnROb2RlID0gbm9kZTtcbiAgICAgICAgd2hpbGUgKGN1cnJlbnROb2RlICYmIGN1cnJlbnROb2RlLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0QWJsZVRhZ3MuaW5jbHVkZXMoY3VycmVudE5vZGUubm9kZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlQ29udGVudHMgPSByYW5nZS5jbG9uZUNvbnRlbnRzKCk7XG4gICAgbGV0IHRleHROb2RlcyA9IEFycmF5LmZyb20ocmFuZ2VDb250ZW50cy5xdWVyeVNlbGVjdG9yQWxsKCcqJykpLmZpbHRlcihub2RlID0+IG5vZGUubm9kZVR5cGUgPT09IDMpO1xuXG4gICAgcmV0dXJuIHRleHROb2Rlcy5ldmVyeShpc0Zvcm1hdEFibGUpO1xufVxuXG5cbmZ1bmN0aW9uIHBvc2l0aW9uVG9vbGJhcih0b29sYmFyLCBlbGVtZW50KSB7XG5cbiAgICB0cnkge1xuICAgICAgICBjb21wdXRlUG9zaXRpb24oZWxlbWVudCwgdG9vbGJhciwge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBcInRvcFwiLFxuICAgICAgICAgICAgbWlkZGxld2FyZTogW1xuICAgICAgICAgICAgICAgIGZsaXAoKSxcbiAgICAgICAgICAgICAgICBvZmZzZXQoMTApLFxuICAgICAgICAgICAgXSxcblxuICAgICAgICB9KS50aGVuKCh7eCwgeX0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odG9vbGJhci5zdHlsZSwge1xuICAgICAgICAgICAgICAgIGxlZnQ6IGAke3h9cHhgLFxuICAgICAgICAgICAgICAgIHRvcDogYCR7eX1weGAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlcnJvcj8ubWVzc2FnZSB8fCBcIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHBvc2l0aW9uaW5nIHRoZSB0b29sYmFyXCIpO1xuICAgICAgICB9KVxuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZXJyb3I/Lm1lc3NhZ2UgfHwgXCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwb3NpdGlvbmluZyB0aGUgdG9vbGJhclwiKTtcbiAgICB9XG5cblxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtpbml0RXZlbnRIYW5kbGVyfVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzW2VkaXRvckVsZW1lbnRTeW1ib2xdO1xuICAgIGNvbnN0IGJ1dHRvbnMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0FUVFJJQlVURV9ST0xFfT1cImZvcm1hdC1idXR0b25cIl1gKTtcblxuXG4gICAgZnVuY3Rpb24gaGFuZGxlQnV0dG9uQWN0aW9uKHN0eWxlUHJvcGVydHksIHN0eWxlVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWxmLmdldFJhbmdlKCk7XG4gICAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBhcHBseVN0eWxlVG9TZWxlY3Rpb24oc3R5bGVQcm9wZXJ0eSwgc3R5bGVWYWx1ZSwgcmFuZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4ge1xuICAgICAgICBjb25zdCBjb21tYW5kID0gYnV0dG9uLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1jb21tYW5kXCIpO1xuICAgICAgICBzd2l0Y2ggKGNvbW1hbmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJib2xkXCI6XG4gICAgICAgICAgICAgICAgYnV0dG9uLnNldE9wdGlvbihcImFjdGlvbnMuY2xpY2tcIiwgaGFuZGxlQnV0dG9uQWN0aW9uKFwiZm9udFdlaWdodFwiLCBcImJvbGRcIikpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIml0YWxpY1wiOlxuICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIsIGhhbmRsZUJ1dHRvbkFjdGlvbihcImZvbnRTdHlsZVwiLCBcIml0YWxpY1wiKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidW5kZXJsaW5lXCI6XG4gICAgICAgICAgICAgICAgYnV0dG9uLnNldE9wdGlvbihcImFjdGlvbnMuY2xpY2tcIiwgaGFuZGxlQnV0dG9uQWN0aW9uKFwidGV4dERlY29yYXRpb25cIiwgXCJ1bmRlcmxpbmVcIikpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInN0cmlrZVwiOlxuICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIsIGhhbmRsZUJ1dHRvbkFjdGlvbihcInRleHREZWNvcmF0aW9uXCIsIFwibGluZS10aHJvdWdoXCIpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzdWJzY3JpcHRcIjpcbiAgICAgICAgICAgICAgICBidXR0b24uc2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiLCBoYW5kbGVCdXR0b25BY3Rpb24oXCJ2ZXJ0aWNhbEFsaWduXCIsIFwic3ViXCIpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzdXBlcnNjcmlwdFwiOlxuICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIsIGhhbmRsZUJ1dHRvbkFjdGlvbihcInZlcnRpY2FsQWxpZ25cIiwgXCJzdXBlclwiKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYWxpZ24tbGVmdFwiOlxuICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIsIGhhbmRsZUJ1dHRvbkFjdGlvbihcInRleHRBbGlnblwiLCBcImxlZnRcIikpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImFsaWduLWNlbnRlclwiOlxuICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIsIGhhbmRsZUJ1dHRvbkFjdGlvbihcInRleHRBbGlnblwiLCBcImNlbnRlclwiKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYWxpZ24tcmlnaHRcIjpcbiAgICAgICAgICAgICAgICBidXR0b24uc2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiLCBoYW5kbGVCdXR0b25BY3Rpb24oXCJ0ZXh0QWxpZ25cIiwgXCJyaWdodFwiKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5cblxuXG5cblxuZnVuY3Rpb24gYXBwbHlTdHlsZVRvU2VsZWN0aW9uKHN0eWxlUHJvcGVydHksIHN0eWxlVmFsdWUsIHJhbmdlKSB7XG4gICAgXG59XG5cblxuLy9cbi8vIGZ1bmN0aW9uIGhhc1N0eWxlKG5vZGUsIHN0eWxlVHlwZSwgdmFsdWUpIHtcbi8vICAgICBjb25zdCBjdXJyZW50U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKVtzdHlsZVR5cGVdO1xuLy8gICAgIGNvbnNvbGUubG9nKGN1cnJlbnRTdHlsZSk7XG4vLyAgICAgcmV0dXJuIGN1cnJlbnRTdHlsZSA9PT0gdmFsdWU7XG4vLyB9XG4vL1xuLy8gZnVuY3Rpb24gYXBwbHlTdHlsZVRvU2VsZWN0aW9uKHN0eWxlUHJvcGVydHksIHN0eWxlVmFsdWUsIHJhbmdlKSB7XG4vLyAgICAgaWYgKCFyYW5nZSB8fCAocmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLmVuZENvbnRhaW5lciAmJiByYW5nZS5zdGFydE9mZnNldCA9PT0gcmFuZ2UuZW5kT2Zmc2V0KSkge1xuLy8gICAgICAgICByZXR1cm47XG4vLyAgICAgfVxuLy9cbi8vICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuLy8gICAgIHNwYW4uc3R5bGVbc3R5bGVQcm9wZXJ0eV0gPSBzdHlsZVZhbHVlO1xuLy9cbi8vICAgICBjb25zdCBjb21tb25BbmNlc3RvckNvbnRhaW5lciA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xuLy9cbi8vICAgICBpZiAocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFICYmIHJhbmdlLnN0YXJ0T2Zmc2V0ID09PSAwICYmIHJhbmdlLmVuZE9mZnNldCA9PT0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubGVuZ3RoKSB7XG4vLyAgICAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4vLyAgICAgICAgIHNwYW4uc3R5bGVbc3R5bGVQcm9wZXJ0eV0gPSBzdHlsZVZhbHVlO1xuLy8gICAgICAgICByYW5nZS5zdXJyb3VuZENvbnRlbnRzKHNwYW4pO1xuLy9cbi8vICAgICB9IGVsc2UgaWYgKGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuLy8gICAgICAgICBjb21tb25BbmNlc3RvckNvbnRhaW5lci5zcGxpdFRleHQocmFuZ2UuZW5kT2Zmc2V0KTtcbi8vICAgICAgICAgY29uc3QgbWlkZGxlVGV4dCA9IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLnNwbGl0VGV4dChyYW5nZS5zdGFydE9mZnNldCk7XG4vLyAgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQobWlkZGxlVGV4dC5jbG9uZU5vZGUodHJ1ZSkpO1xuLy8gICAgICAgICBtaWRkbGVUZXh0LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHNwYW4sIG1pZGRsZVRleHQpO1xuLy8gICAgXG4vLyAgICAgfSBlbHNlICB7XG4vLyBjb25zb2xlLmxvZyhjb21tb25BbmNlc3RvckNvbnRhaW5lcik7XG4vLyAgICAgICAgIGNvbnNvbGUubG9nKFwiUmFuZ2Ugc3RhcnRPZmZzZXQ6IFwiICsgcmFuZ2Uuc3RhcnRPZmZzZXQgKyBcIiBSYW5nZSBlbmRPZmZzZXQ6IFwiICsgcmFuZ2UuZW5kT2Zmc2V0LCBcImNvbW1vbkFuY2VzdG9yQ29udGFpbmVyOiBcIiArIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLmxlbmd0aCk7XG4vLyAgICAgICAgIGNvbnNvbGUubG9nKFwibm90IHN1cHBvcnRlZCB5ZXRcIik7XG4vLyAgICAgfVxuLy9cbi8vXG4vLyB9XG4vL1xuLy8gICAgIC8vIC8vIFRvZ2dsZSBMb2dpazogUHJcdTAwRkNmZSwgb2IgYWxsZSBhdXNnZXdcdTAwRTRobHRlbiBLbm90ZW4gYmVyZWl0cyBnZXN0eWx0IHNpbmQuXG4vLyAgICAgLy8gbGV0IHNob3VsZFJlbW92ZVN0eWxlID0gdHJ1ZTtcbi8vICAgICAvLyBjb25zdCBub2RlcyA9IEFycmF5LmZyb20ocmFuZ2UuY2xvbmVDb250ZW50cygpLmNoaWxkTm9kZXMpO1xuLy8gICAgIC8vIG5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4vLyAgICAgLy8gICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuLy8gICAgIC8vICAgICAgICAgc2hvdWxkUmVtb3ZlU3R5bGUgPSBmYWxzZTtcbi8vICAgICAvLyAgICAgfSBlbHNlIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlLnN0eWxlW3N0eWxlUHJvcGVydHldICE9PSBzdHlsZVZhbHVlKSB7XG4vLyAgICAgLy8gICAgICAgICBzaG91bGRSZW1vdmVTdHlsZSA9IGZhbHNlO1xuLy8gICAgIC8vICAgICB9XG4vLyAgICAgLy8gfSk7XG4vLyAgICAgLy9cbi8vICAgICAvLyAvLyBFeHRyYWhpZXJlIGRlbiBJbmhhbHQgZGVyIFJhbmdlLlxuLy8gICAgIC8vIGNvbnN0IGNvbnRlbnRzID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG4vLyAgICAgLy9cbi8vICAgICAvLyAvLyBJdGVyaWVyZSBcdTAwRkNiZXIgZGllIGV4dHJhaGllcnRlbiBLbm90ZW4gdW5kIHN0eWxlIHNpZSBnZ2YuXG4vLyAgICAgLy8gY29uc3QgbmV3Tm9kZXMgPSBBcnJheS5mcm9tKGNvbnRlbnRzLmNoaWxkTm9kZXMpO1xuLy8gICAgIC8vIG5ld05vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4vLyAgICAgLy8gICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuLy8gICAgIC8vICAgICAgICAgLy8gRmFsbHMgZXMgc2ljaCB1bSBlaW5lbiBUZXh0LUtub3RlbiBoYW5kZWx0LCBmXHUwMEZDZ2VuIHdpciBpaG4gaW4gZWluIG5ldWVzIDxzcGFuPiBlaW4sIGZhbGxzIHdpciBkZW4gU3RpbCBoaW56dWZcdTAwRkNnZW4uXG4vLyAgICAgLy8gICAgICAgICBpZiAoIXNob3VsZFJlbW92ZVN0eWxlKSB7XG4vLyAgICAgLy8gICAgICAgICAgICAgY29uc3Qgc3R5bGVkU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuLy8gICAgIC8vICAgICAgICAgICAgIHN0eWxlZFNwYW4uc3R5bGVbc3R5bGVQcm9wZXJ0eV0gPSBzdHlsZVZhbHVlO1xuLy8gICAgIC8vICAgICAgICAgICAgIHN0eWxlZFNwYW4udGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50O1xuLy8gICAgIC8vICAgICAgICAgICAgIHJhbmdlLmluc2VydE5vZGUoc3R5bGVkU3Bhbik7XG4vLyAgICAgLy8gICAgICAgICB9IGVsc2Uge1xuLy8gICAgIC8vICAgICAgICAgICAgIHJhbmdlLmluc2VydE5vZGUobm9kZSk7XG4vLyAgICAgLy8gICAgICAgICB9XG4vLyAgICAgLy8gICAgIH0gZWxzZSBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbi8vICAgICAvLyAgICAgICAgIC8vIEZhbGxzIGVzIHNpY2ggdW0gZWluIEVsZW1lbnQgaGFuZGVsdCwgd2VuZGUgZGVuIFN0aWwgcmVrdXJzaXYgYW4gb2RlciBlbnRmZXJuZSBpaG4uXG4vLyAgICAgLy8gICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlU3R5bGUpIHtcbi8vICAgICAvLyAgICAgICAgICAgICBub2RlLnN0eWxlW3N0eWxlUHJvcGVydHldID0gXCJcIjtcbi8vICAgICAvLyAgICAgICAgIH0gZWxzZSB7XG4vLyAgICAgLy8gICAgICAgICAgICAgYXBwbHlTdHlsZVRvRWxlbWVudChub2RlLCBzdHlsZVByb3BlcnR5LCBzdHlsZVZhbHVlKTtcbi8vICAgICAvLyAgICAgICAgIH1cbi8vICAgICAvLyAgICAgICAgIHJhbmdlLmluc2VydE5vZGUobm9kZSk7XG4vLyAgICAgLy8gICAgIH1cbi8vICAgICAvLyB9KTtcbi8vICAgICAvL1xuLy8gICAgIC8vIC8vIEF1c3dhaGwgYmVpYmVoYWx0ZW4sIHVtIHdlaXRlcmUgRm9ybWF0aWVydW5nZW4genUgZXJtXHUwMEY2Z2xpY2hlbi5cbi8vICAgICAvLyByYW5nZS5jb2xsYXBzZShmYWxzZSk7XG4vLyAgICAgLy8gY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuLy8gICAgIC8vIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbi8vICAgICAvLyBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuLy8gfVxuLy9cbi8vIGZ1bmN0aW9uIGFwcGx5U3R5bGVUb0VsZW1lbnQoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSwgc3R5bGVWYWx1ZSkge1xuLy8gICAgIGlmIChlbGVtZW50Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuLy8gICAgICAgICByZXR1cm47XG4vLyAgICAgfVxuLy8gICAgIGlmIChlbGVtZW50LnN0eWxlW3N0eWxlUHJvcGVydHldID09PSBzdHlsZVZhbHVlKSB7XG4vLyAgICAgICAgIC8vIFRvZ2dsZTogRW50ZmVybmUgZGVuIFN0aWwsIGZhbGxzIGVyIGJlcmVpdHMgdm9yaGFuZGVuIGlzdC5cbi8vICAgICAgICAgZWxlbWVudC5zdHlsZVtzdHlsZVByb3BlcnR5XSA9IFwiXCI7XG4vLyAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgZWxlbWVudC5zdHlsZVtzdHlsZVByb3BlcnR5XSA9IHN0eWxlVmFsdWU7XG4vLyAgICAgfVxuLy9cbi8vICAgICAvLyBSZWt1cnNpdiBkaWUgS2luZGtub3RlbiBiZWFyYmVpdGVuLCBmYWxscyB2b3JoYW5kZW4uXG4vLyAgICAgZWxlbWVudC5jaGlsZE5vZGVzLmZvckVhY2goY2hpbGQgPT4gYXBwbHlTdHlsZVRvRWxlbWVudChjaGlsZCwgc3R5bGVQcm9wZXJ0eSwgc3R5bGVWYWx1ZSkpO1xuLy8gfVxuLy9cbi8vIGZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlcyhjb250YWluZXIpIHtcbi8vICAgICAvLyBFbnRmZXJudCB1bm5cdTAwRjZ0aWdlIHZlcnNjaGFjaHRlbHRlIFN0aWxlLlxuLy8gICAgIGNvbnRhaW5lci5jaGlsZE5vZGVzLmZvckVhY2goY2hpbGQgPT4ge1xuLy8gICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIGNoaWxkLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3NwYW4nKSB7XG4vLyAgICAgICAgICAgICBpZiAoY2hpbGQucGFyZW50Tm9kZSAmJiBjaGlsZC5wYXJlbnROb2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3NwYW4nKSB7XG4vLyAgICAgICAgICAgICAgICAgLy8gU3R5bGVzIGtvbWJpbmllcmVuLCBmYWxscyBtXHUwMEY2Z2xpY2guXG4vLyAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjaGlsZC5wYXJlbnROb2RlLnN0eWxlLCBjaGlsZC5zdHlsZSk7XG4vLyAgICAgICAgICAgICAgICAgY2hpbGQucGFyZW50Tm9kZS5pbm5lckhUTUwgPSBjaGlsZC5pbm5lckhUTUw7XG4vLyAgICAgICAgICAgICAgICAgY2hpbGQucmVtb3ZlKCk7XG4vLyAgICAgICAgICAgICB9XG4vLyAgICAgICAgIH1cbi8vICAgICAgICAgLy8gUmVrdXJzaW9uIGZcdTAwRkNyIEtpbmRrbm90ZW5cbi8vICAgICAgICAgbm9ybWFsaXplU3R5bGVzKGNoaWxkKTtcbi8vICAgICB9KTtcbi8vIH1cblxuXG4vL1xuLy8gLyoqXG4vLyAgKiBAcHJpdmF0ZVxuLy8gICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlVHlwZVxuLy8gICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4vLyAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuLy8gICovXG4vLyBmdW5jdGlvbiBhcHBseVN0eWxlVG9TZWxlY3Rpb24oc3R5bGVUeXBlLCB2YWx1ZSwgcmFuZ2UpIHtcbi8vXG4vLyAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbi8vICAgICBzcGFuLnN0eWxlW3N0eWxlVHlwZV0gPSB2YWx1ZTtcbi8vXG4vLyAgICAgY29uc3QgY29tbW9uQW5jZXN0b3JDb250YWluZXIgPSByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcbi8vXG4vLyAgICAgaWYgKHJhbmdlLnN0YXJ0T2Zmc2V0ID09PSAwICYmIHJhbmdlLmVuZE9mZnNldCA9PT0gY29tbW9uQW5jZXN0b3JDb250YWluZXIubGVuZ3RoKSB7XG4vLyAgICAgICAgIHJhbmdlLnN1cnJvdW5kQ29udGVudHMoc3Bhbik7XG4vL1xuLy8gICAgICAgICBpZiAoIWhhc1N0eWxlKGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLCBzdHlsZVR5cGUsIHZhbHVlKSkge1xuLy8gICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbi8vICAgICAgICAgICAgIHNwYW4uc3R5bGVbc3R5bGVUeXBlXSA9IHZhbHVlO1xuLy8gICAgICAgICAgICAgcmFuZ2Uuc3Vycm91bmRDb250ZW50cyhzcGFuKTtcbi8vICAgICAgICAgfVxuLy8gICAgICAgIFxuLy8gICAgIH0gZWxzZSBpZiAoY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4vL1xuLy8gICAgICAgICBjb21tb25BbmNlc3RvckNvbnRhaW5lci5zcGxpdFRleHQocmFuZ2UuZW5kT2Zmc2V0KTtcbi8vICAgICAgICAgY29uc3QgbWlkZGxlVGV4dCA9IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLnNwbGl0VGV4dChyYW5nZS5zdGFydE9mZnNldCk7XG4vLyAgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQobWlkZGxlVGV4dC5jbG9uZU5vZGUodHJ1ZSkpO1xuLy8gICAgICAgICBtaWRkbGVUZXh0LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHNwYW4sIG1pZGRsZVRleHQpO1xuLy9cbi8vICAgICAgICAgLy8gRHJpdHRlciBGYWxsOiBEaWUgUmFuZ2UgZXJzdHJlY2t0IHNpY2ggXHUwMEZDYmVyIG1laHJlcmUgTm9kZXNcbi8vICAgICB9IGVsc2UgaWYgKHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbi8vXG4vLyAgICAgICAgIGNvbnN0IGZyYWdtZW50ID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG4vLyAgICAgICAgIHN0eWxlRnJhZ21lbnQoZnJhZ21lbnQsIHN0eWxlVHlwZSwgdmFsdWUpO1xuLy8gICAgICAgICByYW5nZS5pbnNlcnROb2RlKGZyYWdtZW50KTtcbi8vICAgICAgICBcbi8vICAgICAgICAgY29uc29sZS5sb2coXCJEaWUgUmFuZ2UgZXJzdHJlY2t0IHNpY2ggXHUwMEZDYmVyIG1laHJlcmUgTm9kZXNcIik7XG4vLyAgICAgfVxuLy8gICAgIC8vIFZpZXJ0ZXIgRmFsbDogVmVyc2NoYWNodGVsdGUgRWxlbWVudGUgbWl0IGJlc3RlaGVuZGVuIFN0aWxlblxuLy8gICAgIGVsc2UgaWYgKGNvbnRhaW5zU3R5bGVkRWxlbWVudHMocmFuZ2UpKSB7IC8vIEJlZGluZ3VuZyBmXHUwMEZDciBkaWVzZW4gRmFsbCBkZWZpbmllcmVuXG4vLyAgICAgICAgIGNvbnNvbGUubG9nKFwiVmVyc2NoYWNodGVsdGUgRWxlbWVudGUgbWl0IGJlc3RlaGVuZGVuIFN0aWxlblwiKTtcbi8vICAgICB9XG4vLyAgICAgLy8gRlx1MDBGQ25mdGVyIEZhbGw6IFBhcnRpZWxsZSBcdTAwRENiZXJsYXBwdW5nIG1pdCBiZXN0ZWhlbmRlbiBFbGVtZW50ZW5cbi8vICAgICBlbHNlIGlmIChyYW5nZVBhcnRpYWxseU92ZXJsYXBzU3R5bGVkRWxlbWVudHMocmFuZ2UpKSB7IC8vIEJlZGluZ3VuZyBmXHUwMEZDciBkaWVzZW4gRmFsbCBkZWZpbmllcmVuXG4vLyAgICAgICAgIC8vIEluaGFsdCB6dSBpbXBsZW1lbnRpZXJlblxuLy8gICAgICAgICBjb25zb2xlLmxvZyhcIlBhcnRpZWxsZSBcdTAwRENiZXJsYXBwdW5nIG1pdCBiZXN0ZWhlbmRlbiBFbGVtZW50ZW5cIik7XG4vLyAgICAgfVxuLy8gICAgIC8vIFNlY2hzdGVyIEZhbGw6IFx1MDBEQ2JlcmdyZWlmZW5kZSBCbFx1MDBGNmNrZSB1bmQgSW5saW5lLUVsZW1lbnRlXG4vLyAgICAgZWxzZSBpZiAoc2VsZWN0aW9uU3BhbnNEaWZmZXJlbnRFbGVtZW50VHlwZXMocmFuZ2UpKSB7IC8vIEJlZGluZ3VuZyBmXHUwMEZDciBkaWVzZW4gRmFsbCBkZWZpbmllcmVuXG4vLyAgICAgICAgIC8vIEluaGFsdCB6dSBpbXBsZW1lbnRpZXJlblxuLy8gICAgICAgICBjb25zb2xlLmxvZyhcIlx1MDBEQ2JlcmdyZWlmZW5kZSBCbFx1MDBGNmNrZSB1bmQgSW5saW5lLUVsZW1lbnRlXCIpO1xuLy8gICAgIH1cbi8vICAgICAvLyBTaWVidGVyIEZhbGw6IEludGVyYWt0aXZlIEluaGFsdGVcbi8vICAgICBlbHNlIGlmIChjb250YWluc0ludGVyYWN0aXZlRWxlbWVudHMocmFuZ2UpKSB7IC8vIEJlZGluZ3VuZyBmXHUwMEZDciBkaWVzZW4gRmFsbCBkZWZpbmllcmVuXG4vLyAgICAgICAgIC8vIEluaGFsdCB6dSBpbXBsZW1lbnRpZXJlblxuLy9cbi8vICAgICAgICAgY29uc29sZS5sb2coXCJJbnRlcmFrdGl2ZSBJbmhhbHRlXCIpO1xuLy8gICAgIH1cbi8vICAgICAvLyBBY2h0ZXIgRmFsbDogTGVlcmUgUmFuZ2VzXG4vLyAgICAgZWxzZSBpZiAocmFuZ2Uuc3RhcnRPZmZzZXQgPT09IHJhbmdlLmVuZE9mZnNldCkge1xuLy8gICAgICAgICBjb25zb2xlLmxvZyhcIktlaW4gVGV4dCBhdXNnZXdcdTAwRTRobHQuXCIpO1xuLy8gICAgICAgICBjb25zb2xlLmxvZyhcIlJhbmdlIHN0YXJ0T2Zmc2V0OiBcIiArIHJhbmdlLnN0YXJ0T2Zmc2V0KTtcbi8vICAgICB9XG4vLyAgICAgLy8gTmV1bnRlciBGYWxsOiBQZXJmb3JtYW5jZS1PcHRpbWllcnVuZ2VuIGJlaSBncm9cdTAwREZlbiBEb2t1bWVudGVuXG4vLyAgICAgZWxzZSBpZiAoaXNMYXJnZURvY3VtZW50T3JTZWxlY3Rpb24ocmFuZ2UpKSB7IC8vIEJlZGluZ3VuZyBmXHUwMEZDciBkaWVzZW4gRmFsbCBkZWZpbmllcmVuXG4vLyAgICAgICAgIC8vIEluaGFsdCB6dSBpbXBsZW1lbnRpZXJlblxuLy8gICAgICAgICBjb25zb2xlLmxvZyhcIlBlcmZvcm1hbmNlLU9wdGltaWVydW5nZW4gYmVpIGdyb1x1MDBERmVuIERva3VtZW50ZW5cIik7XG4vLyAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgY29uc29sZS5sb2coXCJEaWUgUmFuZ2UgcGFzc3QgenUga2VpbmVtIHNwZXppZWxsZW4gRmFsbC5cIik7XG4vLyAgICAgfVxuLy9cbi8vXG4vLyB9XG4vL1xuLy8gZnVuY3Rpb24gaGFzU3R5bGUobm9kZSwgc3R5bGVUeXBlLCB2YWx1ZSkge1xuLy8gICAgIHJldHVybiBub2RlLnN0eWxlW3N0eWxlVHlwZV0gPT09IHZhbHVlO1xuLy8gfVxuLy9cbi8vIGZ1bmN0aW9uIGNvbnRhaW5zU3R5bGVkRWxlbWVudHMocmFuZ2UpIHtcbi8vICAgICAvLyBMaXN0ZSBzaWduaWZpa2FudGVyIFN0aWxlLCBkaWUgYWxzICdzdGlsaXNpZXJ0JyBiZXRyYWNodGV0IHdlcmRlblxuLy8gICAgIGNvbnN0IHNpZ25pZmljYW50U3R5bGVzID0gWydjb2xvcicsICdmb250V2VpZ2h0JywgJ2ZvbnRTdHlsZScsICd0ZXh0RGVjb3JhdGlvbicsICdiYWNrZ3JvdW5kQ29sb3InXTtcbi8vXG4vLyAgICAgLy8gRXJzdGVsbHQgZWluZW4gVHJlZVdhbGtlciBpbSBjb21tb25BbmNlc3RvckNvbnRhaW5lciBkZXIgUmFuZ2Vcbi8vICAgICBjb25zdCB0cmVlV2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbi8vICAgICAgICAgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIsXG4vLyAgICAgICAgIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5ULCAvLyBCZXNjaHJcdTAwRTRua3QgYXVmIEVsZW1lbnQtS25vdGVuXG4vLyAgICAgICAgIHtcbi8vICAgICAgICAgICAgIGFjY2VwdE5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XG4vLyAgICAgICAgICAgICAgICAgLy8gXHUwMERDYmVycHJcdTAwRkNmdCBqZWRlcyBFbGVtZW50IGF1ZiBkYXMgVm9yaGFuZGVuc2VpbiB2b24gc2lnbmlmaWthbnRlbiBTdGlsZW5cbi8vICAgICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuLy8gICAgICAgICAgICAgICAgIGZvciAobGV0IHN0eWxlTmFtZSBvZiBzaWduaWZpY2FudFN0eWxlcykge1xuLy8gICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHlsZVZhbHVlID0gc3R5bGVbc3R5bGVOYW1lXTtcbi8vICAgICAgICAgICAgICAgICAgICAgLy8gXHUwMERDYmVycHJcdTAwRkNmdCwgb2IgZGVyIFN0aWwgdm9uIHNlaW5lbSBEZWZhdWx0d2VydCBhYndlaWNodFxuLy8gICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGVWYWx1ZSAhPT0gJycgJiZcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlVmFsdWUgIT09ICdub3JtYWwnICYmXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVZhbHVlICE9PSAnbm9uZScgJiZcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlVmFsdWUgIT09ICdyZ2JhKDAsIDAsIDAsIDApJykgeyAvLyBGXHUwMEZDciBGYXJiZW4gdW5kIEhpbnRlcmdydW5kZmFyYmVuXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUO1xuLy8gICAgICAgICAgICAgICAgICAgICB9XG4vLyAgICAgICAgICAgICAgICAgfVxuLy8gICAgICAgICAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9SRUpFQ1Q7XG4vLyAgICAgICAgICAgICB9XG4vLyAgICAgICAgIH0sXG4vLyAgICAgICAgIGZhbHNlXG4vLyAgICAgKTtcbi8vXG4vLyAgICAgLy8gRHVyY2hsXHUwMEU0dWZ0IGRlbiBUcmVlV2Fsa2VyIHVuZCBnaWJ0IHRydWUgenVyXHUwMEZDY2ssIHdlbm4gZWluIHN0aWxpc2llcnRlcyBFbGVtZW50IGdlZnVuZGVuIHdpcmRcbi8vICAgICByZXR1cm4gdHJlZVdhbGtlci5uZXh0Tm9kZSgpICE9PSBudWxsO1xuLy8gfVxuLy9cbi8vXG4vLyBmdW5jdGlvbiBzdHlsZUZyYWdtZW50KGZyYWdtZW50LCBzdHlsZVR5cGUsIHZhbHVlKSB7XG4vLyAgICAgQXJyYXkuZnJvbShmcmFnbWVudC5jaGlsZE5vZGVzKS5mb3JFYWNoKGNoaWxkID0+IHtcbi8vICAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuLy8gICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbi8vICAgICAgICAgICAgIHNwYW4uc3R5bGVbc3R5bGVUeXBlXSA9IHZhbHVlO1xuLy8gICAgICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IGNoaWxkLnRleHRDb250ZW50O1xuLy8gICAgICAgICAgICAgZnJhZ21lbnQucmVwbGFjZUNoaWxkKHNwYW4sIGNoaWxkKTtcbi8vICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbi8vICAgICAgICAgICAgIHN0eWxlRnJhZ21lbnQoY2hpbGQsIHN0eWxlVHlwZSwgdmFsdWUpO1xuLy8gICAgICAgICAgICAgY2hpbGQuc3R5bGVbc3R5bGVUeXBlXSA9IHZhbHVlO1xuLy8gICAgICAgICB9XG4vLyAgICAgfSk7XG4vLyB9XG4vL1xuLy8gZnVuY3Rpb24gcmFuZ2VQYXJ0aWFsbHlPdmVybGFwc1N0eWxlZEVsZW1lbnRzKHJhbmdlKSB7XG4vLyAgICAgLy8gRGVmaW5pZXJ0LCB3ZWxjaGUgU3RpbGUgYWxzICdzaWduaWZpa2FudCcgYmV0cmFjaHRldCB3ZXJkZW5cbi8vICAgICBjb25zdCBzaWduaWZpY2FudFN0eWxlcyA9IFsnY29sb3InLCAnZm9udFdlaWdodCcsICdmb250U3R5bGUnLCAndGV4dERlY29yYXRpb24nXTtcbi8vXG4vLyAgICAgLy8gRXJzdGVsbHQgZWluZW4gVHJlZVdhbGtlciBpbSBjb21tb25BbmNlc3RvckNvbnRhaW5lciBkZXIgUmFuZ2Vcbi8vICAgICBjb25zdCB0cmVlV2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbi8vICAgICAgICAgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIsXG4vLyAgICAgICAgIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5ULCAvLyBCZXNjaHJcdTAwRTRua3QgYXVmIEVsZW1lbnQtS25vdGVuXG4vLyAgICAgICAgIHtcbi8vICAgICAgICAgICAgIGFjY2VwdE5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XG4vLyAgICAgICAgICAgICAgICAgLy8gQWt6ZXB0aWVydCBudXIgRWxlbWVudGUsIGRpZSBlaW5lbiBkZXIgc2lnbmlmaWthbnRlbiBTdGlsZSBhdWZ3ZWlzZW5cbi8vICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdHlsZSBvZiBzaWduaWZpY2FudFN0eWxlcykge1xuLy8gICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSlbc3R5bGVdICE9PSAnJyAmJlxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSlbc3R5bGVdICE9PSAnbm9ybWFsJyAmJlxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSlbc3R5bGVdICE9PSAnbm9uZScpIHtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ7XG4vLyAgICAgICAgICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgICAgICB9XG4vLyAgICAgICAgICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX1JFSkVDVDtcbi8vICAgICAgICAgICAgIH1cbi8vICAgICAgICAgfSxcbi8vICAgICAgICAgZmFsc2Vcbi8vICAgICApO1xuLy9cbi8vICAgICAvLyBcdTAwRENiZXJwclx1MDBGQ2Z0LCBvYiBkaWUgQXVzd2FobCBudXIgVGVpbGUgZGllc2VyIHN0aWxpc2llcnRlbiBFbGVtZW50ZSB1bWZhc3N0XG4vLyAgICAgd2hpbGUgKHRyZWVXYWxrZXIubmV4dE5vZGUoKSkge1xuLy8gICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHRyZWVXYWxrZXIuY3VycmVudE5vZGU7XG4vLyAgICAgICAgIC8vIFx1MDBEQ2JlcnByXHUwMEZDZnQsIG9iIGRpZSBSYW5nZSBkZW4gQW5mYW5nIG9kZXIgZGFzIEVuZGUgZGVzIEVsZW1lbnRlcyBuaWNodCBlaW5zY2hsaWVcdTAwREZ0XG4vLyAgICAgICAgIGNvbnN0IG5vZGVSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4vLyAgICAgICAgIG5vZGVSYW5nZS5zZWxlY3ROb2RlKGN1cnJlbnROb2RlKTtcbi8vICAgICAgICAgaWYgKChyYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fU1RBUlQsIG5vZGVSYW5nZSkgPiAwICYmXG4vLyAgICAgICAgICAgICAgICAgcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCwgbm9kZVJhbmdlKSA8IDApIHx8XG4vLyAgICAgICAgICAgICAocmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLkVORF9UT19TVEFSVCwgbm9kZVJhbmdlKSA+IDAgJiZcbi8vICAgICAgICAgICAgICAgICByYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuRU5EX1RPX0VORCwgbm9kZVJhbmdlKSA8IDApKSB7XG4vLyAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRXMgZ2lidCBlaW5lIHBhcnRpZWxsZSBcdTAwRENiZXJsYXBwdW5nXG4vLyAgICAgICAgIH1cbi8vICAgICB9XG4vL1xuLy8gICAgIC8vIEtlaW5lIHBhcnRpZWxsZSBcdTAwRENiZXJsYXBwdW5nIGdlZnVuZGVuXG4vLyAgICAgcmV0dXJuIGZhbHNlO1xuLy8gfVxuLy9cbi8vXG4vLyBmdW5jdGlvbiBzZWxlY3Rpb25TcGFuc0RpZmZlcmVudEVsZW1lbnRUeXBlcyhyYW5nZSkge1xuLy8gICAgIC8vIERlZmluaXRpb24gdm9uIEJsb2NrLSB1bmQgSW5saW5lLUVsZW1lbnR0eXBlblxuLy8gICAgIGNvbnN0IGJsb2NrRWxlbWVudHMgPSBbJ0RJVicsICdQJywgJ0gxJywgJ0gyJywgJ0gzJywgJ0g0JywgJ0g1JywgJ0g2JywgJ09MJywgJ1VMJywgJ0xJJywgJ0FSVElDTEUnLCAnU0VDVElPTiddO1xuLy8gICAgIGNvbnN0IGlubGluZUVsZW1lbnRzID0gWydTUEFOJywgJ0EnLCAnU1RST05HJywgJ0VNJywgJ0InLCAnSScsICdTTUFMTCcsICdMQUJFTCddO1xuLy9cbi8vICAgICBsZXQgZm91bmRCbG9jayA9IGZhbHNlO1xuLy8gICAgIGxldCBmb3VuZElubGluZSA9IGZhbHNlO1xuLy9cbi8vICAgICAvLyBFcnN0ZWxsdCBlaW5lbiBUcmVlV2Fsa2VyIGlubmVyaGFsYiBkZXMgY29tbW9uQW5jZXN0b3JDb250YWluZXIgZGVyIFJhbmdlXG4vLyAgICAgY29uc3QgdHJlZVdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4vLyAgICAgICAgIHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLFxuLy8gICAgICAgICBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCwgLy8gQmVzY2hyXHUwMEU0bmtlIGF1ZiBFbGVtZW50LUtub3RlblxuLy8gICAgICAgICB7XG4vLyAgICAgICAgICAgICBhY2NlcHROb2RlOiBmdW5jdGlvbiAobm9kZSkge1xuLy8gICAgICAgICAgICAgICAgIC8vIEFremVwdGllcmUgYWxsZSBFbGVtZW50ZSB6dXIgXHUwMERDYmVycHJcdTAwRkNmdW5nXG4vLyAgICAgICAgICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDtcbi8vICAgICAgICAgICAgIH1cbi8vICAgICAgICAgfSxcbi8vICAgICAgICAgZmFsc2Vcbi8vICAgICApO1xuLy9cbi8vICAgICAvLyBEdXJjaGxcdTAwRTR1ZnQgZGVuIFRyZWVXYWxrZXIgdW5kIHByXHUwMEZDZnQsIG9iIHNvd29obCBCbG9jay0gYWxzIGF1Y2ggSW5saW5lLUVsZW1lbnRlIHZvcmhhbmRlbiBzaW5kXG4vLyAgICAgd2hpbGUgKHRyZWVXYWxrZXIubmV4dE5vZGUoKSkge1xuLy8gICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHRyZWVXYWxrZXIuY3VycmVudE5vZGU7XG4vLyAgICAgICAgIGlmIChibG9ja0VsZW1lbnRzLmluY2x1ZGVzKGN1cnJlbnROb2RlLnRhZ05hbWUpKSB7XG4vLyAgICAgICAgICAgICBmb3VuZEJsb2NrID0gdHJ1ZTtcbi8vICAgICAgICAgfVxuLy8gICAgICAgICBpZiAoaW5saW5lRWxlbWVudHMuaW5jbHVkZXMoY3VycmVudE5vZGUudGFnTmFtZSkpIHtcbi8vICAgICAgICAgICAgIGZvdW5kSW5saW5lID0gdHJ1ZTtcbi8vICAgICAgICAgfVxuLy9cbi8vICAgICAgICAgLy8gV2VubiBiZWlkZSBUeXBlbiBnZWZ1bmRlbiB3dXJkZW4sIGJlZW5kZSBkaWUgU3VjaGVcbi8vICAgICAgICAgaWYgKGZvdW5kQmxvY2sgJiYgZm91bmRJbmxpbmUpIHtcbi8vICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuLy8gICAgICAgICB9XG4vLyAgICAgfVxuLy9cbi8vICAgICAvLyBHaWJ0IHp1clx1MDBGQ2NrLCBvYiBkaWUgQXVzd2FobCBCbG9jay0gdW5kIElubGluZS1FbGVtZW50ZSB1bWZhc3N0XG4vLyAgICAgcmV0dXJuIGZhbHNlO1xuLy8gfVxuLy9cbi8vXG4vLyBmdW5jdGlvbiBjb250YWluc0ludGVyYWN0aXZlRWxlbWVudHMocmFuZ2UpIHtcbi8vICAgICAvLyBMaXN0ZSB2b24gaW50ZXJha3RpdmVuIEVsZW1lbnR0eXBlblxuLy8gICAgIGNvbnN0IGludGVyYWN0aXZlVGFncyA9IFsnQScsICdCVVRUT04nLCAnSU5QVVQnLCAnU0VMRUNUJywgJ1RFWFRBUkVBJywgJ0xBQkVMJywgJ0RFVEFJTFMnXTtcbi8vXG4vLyAgICAgLy8gRXJzdGVsbHQgZWluZW4gVHJlZVdhbGtlciBpbm5lcmhhbGIgZGVzIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIGRlciBSYW5nZVxuLy8gICAgIGNvbnN0IHRyZWVXYWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuLy8gICAgICAgICByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcixcbi8vICAgICAgICAgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIC8vIEJlc2Noclx1MDBFNG5rZSBhdWYgRWxlbWVudC1Lbm90ZW5cbi8vICAgICAgICAge1xuLy8gICAgICAgICAgICAgYWNjZXB0Tm9kZTogZnVuY3Rpb24gKG5vZGUpIHtcbi8vICAgICAgICAgICAgICAgICAvLyBBa3plcHRpZXJ0IG51ciBFbGVtZW50ZSwgZGllIGluIGRlciBMaXN0ZSBkZXIgaW50ZXJha3RpdmVuIFRhZ3Mgc2luZFxuLy8gICAgICAgICAgICAgICAgIGlmIChpbnRlcmFjdGl2ZVRhZ3MuaW5jbHVkZXMobm9kZS50YWdOYW1lKSkge1xuLy8gICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUO1xuLy8gICAgICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgICAgICByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfUkVKRUNUO1xuLy8gICAgICAgICAgICAgfVxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICBmYWxzZVxuLy8gICAgICk7XG4vL1xuLy8gICAgIC8vIER1cmNobFx1MDBFNHVmdCBkZW4gVHJlZVdhbGtlciB1bmQgcHJcdTAwRkNmdCBhdWYgaW50ZXJha3RpdmUgRWxlbWVudGVcbi8vICAgICB3aGlsZSAodHJlZVdhbGtlci5uZXh0Tm9kZSgpKSB7XG4vLyAgICAgICAgIC8vIFdlbm4gZWluIGludGVyYWt0aXZlcyBFbGVtZW50IGdlZnVuZGVuIHdpcmRcbi8vICAgICAgICAgaWYgKHRyZWVXYWxrZXIuY3VycmVudE5vZGUpIHtcbi8vICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuLy8gICAgICAgICB9XG4vLyAgICAgfVxuLy9cbi8vICAgICAvLyBLZWluZSBpbnRlcmFrdGl2ZW4gRWxlbWVudGUgZ2VmdW5kZW5cbi8vICAgICByZXR1cm4gZmFsc2U7XG4vLyB9XG4vL1xuLy9cbi8vIGZ1bmN0aW9uIGlzTGFyZ2VEb2N1bWVudE9yU2VsZWN0aW9uKHJhbmdlKSB7XG4vLyAgICAgLy8gRGVmaW5pZXJlLCB3YXMgYWxzIGdyb1x1MDBERmVzIERva3VtZW50IGdpbHRcbi8vICAgICBjb25zdCBsYXJnZURvY3VtZW50VGhyZXNob2xkID0gMTAwMDA7IC8vIEFuemFobCBkZXIgS25vdGVuXG4vLyAgICAgY29uc3QgbGFyZ2VTZWxlY3Rpb25UaHJlc2hvbGQgPSA1MDA7IC8vIEFuemFobCBkZXIgS25vdGVuIGluIGRlciBBdXN3YWhsXG4vL1xuLy8gICAgIC8vIFByXHUwMEZDZmUgZGllIEdlc2FtdGdyXHUwMEY2XHUwMERGZSBkZXMgRG9rdW1lbnRzXG4vLyAgICAgY29uc3QgdG90YWxEb2N1bWVudE5vZGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpLmxlbmd0aDtcbi8vICAgICBpZiAodG90YWxEb2N1bWVudE5vZGVzID4gbGFyZ2VEb2N1bWVudFRocmVzaG9sZCkge1xuLy8gICAgICAgICBjb25zb2xlLmxvZyhcIkdyb1x1MDBERmVzIERva3VtZW50OiBcIiArIHRvdGFsRG9jdW1lbnROb2RlcyArIFwiIEtub3RlblwiKTtcbi8vICAgICAgICAgcmV0dXJuIHRydWU7XG4vLyAgICAgfVxuLy9cbi8vICAgICAvLyBQclx1MDBGQ2ZlIGRpZSBHclx1MDBGNlx1MDBERmUgZGVyIEF1c3dhaGwgZHVyY2ggWlx1MDBFNGhsZW4gZGVyIEtub3RlbiBpbSBSYW5nZVxuLy8gICAgIGxldCBub2RlQ291bnQgPSAwO1xuLy8gICAgIGNvbnN0IHRyZWVXYWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuLy8gICAgICAgICByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcixcbi8vICAgICAgICAgTm9kZUZpbHRlci5TSE9XX0FMTCxcbi8vICAgICAgICAge1xuLy8gICAgICAgICAgICAgYWNjZXB0Tm9kZTogZnVuY3Rpb24gKG5vZGUpIHtcbi8vICAgICAgICAgICAgICAgICBpZiAocmFuZ2UuaW50ZXJzZWN0c05vZGUobm9kZSkpIHtcbi8vICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDtcbi8vICAgICAgICAgICAgICAgICB9XG4vLyAgICAgICAgICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX1JFSkVDVDtcbi8vICAgICAgICAgICAgIH1cbi8vICAgICAgICAgfSxcbi8vICAgICAgICAgZmFsc2Vcbi8vICAgICApO1xuLy9cbi8vICAgICB3aGlsZSAodHJlZVdhbGtlci5uZXh0Tm9kZSgpKSB7XG4vLyAgICAgICAgIG5vZGVDb3VudCsrO1xuLy8gICAgIH1cbi8vXG4vLyAgICAgaWYgKG5vZGVDb3VudCA+IGxhcmdlU2VsZWN0aW9uVGhyZXNob2xkKSB7XG4vLyAgICAgICAgIGNvbnNvbGUubG9nKFwiR3JvXHUwMERGZSBBdXN3YWhsOiBcIiArIG5vZGVDb3VudCArIFwiIEtub3RlbiBpbm5lcmhhbGIgZGVyIFJhbmdlXCIpO1xuLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcbi8vICAgICB9XG4vL1xuLy8gICAgIC8vIFdlbm4gd2VkZXIgZGFzIERva3VtZW50IG5vY2ggZGllIEF1c3dhaGwgZ3JvXHUwMERGIHNpbmRcbi8vICAgICByZXR1cm4gZmFsc2U7XG4vLyB9XG5cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuICAgIHRoaXNbZWRpdG9yRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYFske0FUVFJJQlVURV9ST0xFfT1cImNvbnRyb2xcIl1gLFxuICAgICk7XG5cbiAgICB0aGlzW2NvbnRlbnRlZGl0YWJsZUVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFske0FUVFJJQlVURV9ST0xFfT1cImNvbnRlbnRlZGl0YWJsZVwiXWApO1xuICAgIHRoaXNbdG9vbGJhckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFske0FUVFJJQlVURV9ST0xFfT1cInRvb2xiYXJcIl1gKTtcbn1cblxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuICAgIC8vIGxhbmd1YWdlPUhUTUxcbiAgICByZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJ0b29sYmFyXCIgcGFydD1cInRvb2xiYXJcIj5cbiAgICAgICAgICAgICAgICA8bW9uc3Rlci1idXR0b24tYmFyPlxuICAgICAgICAgICAgICAgICAgICA8bW9uc3Rlci1idXR0b24gZGF0YS1tb25zdGVyLXJvbGU9XCJmb3JtYXQtYnV0dG9uXCIgZGF0YS1tb25zdGVyLWNvbW1hbmQ9XCJib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwidmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4yMSAxM2MyLjEwNiAwIDMuNDEyLTEuMDg3IDMuNDEyLTIuODIzIDAtMS4zMDYtLjk4NC0yLjI4My0yLjMyNC0yLjM4NnYtLjA1NWEyLjE3NiAyLjE3NiAwIDAgMCAxLjg1Mi0yLjE0YzAtMS41MS0xLjE2Mi0yLjQ2LTMuMDE0LTIuNDZIMy44NDNWMTN6TTUuOTA4IDQuNjc0aDEuNjk2Yy45NjMgMCAxLjUxNy40NTEgMS41MTcgMS4yNDQgMCAuODM0LS42MjkgMS4zMi0xLjczIDEuMzJINS45MDhWNC42NzN6bTAgNi43ODhWOC41OThoMS43M2MxLjIxNyAwIDEuODguNDkyIDEuODggMS40MTUgMCAuOTQzLS42NDMgMS40NDktMS44MzIgMS40NDlINS45MDd6XCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvbW9uc3Rlci1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLWJ1dHRvbiBkYXRhLW1vbnN0ZXItcm9sZT1cImZvcm1hdC1idXR0b25cIiBkYXRhLW1vbnN0ZXItY29tbWFuZD1cIml0YWxpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cInZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKVwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcuOTkxIDExLjY3NCA5LjUzIDQuNDU1Yy4xMjMtLjU5NS4yNDYtLjcxIDEuMzQ3LS44MDdsLjExLS41Mkg3LjIxMWwtLjExLjUyYzEuMDYuMDk2IDEuMTI4LjIxMiAxLjAwNS44MDdMNi41NyAxMS42NzRjLS4xMjMuNTk1LS4yNDYuNzEtMS4zNDYuODA2bC0uMTEuNTJoMy43NzRsLjExLS41MmMtMS4wNi0uMDk1LTEuMTI5LS4yMTEtMS4wMDYtLjgwNnpcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9tb25zdGVyLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1vbnN0ZXItYnV0dG9uIGRhdGEtbW9uc3Rlci1yb2xlPVwiZm9ybWF0LWJ1dHRvblwiIGRhdGEtbW9uc3Rlci1jb21tYW5kPVwidW5kZXJsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwidmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNS4zMTMgMy4xMzZoLTEuMjNWOS41NGMwIDIuMTA1IDEuNDcgMy42MjMgMy45MTcgMy42MjNzMy45MTctMS41MTggMy45MTctMy42MjNWMy4xMzZoLTEuMjN2Ni4zMjNjMCAxLjQ5LS45NzggMi41Ny0yLjY4NyAyLjU3cy0yLjY4Ny0xLjA4LTIuNjg3LTIuNTd6TTEyLjUgMTVoLTl2LTFoOXpcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9tb25zdGVyLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1vbnN0ZXItYnV0dG9uIGRhdGEtbW9uc3Rlci1yb2xlPVwiZm9ybWF0LWJ1dHRvblwiIGRhdGEtbW9uc3Rlci1jb21tYW5kPVwic3RyaWtlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwidmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4zMzMgNS42ODZjMCAuMzEuMDgzLjU4MS4yNy44MTRINS4xNjZhMi44IDIuOCAwIDAgMS0uMDk5LS43NmMwLTEuNjI3IDEuNDM2LTIuNzY4IDMuNDgtMi43NjggMS45NjkgMCAzLjM5IDEuMTc1IDMuNDQ1IDIuODVoLTEuMjNjLS4xMS0xLjA4LS45NjQtMS43NDMtMi4yNS0xLjc0My0xLjIzIDAtMi4xOC42MDItMi4xOCAxLjYwN3ptMi4xOTQgNy40NzhjLTIuMTUzIDAtMy41ODktMS4xMDctMy43MDUtMi44MWgxLjIzYy4xNDQgMS4wNiAxLjEyOSAxLjcwMyAyLjU0NCAxLjcwMyAxLjM0IDAgMi4zMS0uNzA1IDIuMzEtMS42NzUgMC0uODI3LS41NDctMS4zNzQtMS45MTQtMS42NzVMOC4wNDYgOC41SDF2LTFoMTR2MWgtMy41MDRjLjQ2OC40MzcuNjc1Ljk5NC42NzUgMS42OTcgMCAxLjgyNi0xLjQzNiAyLjk2Ny0zLjY0NCAyLjk2N1wiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L21vbnN0ZXItYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8bW9uc3Rlci1idXR0b24gZGF0YS1tb25zdGVyLXJvbGU9XCJmb3JtYXQtYnV0dG9uXCIgZGF0YS1tb25zdGVyLWNvbW1hbmQ9XCJzdWJzY3JpcHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJ2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIm0zLjI2NiAxMi40OTYuOTYtMi44NTNINy43NmwuOTYgMi44NTNIMTBMNi42MiAzSDUuMzhMMiAxMi40OTZ6bTIuNzQ4LTguMDYzIDEuNDE5IDQuMjNoLTIuODhsMS40MjYtNC4yM3ptNi4xMzIgNy4yMDN2LS4wNzVjMC0uMzMyLjIzNC0uNjE4LjYxOS0uNjE4LjM1NCAwIC42MTguMjU2LjYxOC41OCAwIC4zNjItLjI3MS42NDktLjUyLjg5OGwtMS43ODggMS44MzJWMTVoMy41OXYtLjk1OGgtMS45MjN2LS4wNDVsLjk3My0xLjA0Yy40MTUtLjQzOC44NjctLjg0NS44NjctMS41NDcgMC0uOC0uNzAxLTEuNDEtMS43ODctMS40MS0xLjIzIDAtMS43OTUuOC0xLjc5NSAxLjU3NnYuMDZ6XCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvbW9uc3Rlci1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLWJ1dHRvbiBkYXRhLW1vbnN0ZXItcm9sZT1cImZvcm1hdC1idXR0b25cIiBkYXRhLW1vbnN0ZXItY29tbWFuZD1cInN1cGVyc2NyaXB0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwidmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJtNC4yNjYgMTIuNDk2Ljk2LTIuODUzSDguNzZsLjk2IDIuODUzSDExTDcuNjIgM0g2LjM4TDMgMTIuNDk2em0yLjc0OC04LjA2MyAxLjQxOSA0LjIzaC0yLjg4bDEuNDI2LTQuMjN6bTUuMTMyLTEuNzk3di0uMDc1YzAtLjMzMi4yMzQtLjYxOC42MTktLjYxOC4zNTQgMCAuNjE4LjI1Ni42MTguNTggMCAuMzYyLS4yNzEuNjQ5LS41Mi44OThsLTEuNzg4IDEuODMyVjZoMy41OXYtLjk1OGgtMS45MjN2LS4wNDVsLjk3My0xLjA0Yy40MTUtLjQzOC44NjctLjg0NS44NjctMS41NDcgMC0uOC0uNzAxLTEuNDEtMS43ODctMS40MUMxMS41NjUgMSAxMSAxLjggMTEgMi41NzZ2LjA2elwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L21vbnN0ZXItYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgICAgICA8bW9uc3Rlci1idXR0b24gZGF0YS1tb25zdGVyLXJvbGU9XCJmb3JtYXQtYnV0dG9uXCIgZGF0YS1tb25zdGVyLWNvbW1hbmQ9XCJ0ZXh0LXN0YXJ0XCI+LS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwidmFyKCYjNDU7JiM0NTttb25zdGVyLWNvbG9yLXByaW1hcnktMSlcIi0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj4tLT5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCItLT5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIgMTIuNWEuNS41IDAgMCAxIC41LS41aDdhLjUuNSAwIDAgMSAwIDFoLTdhLjUuNSAwIDAgMS0uNS0uNW0wLTNhLjUuNSAwIDAgMSAuNS0uNWgxMWEuNS41IDAgMCAxIDAgMWgtMTFhLjUuNSAwIDAgMS0uNS0uNW0wLTNhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgMCAxaC03YS41LjUgMCAwIDEtLjUtLjVtMC0zYS41LjUgMCAwIDEgLjUtLjVoMTFhLjUuNSAwIDAgMSAwIDFoLTExYS41LjUgMCAwIDEtLjUtLjVcIi8+LS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4tLT5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPC9tb25zdGVyLWJ1dHRvbj4tLT5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPG1vbnN0ZXItYnV0dG9uIGRhdGEtbW9uc3Rlci1yb2xlPVwiZm9ybWF0LWJ1dHRvblwiIGRhdGEtbW9uc3Rlci1jb21tYW5kPVwiYWxpZ24tY2VudGVyXCI+LS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwidmFyKCYjNDU7JiM0NTttb25zdGVyLWNvbG9yLXByaW1hcnktMSlcIi0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiPi0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNCAxMi41YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN2EuNS41IDAgMCAxLS41LS41bS0yLTNhLjUuNSAwIDAgMSAuNS0uNWgxMWEuNS41IDAgMCAxIDAgMWgtMTFhLjUuNSAwIDAgMS0uNS0uNW0yLTNhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgMCAxaC03YS41LjUgMCAwIDEtLjUtLjVtLTItM2EuNS41IDAgMCAxIC41LS41aDExYS41LjUgMCAwIDEgMCAxaC0xMWEuNS41IDAgMCAxLS41LS41XCIvPi0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+LS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDwvbW9uc3Rlci1idXR0b24+LS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLWJ1dHRvbiBkYXRhLW1vbnN0ZXItcm9sZT1cImZvcm1hdC1idXR0b25cIiBkYXRhLW1vbnN0ZXItY29tbWFuZD1cInRleHQtZW5kXCI+LS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwidmFyKCYjNDU7JiM0NTttb25zdGVyLWNvbG9yLXByaW1hcnktMSlcIi0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+LS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiLS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02IDEyLjVhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgMCAxaC03YS41LjUgMCAwIDEtLjUtLjVtLTQtM2EuNS41IDAgMCAxIC41LS41aDExYS41LjUgMCAwIDEgMCAxaC0xMWEuNS41IDAgMCAxLS41LS41bTQtM2EuNS41IDAgMCAxIC41LS41aDdhLjUuNSAwIDAgMSAwIDFoLTdhLjUuNSAwIDAgMS0uNS0uNW0tNC0zYS41LjUgMCAwIDEgLjUtLjVoMTFhLjUuNSAwIDAgMSAwIDFoLTExYS41LjUgMCAwIDEtLjUtLjVcIi8+LS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4tLT5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPC9tb25zdGVyLWJ1dHRvbj4tLT5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPG1vbnN0ZXItYnV0dG9uIGRhdGEtbW9uc3Rlci1yb2xlPVwiZm9ybWF0LWJ1dHRvblwiIGRhdGEtbW9uc3Rlci1jb21tYW5kPVwidGV4dC1qdXN0aWZ5XCI+LS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwidmFyKCYjNDU7JiM0NTttb25zdGVyLWNvbG9yLXByaW1hcnktMSlcIi0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiPi0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIi0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMiAxMi41YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN2EuNS41IDAgMCAxLS41LS41bTAtM2EuNS41IDAgMCAxIC41LS41aDExYS41LjUgMCAwIDEgMCAxaC0xMWEuNS41IDAgMCAxLS41LS41bTAtM2EuNS41IDAgMCAxIC41LS41aDExYS41LjUgMCAwIDEgMCAxaC0xMWEuNS41IDAgMCAxLS41LS41bTAtM2EuNS41IDAgMCAxIC41LS41aDExYS41LjUgMCAwIDEgMCAxaC0xMWEuNS41IDAgMCAxLS41LS41XCIvPi0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+LS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDwvbW9uc3Rlci1idXR0b24+LS0+XG4gICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLWJ1dHRvbiBkYXRhLW1vbnN0ZXItcm9sZT1cImZvcm1hdC1idXR0b25cIiBkYXRhLW1vbnN0ZXItY29tbWFuZD1cImVyYXNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwidmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4wODYgMi4yMDdhMiAyIDAgMCAxIDIuODI4IDBsMy44NzkgMy44NzlhMiAyIDAgMCAxIDAgMi44MjhsLTUuNSA1LjVBMiAyIDAgMCAxIDcuODc5IDE1SDUuMTJhMiAyIDAgMCAxLTEuNDE0LS41ODZsLTIuNS0yLjVhMiAyIDAgMCAxIDAtMi44Mjh6bTIuMTIxLjcwN2ExIDEgMCAwIDAtMS40MTQgMEw0LjE2IDcuNTQ3bDUuMjkzIDUuMjkzIDQuNjMzLTQuNjMzYTEgMSAwIDAgMCAwLTEuNDE0ek04Ljc0NiAxMy41NDcgMy40NTMgOC4yNTQgMS45MTQgOS43OTNhMSAxIDAgMCAwIDAgMS40MTRsMi41IDIuNWExIDEgMCAwIDAgLjcwNy4yOTNINy44OGExIDEgMCAwIDAgLjcwNy0uMjkzelwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L21vbnN0ZXItYnV0dG9uPlxuXG5cbiAgICAgICAgICAgICAgICA8L21vbnN0ZXItYnV0dG9uLWJhcj5cblxuICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRlbnRlZGl0YWJsZVwiIHBhcnQ9XCJjb250ZW50ZWRpdGFibGVcIj5cbiAgICAgICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoVGV4dCk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge1RleHRTdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgVGV4dFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBUZXh0U3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciB0ZXh0IHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udGVudGVkaXRhYmxlXTpmb2N1cyxbZGF0YS1tb25zdGVyLXJvbGU9Y29udGVudGVkaXRhYmxlXTpob3ZlcntvdXRsaW5lOnZhcigtLW1vbnN0ZXItb3V0bGluZS13aWR0aCkgc29saWQgdmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO291dGxpbmUtb2Zmc2V0OjE2cHh9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRlbnRlZGl0YWJsZV06Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOnZhcigtLW1vbnN0ZXItb3V0bGluZS13aWR0aCkgc29saWQgdmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO291dGxpbmUtb2Zmc2V0OjE2cHh9W2RhdGEtbW9uc3Rlci1yb2xlPXRvb2xiYXJde2Rpc3BsYXk6bm9uZTtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9OmZvY3VzLXZpc2libGV7b3V0bGluZTpub25lfSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQge2luc3RhbmNlU3ltYm9sfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtDdXN0b21FbGVtZW50fSBmcm9tIFwiLi4vLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQge1xuICAgIGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxufSBmcm9tIFwiLi4vLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5cbmV4cG9ydCB7UGx1Z2lufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuZXhwb3J0IGNvbnN0IGVkaXRvckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJlZGl0b3JFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5leHBvcnQgY29uc3QgcmFuZ2VTeW1ib2wgPSBTeW1ib2woXCJyYW5nZVwiKTtcblxuLyoqXG4gKiBBbiBFZGl0b3JcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9jb21wb25lbnRzL2NvbnRlbnQvZWRpdG9yL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2NvbXBvbmVudHMvY29udGVudC9lZGl0b3Itc2ltcGxlXG4gKlxuICogQHNpbmNlIDMuODkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIEVkaXRvciB0aGF0IGNhbiBtYWtlIHlvdXIgbGlmZSBlYXNpZXIgYW5kIGFsc28gbG9va3MgZ29vZC5cbiAqL1xuY2xhc3MgUGx1Z2luIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG4gICAgICogQHJldHVybnMge3N5bWJvbH1cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG4gICAgICAgIHJldHVybiBTeW1ib2wuZm9yKFxuICAgICAgICAgICAgXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvY29udGVudC9lZGl0b3IvcGx1Z2luQEBpbnN0YW5jZVwiLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHJldHVybiB7Q29tcG9uZW50cy5Db250ZW50LkVkaXRvclxuICAgICAqL1xuICAgIFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG4gICAgICAgIHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuICAgICAgICAvLyBpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcbiAgICAgICAgLy8gaW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXJvbGVcIiwgXCJwbHVnaW5cIik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCBUYWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG4gICAgICpcbiAgICAgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuICAgICAqXG4gICAgICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG4gICAgICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVscyBMYWJlbCBkZWZpbml0aW9uc1xuICAgICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBhY3Rpb25zIENhbGxiYWNrc1xuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb25zLmNsaWNrPVwidGhyb3cgRXJyb3JcIiBDYWxsYmFjayB3aGVuIGNsaWNrZWRcbiAgICAgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgRmVhdHVyZXNcbiAgICAgKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3NlcyBDU1MgY2xhc3Nlc1xuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGlzYWJsZWQ9ZmFsc2UgRGlzYWJsZWQgc3RhdGVcbiAgICAgKi9cbiAgICBnZXQgZGVmYXVsdHMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuICAgICAgICAgICAgcmFuZ2U6IG51bGwsXG4gICAgICAgICAgICAvLyB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgIC8vIFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAvLyBsYWJlbHM6IHtcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAvLyBjbGFzc2VzOiB7XG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgLy8gZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgLy8gZmVhdHVyZXM6IHtcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAvLyBhY3Rpb25zOiB7XG4gICAgICAgICAgICAvLyBcdGNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGNsaWNrIGFjdGlvbiBpcyBub3QgZGVmaW5lZFwiKTtcbiAgICAgICAgICAgIC8vIFx0fSxcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICAgKiBAcmV0dXJucyB7UGx1Z2lufVxuICAgICAqL1xuICAgIHNldFJhbmdlKHJhbmdlKSB7XG4gICAgICAgIHRoaXNbcmFuZ2VTeW1ib2xdID0gcmFuZ2U7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtQbHVnaW59XG4gICAgICovXG4gICAgcmVzZXRSYW5nZSgpIHtcbiAgICAgICAgdGhpc1tyYW5nZVN5bWJvbF0gPSBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7UmFuZ2V8bnVsbH1cbiAgICAgKi9cbiAgICBnZXRSYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbcmFuZ2VTeW1ib2xdO1xuICAgIH1cbiAgICBcbiAgICBcbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAgICovXG4gICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cblxuLy9cbi8vIC8qKlxuLy8gICogQHByaXZhdGVcbi8vICAqIEByZXR1cm4ge2luaXRFdmVudEhhbmRsZXJ9XG4vLyAgKiBAZmlyZXMgbW9uc3Rlci1lZGl0b3ItY2xpY2tlZFxuLy8gICovXG4vLyBmdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuLy8gXHRjb25zdCBzZWxmID0gdGhpcztcbi8vIFx0Y29uc3QgZWxlbWVudCA9IHRoaXNbZWRpdG9yRWxlbWVudFN5bWJvbF07XG4vL1xuLy8gXHRjb25zdCB0eXBlID0gXCJjbGlja1wiO1xuLy9cbi8vIFx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmN0aW9uIChldmVudCkge1xuLy8gXHRcdGNvbnN0IGNhbGxiYWNrID0gc2VsZi5nZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIpO1xuLy9cbi8vIFx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLWVkaXRvci1jbGlja2VkXCIsIHtcbi8vIFx0XHRcdGVsZW1lbnQ6IHNlbGYsXG4vLyBcdFx0fSk7XG4vL1xuLy8gXHRcdGlmICghaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbi8vIFx0XHRcdHJldHVybjtcbi8vIFx0XHR9XG4vL1xuLy8gXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcbi8vIFx0XHRcdGV2ZW50LFxuLy8gXHRcdFx0QVRUUklCVVRFX1JPTEUsXG4vLyBcdFx0XHRcImNvbnRyb2xcIixcbi8vIFx0XHQpO1xuLy9cbi8vIFx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgTm9kZSAmJiBzZWxmLmhhc05vZGUoZWxlbWVudCkpKSB7XG4vLyBcdFx0XHRyZXR1cm47XG4vLyBcdFx0fVxuLy9cbi8vIFx0XHRjYWxsYmFjay5jYWxsKHNlbGYsIGV2ZW50KTtcbi8vIFx0fSk7XG4vL1xuLy8gXHRyZXR1cm4gdGhpcztcbi8vIH1cblxuLy8gLyoqXG4vLyAgKiBAcHJpdmF0ZVxuLy8gICogQHJldHVybiB7dm9pZH1cbi8vICAqL1xuLy8gZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuLy8gXHR0aGlzW2VkaXRvckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG4vLyBcdFx0YFske0FUVFJJQlVURV9ST0xFfT1cImNvbnRyb2xcIl1gLFxuLy8gXHQpO1xuLy8gfVxuXG4vLyAvKipcbi8vICAqIEBwcml2YXRlXG4vLyAgKiBAcmV0dXJuIHtzdHJpbmd9XG4vLyAgKi9cbi8vIGZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuLy8gXHQvLyBsYW5ndWFnZT1IVE1MXG4vLyBcdHJldHVybiBgXG4vLyAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbi8vIFx0XHRcdDxwPlRoaXMgaXMgYSBwbHVnaW4gYW5kIHNob3VsZCBiZSBleHRlbmRlZC48L3A+XG4vLyAgICAgICAgIDwvZGl2PmA7XG4vLyB9XG4vL1xuLy9cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uLy4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuLFxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbixcbn0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGdldFNsb3R0ZWRFbGVtZW50cyxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQge1xuXHRDdXN0b21FbGVtZW50LFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IElEIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IFByb2Nlc3NpbmcgfSBmcm9tIFwiLi4vLi4vdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuaW1wb3J0IHsgU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQnV0dG9uQmFyU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvYnV0dG9uLWJhci5tanNcIjtcbmltcG9ydCB7IHBvc2l0aW9uUG9wcGVyIH0gZnJvbSBcIi4vdXRpbC9mbG9hdGluZy11aS5tanNcIjtcbmltcG9ydCB7IGNvbnZlcnRUb1BpeGVscyB9IGZyb20gXCIuLi8uLi9kb20vZGltZW5zaW9uLm1qc1wiO1xuXG5leHBvcnQgeyBCdXR0b25CYXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJ3aW5kb3dSZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGltZW5zaW9uc1N5bWJvbCA9IFN5bWJvbChcImRpbWVuc2lvbnNcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkJhclNsb3RFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uQmFyU2xvdEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlclNsb3RFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyU2xvdEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkJhckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25CYXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjbG9zZUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNsb3NlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJwb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlck5hdkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJOYXZFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzd2l0Y2hFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic3dpdGNoRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX1BPUFBFUl9QT1NJVElPTiA9IFwiZGF0YS1tb25zdGVyLXBvcHBlci1wb3NpdGlvblwiO1xuXG4vKipcbiAqIEEgYnV0dG9uIGJhciBjb250cm9sLlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vYnV0dG9uLWJhci9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL2J1dHRvbi1iYXItc2ltcGxlXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoaXMgaXMgYSBidXR0b24gYmFyIGNvbnRyb2wgdGhhdCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IGEgc2V0IG9mIGJ1dHRvbnMuXG4gKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG4gKi9cbmNsYXNzIEJ1dHRvbkJhciBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL2J1dHRvbi1iYXJAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBwb3BwZXIgRmxvYXRpbmdVSSBwb3BwZXIgY29uZmlndXJhdGlvblxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcG9wcGVyLnBsYWNlbWVudD10b3AgUGxhY2VtZW50IG9mIHRoZSBwb3BwZXJcblx0ICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+fSBwb3BwZXIubWlkZGxld2FyZSBNaWRkbGV3YXJlIGZvciB0aGUgcG9wcGVyXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0Y29uc3Qgb2JqID0gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge30sXG5cdFx0XHRwb3BwZXI6IHtcblx0XHRcdFx0cGxhY2VtZW50OiBcImxlZnRcIixcblx0XHRcdFx0bWlkZGxld2FyZTogW1wiYXV0b1BsYWNlbWVudFwiLCBcInNoaWZ0XCIsIFwib2Zmc2V0OjVcIl0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXG5cdFx0aW5pdERlZmF1bHRzRnJvbUF0dHJpYnV0ZXMuY2FsbCh0aGlzLCBvYmopO1xuXG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0gPSBuZXcgUGF0aGZpbmRlcih7IGRhdGE6IHt9IH0pO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXG5cdFx0Ly8gc2V0dXAgc3RydWN0dXJlXG5cdFx0aW5pdEJ1dHRvbkJhci5jYWxsKHRoaXMpLnRoZW4oKCkgPT4ge1xuXHRcdFx0aW5pdFBvcHBlclN3aXRjaC5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbQnV0dG9uQmFyU3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWJ1dHRvbi1iYXJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGRvbSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0XHR1cGRhdGVSZXNpemVPYnNlcnZlck9ic2VydmF0aW9uLmNhbGwodGhpcyk7XG5cdFx0fSwgMCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzO1xuXHRcdGF0dHJpYnV0ZXMucHVzaChBVFRSSUJVVEVfUE9QUEVSX1BPU0lUSU9OKTtcblx0XHRyZXR1cm4gYXR0cmlidXRlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGRvbSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHRkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZSB0aGUgc2xvdHRlZCBkaWFsb2cuXG5cdCAqIEByZXR1cm4ge0J1dHRvbkJhcn1cblx0ICovXG5cdGhpZGVEaWFsb2coKSB7XG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW4gdGhlIHNsb3R0ZWQgZGlhbG9nLlxuXHQgKiBAcmV0dXJuIHtCdXR0b25CYXJ9XG5cdCAqL1xuXHRzaG93RGlhbG9nKCkge1xuXHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUb2dnbGUgdGhlIHNsb3R0ZWQgZGlhbG9nLlxuXHQgKiBAcmV0dXJuIHtCdXR0b25CYXJ9XG5cdCAqL1xuXHR0b2dnbGVEaWFsb2coKSB7XG5cdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9ialxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gaW5pdERlZmF1bHRzRnJvbUF0dHJpYnV0ZXMob2JqKSB7XG5cdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUE9QUEVSX1BPU0lUSU9OKSkge1xuXHRcdG9iai5wb3BwZXIucGxhY2VtZW50ID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1BPUFBFUl9QT1NJVElPTik7XG5cdH1cblxuXHRyZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHNlbGZbY2xvc2VFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyhwYXRoKSkge1xuXHRcdFx0aWYgKGVsZW1lbnQgPT09IHNlbGYpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGhpZGUuY2FsbChzZWxmKTtcblx0fTtcblxuXHRpZiAoc2VsZltidXR0b25CYXJTbG90RWxlbWVudFN5bWJvbF0pIHtcblx0XHRzZWxmW2J1dHRvbkJhclNsb3RFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwic2xvdGNoYW5nZVwiLCAoZXZlbnQpID0+IHtcblx0XHRcdGNoZWNrQW5kUmVhcnJhbmdlQnV0dG9ucy5jYWxsKHNlbGYpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0pIHtcblx0XHRzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJzbG90Y2hhbmdlXCIsIChldmVudCkgPT4ge1xuXHRcdFx0Y2hlY2tBbmRSZWFycmFuZ2VCdXR0b25zLmNhbGwoc2VsZik7XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRzZWxmW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfUE9QUEVSX1BPU0lUSU9OXSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdHNlbGYuc2V0T3B0aW9uKFwiY2xhc3Nlcy5idXR0b25cIiwgdmFsdWUpO1xuXHR9O1xuXG5cdHNlbGZbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0aWYgKHNlbGZbdGltZXJDYWxsYmFja1N5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0c2VsZlt0aW1lckNhbGxiYWNrU3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdC8vIGNhdGNoIEVycm9yKFwiaGFzIGFscmVhZHkgcnVuXCIpO1xuXHRcdFx0XHRpZiAoZS5tZXNzYWdlICE9PSBcImhhcyBhbHJlYWR5IHJ1blwiKSB7XG5cdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWxldGUgc2VsZlt0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRzZWxmW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdFx0dXBkYXRlUG9wcGVyLmNhbGwoc2VsZik7XG5cdFx0XHRcdHNlbGZbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS5jYWxjdWxhdGVkXCIsIGZhbHNlKTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjaGVja0FuZFJlYXJyYW5nZUJ1dHRvbnMuY2FsbChzZWxmKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlcnJvcj8ubWVzc2FnZSB8fCBcIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYXJyYW5naW5nIHRoZSBidXR0b25zXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSk7XG5cblx0aW5pdFNsb3RDaGFuZ2VkSGFuZGxlci5jYWxsKHNlbGYpO1xufVxuXG5mdW5jdGlvbiBpbml0U2xvdENoYW5nZWRIYW5kbGVyKCkge1xuXHR0aGlzW2J1dHRvbkJhckVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJzbG90Y2hhbmdlXCIsICgpID0+IHtcblx0XHR1cGRhdGVSZXNpemVPYnNlcnZlck9ic2VydmF0aW9uLmNhbGwodGhpcyk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjaGVja0FuZFJlYXJyYW5nZUJ1dHRvbnMoKSB7XG5cdGlmICh0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShcImRhdGEuY2FsY3VsYXRlZFwiLCBmYWxzZSkgIT09IHRydWUpIHtcblx0XHRjYWxjdWxhdGVCdXR0b25CYXJEaW1lbnNpb25zLmNhbGwodGhpcyk7XG5cdH1cblxuXHRyZWFycmFuZ2VCdXR0b25zLmNhbGwodGhpcyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gcmVhcnJhbmdlQnV0dG9ucygpIHtcblx0bGV0IHN1bSA9IHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0ub2Zmc2V0V2lkdGg7XG5cdGNvbnN0IHNwYWNlID0gdGhpc1tkaW1lbnNpb25zU3ltYm9sXS5nZXRWaWEoXCJkYXRhLnNwYWNlXCIpO1xuXG5cdGNvbnN0IGJ1dHRvblJlZmVyZW5jZXMgPSB0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShcblx0XHRcImRhdGEuYnV0dG9uUmVmZXJlbmNlc1wiLFxuXHQpO1xuXG5cdGZvciAoY29uc3QgcmVmIG9mIGJ1dHRvblJlZmVyZW5jZXMpIHtcblx0XHRzdW0gKz0gdGhpc1tkaW1lbnNpb25zU3ltYm9sXS5nZXRWaWEoYGRhdGEuYnV0dG9uLiR7cmVmfWApO1xuXG5cdFx0bGV0IGVsZW1lbnRzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwoXG5cdFx0XHR0aGlzLFxuXHRcdFx0J1tkYXRhLW1vbnN0ZXItcmVmZXJlbmNlPVwiJyArIHJlZiArICdcIl0nLFxuXHRcdFx0bnVsbCxcblx0XHQpOyAvLyBudWxsIFx1MjFBNiBvXG5cdFx0aWYgKGVsZW1lbnRzLnNpemUgPT09IDApIHtcblx0XHRcdGVsZW1lbnRzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwoXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdCdbZGF0YS1tb25zdGVyLXJlZmVyZW5jZT1cIicgKyByZWYgKyAnXCJdJyxcblx0XHRcdFx0XCJwb3BwZXJcIixcblx0XHRcdCk7IC8vIG51bGwgXHUyMUE2IG9cblx0XHR9XG5cblx0XHRjb25zdCBuZXh0VmFsdWUgPSBlbGVtZW50cy52YWx1ZXMoKS5uZXh0KCk7XG5cdFx0aWYgKCFuZXh0VmFsdWUpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGVsZW1lbnQgPSBuZXh0VmFsdWU/LnZhbHVlO1xuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChzdW0gPiBzcGFjZSkge1xuXHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzbG90XCIsIFwicG9wcGVyXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInNsb3RcIik7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaW5WaXNpYmxlQnV0dG9ucyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIFwiOnNjb3BlXCIsIFwicG9wcGVyXCIpOyAvLyBudWxsIFx1MjFBNiBvXG5cdGlmIChpblZpc2libGVCdXR0b25zLnNpemUgPiAwKSB7XG5cdFx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGhpZGUuY2FsbCh0aGlzKTtcblx0XHR9LCAxKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGNhbGNCb3hXaWR0aChub2RlKSB7XG5cdGNvbnN0IGRpbSA9IGdldEdsb2JhbCgpPy5nZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuXHRpZiAoZGltID09PSBudWxsKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgXCJubyBjb21wdXRlZCBzdHlsZVwiKTtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBjb21wdXRlZCBzdHlsZVwiKTtcblx0fVxuXHRjb25zdCBib3VuZGluZyA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0cmV0dXJuIChcblx0XHRjb252ZXJ0VG9QaXhlbHMoZGltW1wiYm9yZGVyLWxlZnQtd2lkdGhcIl0pICtcblx0XHRjb252ZXJ0VG9QaXhlbHMoZGltW1wicGFkZGluZy1sZWZ0XCJdKSArXG5cdFx0Y29udmVydFRvUGl4ZWxzKGRpbVtcIm1hcmdpbi1sZWZ0XCJdKSArXG5cdFx0Ym91bmRpbmdbXCJ3aWR0aFwiXSArXG5cdFx0Y29udmVydFRvUGl4ZWxzKGRpbVtcImJvcmRlci1yaWdodC13aWR0aFwiXSkgK1xuXHRcdGNvbnZlcnRUb1BpeGVscyhkaW1bXCJtYXJnaW4tcmlnaHRcIl0pICtcblx0XHRjb252ZXJ0VG9QaXhlbHMoZGltW1wicGFkZGluZy1sZWZ0XCJdKVxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZUJ1dHRvbkJhckRpbWVuc2lvbnMoKSB7XG5cdGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMucGFyZW50RWxlbWVudCk7XG5cdFxuXHRpZiAoY29tcHV0ZWRTdHlsZSA9PT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIGNvbXB1dGVkIHN0eWxlXCIpO1xuXHR9XG5cblx0bGV0IHdpZHRoID0gdGhpcy5wYXJlbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuXHRpZiAoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiYm94LXNpemluZ1wiKSAhPT0gXCJib3JkZXItYm94XCIpIHtcblx0XHR3aWR0aCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIpO1xuXHRcdFxuXHRcdGxldCBwaXhlbCA9IDA7XG5cdFx0dHJ5IHtcblx0XHRcdHBpeGVsID0gY29udmVydFRvUGl4ZWxzKHdpZHRoKVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGU/Lm1lc3NhZ2UgfHwgXCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBjYWxjdWxhdGluZyB0aGUgZGltZW5zaW9uc1wiKTtcblx0XHR9XG5cdFx0XG5cdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLnNwYWNlXCIsIHBpeGVsKTtcblx0fSBlbHNlIHtcblx0XHRsZXQgYm9yZGVyV2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMpLmdldFByb3BlcnR5VmFsdWUoXG5cdFx0XHRcIi0tbW9uc3Rlci1ib3JkZXItd2lkdGhcIixcblx0XHQpO1xuXHRcdGlmIChib3JkZXJXaWR0aCA9PT0gbnVsbCB8fCBib3JkZXJXaWR0aCA9PT0gXCJcIikge1xuXHRcdFx0Ym9yZGVyV2lkdGggPSBcIjBweFwiO1xuXHRcdH1cblxuXHRcdGxldCBib3JkZXJXaWR0aFdpdGhvdXRVbml0ID0gMDtcblx0XHR0cnkge1xuXHRcdFx0Ym9yZGVyV2lkdGhXaXRob3V0VW5pdCA9IGNvbnZlcnRUb1BpeGVscyhib3JkZXJXaWR0aCk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZT8ubWVzc2FnZSB8fCBcIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGNhbGN1bGF0aW5nIHRoZSBkaW1lbnNpb25zXCIpO1xuXHRcdH1cblxuXHRcdC8vIHNwYWNlIHRvIGJlIGFsbG9jYXRlZFxuXHRcdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFxuXHRcdFx0XCJkYXRhLnNwYWNlXCIsXG5cdFx0XHR3aWR0aCAtIDIgKiBib3JkZXJXaWR0aFdpdGhvdXRVbml0LFxuXHRcdCk7XG5cdH1cblxuXHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEudmlzaWJsZVwiLCAhKHdpZHRoID09PSAwKSk7XG5cblx0Y29uc3QgYnV0dG9uUmVmZXJlbmNlcyA9IFtdO1xuXG5cdGNvbnN0IHZpc2libGVCdXR0b25zID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgXCI6c2NvcGVcIiwgbnVsbCk7IC8vIG51bGwgXHUyMUE2IG9cblxuXHRmb3IgKGNvbnN0IFssIGJ1dHRvbl0gb2YgdmlzaWJsZUJ1dHRvbnMuZW50cmllcygpKSB7XG5cdFx0aWYgKCFidXR0b24uaGFzQXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXJlZmVyZW5jZVwiKSkge1xuXHRcdFx0YnV0dG9uLnNldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1yZWZlcmVuY2VcIiwgbmV3IElEKFwidmJcIikudG9TdHJpbmcoKSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVmID0gYnV0dG9uLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1yZWZlcmVuY2VcIik7XG5cdFx0aWYgKHJlZiA9PT0gbnVsbCkgY29udGludWU7XG5cblx0XHRidXR0b25SZWZlcmVuY2VzLnB1c2gocmVmKTtcblx0XHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcblx0XHRcdGBkYXRhLmJ1dHRvbi4ke3JlZn1gLFxuXHRcdFx0Y2FsY0JveFdpZHRoLmNhbGwodGhpcywgYnV0dG9uKSxcblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgaW52aXNpYmxlQnV0dG9ucyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIFwiOnNjb3BlXCIsIFwicG9wcGVyXCIpOyAvLyBudWxsIFx1MjFBNiBvXG5cdGZvciAoY29uc3QgWywgYnV0dG9uXSBvZiBpbnZpc2libGVCdXR0b25zLmVudHJpZXMoKSkge1xuXHRcdGlmICghYnV0dG9uLmhhc0F0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1yZWZlcmVuY2VcIikpIHtcblx0XHRcdGJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItcmVmZXJlbmNlXCIsIG5ldyBJRChcImliXCIpLnRvU3RyaW5nKCkpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlZiA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItcmVmZXJlbmNlXCIpO1xuXHRcdGlmIChyZWYgPT09IG51bGwpIGNvbnRpbnVlO1xuXG5cdFx0aWYgKHJlZi5pbmRleE9mKFwiaWJcIikgIT09IDApIHtcblx0XHRcdGJ1dHRvblJlZmVyZW5jZXMucHVzaChyZWYpO1xuXHRcdH1cblx0fVxuXG5cdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS5jYWxjdWxhdGVkXCIsIHRydWUpO1xuXHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEuYnV0dG9uUmVmZXJlbmNlc1wiLCBidXR0b25SZWZlcmVuY2VzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVSZXNpemVPYnNlcnZlck9ic2VydmF0aW9uKCkge1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cblx0Y29uc3Qgc2xvdHRlZE5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcyk7XG5cdHNsb3R0ZWROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZShub2RlKTtcblx0fSk7XG5cblx0aWYgKHRoaXMucGFyZW50RWxlbWVudCA9PT0gbnVsbCkgcmV0dXJuO1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXMucGFyZW50RWxlbWVudCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZSgpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHR9IGVsc2Uge1xuXHRcdHNob3cuY2FsbCh0aGlzKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGhpZGUoKSB7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbih0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSwgXCJjbGFzc1wiLCBcIm9wZW5cIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aGlzIFBvcHBlckJ1dHRvblxuICovXG5mdW5jdGlvbiBzaG93KCkge1xuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCBmYWxzZSkgPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0s7XG5cblx0YWRkQXR0cmlidXRlVG9rZW4odGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sIFwiY2xhc3NcIiwgXCJvcGVuXCIpO1xuXG5cdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVBvcHBlcigpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSAhPT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0cG9zaXRpb25Qb3BwZXIuY2FsbChcblx0XHR0aGlzLFxuXHRcdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0sXG5cdFx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSxcblx0XHR0aGlzLmdldE9wdGlvbihcInBvcHBlclwiLCB7fSksXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRyb2xdYCxcblx0KTtcblx0dGhpc1tidXR0b25CYXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YnV0dG9uLWJhcl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblx0dGhpc1twb3BwZXJOYXZFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09cG9wcGVyLW5hdl1gLFxuXHQpO1xuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1zd2l0Y2hdYCxcblx0KTtcblxuXHR0aGlzW2J1dHRvbkJhclNsb3RFbGVtZW50U3ltYm9sXSA9IG51bGw7XG5cdGlmICh0aGlzW2J1dHRvbkJhckVsZW1lbnRTeW1ib2xdKVxuXHRcdHRoaXNbYnV0dG9uQmFyU2xvdEVsZW1lbnRTeW1ib2xdID1cblx0XHRcdHRoaXNbYnV0dG9uQmFyRWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3Rvcihgc2xvdGApO1xuXHR0aGlzW3BvcHBlclNsb3RFbGVtZW50U3ltYm9sXSA9IG51bGw7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdKVxuXHRcdHRoaXNbcG9wcGVyU2xvdEVsZW1lbnRTeW1ib2xdID1cblx0XHRcdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3Rvcihgc2xvdGApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlPHVua25vd24+fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqXG4gKi9cbmZ1bmN0aW9uIGluaXRCdXR0b25CYXIoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0Y2hlY2tBbmRSZWFycmFuZ2VCdXR0b25zLmNhbGwodGhpcyk7XG5cdH0pLnJ1bigpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRQb3BwZXJTd2l0Y2goKSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1twb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJzd2l0Y2hcIik7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB7XG5cdFx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH07XG5cblx0Zm9yIChjb25zdCB0eXBlIG9mIFtcImNsaWNrXCIsIFwidG91Y2hcIl0pIHtcblx0XHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHR0eXBlLFxuXHRcdFx0dGhpc1twb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXJdLFxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uLWJhclwiPlxuICAgICAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJwb3BwZXItbmF2XCIgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXItbmF2XCJcbiAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwYXJ0PVwicG9wcGVyLXN3aXRjaFwiIGRhdGEtbW9uc3Rlci1yb2xlPVwic3dpdGNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnkgaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS41IDEzYTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwem0wLTVhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDB6bTAtNWExLjUgMS41IDAgMSAxLTMgMCAxLjUgMS41IDAgMCAxIDMgMHpcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIj5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwicG9wcGVyXCI+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChCdXR0b25CYXIpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEJ1dHRvbkJhclN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IEJ1dHRvbkJhclN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRCdXR0b25CYXJTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGJ1dHRvbmJhciB7IFxuLmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja30ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnksYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5LC5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9YnV0dG9uOmFjdGl2ZSxidXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31idXR0b246YWN0aXZle3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5tb25zdGVyLWJ1dHRvbi1iYXIsLm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tb25zdGVyLWJ1dHRvbi1ncm91cHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Z2FwOjA7bWFyZ2luOjFyZW0gMH0ubW9uc3Rlci1idXR0b24tZ3JvdXA+Om5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKi0xKX0ubW9uc3Rlci1idXR0b24tZ3JvdXAgOmhvdmVye2JveC1zaGFkb3c6bm9uZX1idXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtidXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX19QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpSYWxld2F5O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFGSjRBQklBQUFBQXQzQUFBRklRQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHb0U4Rys0NkhJVThCbUEvVTFSQlZFUUFoUWdJZ1FvSm54UVJDQXFCdWd5Qm1uQUxoQ0lBQVRZQ0pBT0lRQVFnQllVVUJ5QU1neHdiZmFRWGFKZWZtTnowWm9sM3Y2MGNQZVpNcEc0SEpTams1cUlJTmc2Q0dNZ2xaZi8vbjNGMGpPR0dEUkExclhlSW5jSklVa05IR242OXFNUkRVOFphampzOVVic210bnFuRTN2M3ZxaVFtZlJRcExrS1c2UVp3YWw2czVJVWlKTlVTVUcvT3dvRFk2QjY3NU9qU2prRFNTTXUycGVkcHU5dkpJTFVsSmQ3MDdEK2VMSHBqWURJNGUxdURuTGpISHZ4cERYR015ZHVMTG4xcXQwRkNRT3lGc0paRTEra0pxM1QrSWU3QkpGSU5PQU5iaTl2VFV6aEk3VzRHbVVMMGxXalQvRlFRaS9tKyt4dVBQMDJvbVJIZTVwbjREZ2ZOWmZuK1I5ejk3OXRtRWVOYXExUnhScUhUalRQTkEySkZFZ3JIZG8vbnQvVy81emJnR0N4aWE2RWtWaUEyRmhZR0l0Um1FMVp2VlV2cXRTdGI3TXZyZDNXNyt0MiswWGRvVG56empZYnA3bVNITEFDa2hNV2dDVEw2czBXdjBBVW9oSmZFcUUzb3BQZDU4aWtKbktsbyszdWFlU0hZSjZmY0ljWGpkK3JLVUVzYUVsVHFsVWxWUm0vTitlLzhpUDBMNUFLb3pObEozLzlpQndzaE02djVKSVVKeWtnVDNmZHJPbXE2TGNzK1orcS9Yc0FYRnhFRWlRSVVhS29zRm43Y3RUKzdCQlM1ZHFEb2xKWHVuYmw3cnR0ekQvdjM4NExmdEphZ0ZGQUxZUEU1QTdnbk1yWkJodDRsWHFzYlpLbWJkcTBUdE9tcG1nTml1Z00yUFlCYzczTXJqcTdHTHNvWEhjVHB0OXVQdkZEejhlTjNnK3N4clBRQXc2RFRGTnAvT1pJOWlpbk5pdFpoUm1wUU9Da2RvQmRBTmpWV2xhdk1pdHdETkpYL3BZSUFrVnduT1Avdlc1eHpvTXc3U0FGQUtVK1p6L2tuUC9aOWorT2Rmckw4S2UydmRLYm1waHV4SlN1TDhFVUFnZ0hJaUJIUCs0NDRFRHp2MVBUUTNZa09jT1NsVEhtajZVc2RmbzJMKy9qcFllN0lIV2NRVWdjZ2twTEZSMVlUVzhDR0tRWDliOEdGQUFBSDl0bzRSSFE2R0x2RlJyaTREaXdUekFBRERNS0RQci9mWjNWL3FkZ1Bta0d6S1RFbVdFWGI3UTN0dGdUWXFvMm5QNi8rOTdYZitGLzlKSEFWc0lJY0FDQlp3UnlrR1Q3Z0NSOFZvaEpjVU9PU0RqaVNiQXBoTW96bTJKUnB0QnRVVzY5WGJORkczSVZ5MktMb2s0OC9MZnNtNTI3SWFxQkxNdUJiT0ZJd2VGVWQwMXZlTCtZOHhXaHR6Y3FUbTJDSVRjNWVMSndTSTRmWWxMWUZJVkhBcy8vVDUzTjQvWXgxaEtHVStIU3FFcmRwUFBuczZmcXFXSnNOYlphQ2xRdGpsT0xVTXNoY2RvQTVUUXNzNEpMYzkwU3hDT01NVUs0S1A5TnNocHpwWDR2d3hLQ2hDQVNSRVJFL0xLc1dSbEp3TktBY1RuWEFoRXkzcjFLSGNaYS9ZZFg1ODQyMC9pYVhtdEdob0NBaUlpQVIyM3YvUDkrS1RBQ0FONWhka0MzeFVDNEVMc2dndmtSMmtyRWpZU0V2MEJLU21IQ2hJdllPQ0FKa0tRZ3lZTU0yUW9VTXpDbzE2Qko4NXFBV0NDZEhlazNBQjBPREwxTHEwUGdUZTNoU3cyZmhpNFhoUHVldVFXRUg2eHRJRVFBYkcyTm01b1Y1NFFGUCt5S2dPMkQ0VDV0L3d6MlhXOTIvcnBxcExUU0lQOHFWOXZMdk9kczBOTFd5WDUxSzZvZmJ2UFpFMXBhZjd3MzE4QzladGhxN2YzMmJmdUw2NFZaSHc1MTRZc201bGdmTmJmRzdXOWxzVUE0RUd6NzIzdnh3R3pwNGZSUittUDhMczVCN0tCMmVESlhjNnh3bEc2OTAydWc3QXpMQThOWTIxQjJkQi9QNXFmT1Y4dDFvbnlMNWpaRERmUUk1Umc4RDk4RnZIc3ZjbEh1SnNyZHZzSnJwYy9Uci9ndS9FZlpKelhVenBXYURqN003K1VQOC84RWtBQVZhQVMvQ1IrWHMvSk40WWFJY08xeEhaY1VhTU1ia2xycEt5N05mUUpLUWNVUmFnb0dtQ1crSEE2RU52YmczM3NsMnBJWVJtRTliSUhiMG1BNmtrNmxONUdkeU1ONUVibVFoeEhLbHdNZ1Q1OGNndzdwZFVSejduZk1jUWZjVTN2SWN6VmtkcmhYOFhIcTQwMTJ0Rk9kN2tUL2E3cDdtODNXQTcxRjdhTzlNK2RqdmRkNmo3ZnhtK0QxUHUzejN1aXJ2bXV5emE1M3RydjkzbFRiODJSVDJLYUZWVUtNTlAzNkJ2UU1DbzBHc0Vka0w4cyt6TGcxRXhiTTBOZ0NXQXhnemY4MkRHMUtYTWZjNHJqTmNRZkhLeFNDdVJ1Qkk1QW9kREREa0dkVjhDblZWRW1FTWFpbjRTYTBBWFRJMFJCTnBPWUFMVnExYVY5dnhKaVV6SEtXQ2lzNm1wMEJ1a3gwNjlHcjc0c25WTmJzb0Nta1ZNb3A1K3BER2FXejJzTERyMmlOdCtvWk8wYjM2WVNJaldjeHZubE4weDBWaGxZb1c0VVJqWFhLeUxHM1kzcW9MZEVhekhBRUVvVnVNbDNERGVFUlZwRy9qZVRFUjBDVVpFVTFtb3RxRm9pd0pGS1VhREZpYWNTbEJKckVqU1FLSi9DU0ZTbVNLazE2MVFsa2RLZXlTWFl6c2RYS2k2STlpa05KTXRDVUtsT3VRcVVxMVZIVDF6cTYrbHpmUU5BSWE1SnBSb3ZXYUVQN1p4dU5tVGpNTEJZdXEzWFVUZ05kUkRkNlVxOUEzM2NieEF6eERET04wSXhhTlZheGQvL3MvYWp4QUU2Sm5QYkZHWmt1QzN1YU5VOEVzRFNMWlZteE9qMVBkOEhReFhTcGVka1hhd2JXNndabzgrNkRyaXVRRkZ3NUlwdm5KaDYvWmdGSks5MzBhRU0yWEozeUpCMERIb3BoYnFnMHVya3ZNSWdZbHRiR1JQY2RrZDdWai9OVjRwYkFiYSsvRTRCakNnOXA1WmVyaS9wZE0wQ0cvN3RYWk54VkUrNmJZYXZRbjZ1bVd3eTNGWGY2Z2crWG5BdEhEZ2prUE5pVWJxcG93dkRVdmJSbGNqNVhaSFl6VjhKaTRObDF2anNPaHJNYXhPSHhlRHdlanovVklISlhuNkgwd2hnNnFGT0VVcVFvMFdMRTBvaExDVEtKMHlRNUxVOXlSUXBTcFVsZlpuQVNCa1dwbENsWG9WS1Y2cWliVEJ0TW1RS1lZV0hWVVVmdEdJdDYybGRuTUgzRXBpVTBxVlFxSGJDTHhPVStFNC8xWExmQkVoektoZ1VjZ1VTaGZ4d21EejlHNUVSQUFITDdGSFJLUXlybnd1eFFmNXJoSEJFQlJJb1NMVVlzelViYzRydE1kcGwyNkZnZDU1dGdRRzh4L2ZBWjJKekl2R2JtbHJjWEFtM3dYS2E3RWxmUGNTMnR4ZnErZWdmaUhHb0RNeHlCUktIdnkzU0ozMFE2VjgrNm1kZlpzYUZWM2VPVUtzV015bmtoeUwxdTRWSTBMMVNKTEl4WHlZenBMeU5xaVd6MFhUcGthVHluMVpEdGk5MG1ZMDJ2MHRVcXR6U0NsK3FySzdySXV2MXY5UkQwc2d4cUdiSm9HR2ZFa2xFMVl6cjI4TzFsMktld1g5TjRBRGFOMWI3TDBJYVJUWE91eTl5aXU4MnBPd0hRQkMrcGxkQ3JPbUswTWcvcjF2UllFbTNEQkVjZ1VlZ21VeDAzRzQrd2l0UWdPZkVSRUNWWlVZM200dG1FSXZ3VUtVcTBHTEUwNGxJQ1R1STB5VHF0RmNsRUNsS2xTYTg2V0VaM0pKdnNGV2k3SXhLSk9Cd09oOFBoY0VUclJOM3REcGxNSnBOaFJJYWlxQWlHWVJnbWNia3N5NE5vei9yb2ZRTDdLY2FsTkQwRk9XM1JHWnVPQlIyeG1WTXhrVWdrRGwwWDd1Sml1dFM4Yk5HYUUrdi9aUU93cWU4NkdJSWVFc0N1b3ZXWWZDcTJ0dnBNT0JON016TzY4R1dYTGh0bWdXMmZmZUhwMU11N3F3WDVORHdUa3BDU2NlZkJreGR2ZmluQVJJUklVYUxGaUtVUmx4SUFpWkUwclZxNjVJb1VTWlVtdmVxVU1ycHMvejFaV0VaNVlCZ0dBQUFBQUFDQTBXWnNkMUNwK0h3K24yL2NPbGs0ckRwU2wxSzNIcjM2amcxQ1R0d3pPY051Q1hZTmdpRFlob3RIMW9nT0xSU3V4OG5pbDRyMmlZYXYwbm9yelh2WjJuWmpaTGZhS0QrVlJnSC9mZ05tcGtGYmhnaUdpVWFjR2ZYTm1LNDlGUHZZOXR2YmNUbTc1KzNmZGFtVzZZU3R3a2R6YUNIWmN2cTBDUzRpVTVabU54TFhHQmUvclFvSGpNUDEvUUVHVk1aRkpnYkRESi81VDNleUJjdkdQU3FUaW1KY0MrWVFVanFHdjJuQzdxM25CMERPcXYyRzNWdmxJaEtJVzhNUlNCUzZ5WlRpTkdGWCtSR0NESHM4UFlJZFRqZEFVQXl2UWt3U0NwcGhOZDIwbXB1TWpRWEtCUWtXSWpRcG1KUlVLWXhLWGNMRGM2a0lmSGFUS2FPTVNjNE1zVlJZUTBlelU2RkxwVnVQM3RMSHV3cHJZZnRoaXdpSEZBV2tTcG1XUnQrNm5KNlUxOEN1eUo4NWoyeDBiMGQ3TjlwaWJxMGxiNE5uVStwTzd0RVVMaWhkVU8yaHJwdGdZWENzeEJGQTNsUTJubUZjM0ZiUmpHQmdDZDZCVUg3cW5YQmJhY2pzSzk5UmZJRE1BRmtCc29PK25aZzhQMEJCZ01JQXRRRWFuOVdRRXM5TUFITkc4NTU0d2ErQXJucXZUVGpwR1M3ZS9pbFBtakFSUG1uc3hXa2RBQVJ5T0w5eUFoeW14N1NHS2xrN0doNDh2RHZOZmRnK0lUQlpwRDlnemdNSUJ3d0JrNXRta0VYSXFxTU1hRVRnL0hVZTI2b0xUVHA0dzRnOVVrWjViZ2J4RUh0Q3lUTFlQSG1KVXEzdUpwcXp2U05jdW1iQmRYWVFza3UxQzkyTjhqVHZERkVVMHJ2ODE3Z21xc0dqUGZSdU5qdmVyVERtSENFNHErcWJ6T2p1SUl2UmFEaHpaMS9WSlVwaGhpT1FLSFF3c1o1VGpndUFCOEN1S3IrWUlNS2V3SW9NTzV4eDllNEFFQlREU1lwbTJPVHk4b0lveVlvYWplalVRYjhKd0QvWEI1aVNzd1VpZ2hBc1JHaFMwQ2d6SnpYTUNUVTFYRVpIYVRBWFRDUVNpY1hiWTRWQ29SZ0xFeHN0bGRDdHhaMWFVbmx1dEdodE9RdDE4L1JVZFZwa0RCdmJTNG5Fb05Gb05CcU5GaWRYbjBXSkxKQ3JVOENVYnFxTWhaR3BtK0Y4RWJCSVVhTEZpS1VSbHhLRUVpVlZMVk55UmdwU3BVbXZ1Z0FaaEFHbHlwU3JVS2xLdGJwbUE2d3JRTGNldmZxYUU3RFRXczZZSG0wRTJkY2xpV1dzV0Uzbm1TN0c1YjZ1R1ZuUG5OdXl5V2JId3hEanBXazZNK2oyMGVZTUxRLzAzVk1tS200Wm5nbEpTTW00OCtESml6ZS9LcmRDa1ZNbEtzeUltbWVaZjBHUXl3SkJFRnhDL3JnZ0NJSWdDSUl6OTBiREV3TVRqOGZqQVVBeGRTNlZzRGNzMWc4d2ZZQ1hyTmQ5OFNIOGdhams1dnVVUHFnNFhEUDlKbTdvR1d2R1h4U2RFTExmcnNFU0VzbVdYVGNNM2NMdEhGU0diU0hCQWpjQ2lVSVhKcUhuTWxPTFJCTGFzblVLMlN1eDF6cW5NQi9aTUdPeC96UHU4b2hEQURBQU9BQUNBQW1BQWtBRFlIZ2xDa0N1TFZBaVNJS0ZDUDBraFdOS1BGVXdiZHlMK3NEQnllZ2thSjJXRU10V3JFNi80dnBXN0c2ZTRtRHcwQmZ4WmhGdDlHdmZoUEVBbXlkNGNNdFVxc1BsNGF5N0d1YWs1dDBONTJPT3dKYUJnU05Ic2syTmg3cUVXWllWcThlK2tzeGpqM0VLU1hnOExOaWxRcUZRekUxZnY1dHZwUVFGdEZJbXlMdGl2VGVXa1FDazVaUmUyUWlKMlpyTFlEVjg2TUJZV1g1eEFQdW5rMXludFoyeDZhYk5yaVhBc2hXcmNma1U2M3kvai9tK2duek44STNZdHh6ZkNlT2lBUGk3WWgxd0JCS0Z6czcyV3JsaWZXYjNuK3NPbWtTaXpYSFRYcG12QW5PZ2VhKzdTOEYxRUhQOG5VNEluRlk0UTVtV3AzQkFMbGVzYTdCejRGdU9iRTRFWFJuaXlrOGh0Q09pazh2bGNzV1lJS3I0L2NITTNYWEljY3lPRHNCWEg5UjNOSUJqVXNkMWZpZGowaWluSDVyaVpmVU9EVGlGUXVsemVheDcrakhaVnl4ZjM4VTN4TGRyK1U3dTQzSDU5S2VnSzk1SnZ3dnlxbjNJZ3hMeVVHMlk0UWdrQ3YxQlREK0l2Q01QTWcwbFZZUkJuU0lRa2FKRWl4RkxJeTRsQ0NUMmhtMHNFQWdFSlREcnFiNGdKMkpZb3pTVUtWZWhVcFhxYk5yWitaaGVqYis1ckhyR3pjY0xRaEpTTXU0OGVQTGl6YS9LelFuTUNFS3dFS0ZKWVlHeU55SzFsdEpVL0o2V21GeFVxTHNJblhTczM0czRBSm5UTlA5SlY4MVpXMDhid294d2pNb0dnKzFnUFB4d0FNZVprQkVFK1ZzdXBzeG85Y1dTNWl2bmFTVXBGSlExVEVidGV5S2pNQUxsU1FoNlJLM2dDQ1FLM2VRVTRqYkVDN3VxL0F5Q0RIdUNCUVRzY01iVnV3TVVCQlREUTl5UUZNMnd5Um55RVN4S3NxSkdVM1JpRURQWEw5RFo1RjRJcEF1U1lDRkNrOElHWlZNRkNkT2tMdUUxSUtWRmxHZ3hZbW5FTmVOQkNWU0prbkpFaitTTUZFbVZKcjNxbURLSXpHbGtTYmJkOUhMazFmeCszZStWQ3BtS29oZ2x5VUJWcWt5NUNwV3FWS2NhVUczVWxmcG9rTWJheE5Bc0xWcTFhVTlHSWxPZnZKbE1wcGpKWkRKYlJqdGFOV2svcnpXb01JSWFOV2VzYXV0MDN5TU8yUHhJSTZNQkU5MXFmb0R5eENTd2dDT1FLSFNUNlFWdURoNWhGWGxwdHJnTWp5QktzcUlhTDE3R2Nka0E1OEE4Z0NZLzMyUExid2tuQ1FCQU5tdEN3Nk5vQnJWSXF6YnRPVXNXVTQwNWxDd1oxdER4NXAxbzdURWRKQmdTR0w3NzdCRWpvOTRhbzlvanRLOWJ2NS9oQU04UmE0NlNqZ21kZUx6TkRNaGlVSG51N1FtRERCWitJVUZpVGNKb0hjbElrU3BOK21aR2NUY0g1SWNCcGNxVVIwV29WS1U2NnFaM3VzZWdGM21uK2JGbHJpcTlCbW1uVjdQYjdHMFJ0Q2FzT3dLUVpFZ2g0ODZESnkvZS9KNkpyejJydnoxMThQazhQcC9QNXkvOU5QSmlyOWdKd3lsS3JVeTVDcFdxVkVmZFZGTnRocldnVlp2MlpJU1llcmVCb0pkSEtlYWVnMEo3VUJlcVI4U08xYW4zcEZBTUtMd0l0VlNKKytGbW5pSEVzRkVRVytwZWtvTTVIcWY1MGx4QkxMdjl6Q01BWlRQUTE3bjlYNWtIRlg3YzZRMkp2YitLU0lzU0xVWXNqYmhtdkpFRVd4TEhKRFhNU0s1SWtWUnAwcXVPSUtPTHpHbGtTYmJkOUhMa3lWZWdNQlc1VUt3a0dXd3BWYVpjaFVwVnFxT21qOXA1cWxOVDMvLzF4c2lBUkNLUlNBQkFCUURBZ0VBZ0VGNGtjSFBBNHkvZjJtN1lHbzVBb3RDVlNTSWFUZVZHRkFBbHgxUklaUnZHYzVqMEpJZW9jeHp6cEt0Y2F5Y3hJMWhTeVYrNjEvR0N3dXpBTWZRTXc2TFRLZDhvc0ZBY3JOVkRQSWVGczZMSEZ4bE55dGllRGpiOEdPUVFiaFNJdGowMmdJZzhPVmJVZmdGL0d0a2FDc01NUnlCUjZENTVtY1BqTGJZa0k4SjB3SndYZi9NMW5vOWRqVFZkV2hwaUQ0TWprQ2owR1lZNmtZMU41UTRFS2dVaFdJalFwTkNqYktvU0NOT2lYb1piVkY5L3pzTGRHWUdnVmJNendKd3o4K21xVTJzalkxQnJjamwzZkcvc2Z6NnE3b2cyWTM0dmZwZFVoZS9DWjJISDh5QUEveFE4RDNteUFJRE5BVnNDQUpiWm54aTJjSDVzMmNSSndWYU9tMldXc3RQR1p4WVpBMUtJUjdtdDNBekFtdGtGVUk1aWxEY0FtMlF3b2pGWEI2cjNJc0J5VnE1bCt0TmFiY3RyRitRckFRK2xraVVXemlIR0tXYzV1MUZVZE1LTWhueGl4bkFVNGxrYUFuby9uaHVTY0VuSHJRNlFFZG9SMkZJUTRHRm5ZSGtmQmdKVHdObDQyclFIN2RWNklCS3g0R0RJUFRTUEF0WUhjdWEvVXplUDFlcFpKTmF0T0FTcUZFUWtZQ1dTaktvbWN2SjRRL2xZbVI2YldpRVdXVklGQU5hSVRPVncyWlZIenI1TXpDLzBpL0Qxa3dFV1ZEL3pUOWI2REc2MzJpSzRVcUM3VFAyVU5ibmtFWTg2NFhZaUtsVytCUzNGVUt4SERRWW8rOEI5eXoxdzRoMDdCYTRRa2t6TDBMR0pHSXJyWitjTlh1QjNQdzZjZWRwQU1VNkd6UlFxRFc3bnRCK2NXaXNGeW8zV0NtUWpMME1tWG9CcU5XUkZJWkk3Z0RYaHRTY3Q4THBCZmtIc1JRNlhwVmZJUnZaQlU4cDg1RjRoSDhFS254bUVZbXUrSzZjWVkzZ1FlMSsvVHpKQUlSRjFjS3ZObW4yUTBNOGFPV3NYalQ5anZCQ3I1MjF4cXRXVkk2YXBMcGVoS2N4WnVXOUJXTEozUUdxZjlKVGl1dnZVMHdkZ2h3LzhJQlJJWDFWdU5ReXNCcVN0Vk5QWFpEdEwrTml2Y3dpMVBnRC81TzBveW0ySis3OG9uMHJ4Z0E5T0NsYTBnTjBKRVBIWS9ZUDRuaElhd2JFSjJIbFVuUjlEYnpmV01QQXZ4a3J0QTE0eDZqckFtWVVjZ1JmUmxabm5ZeHMyeStvd0xEd2tTMlZrM2RmakFBVVZJSmV3RDA2dHorQXV3NnBJcXhUbDRkbWpvR2xZUVhETWIzMUZKUHMrNjdqOVJOZ3NIWWd3d09jWXR1Zks2VmhDTE11YzRORlRidjlwRVFqRk5qTnIwTFdBSkIzWEdIbTR4N25CUmZYbUhRaFEwYnpxbU90VlRueWVTNngxSGJDL2Fyai9YZS83cU1PbDdNMGVVbkRQZ2h5aXNGOHFJb0ZiaGZFZ3F5RDRvM28ySzVSTHJNSllDYUM1Z3JId3VwRE5zVm9YRkkzKzlXWVBhMWx3dk9wOTFmdmFuR2hvbUppcDk3dXBOSG1PSCt5YjEraExJcGRkcjIxUmlBMTNKaWI3OWs2cFRCM2RGQW83MTRwUTF5UlpiVFhNeWRBN21RRTlSRkdoTC9PeHJIamRSbm8wWGRmOXlFZTBuWEZmT2VyelkrRE8zZmlCV0JGTUFtcUZiT2Vna0FxWFRWbzVmUzY2eU9JVmxMQ1NkY3A2OHVlNHlKZWxoVVB0VTZWbTJqbk5BUHF3V2FObm52MXc3SlA2eFFaYXdTSVBsT0ZNRVVHdXpQQ0JiMmRKVXlnWTZROXdyNkpVakpyNk5aY2JFWXdML2N4WmZlYzgyTE9zTUs0OXhYNjI4UDhOcTNUREVjSUFQWnd3aEx3NThoUEtrNUpTb0RCSmdpVExFU3RQQTUwbTdTcVltTlN4NkZOdjBpU2pVMDR6bVRiTllzNENxemZKZmxtQy9ZWkpnTkJ3REFhQmk4ZUJIVDVIQWs0SVFrS3VSRVIyY2VIQ2pTdFhZaEplTU42OEVmejR3Zmp6SnhFZ2dKU2NuRXlnVUF3bEpYZGgxSnlFQytjaGdnWXBUaHhLdkhoMkVpUnlsaVNKcDJUcEtEbzZXMlRJc0ZXbVRGNnk1RUR5NUVNS0ZQQldxQkJma1JJQ0JsVm8xYXBSYXRTeVU2Zk9WdlhxK1dqUXdGZVRKbjZhdGVNd01mRm4wY0ZlcDA0QnVuVFpvbHMzcEVjUHZsNjlrRDU5K0NaTjJ1YVVVNFJPTzQxcjJqU3VPZk4yV3JCQTZFMHlaTWtNNGJ3NWh3c1duQzVhY3Joa3hlbXlOWnNyTnR5dTJ2SzRac2R0elo3SE9zd0dFd3Voa1JpTTdUZzRFQzRlbkIxbmlKQVFib3VkRUJHUkhWeUlJUkxlY0Q1OElYNzg0UHo1UXdJRTJFbE9UcVFSWEhBUTE2VTRoQzdnZ0NFQWcwWUFCd29LRHJ1RWw2K0dxYkZOUExXR0F4REEyKzJtVVNOT2lCZzd0MFNrUzMxb3hlTWtqckZuMklJakp6ak1TVWhPdWtrb0VKU2lqeUdneDJJYS85WmMwM2IrbjgrZ3FrZ1MyOHM3NTZjalVwM3p3VHIrUlBlNlNlcmxVZFQ1YWV1Z2UvQUhnQno5RjRpbndFOHErSDRPdklXMzlGYmVXcnkvQnFNdnYvS1N1cGk5SGtyVmVmRzVaNElhdmZqeVd5K3A0c1ZYeWhlVlQ1bnhJcS96YnZiam9xWFgxWmUwaGowQVlGTVFaczJCa0FnRklHRnd4SFlOQjlYZGFtd3IzczcvQ0lmZ1laaWZoVDlnYTEweXd0emRaWS9oY25lVFlhL2tpejhLQ0JvcmhGWjRnMWxYQkdHV0tBNzUyRWxJZDlhTEs0U0ZOZFYzMjliRzdSSUlLVTRHRXZoanI4TFUxd2pBMjNzOUJtZ2JHalE5N29VS3dxaU92eVBaRVJJQ0tJekE2V1RwV1F3VjZvSmxlM1ZUbGo1VHlQS09qbTROYnZPZy9UOUdWZnhOQTloRmhRRFN3L2ZSanBDRjJXOE9BNjhpQ3lUK2YySC9ERzhDNmUrbTF4L0lJODc5TkEzNXJ3QUE2OFFXQVlnbFRUQXNZQUNFcWVOKzZteTN3WW9BNEYrak5vV2NOUzhPaWFqUVFQN3lNRmF3SWpRUmdTVU1MSTBRN24xUkFYNlJGOFlLSUlKVW9aM3lnQytRMlFvc0NrdE81bHVNSEdVYUUzZUxlOFZqMGhxcFdBcElFYWxPYXBHNnJkVys3cVJBRmNDZVlpa0E0QlBUc0xoL3dVV2ZPYng5UjZVOHFmQTRTS241ZzdZQ1hBU1FDUUJZTjNrQS8vMU4xZi9rNlMvMFkvMW9Ccjc0R1h4eCsyTmYwdSsvN2d2cUMvTHp6MEVmOU9SQnFqbjFQZ0xvWlE4YisxWjBjOGdOL2wvMkRXZk5tZktwWDEwMzd6Mkx4bjNsdEJYVGJFNVo4SVB2ZkcvR0pvU0R5NDZBTXhZMkRnRWhFVEVKR1NVTVRvV2dwa2N4TURKNzI0UjMvZUgxOFNDQ1M0SWt5WFF5Wk1xU3IwQ2hJc1VNYXRTcDE2QkpNeU1UTTR0T2Ivbk5XMzd5dnYvNTJPYys4WVhmL1RzdTNMTE1lVDliZFh0MmNOZXZYdkx5YVBqRkRVK05nUmNOdU9CMXIzbkRMQklHUnlOUUdEeE95am1vVklPTGg2K1VHQXdBa29QOHdKT09oaGJKQk5VdmhwVU5MWnFEVTZKMEtWS2x5Yk9iWGc2dEVoVktsYWxTN2x1VjJyVm8xY2FxVmdkdm5hTVFDY3VXWEhIVjVjaTRXVVFtVW1VME1NQW10Z1FzQlN6dEYzUmJCQmV3RklBdzVsNDFpamNiQm1RcDZ5M0FFTnQ4MmRBa3dqeG56N1A3OFZVVURCL1ZtdUFkK3g1NmNQKyt2WHZHUmtlR2gxWXNYN1oweWVqSThPS2JGeTFjTURRNE1IL2UzRG16Ky90NmU3cTdPanZhMjNLdExkbE1PcFZzYm1yY2dXQTA3UGNlZmVUaGg3cWRkcXZadVArdWRHMjFsc1RBUCtmejZkcjFtb3ArMExKMVRFZ2dTNkN1dkM1b3lBaXViMDEzWVBNTGJZelRiT0RBVFg1WUVpWXljcFU1SVZjUGZKRGxKK29PdWRzdkxPVXlDSEEwZXBTaFJkNGR1SDRLZ0VwTUVPV1pHYjVFRmNNalZKa0JVQlVCUlprQTJaS05Sc0FOMSsxMHhLOHRpNUx2dTlDUU9jWnd4b2J0VkpZU05ZU0ZJMy9lendpTEpkUUVsVkFWcWJGZlZqN0dGWUtVd2lMMk05Y1NkZ05tOExIY3NBSWx2M3QrcFR6aWtnalM4TGhucFJBNHlEcGJPN0JjZWtoTElSdHlyc28zaE9GYmlVMjlGZ21LWTVKODJ4UmQ4cXlsc0ZXa0VIL2JhbjhsbkR2M1p5NWU0RFZHaVozT1FSREJENDY0WG5XVG1vRkRSNTJ1WEpremxmeUNSTjBqRlVMZXFaVkxOUUVYbVZFbERvdFpOT2ZpelE0UkxiaTBLM1ZmUWl1T0tPRVNNRlR2MTNUdmk2Q1Z5VTdXeE1tS1czVWJ0RG1uSTE3eVgzSGNud2pnb2ZvVTRtYVNVbExuSVBvZDB3OHl2NjZvV0lNZFNpR1BVdjJ0Z21BNEVkYTEwRnJudFFtL2VsdGhmd3VoQUhXS3MrSnMvM3pxdFR4U2ZjWmRXdk1Ca0VrbzJPV2Q1aDhWeGtsMXdRMHRXcWZYeGpuYlhUd0R3NW9tV1o1cWR2SElEYktZeHlnOTcwcEp2ekF6OG4zNU9MUmtmU2JkRFRwWmdOTTlsUUptMmlVMy9IMG5neHZIMjlkQWVZMlFEUXZ4WjR6U2hwUWJoQWpCbXdWYkk3RjdJdko3a2lOMUZKR1dOdUFuMHpNRXlSbDBoMk4xN0pDS2lnQ1BLZnk5bkhOT3R6d25JendtZ3V2WlovVE1CY1FsSEFmdzVFeEhEc1hHdUZ1U2VvM3lDSm5aUmIzVzdVZjNhTlo3M0VZSzdrT1NsVkpzd1lZeUpDdGNHTTFHcmo5OGNuSGhrRm11N1BkT3duMVd6UjBoeFRuUlU4YUJKbXhxSDl3UUlJYy9mVVdCSGo4cXJJU2piTzJoUFc3bFJJYW9ESnBLcDZXclZIYjBvbDVMbktMeUZqMlRIZ215OTZBcFo2L2xxMWlOUFk4dndES3o1Z3MrRS9DWklDUHdjYWNxY25SaXIxUnpQc25DZ1FWYWc1VU1yS0dKNnk0K3lQWVpJN3lqS1RKS1NVTjRvVVQ3R1RkaXhPMERrZmNUVWRta2FCenFQYmk1U2lLZkphSkRES1kxWmwxMnUxUkFPa3dTcDd6SG42UWthaXBOTHI2RTBwSGdtSVEwTzN4Qm5XU3lZMjBjdUgyeldZeE5RM3cybUZ3UDh4azVjS2VEc2RVYWtLbExITkpHOHM1eHp5aE50dEVCaVJETlFzY0NsMnYyWkFuMUNpdHhNRWpMTXdHOXAxZER0ZHFpd0pUTkNmTFNxUlMwQXRWdXFRUElzUUNSWkltOHg2NklOd3BUQ01KQzJ2WUhyTk1XTXc1VHhKNFZpNEhnUlJva2lnRktQVHBuNDVKWWd4cWgwYm9xZ3VIUDZJZ2tRVEtWUHA5Qm1DdHlTT0pkNmJ5RTBsUTFkbmt0bGNpR1VtcFFPOXRCbjZBQlJCdlliaC9vWGFwbkNDNzVHR0l4bDhXK1paT2pvSFVodTdOQzI1VUpvTGRvdkMxVm9BaTJGQVhwK000TjFEeUF6VVVqZVN2NXdHN1piZjlFY1Q2ak1ic0oxQnBZL0p0b2w3TjBqcFFoZ0xoY1lmWWVVWjJCWHFHVUg4NVE4UlJ0ejJmUWRuem5sbEIxOGRDRE0zQk0wUlZtTFhHUEZWUmpFZFFoTFA5RGlKdnBOem9VQXZlZzlaQUxmSWpUVmI0ZXQ1dlBNOUFVVkMxMUpZQk15RXBKb0xhd0hWczNBMENORDBjZzIveG5YSk4rSUpXNEFLZjFHU1VhM1ZCY3VNclhsVVlUdWdab096UGZXS1J1YzhxWU1tbE9NS3dsN3gwa0t0c3dsZjJaUnNyajFoZzJ5enFCYVBsQWFNbGtSQzd6RzRXYUhjOEFCcmx5MG1EVmdQaEtnNjBLSUdzbG4xRkZRR29CSFkxVEd2OUtnSnAzVm9vM09CSXVBNDg1b3JoMGMwTkcyTFg2eVNBOXNHY0JhbjJRaG9iZ25pSjZGZXR1S1NIWExwNWVjTjFGaTFvM01nTW1LZHcwSXJGaGo4MUtpVUxEdlJKREk1S1NVbEtBRklLeFZ6Q3VnVXhYcEdnWmZBZ1BFRTkwTmV6S3pweHZIYlBUVnEyZE9hcTg0MkVOOXV5VHpLMkZZdCtXZFFaRGU0VWJlQjE4c3d2bFFVQ2lGcmJMK3lDN1dxbHpaT1ViMlZwWVFadTFtUFVrVDJYeTcyNk5qMGdwVW1vRVdJZXIvRkprZ2tnYkFBTDREaC8wbG81SkRCTUM3a2cwRHR6UG9nRjBLN0xXTFhSMDZQRU4wb29ISDFsdWVKa1FEUElXVTZNWk82TGEyc2d1bkY1MDhDMmxZR1pQbGN4MlhKMXR1WEZicmU1MUNJVVdTaGI0Zm9qNkxnR2NtbGcrVUNpU2l4Y0g5cko2VFRKZEFDMjRBcEdic2E1aGEvTklyK2g5SWVhWElDaVp1OEM0Skx6V1Q3Z0tZVDc2MzkrQUFqTGxwcGRYQUxibXQvemNkWjhuZkkvc3dYTmJaZHc5bVIxU083SWZnWktDLzRNQ3dwQ3c1c0QxajQwd0l1YmR0cEJOY3NWSG11VVB2aGFrc3hNOUY4Qkxrc1EzNk0vQk9KQVF0OFRCQlNVYlNvandLMzJFWWJlUXJ6dVlHYTluV0ZoT0tUbFFCdzlDRmo5alRHNEozTmdEdmV1QWcxVU9oYjRLQXA5cEhnYU1KS2IwU2xvTDdEb2RIc0xqcHRYaGt2T2Fhb2UwQ0hqRFU2dGtLQ0I0MmdaSnpSRGNQbzJ4TmVKclpEeGNYZVYzVjI4SndrMEhKaFUwOEx0R0RRTXFLT1AzVEdvQUk2WW5iRWtSd0RSazNPNGtpNjFJbnFUODEyeEtiaWlvQk1HRTVETHBNS3JpT3BvdkZMdGJJZTl4cU1xL1NUWXN5MFpRRjV5YVphdnAvYStIN3ViRG5wU3NpQndKRmFnQk1pN3dWV2M3VUhxbG13M2ZjTHZ2bW5WUlNGWVJRRW5neG5IdnV4OFExQ1Y3QUlBdUFJRGRBSDFBK0x3ZytnSGdQNEM5UUxnQkFOYWV2T1R3b3FNSFVvTmdtVm1FeURJN0xyeExIRFhYRWs3WkFNSTl6T2JHeUNHRGJrNkc1VWduVHBQYzMralpRTWpZR1V5dU5YZytNL1RpYkkyY0J4Z0p3a2IwYmdpNGZaZjVBQkNXVDdCRFNNOFllUy9KOG5vNElzeFFZazUxd1pLbTQ0Q2p3NnBUZlFqWGpVTHY5ZWpQT1ZLSjNQaFMyaUlmdWxBSzZzTUx1elk1T24vYkh6aFpETjJHYVBoNDY2WkxVVVpFbVdKM1hSRys4QSt2NVlPT2xGSU1SRkI0K0xqV3l1U3VTT2VwM3FyUFdyTkJvUnZHRFdiZ3FjdTk3MTVrWHoyQkVNRlVaWGZodkw5VUQvT3VtNjR3ejgxSWtzU1h2WnVJT3FjWVJDcHQrRFVpZ3N1RTNRN2J2Zzh6OXFFemY4bWZlSEZuNTVzSlJVdUxZeFEzZk1IWnVPN3ZoazhNMDkxUXhMQloxU2UyaVFOVjBkakV1Q0ZUYm55amVhcU5XdERVT2JxSmVKc0J1bklRN1BLV3F2SFBQRnhFWFRNS1JqZkFEYytNOWI3NVdpdEtlTjJUVHdQTWIwUEE5cTJGVVVHU2FMaHNsakRBVUFNTUxkS1lRSFZqY3dwZ1lLb3dhVVFDMTZycmh4QkRSVS9hWmdiRW9VcytBMTBUeGtzbmtTTGpaYXl5UmErUGhLS05qQlQ4TG9TcXJxQkdpcUdTUmlGNVRCQzdoNTNDaW9lRjRXRk1WMXpLNWpEUG9iakhnUDVhOXNCREQxaU84NFdjTDk0Q281RWRjSWtIbE5mSnRmbW1BRXQrQXAxSmF0dzd2NUx4YlNVM21lS0NXczEzY29kUVVZbEpWdis4dG11ckFHb0UxbnBNaFpleFRMb1BMMGtnN1VleTJNTEV1dk0weTQ1S2x3R2xXeEFobkhmTmpaYVdOY002ckpiTWltaTArc3p2OUJCcU91dGZQVkVqSGpJYk5kNXBhYU5tYkgzRkxKdmkxdGxPeE5zb3RkaU93VDluZVBPNytlU0dGRlR6MFRhZDlZZG1BL3BKOHFGYTVnc2Zhb2lzdzYxQW50OE92aisyNDJXSzNSVnIrY3lPQ0dUWFRaN1pxM3lISlFMUitxZnVTYmdQbDRVb1VubkZNcWx1SDlBUDhSaU8xa2Fsc3hlZUhYbmt1TkllOSs2MDZ6aWgxczhPSzg2ZWtNcjZxc0JzOHJ1VXE2eEZIMGdVZlZzT1lhbjNXU3RBUmY3RjUwdjZ3ZHVLYjBZdjJic3AydkN3U3FGYU1BcnJJTHZZVjBxeC9UczZjRDkvUjB2bWI3cStVajRRSkRIZkx3cWExTDJZU2FLZTZvY1dYVDZFaCtWd3VhUnlIc3BMdGlVTWVmcEpSVVlJdmRPcDVZRisvTWhnQkIycGZ3R2prS2NjZit3U0krQlZ6T1hMR2cxY3hXNERWZjlIT2FhSGlTczAvUjNkZlNpOGhkRnhZaDdNd2xGL2p5aHdEYWdGL0NlMnowaHd3RjRYNUpiRHNGSnVBd00wTnF0anNHTURDVjZHSzE5aGpVQURiUk43eUdkaE9oOHV3SEwzMEd6cXlsbWN2N2FJZzdRb2x6UG5Md3JiamNOdjM2WEthRlp6NGk4UFZIaGVRM29RcGFxTEpESTNTRGtFWExITUNKVFphUEt5ZlFUVVdyODZxSGNXNlpUZTVvTTd2YXRORFhrRmxja1VQNkdTVVFoVldpdEYyVzcxOWZQT1pIZTdnOFdyN0ZtMjR5OGhIa1RtUmdWN3ZqUFJYUHE0ZEQ4MGEwYVpnNDNmQlY1dFd2dkk2QUJZT2dmR3V0aThpL2txeFF1TEVHb0cxbzVmVG1tNm5zV1pyZGx1RTJicjBMZ2tkU2g3RjFNUzVwRDBEWkR3OFVpdFdLRm11c3gySDIxeEQvYm03eHhzOE9IMWxpWUpTVnc0WXVqd2h4UzMwQncyNUI3YUNiR3RnSFpVTEltNnVlYXR4ZXlwclZrcStsRm5CbVJWQWQyb1VUNUNWNlBMa1hYNGthS2JkZ1RtRmhqZXNvL0tqQzhJbWxnYkx5ckdLMzhTN0pqcXQxRTVhQ01pWG93YStVUGd5M2JKNTZkb0hJZ3hQUGdid0pyZFd0bE9HSjdNQ04rMDVpNlY3VW1qaWpoU21JL2VvZFhqSTJXeFFIamFtZlZPU1B5bldEdDU4Ym95OHl2TE40cTkzSmhwTDVwV0JuUkc2bGFhMXBFVjVtL3VJQXBSTjdSWG5UaklybW5BMnNIa1pwR2NHNnlzNlplV1h6NmQ4blRUZnRaaFFPYmFCWG1MVk1WcVprZ05ERmdEaTZYbFRZbTljVTJXWWpwelNTRkFTQnRxcXNTb2xpVVBLVWZiQUQxK3BpYldaNXlhWXppL2ZtV3NIUlhpY2ovOU5wMFp6ZmladEozMTExZWRnZkF0WDhXK21tdjI1MWRmRXdGQXRxRzh0ejJ5RHpMaUR0dmFiZXJXK0pxTmJoQ3h0U2dyTTZxNHNsVEpTNDF4YUNwQkdocHBEcnJpUVFXVjdOZ2RqNEY2aFNVam1vTFNCc3RaVGR2ZGZoQVluckJqVWl6bStnd1Z1OHpxaHNXYjN4L0YrNVhFVURVVFFYUUN4d2RIeHk1dmk2WUhuczI4VWlKaDBuN3hJV0MzNWwyc0dWUXFTTEhmMUNON2dDUUtrZUdnUjhhVFdxVy9CbGY1S0NBUWdUbXVMQ3hNelJqakxJc1I0UWczVmpvNithdlh0bXNDSm9aTU9rY2J6RjFLT0hHRDdaR3lrbGNXTXhzZWlEc1NtVXdDU1JieE0rT01WWWd4S2d3dlI1Wk5NQ1I0MU9RdUhzenVRMSthNyt1ZjNnTWVQM0dSR1hITTBHT2RiR2hmZjd6SWFSRUIrT3h2VGgwOThCczNmL0RBWTNwb0R5clFVdTZURUh5VWg1ZHRjaWMrT0NoUUZqZUYrUkR6NHR2cWREOUZ0T0NpQTJrZklIdmVrMlBMUmZ0QU84ZHhZdTRlMExpejdXQnl5K3dEeFg2Wkd1clphYnJ1ekd6V29PK21DK1pGa25Hc0tUdUx6TkhDSkM1SDhnVXpGczUzV3JCVk1nSzNJbE9CRkwvQkVRV205alRtY1I4VUVrMExKL1FFTURmZ1BIVFpDcXFXRi9vS2VldjRVUjRxR1ZVUzV6eEIwTmZ5clFkblQ4d2ZkRWFMdHBjajNKaDRGYS9HVDZZYzVadUFpMkRqdXdjK0liK25PSTd3Nk1hcU8rQ3ZLYTBqemFlZjREcVFvZVVJQWtka201dTVuUE83Wm13VHpBQTVWVWZ4b3VTMkdGQUlNQWhBMVMrZllZVklwUGNYaUZMRkNqbWdlT0V3QVVkRElIdzYwUGdwSk5EMk9GUkZid0lNRWF4aHBLV1c3Mlg3bG13OE9ZV09GdzJkWnNuMmROdjhKcCtmRkk0WmhtVDl3WmNaYTlnU3VBQlRydThodzVrMG1lQ2o3U3NlOWRLZ2dKUFJSZ1VzZVVWSGFrK3h4OE1RMUZHRGhNcWF1bG1uUExuQXREWUFDUzlPVzZKZXhlMUYrNHc5dkprejVVeCtxZ1c4NWpreHd6dzV3V0FXNW1IWnlmek9SYk5NekNPYzVqZFZwaFpzVXBzZStwR2dScHhtWjQrWjg5aTlwTzN4eGhnNVJoKy80YlVDakVwaDYwT1AxL0dXWnJXb3JpN2FaV3VRaStMWkp3WXAwYk5NZWZaaHd4NDk5aW42RkpjQUs0RG1BR1RJaUZXSnhEVHp3bEhmemZ6YXZRWWQ0eVlNeURTWVBDTE5tSkN6dUZGYnBvNUV1aWlRWkptUWxySXprRXhCR21LcDJMVGppa2lQc0tmUHZGMkpkRDR2MUUvczJlMjZzeGdDcnVDQjZNeVpMYnNJUDJUZDl1bk03cnNzdFAySDZGQmdVbE9CNjBDL3pZNHEzUXkwcHJuY0FTN0paTTgxMnlZZEpaTDQ0Z0lETnU0NjJZUmFUenk1SEtxN0xqeGpGT2NieGFYWnBCMHJiWmJVUFRPYi83cXhrZlRQT2daL2RLS1JnR3o3YmZJc29RMER4djN6OTgzTE40WW92b2FibU5aMm5qT0tIblo5c1JkVEdqSnF4SU9ZTWlkbkp3UlpEcGtUMjJwcGtkSVVOWEZTQmhYS0hHdUJoK2hsMytqNWJTcjJYTU83U0IzVkthWDJCanJPTW0xNHErUnNPR0JIc3dZRk5yK2tZTHpxQU0wM25qQjk5R2pxamthRHhNZk9hTnJXNkU5Vk1sQmlsVFZ4Y1dSaUFKZXYvUCtUNGE0TmJZcUVza2RzUzRhNHJWS0xLUUpOQkpRRmJTcmZqdEJtTW9FVUtTdmpmQWxBbFlUalMwUmgxTkhVdE1XSFc0Rm4zMFlVMEk0STlBUFU5cnd0dU4rYmVubFNjdGlFVFJZbTRnNGo3dDRBSkpHb2Nlb2tPUmdRTTh6MGZIOU5MTGFTUVJFOFdjQzRGZmthc0NiWmhYNms0c1NiR1hOTkxkSXZtUUhPQkdvR1Y0dGdOSzBzOTN4ZkF2cmk3ZW1NQWhhVWdjR0l5eWZmZVhTcGJIZzkvZDhtOTV1OC90K1R1Ny90KzdhNFR4L3NvL2U1TlB3enNwdktSck5UajF6cC9rL2Ivelgyb0UvLy8yU1dlK05xdmdtUmRVMGFLandSSXYxNnBFNUZVZW56YjNvNzVBamdIRU9rSUY5K0dYSTlmRU5ZS0g5Y1JrUHlxUTFHaFBYUytMTEdubVgyZUc1OWs1VFp1eXJGWE05RG1UN0tsNExtbVJ6WVlMaTVSMmZEa3NLSWJmQzVya3hnQURiNlIydVRmZW8xL0phSlA0WjJ0UWJ2NzVpYnVHOXZRYStvTStYYXVpS2FIWnM5MXJJeVFXK3JCbUlvZ3Y0WUV6aDMxOWZkdDZlZ3I4NjVkV1Y1NjRySitKU0srRzdpVStJZWJqL2VMeGZJOWhGWE92RXhjVmROQzk1U3h4MHA5SS9hVXoyYVZZeFh2YXE1YTlqaW03Mm1TY2JzQXoyTGEwT09icjB2Q1E5WUhkaEFwTGxYYS9XTXVvdytjLytxVnYwRHlxTXBYTEptZkVMWDhFYURidTF4ditFV3RKQnZvb1QwYStrVzJPbG00MlkzQWtSbURRWVg2UHJqWld2OTJwSmtVQk5pWDZnbzJkTGhlOFlqRVFPMXd5cWN2L1AyajJ1aTVIMlB5eXRPZDNKT0FNN3UxRTIyL0ZxbmZVUnJkdmIwNGk3b1g0TkRyeWZKTFJvdURJN2FtcnZWcTl3KzdhcDAxNGpGRnhxeE4vZXFWN3I4MmFtYWM3MTI1VUN3dVVkWDYraWxBaWxrdnNXdUdBaFZxbzJPK1ZPSytkV0NmUWNaN1NxQytPcTkvcnJNUElNenVNU2E3S0cyRmpOZ2lMY2szLytvNVZ0RE4xRnhEalJwc2l4TTNqWnd5d1NrQ3NJcnhCR2xtZXhLT3V5WFNxd1gxSXdXaktuVWFOU3J4djdtenFOdVRsVVVWWnEwM2NsYSt3L0xkQk82Vzg1c1VidElLSVlWS0w2SDdIaFdVck9yNENGcVpQRHhtKy9XaDVSUEhxWDRMUk55SWdqUEYwZVVsRElUdEhPZXFyYnVuL1ZUaWZVS3dXaWhtSXBBbzE0Ti9wL2dTcXpnN2x1ajByN1dLS042T0NQeGw0WExCMUJid0tFR3ZZd3F5elViTzduTnF2ckhtN3RvZnFCTTBkTG5kcXV2ZEVMQjhtQjVuMXpQV09qYTVKQXFTRVFyWGRDSDNQRGV3bjJoK3dvSmEvV1N3c1loSzlNaldzbDA2N290M0FGRHNsWG44N2RTaGlSbnZ2bWE2Qk92OG5RT21IVVFUUnd2WFc5L0Q2clFjUzAyWGozM0RiSS92eitmWElidVNwVnZWcXZIMVhmTnZYdXVtaGczVm15K3JRaHlqVjl5WG5SYTJiMmxMZGEvakg4YmJhVXQ3TjZhNFBpbFRaYzNtYmxqSmJveXpvdmNvdTh1ei91UElORHo4ODRST2o2d1cyMTB0eU8wb3JGVW9QWFhOUWJrOVpKWEdWa3JvRzZaTXk5WFVQTGEwejZyU2dxbGdYS2xiVkJicTQwcWNYOTMvdDBQY1p2c2tWSmx0TTFPeWJodktreXRLT1lNL3VWMHNWZ1RVZUlCRldGZzJ1VU8wRGZ6RjliV0JYdGpEanZTSUhsVjI4MmtuQmxML2IvOU5qcTR3TStNQmd0bkVSZUQ1bHpXWURTMkdxMHYvMENibTZSYTEzd0g1QS9ya3R5ZkxlM1kyczhxOXJ4Yi9LdXJHSWptSEhwUS9zYTlGKzNHMWpSbE5tWW9RdzVYMDhYMmZ2clRQbUtTWkR4ZGpNdlVwTEpIcERrZEJiY3h3UlQ2QnhHQ0JzUXgxS3J0U1Rtc2VBQ1pCeDJ3a1YzamZMVFkwSUo2Z2tpN0tlUWNYdWdMK3ViUWo1WFBidERvekJtem9jdFJhK3pOMmt5UXV3WWJLWDNuY29PMFdsa1FzSS9PQ1hyY2ZiN1BHSEpmeWY0VFB2OE9WaTJ0c0p5Yll6Y2JNcmdyQk9YR0pQdS9PaG1CRUpVZmpnbmlHQzZKN3dnQ3VHQzh4eVZSRk5rVW5kNUFWcUgzTEhBeTgxd2swdVJ5SldHZGI4ajcySUMwbGM3TmIyc2dmTTI2ZVVPMllmYncrMW1LU21YMEpsUFdaR3cxVVliNkRHa3laU2xEZXNOdDFiVVhsMFo1bzZFZmU1MEFXbXhzUWQxQnBNTVlkQTR2OVB1RFF3SFhpSDk2Q2I1c01lZlNCb01oWjhTYU0vcS85QzZiTEM1TkdZMHBLZ2haTy8zMnFUMFZVQVlxSFdER3FWYUpoOFRWSDk3TjBSbmlrYXBkeWwybkJKSVpWQnFqdzFDcmpnTGE2V0F6Wm5CM2VZRWhvc3JMNUFZSVoyYTJjeHJuYkwvV1JpVVJmZGkwNE14czI2VHNHMU9sWXYvUEg0Y0FoVG9nSittYXVFSWxpZTBJQXJKTEpORG1iSE1vRTBxci82aUxuQ1NqMTRkOE5INXFhVlc5UVJBdElvdTB5N05rdHV4RVhPTFVHYzZrMjJEOS9UYzJzL2pmblJBaEpJU2hqQXUrNlcyMTREMVFNZkVCZThuZ0krUWtlY09tTkgvNytTbWRNUEdkYmlFMHlhdGd2N052R3I4S0JiQ3lJQWwwMmxvY2RFZTYydXZjYTd1czJkY3V5Zks1eUNMMXN2SmVkNjJ6THJ3UzhuUjduZGloMlJXTkJ2aFN0N29wVzRzM0tHdjlKNEk0bjhmU0tDUHVYcU5BZWFOUlVDUXZObWFWVEJCdU54amhObmN3aXhvTUdkUnpybTh6R3VEMnpTbnpaMFlidWpKV2t5bHJNL1RZZDlZZEVveW1qTjNZYmIzclZyYndYQnpwb1BXSnZCM1VlYzg3MTUrNXNiWENLWk5wa0NLNDJEZmtjNDJFd3E3UlJYNmZQbzI1b3VmNWlkR1dldDg4cDJ0a1dxS3doRmdKV0hNdFJyTTVaNXkxLzY3VDNDUlI2MXN4WDR6VXU2TXBGRGRucklidVdnZlZ6YW5mMkZ0Sktjc24vNnJNclNuS2FFemEwK2MrSENwbStyei9lY2dUUk4rLy9iVldZd3AzaGFHYzNtOWRNanRRaHhOKzJDR0lvU3BKZkhzUXdnWGp2YVJsUDN0SENBSzArZE84MnBoUUdqZVljOVo5dU80dW5hdzBVK3V3cE5TT3FMUk5iZFgwTkR1c21BOE9WVDBua0RWOUpWQUY0QUZSbk04dE5qVGh0U0ZaVG05QTJsMkJOS2EzNXFuMkV5ZElUMkowTG83N29UblFremFkLzJzeEVVU0sveHBBcmJydWxCMWdKajM1ZlZHVzIwTVdhVlk5V3VSbTNWSXhyZWJmNHRwKzVaS094NXNoUFZObkpJRXVQOGNXOFlzY1NoM3BhcEpTOXJSODhQRE9MTEVHT2pjWEViKzVhLytsWnNsL2hHOU9ndnVidkNkL2NYMmRUaFZLS0EyVjZncjVKeHdJOFp4QUNGb3A5V3V1YXZOdDJsUXphYUxxRkdxdkdoVFNna3VSOG9iK3NCWU9lL1Zkb3U5RkZNOTU2cmhROE1PWWVGTkFHWGlHZkdaVU9icE1tT1ZMdmlUNS9tTTRDYmZUclM0OGp0aTlmL25KQ2RjeDZTMnpOUG5KL0x4SHROanJxYXRmS0RLUzVNMXZaMUN2ZmY3NjUyU0lWcCtlUWJvQXZxQU1HVjZQcjUzNGRQYU5wczlVM2ljOVR4S1Z0bis4U0FNekh0bFl2dnpocnkzdkY3NVhZSG5vcTJYTEh2N0svRzdCZTRVMWc0Zi9XVlcvUmlIeEM3MC96NkNPZnY3YTV6cmgvcHovSkwxSzh3YXJhT2J0MWxmNjVBOUNjMStaSTMrVTd3R21WWVRKb2g2U2tqMWcxNWNjMlM1NWQ4L0x3dUxZUE9BZUVJQUlCTTRnTDdvV3EyTC95VGNPclBMZTVZTFU4TTdPN3RzK2ZCc21Wdko5Y05WVUVYbnE2Q25TZ0RzckVQV1JSc0RaTUpzbisrYUZXNktZaHJHVTUyb1M1UmdhNXZtVkZRdVZDOHNoZVlWWkZqQVoxRnZqOVFuSEg5TFhlS3krOWljVEV5eTZpNVd6ZWh1aCsrcTcxeHg3RmxIdFhNU0VKNlpoaGVTUTVENXovVVVWaTVTTFhJbGR1T3kreEVmTUM1RDBzUXpwcmlYVTlSYW4vVE9KcWtFdFdIZTJ6S055ZWlKKzVvN2kwVlZZMjZ6cFh3Q2x4Y2ZTWkQ5Qzc1MS9wY3lZTXZDMTR6TEpWZXhVUmgvWDRuVnFVcFVJWExkcnNBdXBWdFZ0ZnV3WnI5Z0xNUElpUk1zVmpxOWdhSnpHclZKQ1NjZW13WWpmUHhBQm5sVHFRRlFkakk1SE5vZTFDNU8wMVpLaWdZV0JMWUJkTE5Zay9aZGV4Um9WNFNCMmZMdzFjMFhDSXZtenEwcXJ5RktCU2ppVGtmb1ladlRvN3dzckFNSFpmelJBNTlZakJaVzZQMTArdnNwZWorRWVCWnJaOHVlZDA4NTZ5c0M1QkRmdysxY3VFb3BvcmFaVWw5WVZHbkxzalJCWkV4UE5KZ0tCMXNabUhsNlRhQXpZOEcxZUdXRk5HNktDYytQMUlvMHRxOUxIS1lYVWZady9mOFdSTk43M0JmaDVra2dlcWY4WldTMll2a3MzRWo3cGZxaTcxbTVvSk1nR0k2Vk4xT0Y2TW8yL3I0bHVibEFUUnQ2cEJrQk45NW50WFl6SDJUL1B6TVYrWWVpNTg1eHVUVDFZUy84MlY3ZW5OVlpyYTNWUzZPR0JnQyt5c0lWK1kzZUtYcjNBRS9BTzBzNzVsOVlZMHBTTEdxbFVCa2lvRFIveFZEcXQ1Ny9BM2FrKzFUZHVMdUc5YVdmU0F4cVhiNDdSbGpXcThZQ2JEQW0zWUJBR082K0hPUXA1bUhNZHBqRVl1MU40RDZOWEJQZ0l0b2xoQStvbWhjbW5SZEJSTndzZ211VW1mKzh5RkkySUVIbFliRzFaTVF6QjBMRGtOd0hrRTdUVzRmenUzQzB4aHpWM2IybDYxWkFuNkJtU0tlRmFLU01JR0tsa2VBOXg2NHE5K1hOZHZuNW9tWTJXcnd6MTlkY3kvdG1NZnc2MDNPS1Vyd2oxenE1VjkzQWs4NnlaUnFQRmxyUlljcUk1cFBHOGp6M1RiRFRWV0MydHYrOHFGcXNJSTdHaFp5cysrVDFMWFRQM3k0L3p5TGNhYlQ3TjdkQUUzZFR0aWJqTW96eWtWb0tlQUdZMnhxRzZzMktJZTdSSmFnM2tUT29NWmNEOGJuVkVKcVlGNFZySGE2TDdpVEpwa2JNWGMwVHFPR3pLblZHYURVMkkxb1dwelV3ZjVBTlZZTStnbXlFMDdnUk1NaDBXSXNaeVVVbWhodW5YV1pNbTVmKy9IYnZzMDhtREtyT3JjYTVhc0c1aURqN2FKYlk0MFhuT3NFWmNVcXdiRHYvbGZyRGJVZFdweVhxSGF0Y3hiWFRUVGdiZUo3OGVYRjVuM3p5TFpQRnZyT0RnbmhPQnAvdkhUYVdMV2hINlRkbjgzZlI3c3RFeS9YNXY3c3JRSzFYWHZGMk5hWVBSTnFScURCaTQwZi9uNnhRbCtMNVE3WVorNDNwa0VOOVR6QUNZbW9HdWNUeFNpT2N0WW9BM0poQlp5S1hWd2p1Y3ZCbzVHSFJxMWNpS09ML3N1Z1Q0Q0dobStndzdLOEVLeHp2U3ZQNHhCOVlKbVdVN0p5OCtJcFU2REVBMS82NFJQYzBJTlQ2M1N5TVpHd1B2MzhlUHM2NEM3RmNMYXh1MHFjNnE2dDBRNlZFQ2NFTEpjS1ZjMmd1Q0lJMnFsWjkrdS9uWjF3Y2xHQ05va3dESHhyNGVScVNIdlh6dTFPeWZwSC8vejc5aEJzeXpUMjk5YlZVNGRobDFpWWNSNUVtdkJOTkVsTkkxQWxvcTF6RVVKbEY2Uk5MTjB3RDg4TGZ2N3AwK0NiNE9iSmVxMlhOV3cxdTlvQW9OSXAvbUpYd3BLL3ptaDkzNVBnUVBaUmFOUk5KTlBwVWZ2T2ZlT05sZGhGQW8yZ3FBVzhWQ1FkbFdGMjczRFpENmFaTnlWbTZPN0ZsZkRhcnlpcnZFOG1mUTN5NUxwSGZSSEFDNGVKZEU4dXZNclRYYUdxWkRKT3JVODJzYUZ3akVYZkRwanpnbFU0Zy9kUU00SjZhMDRqei8xVUxjaitUZi9ORlRpTldYeXV2OUhVQXczQXZlQlNNSC9DRHV5elNIUjlNTGZRK0JXOHNFUXRFMkVGZ21GQXFKcGRYZmgvU3k4M1dPZXllNUxGaUhnS0VwSjNobC83V0JiNEYxcmw1T1d3WElQaktaQngxeG9YQzE4OXdkdngvaXp1RmRYanFDUEkxUFZGOENPSzk2ajRkTWRqa0JkS3JpdFNIVTduZ0ozZC8zZjd6L0oxazhFelQzenhTTkJhcGgrYjZ5MVRXMHJGcU1Lb2RjKzFTMUZIMHlMcURDQXZEcHZMZy9iVUVxdGZGZnA2cHhwdGxMK0tDRFRzQjExeDJKbDRvNEwxeXZLY205VXVNVllNY3Y2WlFja3U5V091dU9za3VyYis0Y1BwVlBudC8xNFpzYlNDZE9CZVVZNWdPM0FVZTYwU0x2dytCU3NhcGF5cmVFSjBwc1pmLzNXaE9mRkh6bzdvTit6enp2LzNsOGpNVnByc3k4d0VsV1pTcU82SVJNZHVYa1Q0OUlwV29LcUM2K3EwR3ZjUWsxSHNhbGtUd3hkc043NnZoSHJJdkFQMllSWFpMaU5MOHJIc1hmTEpsUzNNV3d0ekhjdkRjZzMrZm1ibTlUOXY1YkgzOWMzRGorekxqbDJmRVMxNlZ1dkx1b29KRFgwOFBqOUN6bWNXL3U1ZkI2dTR0Y2h4dXhSdlJ6eXhWdDhiSm9WYk91bVJVdFl4cnh4bkRNdzJFenZOeDM1M1RueU85NmREM3NXLzhsKzV6V2JKM3NLVjM4MlhMeXl3M0tXM1JmNFBvdlBrMjNNcVJjb3Z0eXZYeW41aU5jKzlHbmk4REN5V3NDOWlrakhOVGVTek1mZkZOZjdjd2NDdkVlZk5aTGU4Z2xobUZHNFBpYjRqdE5DUkVLdWJuekpWNDF1bW1ELzhGTVd6K0Z2dEdCZDNDMHB2SmQwNGN6UlRXYSs1aHhFWmRBOHhmRmM1cmpJdXhkQSt4NHo3TGN5OC8yQ0E2cERnR0g4RVBsbnByRHFzT3p2SWNiOFVaRlhxNW1OMXdkNVNMam40K2JQeHN2Y2FxSU5VUlJvL3pXMlRhOXBYamR2OWYzRmt1TldLem96d3FncXJ4U1VYYW1lUWFYcFN5TVlXVzZsN0JZb1pMRm5lSDdyMHdobTZvQ0ttN01pR0ZHYWZINmYyN3NLV2FYcGVVbDNSajFBb1dWTkdPR0Z3eFlkMGxKUUxJbi9ycXh0VE9tU3NKZDNCNTFoQm16cFJvUDJWYklWaFI5bXJSTFY5aFgzTnRvVFRGakVUV25CK25DazdsT1UydnM5U0xYWmVJaWtUcWZhSmFldndKRnhibERxdmQzdnI5RGRXNy8rNkpGQVByL3YwN3IyUTZqUWZUUWU2THpXUFBCamcrdWQvNFFoSHdkTnZVZmRLUHN0bXhadGlxcnk3S3lnYThZeHlzb2JWOUdxdHRqNEN0Z3RiT0d2aXZycU03b002eU9zbHQ1WlpoL2tzcXFod2ZBQnJVOUpFdHIzS2JGZlJGUDRjMlNtNFA1N2ZTdXFXVlI3Ti9YUlM1dWNHbnByeDVUdlFDZS84VW9SZVRxSE1qTEQ4WXIvdWFHNUhzbnV4NlJBWTkyZWJ4UGVMM1R6UktKV2U3M0R2czlIWThDd080T3Izdlk2Mm1ucGVicGJzOGRtczhVc1hFWW5vQ2NjZ1ZFajhQUVY1Q3JCS3JVTElJS2x1NDZlMmNCeUlPVzZ5WmJDclpoL1Q5MVE3NjZRZFRxY0pXYk9pbzZYMEorMUY5ZDNJR29PM1FrQjFVaElyTE50SlQxL2RmLzZ0ZDlQL245MDYrWEZja3BCd1BtT29UTzZIVStYR2NJakh3T3lMUkRIcVduRUMwdyt1ZkoxSktnZ3BFd2NqVVJqdUVhZmRiMHlmOUxJbG9VWE1DRHdMOFZMbkZZQzhUVTdxVlYraXJScnkveFdTK05MZDAxUnlCQ1VUR3Y5MmI1WFYxSlpQNS9OVHZnSFVkMVI3ZkQyNFdmRGlDcE0yM20xM054Sm1LeDl1a3JybGhGN3pDNlpydDgrMXJmdGUyNFZlNGk5SGEwYU5VSit4WExCL1dmWmZFcnlwY3RYN0hpSHo5bDVOTG1CSjdBVEhFOGZ2SXdkanZHZDMrQ1lBamFUa2tsMy96M3dCVmo4dk1tenZEQVZiYXNBZ0tHMU9mQWpJbUoyV0VQWnNGTTJJWmI1TGRzU0wrN0JNejV3cnZONlJxeFNGVEQvK1c3QWlEL1R2T0lXSnI5azh0NTVYaCsxYVgyVTZxbmx4TXpHMmFRY0x2ekdYYWZ0MG9PY0ZXdkVWMlpxUXJCdERVTzRETEt2RDhmSmlVdlArZnRoQWZraWdHUWlsTkFqdEJVWXFYNC82ZUZrcyt1QzBYSHpxZEtXMDd5TmtKVHpudTIrL1JHNkRIZ2VsYWJtM3o5YlVkNVh6cTQydGpaWTlwU1h4a3NkLzdtbHN0bUh2RytPNlhVZTJJQk16bFN6OFZ4VDhVRmtoMmVReUorM3RmL0cySkNsZUhzYnpQOTBCYlJuQ2F1OUFtdWM2WlBHQ1JYcEhQRGxOYzlTbVl6MVBLUW4xeWViaDJodk1wUXRmYkl3cnBxTkxURzFObGwyaHh2c0czcWFWOUxiYXc1K2RiR2F2UXBOMXNIT3l1MndKTGY1VksrVU9ucEhUMm9veHY0cU1vZFZXZ0pIN0JOZ1pIZU92dGZkL3N0S0lOcmNuVlN6TnhDdXBQUWtBUDM0eXNUblFObXQ3VmJaYSszVU5wWWdqNVpIakJza0tLMFFRdHR6eGRYWHB4OGRjT0RydEp2QjNZdFgzOUc2ZjFUWlkvYlZmWkUvb2lKN3NVRExsdDl0L0taRGMxNXIvZGtldU1iNHVDdVY0OVpFUXlrbjJSWU10bTlSUU4vbDNXR0FCWGtGTDZJb0hmOG42ZHZBa2hHTHloN2JlZ3ZoYzRVU0NvSWNQbmVxYWVYWHZnZ3dBZWR3dDJ3STY0NURYbksxMjFIaFlCeWpWSzA2Tks0LzQ4YUx2b1hVeTJ0NFNwZS9rVjJ6L1RZV3FxajNiQTJHakdzN1dqYm83SFlPbXJXb0NVU1BiTjJ1Q1ZSc1crRVNEWHJSdngrY2lTWkd0WDRmYjVSS3FVZDlubnRWQnArOUl4MFluRUpiVVVhS1dWTkhjWFVLOHkxblpSN2lvOURMUHlmUFN5WFRDVngxNzRucWxsNDlva2IzYXdJTEtodVBhTFdQWFhOdXp1OTJ1SEVPYUo0K2VqNXZhK05xRjVEeG1RMEtIdHl4am5qMDZwNUI5YTk0ZjNhcDZvL01WVWF2ZjB6V1BKQTdoSjhLWWVjNWVXVEF2aE02a1ZKOHNVemlJRE12S1hVYjVCK0pKVzV0OUpSbWZRb1RoK3RabjE0b29wMXRMR3RlR1o3VTlPMG1jNWx5ZFdiQXpZWGJkeDJwK3BPL0M4elNRVkdqTy9CM3RsRDdPODgzRmsyTnFWV0hwcHBXcG5FazFuL21wWm9WNmFKZEpIbU83TzlRVkpTdjBodGE3Q1U0SnR5Y2JndC9tbERyZjRVWjhFUGdLVWcvQ2NJL2dHREpmV043RWtlK3dTYjlUdVhOMWttM0NCZUM3STVudDRDb0RBbG1pNFExRE44UVhkdkFWZzQyMDd4OWZmQklyaW8vcnMvSzF4YVY2UnM5eHM3WHprb1NDM2pReW1Cb0FuYzBmTUdwQmhocHJQZXR2eDlycmRYc3ptZTRRS2dzSjhZUHIwYWFidW5xZ0F4TVFUUUR2K05QY3d4ajJPeU02ZHUvM2ZubWovR3YxMWtQUUlCZk5CY0N3S1R3M1VnUzV3RnJBQWRSeFZ3UmdXOHFRSXVoMXRIS2xPa3I5cll5MThmYW93aVcyc2c2N1lHTDFqSlpNSlV3b2NxNFR1VnlCMi83UUtLN1hRYm9QR3dCcUxXUUQ3V1FMN1hRSDZ6WVEwSUkzN282KzJnYUFINzEyM2QzN2MvUERkY0swSUFoL3ViRVhLM0NXd0hwMkV5UE95Ykg5clltZjBCMlBzaEFQTXNTSFptY2V2NEZzZnV4ZjM5eGYyelYvLzdENHNYa2JnWmh0bDhxd1lPcUlFSDFHQ2YrOEVmTDlOcU01K0d6VmYybjIvK01FZTBtVWV0WmNCZS9TSG9ja1ljY0o3NEJyeDZkUmdBb0QwNEIwNzBxY2hvellMa1dvYjY1YTV2OG1lV0ptb21BR3B3bVBJZlFCZ1c1TzhXYWpBSHZvMWR2L3lpNDhiN2Jmd1RQWjNzeEFHdi9hZW9ZUUFndmw5S0V3RHM2UjY0MGZ2MXdiSHhTOUgrVDk4OXJTck5icTNuTkwxZkhsd0ErRVJET0lBZmgxemt3UlZIV2d1UFRtRWZXSy8vM1h0TjcwY2V6cVhiUkgvL3M2RDNiMytRc3p6c2xOSms3N2Q5R3hsc1RDSHB4ekk4dSsvVDc3ODRRdFc4c29IM1ErakpCSENSOGtyNFJ5QStmNnVETXo0TWNqWVA5N1NodjlIQ25wOEtmM2lHVWd2YmcvZER1TkR4U2FJQUtNVC8yMWNaOEtEOERMM3h1VGhGY1cyaTRwOVY3aFhMVzBCVkgxeUhsNHQ3UEwyL2xRdW91emhYNzRyd2h2MGFrYktucDg5N1BOTzdGSHpqb2l1V2xGTmVzK1Avc0JiUC8yS25IZHo4dW12clBaU3hGYkxpd1Z4eURVb3hwUmszbCsvOHpNZVBoNVIxR0FjQTdzclYrNC9wQW1KWDI1VnNpNGd2QXdxeFdEVGFFRkp1eURRMkVjbldYcWxLb3BLcHVhblJBRFRBaFpPMDdYWmJLamtibG5XcDdSM1lhQU5UUGI0cEdUZHp1VU9xZFkxV2llOG1EM2pvY1QwNlV5d1FBVWxBMjBZQm9LSmxYUkFKRE1sTmtNWjd5U290WkVRalFJL0VVY2xXbGRXT1hWUm1DbGVPZ3JZV1ZJMUJMN21iKzcyZTBkTnJzTDBDNGRaczNvRUtoYXh1TnNuQkViRnhNa1NFUisrWmpMWkhZaEpWVjNteG95VlJhVVQwcWpvdnJlZ2NWZFJzWGprbWFGRnRFZUpsamVRRlZRcG1VMDRRY2JDSGpBejFpVUlhd3ZsT1hrTzZMUjZrWGVvbVhNb2paUk5WM2ZxcXgzN0hoN2ZVZWdEVkMxK1pxRXdscTY2M3pjeTkzcTU3NCtxdUFyMHR0QlVxZitKdGpGaXBjMEJhK3lsNWE4Y203WXpOcktOQStJUUZPM3BmMWZyVmJlMURTcGhOV1J0b0hlSk5oZnNYUmVleHF2c0ZxU2ZVNzU2RTFpeXJzbkJaV3hwWWFHWW1JUkt2V1M3ejdPZy83aTRnZG00SkRhUmNtaGpySzFNNk4vUmFjbU9KaEdobDlZMDRIS3hralovY0d2S0NuQXJ0ZHV3SWRLMUlSaWhXdHN2b2I1SFlXVmFoQ0w1N2laWlM5U1VxK0RUSDg5MXVBSWp5bFZlbk5hMXRTaUdiSFNuMnpYbG5wOHVxZDducW1QbW5Dd1hteDIxWDh1UEh4emdmRUl0RXk1OXR0OSt1djdMWGRsUG95NWw2NzFsNE1BSjFvNVdvS0lGMkYrNlhaMVR0NjJMTjVndXhXV1dsRXRNa3hQZmR2TnhGcllnUjEyMVJsMnZhc29EOGVnNjNzRjR0UTdsUWVHeGJQZUxNQ1RpcXIxd0RMK3ZTSmZWMis2TVhmVzljRU1QSzBMLzg3a0VpOFkycmI5VkR0K1A5R3lMdjVjQldKMW91N2NLZEV4V2VyOGpQNHd2RFNzK3o2QnVQYUdLT0wvQ21saVNhNGJ5aUx1ZyttUkJSUmZCQU43R1NaMDJDNFhIOGVwZFdyL0NCOGdiVVpVcGVTczV4TlFESU9ZVkExRW1JZWlLWFdLWlJBMVZHVENUeG9tT29nT2pRRGNmWCt6MXJsT3loblV3dEVQWmlRRFNsU1EwWEhPVjVzaTllNlozcTY5Qm50QzIrNnZQb1B2Qys0KzBWYlR0NC8xLzh3WEl4RzQ2bUU0d24wSGkzL1hBUXBpTGdBRlpnMExqNUtIKzFYQnJIUW5waFRaMHYrM09qSXArNmIwZ3M2dW9TRTdxVndqdTN0ZWg5SjlCT1hjL0N3RHkvL2FVbUZxbEZMTW1INWxVMVI5aFJVdzRTYUkzMHFGSFdBbm1tU2xxbythdHVHNFhzc1MxNXpmMVNzeWw1YlozYjRwRlg4N2F5QWNkbWNaK3pvZWh6em9YRWRhUVNaa29vTHZtVjRMbXp1eDZ2RXdXN1JWQ0V0V3QzZEFVSzNmRmlaMWFkaTZWT1FYY2g2bXpHenoyaHpqZk1LUXFUamlqMnUyYXBqaVRQcmFSR0o3N2FOalRwY2Q2Z1BKQldBUDlYdGFwY1dQOXgrakw4amRQUHphL3dxaU51ZkRBdzYzYlhLa2xybXNBZStRVThKZnlmQTJ2cUYrUlAzWW4xM2VoaDUrdTVIcmJNUklZdzlQTHRvWDh3T1lHMWtYZUM0ZWE5WjAyTTNhTWF1bno5Y255YXZYcjdMRVFQSHErcXBoaUpIeTBKZ0pnQXlzem9tejNUbGxZQkNkYkl2Uk9jVWVMZ05aTHRMT3BGcHJYMDRXS09nVjVBbGl3OWV4MmJNMndmblkrbk52TVYvaXZ1L2hPenhGSFZibEpEV2FOSjZTUmx1Vkc5c1ZxMHhyVkVYVGZVS0J1TXE2Z1BRWGRVczFJeVZ0U3dKV3h2aGQraW5YUTlJQzVLaHhITE10NGZuSm9zdXRZTXRxWEFMQnZuUUZRQm1IT1dkbFZyK0RUUHhsSWdkMkdNcThsaFA0OFJEWE91RVFNWmk4OStZaWNTa3RnSklMbm1MaDRPaDBPMGVNcXpkbzlieW9md21PMzd1aFBySklkY0w3MnNFNXg4enFpb1ZZbWt4VkZGYTUvYmxhbzNBS2doL2tFT0FtUHV4NWJETk9RcTFiSUt3VW1KaGlZSEMzQ2NtWkx2a1dGVmtRNVplam5FOWNCL3NDSWk0bFUwa1k2ZXRSVU5hWHVvUUx5dEowTm95Mm9NQ2dyTGlKQ2RRUjNEQk9mK3l4VUNqdkxmUUZiRWVhL1RsNzJTdU5PdXBsVCtuQnRhV2dybHl6TmNST3hzYlgvVEZkSnkvMmd4UGEzb1UyR3BZYkNoTDJ2NUgyYXlJTldOUUwvem1LellxVUNzclYyYXNyZVhSTDcvY2w0YVQ2N1NNVEF4RWZKTHdoT2hOaFhPSnUvcDB3Ti92Q1ZNcUN6eE9qZk41ZUxSTE9DS0ljK01yMXhlNmZBd2JGc1c0TDRjMjdtK2F0b0FkQVRicGwvTjNSSmdiQjBuZk0yNkxmdUtrUFJzRFNFQTBWTVRqZERYWTdKNGY3OCtZRi9QNCtzaFYraGNsWlRHZnlQVG05MHVWS1BSY0JodXRLNUNLV1llOXBnYThjdUNxUmpoY01vNXhOaDRRY1k2SlIzYWs1WTQxbTVTUkI0V0ZGVXRzaXFBVWpVU01CWjY3UGNNSWRCTWEyaWNGSjdVN2oxV3NmMU9heUdjcXpFekMzaUFXVWE1Q2pXYWMzaXYwN0NTSlJJbUdGUGJpZDNPcjVXQ3dMZjIrNEoyTHNiVTJVRmhWU3dUckZxRHpJYzRDbUJOakpEV2xWYlRhRFFhNG1Za1hwZHNreUozZFRVZVQxeEd0bFRJSnVGTU9HbmhPbEhLa2hORUdoSno5QmwrakFsRE1Db0RRbXFaekJXeVVWU0lQSFZjNjJRRFpnOVBITndGWlRERWtJa2xtZ1FpWUxCUWtENEhZOVZvckt0YUFvU0xLQUZwTmNaVVNobXdJTzJzbFJXVE5qV21WbEI4ZjRSUnZ1RmV4d29xUTFaa0JhdmpodUppM2dvZHlmREpLd0x6QUZEdm9oYVdoRFJpSjkyalRvd245MzZ0dXdUaTNKbFlsTXR3T0N5dDE1dkYxYUJsQW1aQTgyb3RPZElHQ3gwV1FKb094Ni8zWTFuWm9mZm5sRGxvM2IvSDlyMFNJRExtd1lPdUpjOWRhZjJ0V1JLQUxhM0RWOXBCR0x0bWJ2YTNwQzRhSjYwUjZYcWJHYTdSKy9lVC9kNVFxbitvOG9kWTlXQytwdXlWMDFoaUNId2NvMjRVcFZGMUhSMFNtdjE0SWNxVXNOQmpwWXJhWG9wQkY1SmFoNmNxT2svSmFGWG1wOGxrMEphTWdoQ2tGQnZRRFB6ckZwUXVBT0lzYVkydjkyWXdwMTBnTkZFcGNyZGg3dGFlTUxSdFRNa3hHeVV4U1ZWZ0ZTbVhaYU5Qc3hzWStJWnA4SkdreHBPYkFGOU5kMGFXMFBQd25ycjhIakNiQkN0N3BjcmROeStIMjhtNlErcFhqNDgrVU1IS0MyRk5qMlEzZWYrM2FScUh1UkQrbWIvNVNlZnc5NE1hTUxDZkdWWlpDU2Y2UzQrSmUvUGhCK1NtSzFKZk9EVTZFMVpVcTVNdDZ2V2M5emFPVTlWbGtndnE1SXpoZVhxTGhZM3A5ZE1QNzVvLy9jWGhMR2VmSGV6YUs4OHpKVjFmOC81NWk2cjY5ZVFmWlhEMzFsNzRwT2JqZXJQWmZSazNjNGZ4L0xVeGVZZ3RiTTd1dy8xcW9lOXpiWW5wK1R5TUI3ZFcwOS9CZHl6S2JxdGVLSGtzR2x5UVVGYkt4ZDdOTmR4ZEVrWkFBQkE4aWxNUEd6dlJTZ0dCRUR6WU1Ybm5VRnpSVEhVU2dOWjdWVVQ2a2VBZTI1cHFmOVFYMWY4NHNXRGlJOVBIRWJVNFpXdExZTFBFVDZWMFFObTllbDlpMExROUhlOTRRdkNsdW5JRUdpUmNSbXBQbVpRcERRbm1GNmtoQUFQeHZ4OS8zMy8vOThMSC8xdFNOS0lmQU1CYSt3OFo1QUY4UEcvOXM2SW4rZTVzRGdHZ1lBQUFFTUMvSDhnanQ2dnIvMGE5VTc3WFgwQm9LQlZDZW83ZzNZU050NnZWUTZXZDRuL3dsZXE5UWxaTlptMUl6eS8yeXVjTC9Bb0lSeTREcGZ1TVEzMndKTXJQNkNMUFVEZmg2dWVCbGxyaFJmQWI4SU41VzVlU1ZjYXBPK3JhUGkreGJ6cmZYYXpvN09kOC83TFkxUTZnLzU2bDBwZVpCQXFvL3I0dDRGOHkzK2hpQ0dlNG5rQWowK1hXVWdrdS9teWNmVjJ2eEUwWkR2cTdUK2FVdGhPVXpWZjlPSkFWV0FtQXJ5NXZ3RDRuelNPZmVZMmRwVXR0MithQWZaNnFkME5sTHNjNCs0azRKV0Z2ZjlRVHF2dEdMZVJqWmhPQzl4WjUxY0wzc0lEOVE1VWpaZHV4MndXcWtLcHRGR1VJTFpsSEx3clpJVDdGVUpjaXBCRDhmS0U5dSs4LzRpMFg4dHZidk9ZRTNCQ1BqYkhsSGp0bUl0a3h2aXNpMm9FdWZKeTBJUVlOekQyNm84K0swYkZzbDR2WS91SUpRSFlvZU44K1dRUTZkd0pQUzFpSndrK3oyRlMycHllNnJjMHRiVDNCODFMZmgyUzdoaGZVbXJGeUxxMEVvbWlJYjUzK1lLVmU3NUxNZEF3RGtKc0NjLzBTQ3NUc3hVK1lXbS9LZXVmSytXamNzRjdaWkZ6YmhURWozcG41eXhVdEQ1VldEc3N1ZUN0aWMvQzJNZGZJNTd6STlyMlFIdU5TZkwyOEp5bHo1ZGs3RW5JUlAwdnRYd3h2TzJEck12YXJ4R0pFcTVYWExMK0xGOVJ4d2VsSWRoTngwYlRIdEpvUlBSS1VUaW55bFpJRTRFOVhuYVVUUURnb3hCMk1BcEFuU2tOSzVKN3U0U3ZCdG5PL3NtZS8zdDAwQXViSi9NSGZSK2s4WkVjRnlnTUFCTkNRZnJRMkZJd0R0VHNCK2g4Y2c4TUJDSXpEb1NZSEFKYkJ0d2JFM1hzYzY5Mi9OT0RVcmpZbEdrZzdGOUpBa1U3WElLQllXNE1EM3A3ZHo5SE1NcnNDQXJBcjcwSStmb2FjM1ZlUThMWDVSSUoyUmozTUd0VnJZQ1ZHMHRBNktOV3dvZHJlT3BWYS9ualhVNnlIV0p4WnV5Yko2dTZnVTRkNHcxN2F6RUpNb1Y4cjR3RCt5a3Jrb0VaOTFGWnE1SEx4OWlYb0F3OCtIREFJTTJwcVdYRHd6b2ZYUE53YnNnMmZSKzlrNnlLRmdMc0hKa1g4UXBmbWpWY2RZbUZTZ054ZXIyT1pZZ29FRFpLQjlYMW1zbVJLRW5scklEUU5RUGxBVURZdWxTZkdXTWN4ZUllZmVxTUk2dkJDMWF4dzQ5NXZJYmZ3QldId3hWVXZVSXlXanRUd1cxVGcrY1pURGIxOWphcnArZlZWRWdwNWZYN3M0MEs4TmpucXJqbjB0WTIxRmRNYjdZb3BpVTF4VldLVlB5YXh5S2NrNWxSTmlHMkViUnZnVWlrb1RnOTFTWFNnYkJKY2JTMHdhNlFCcGlScW1VMUlwYW9rS2k1V01aR05pcnBHU3VHVVJDWlFwVFdxaEsrS2VhcUlxd281OFFLYVA1WGgwZEZXa2FseGNGdlkvUFczUXJyNnc5ZGMxM2FsSm0yN3JpdnQybHdWaFY1RklscGtwYW9CRVZaNVlWYXhFRlhhQk5hL3RwamZ4ZFplenV0dytEYytJUC9KLzR5eTROemdyZ2JJd1gwRUdiVkNaYVd3bHJTU2NqNk8vRTArSUJGaDBkMGkrNDV2MzdkbU5aWEs5VFh3R3Y4TWZQYmV0Q3g2WEwrQXBDbERXL0hqTmlLKzd2cnExU3M0MjEyOGJiRy9NdmlNYzVHbzVKYzNLbWRkWjI4bzdFVTdWckNHQlBaNE50TDg5L3RsWEYwYklZbU5Jd0JCQVE9PSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlF1aWNrc2FuZDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBREkwQUJBQUFBQUFkWEFBQURIVEFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR2x3Ym5GWWNoekFHWUQ5VFZFRlVIQUNGQUJFSUNvR3FJSUdHVmd1RUtBQUJOZ0lrQTRoTUJDQUZoVUlISUF3SEcycGdSUWRpMkRnQWFQQVpGa1d3Y1FBRm0rOFRSZGttblVqMi95bEJtekdoZGVoYlpTRjBSN3VvN2hrWkNaR1Q2aG5wb2JaVFd4eTZjT0RoMEVnLzlvMEZSK0hBOHMzSjFiM3R3NTlYb3pnY0NOd2pabXR0d0NWeFg0aExvcEVrVGFSWHQwWklZMkl0NGpmOTJYc0N2TVJMVXdqMlFvMElraGN4S2tZcTVpUXRjZm5pbXJwWjBqcUh0R25nSmJsL3REcXppaXFkcXdBem9RMFRMeDg2TXpwWDV0STVUL3p2OTY5NzVyNEFvb3NSQkRKZkJibWtXZ3NJdG9xTmJHMlhKOUNrZW9iSGJmM3pCQm1vR0ExSTVhZ3hHTzFHVGFvTkVGVE02N0l1b245Rlh2emYraXVpd1FFSy9XL2FobWlieitWZEViVlZSNFlOK1BkL2pjekNUTzdMbndXZ0lxRmw1UUFsMjFZQjJwNUtKRmxMNkpmN1plQnpmdTRjRkozcStBT0M4UVY2NnpvYld3WWhXd0QvVjVzbXZFWG96RW1FVFd2dEtHMlRQRzNoV2NwUW05blFPdlI4SkZJVmdaQmQybWJGYytJMWZZWHZ3TlFrWml2cXlQMGU5Mzg2eTFiYTlkM3pCcUdMcXdBWDNYcHpiVEg2K3RiWHpHZ2tBMnVKZlF5ZWxmV2VKU3ZnQzBKRlVGMWF4TmRUVTJIVHBTajdsSmwvbmVtcTcrOXZTTWsvNkphZEdzc3FyZ0dlZXRuYU5WUEw0eitkN3F4L3NneG5GMlQ1ZWdIU1VXeVg3QUREVk1LeG94ejBCY2h1WHhpMkFzQ2F0VFB5dmdPT05UT2JyT1NjY0d1Q1FsemhFYktCL3ZydHoxaXJIOGhzWm5hNzluSW5oeTB5UkVMQ0p5TGdXZjg2LzNBZ1REQUFBTHBqTkVnM0pOTlFaTGhzWkxveXBGdzFwazRkY3RoaDVLaWp5QWtuRU1JQlFwK3VKL2lsa2hpcHVDUEhlZytHOWxwRm9RL2EreE9LYzZIRkF4QjJ6cnAzb3pBWGFpQnV4Vk04Vm1Da1dtVjd0dDgzVXFsNmk2eHd5YXN3Q3BWOStjelU1T2Zqck1ySC9CMWJkc1NaSzdtU1cvYS90Q212S29KRWloWWpWaUtQUHJ5bUtWRGtQLzlyTU1Nc2N5MncwRkxMckxQUkRudGRjeDB6S3pNL0U2aUFwQ2o2TC9rL2FLQTNBMjhPeVZ4YUM0T2xUNWFkdVBNUFdmWkIwdkJrUnRuY1lBR2RoU3VXYmxvMjUxclQ5ZUNPQ0tMZ2ZiWUdrcUJKNlZReWE0S1RHSUhVZzVmaHFSU1lFak1IUnhJSEkrbEozRlR6dE4wcFdoN0REREZQcHRvcHVONDRKL0FJa2cxU2VPcGNpOWhQMFJUUUVpV093enhOMDBaSFUrVXBTMUdGOEJZUEVEM0FCTEYxbnFMRmZBdFNJZHM0dFpRckVKQ3o5VEt0WjJUTVVWaGF4SE9MVzNpWVN0MHBvRWNZZ29TeDQ3VkRxY3loa2drRlBZSGR2TVN4OVY5K3Q3Nk5MWnFEQjJtOVlZaG10bXY0ejBsNzFhRFgvaGN6T3dRdXhxNmsxbFVDN25tbnRHL1AzU3p6S0dRL2Z3UlVEL2NPTVFpRElwVGdqeHZ2Yi9QYndFOXNsQTZpakxJVHhia0dscDJtWGhmVTFPNUEveUhlYWJSV0l6SWRXaldaMlcwOThTM05KbXhJVXhEMEpTMklRcWg3L0RMT1ZGVVk5SS8wNzFkcUpGeTRnTjlTTnlQc0Fxa2xKR1hQYWZlTSt4YkY1cUlZYy9JQUJ4bWxtNEJjQitvUE9SejE5Q00yb3VoMm9HdEVOTjJBSkZyQ1Z6TzROb0QzZXhXU0VLRzRzak1EdE9WSlNnWUxWM29TYUxZZWU2T3JFNTlKV3RJN1hxNkZNTkI2cEJhRHptU0c3eDlQL25jb0FRQzBZTzY1QVYvOFZxUjVwQzdPMEtKUlNUaVhNSGVhanp2cThmRDZURWF0ZFNlRWRDeUp5T1A3SFMwSE5zY2puNEVVSDdJVnY1QjlOY0h0NlErUXhyNU5nSmxFWXBCYmw3aVdGVGcyU3ZzdE5McGsxd2QwRU9CL0hLT1A1MW9Ba0tIYmswY3hnYVVTbUVkenZ2UkVYZlhuVUVxeHFHZ2R4LzFwVUJuNnlTVWJpTDhia0lsQ3BPQzJIRi9ZMHg1cXB4VEw2TG1sVVBiRk9KTWpZUURlWUpJY1lBaHRLVnFmckZLSW5nbWpPSTVleCtXYlNVQXJDR053aElEaWFLUFFWMTJlemFkQTA0Q0hHODVMWW1oMmdpTUVvaGd1RkNFN1d0MlJucFpPUDBMQW16akpOSk1sMUZxUTJ3ZmJVQkpiOCtnZGZpU0dTVzFnQzF0WjB6N1FWUWRkb1RTeXNqU2Viem9sZnlvaFN0Z2dCZWVMQ0hPRGZNeW8yQk9TOGExMmhpZHIzWVVoUkRWWFRBSXhFNnh3bXMwREVnMU1SRkhBR3RHWkpMRTZDdEJabDVKMkE3dWxUUDIwTWpRWHUrRkdjUmhqQ29WWHRvd1ppdGhlQWlnYmxuT1pJUmdEQ2dZS2VqakJRb1E2aFJoMkxJYXJHV0I3eitZaXRLQXVxRU1BbDlRRElnSGM5UnNZaVV6QU5nTXNaR0xMb1VheGFra1ZyZkRveksyMTBaYkswNFpwaTZDRUJWb3NNT0FBVVZnUWl3VjJITWpCRHVLVWdKT0lneVhoRU1uc1VDbFNhYVN4dzZUcmlPbU1SVjI0V1NHL0FyMW9iOExOOU1GYWZiRm9xTnJjY0NOeTRraWpxSXdCSmxOd0JDOG1XVmdsRyt0TVordjU1T01WNEVpRjJLQ0liVlNzbEZvWk5wbUZ3ODJYV3N3b0M1NktEK3FVcm9JekttbnU0R0FaZUpaL0VBQk00UVdRUnBGcWhvVllDUWZQZHBPaEhHYVd1eDRldUZpSG51NDAwcG8xTjdDWFZNbmZLalIyWWRGaXNjV3FGcXVCZE52QWE5ZHk4dEVUUCs3MTNMd2NEUHh2RGQwYXcrOW5leWZnZC9ZMzhDRUw1c0ppV0FuciszMy93WktjUW53S2pyWGlNQUJwRHVDb2FVaWtHSVNoQ0FFRnlFRVY1SmVsRmNIQnA5TG5lL2UvYTdiTUV3OEtwUDZaWlZtVlI4UzVvYkFtVlpKV09NNXkwajhCQUJRWVFUVW1ReWFaR0VUMXg5SERDVWtNRzJNMkhFT2h1WDVIalR1QnBTcEFLd2lYT21zcUJxREFYelFVSXdaK2ZPQkh2Z1poWWhQRzMvalZ5SXZKT0RkQklDMGpLNXNLbk43NnFVeHNJNVJqdEFwaXZ3Y21lQVFLOUZZS0dzRVN0Q1FRb2c3Nkc0WmVtcVRKVEFSVzFEOHlCVklRQlZNSWhhWnUvVkg3aFNPQlJGS1JtalFrU2JrZ1FIb2lyWXpoS0ZYWDdMSUpvTEM1YWFuaTB4Z1dMZ1JnVGdsa3JPYTFXTUp3blE5WHpsY2ZtQURzaFE0SDlFb2VueTVTb3JIcldnOXRzMHBJN3YvM3NFZXdBYXpydUMrR0NQQ2Z4cmtUOUNZQTlDOWJBNUJ4U0tLM2R4MEFZSS9leWlxbXRCdUFvMHRjTnVicjgwd2w0K200TVBqOW1LYVdQL0ZKMXRsdFBkVXpPNEcvaEw5V2pwVE5zbFZ1SXlmSTZYSlh1VmllRXdxdDRkYm1majhBQ0NKelNmZG40cE1vNDNLc2tYV3lzUVZwakQ5U3dtMEY5QVBBdndPQU54MnV2Y2IyQzl1QUM5K0VDODk0enpxZkdhUDdLT2Jocm5NN3oyMEJBWUJFUUg4bmdON0s5M1oxZXVWek5QcW43VFBISXZNY2RkVjFpNjJ6M245T21XV1QrWmFhYVlrTHpqbHZnV3VJaGlSUXNHYTBtb3RnWUdSaVpoRWxXcXc0ZGc1T2laSWtTNUZtamYrdDlRQUhva0o2Yi8zZ2JqTDExa2RmT2JRM2dCaDY2bXU5c3Y2M1R1ZFRvRkNSWW1WV3VXZTFTL2FiNjdEampqamh2cHNSY1V1TkxTN2I3SGJVdU91aTMvMFJEbGZjMEJBZXY2bTExVC8rOXErRkJBeEhoU2RTQ3hBdVJLZ3drVnJRMFFzaWE4MnFwYlphT2FPTkJDN3hGS2xpVE5OZUJyZU8ydW1nazY1NjZhNkhub1lZWUtCQlBFYWJZS3h4SmhudnJJbnk1Y2lWcDhSVXBXd21SMDJFalRiWWFaY2RDQTIvRUFCb0RRQnNQOUJ5UUw4Rk1QOEE4SjhETndjQUFEWjJGYnlFaE9NVUxDV3FvcGhJaUZGR1A2L0pTYmJubkpnVXhWMUR6TFFBaENKSXVFYkJvM2d5YVNVSlJTTmRFTEhTSHRJTTNISEdzU054ZmV3RW5jZnI2Y0NnTVdsN2phYUowMGV4UXRRUjlpaUc0Q1V3OGdTaUpubndTYjJyc0FpcFJFbG54Q1lNczZjU3lJK2UyUng2RXFiK0NyR0VIbU9vTkFPRnBKU3lObEFUaEhUTlBvQjlIUU9yeDRqNVhrek9nNFFPQ1dtY1BqUnhUQzNVOFlQb3VVVTdYN3pNdnJraVdvN2RKc1puUVFBRTdubjEvdDVmWjJSRVFtbzB3ZWl1dkprTGxnK3dST2tzNXhTOE04V0xsVG9FeEtSSnVONVpsdWM5VnhtR3AzWG9oU0ZaZzYwMmgwUHBmUWpnSEhMZFU5ZFlHWkdVakY4eEdQYWZwQ2lOQnE5VjZpMDZUMDRZWXA0b0sxNG9jM2VsckNpVkVZRGMvai95UVNuUE90YUpuekhCYWFoY0EwQ2ZBQ3E4Uzc1WnRBazBwVG5LTkF1dU1RV1FiRml2dG5QVXhuTUxRT3UyZkVtTmIxWnE1NUlNYzVRWnRtcDhWeWxSK0ZCWW95bFhwWDdWQkRBbWRtSXRIVjJGUnd4cTNmNHpKb3g0dDNLWmZwc2p5OHUvVldiVWc3WjFSOU1ncGJqSjR0bTRXQURNUWs0NXdEU2tVUmd0eUVtdzJNS1JUV0RGWmROL0ZHYVJmWkhiYTdPTFlPL3VUNGlIQjRxTWNxdEg3S1Z2MGJxd09aRi90ZVkrRFE0b0hVUVloUTRPVlFvYlRXTjFTN0RCOFBYYyt6dXg2T1EzeE8xRmRtRXFBL3Z5aUszdHVhSFNSYVc0ME9ZMDhaVkFQVFdNWHdLNFpFT3hCaEM4ZlR3YXNHaHhLU3Q3eVFsQm9UNTBvcngra05xb21HK3FJTTE0VHlYVmhTSUQxMHVFSTJDY3VGT3E1NENjUXZOengvcGNmOEdvZE5ZL1MzeG1hVit6Slpzdzc5aWxlOUYvVThyaFBWQzRtUWxjTURyYm9EWVM2Q05iNEFLd3hwK1JFRlZTMVRJNlVNWnc0d1lXUU5QUVc1dE5UbkZQZE5ndzBGTStkcWdIZzgyNko4c2lWaTN1blE0VGxzaTlnYjdHNDVtV0xuZC9EeisvUm5hOFJMRWU1OW1xcHI3U2hvcXRWd1NJdmZtR2RWMnY4eXBxalU3djVqNm5yUDExMXBnc2lMeE5qZTFXSEI4Yk1qcFdKODFkdFMycGFud1Rnd25OMjMzV3F3NGJESlNaR2xCSlRTRGxIZU1ZWlhadE85ZnVsV00vZTBETjNaek5GYnpmL2RzMnVYSUxLZ3hka3dOOVdFVFp1N2xzNXJrd3dSS3d5VnVWMkZNMmVhbGZHVmFoM0xVMHI1MXRXZk01V0ZIQ0ovV01ZWVVqaFd5K2NFbzhleVdCTVhFeldDVkxreWJZamoxdnJWSmRuT1JYZXhzcmdVRExxYmFoMm9pRDg1N0VTR0xhdnRrVExKUmZtTldFOGVhRzI5MFdtNUlzWGk1VGg3V3dsTzhjM0xTbjNldWk3V1I1SDh4RFkxMkxDYkN5RXhWKzZ4NGYzdFF3VURHcjNodGxPZkFHNjMxOHhrcnptc2picXdZdEVWU1c4dlI5S0xlaFo3b0ozb2thNWpXTFZuOXBXcWNybUQyVnZHT2FKOGVuK0tpT2RVYmtQWEpRZlc1eFpiN1cyUmVEdE9KVGEwTmJOend0UkpQQVo5UnRxU2F4MHFHbExrOTJndjFEWDVPVVErKzNZNnUwVUszUFB5RFJjOGVJbG1rU2NFWnAwd1MydzZ3Y0szK0txbkozNHllTmFidkY1L1J5RFIwajc4SHc4NUhtekdWT1MwV0lnOUpBZWxnTzQ5d05rdEk3aEEwVzlrd0p1ajlDRWwyR2FCTDVxa0pYSm1nc3NTNmFnTlZ2N29vR2lBZ3hhbCszcXdUWGZUaWxyQ21sVmxvOFkwTE0yRC9BTmhmdWlTSnJOWFZzQngwV3RQYmtWa3ZOYUhsa3dnQTFjT1F0SXl5RVVnME9ISGx6ZDkxUVczcmwzVzAvczNkd25mWUswZ0NPV3p3UHRJQ0hWbk5YN2VCZ1JuUmNHUVNyaml1YzF3bndxV1VsMTZ2Ulo5VmhYU2VNSVMwa2ZKQzcyOGtQay9yMkRFZFRQSTkwR0tBSm10dVJnMHBqSGFFNVMvbG15N0hRQ1kzZ0Jxa2Jia3BEaXQ3S01QcDlMa1FRU1ovUDVJcUR3UkNlUFJ6N2QzNjBPZ2FGVGpzZU41L0RPOG1hNGxDeGw1MVdjcE84VG55ZHVGbG1maGZ6Vm10NmVjaDhMZW04bitnUUtLS2hndzJFWCtwL0Rlc2k5R0FSVmdLOWtUbE9MVGtRSWFyWE1iSlp0YUVEMDZiNWJkSTRhSitFVFgrQWlRNUpkdHVjUTFYYUR6dkRGcTFzTGFKYzN0eEtRM3RRTGV5VXF5S1dWUTNGL3EwZEZqOFlEOGs2eWRkVkZhNStWcytEU0c2dUMvbk45Y2VudUVOcWxqSi80Y290L243ZitwaVllWVVwbytGWk9sRkd4UnZWMVd5NFZFUEdLTEpwWDdBQjN1Q3RMRjJibVdhSUJpTkY2aEI5MjNHL1QybXVkdElFMWZ6NjZUVXczQWJyUXJhbHdFRmhPM1pMTFpKR3pXend6d0xqRHMrejhvWms4NGdPd29IVUFIQWdMdzhYaDJhRk1yNjZqczVTb3hrdEpZQmVUclJqWDV6bkJrZG1JOU0rLzFocmNZall0ZFpyZ2JyVlRSNmMwNm8zbXVhQ2tOWmNqcmZQc1hsaXBhak5Md2F1Zkw1RVZTS0VBSGd6bzdFTXhZSlcwL29pSnh1TnRrbzBXbVUvTzQ0TmRVV3pJdXNOa2RaZmpkZlNWbzJ4OE9ESEg2THpUSHV6MnB3T1QvT2NCRWpKMVJValI4Yjg3NU5JRUJCdW0zQnR0NnpFb2RiMWhNZG9NaHJHR3FYVTQyQjBtNzNreUx1Um9hNThSeG5HaUt4bUlId3RnTlN1dmtBcXV2UjBLTkp3djM0WWU0WTkrcHZXMzVFMHRzRkYxZ3V1alRMVTM1ZnBVOER3bEFmUG5HN0gwM3pXOFgwZEpubXZKenlZNDV4OGxoRDZnMkpBVEVSNW14L3JFdDNtTnpxM09rYVV3SnZJZkd1K2ZxNVhmQk9IamFmdlFENklvd2hoYjluUWF4VDZKRGZTYjhWa3hybVZWbnF1NXJYSTVScTdSSHlNSlJpTkpuT0h0OGttdmJnZ3pZamduVG40ZHlleGNTek8zdlF5RG9KOWxXSWp1SXNSS1I4ZmJBQVhtenZzbHZNdWJib3ZUYW1jN0syYlJVZjJIMHlSakx0SnFlVHV5QWplOFlRY0pKQTFkY2R0enVWQ2UwL0VyaFlOSXd1MFlPekV0ZWIrU2xNS09VUXNFOXV1WnV2dVFYV2JYcFhsQ2J1dkpBUlhQeUFtekZHaEkrdU9HTUJIN0RQTzBvRFV3MU03OEFOM2hKNkVCK3FvMFlSaEk1OGJCWENJVUxJbXlnaFdWc2F5c0lTUUI1NmhxQjJISXBYek96TzlFbEZzZHh1Qk9YMGlQaFN4TlA5ZVZoeVNTSXAyRXpYa2FiUjdmZlF4a2VpVEQ0TDBGWUNHR2lOek1EZElqWGhoZHpYUHplUTZzSFV3RHlnZFVzd3grdW1LaXE0OW81UXJ5NEVKUGNodlgzMm1KMUVaUHZMcko2cGNhVnVtQzNwUXFYemoyZXZYNG9wVTd2TnUyYStPVitlcnh2SWoyVWJsNkEzblJza3hrV3c5Zk5BZWpWd01JRTVSSEVTbzV4cjF4TktzN2NjTjhOdzMxTWYvOXRSQUtORExIRDdjTDY1bW1lcGFvaGtuUGVMWW5jYitaR0FWczNRbWVzNXlCR3Y0eGJKUjdSdVdqS0lXd1E2bGZDdEZ0SEFlMFdDb28xREMrU0I2SnNkbnBFbVBnQjJnU1E2SlVpOFZGb0lCaFYza2hDaGYwMll4ajlKdmVnL1RLcVR3ZzNlSFBPNXNWa1dEWXZHQ1NhQnVxSTduYUE5b05CODcyTmdvdUlRYmtFckhiODhKMmROalM2SnBEclRmVjdyaDhXcnhrcjhjQjNaaDEyS25NbUtxSG8xcE9lbmh0RjQ2YXpFOUxhODd1Y1J2M0pSMnl5UTdtSU5sZmRuR2puVUpldC9GMXVqZStxTzZTdzZ2WVNwNkRSc2lHZ0o1QmN4WFZvM1I1TFYrWVYxdXV6aHZpWEQrYWIxWkdORHgyUHg0bnJhbWFjYnRxSEtvY3l2MzBlekIyOEdya2pYZTAreEFrQndhVE16TGRZbUZPOU8vZzJHSWVIQVNWTnJUejRVeHJJOFR4S2pqVkpxcnQxWHJkSTdETSszRGUrQ1ExZlc1L1YzVFhIZGZ4b3JFd01QVGJ4cnNSYVlwbmxLSE14eFpIcytKY2ZNYjdYR3BQQldtTGZ1Q1EvZlN6ZXYyUFJhdUN6NkFsbC9CNEVDRXZ0Rm85QnJHRWRacG5JT0krTGdnbjVCYnFPd1NiamkvMWhxQmEzNG45Zko5QUQzVThpYnVhbUdHZDNXMUx1UmxOb2h6bkxrdWlQZUQxajNDRERwNVRWTkdBK0ZoZFhvYVlFeU1UMHFUeDJSbndwczhJdEI5ZkhKM3lhNUZlZ0NsZlAwclJsbDlkN0NaMzMzai9oZzNHMk10YXZNMWZCVU5Cck4xVGVGV0Ywb2M3aXdDb1F2S21lU3BoQlJlSHR5dzB5aXc5MG42eHBnQ1l5a21vTktHaG1oMElWWlk4S0JrTzBXMXBxWUlpOU1pVFZHOTRKMmpoK2N2T1MwUnNlUUs1Z1VEOEVBcVAyQ2FyOUlqVmh0VjNzd1BWTnpUQjN2d1lDa2lXQlU3cjczTjQyQkFuNk4xRzlmbDlOWC9ENUErSjNrOVI2TlVXL055YnFUclZzenc1emZPRDhObzFvdFl2WDJTZ1lOWDEwRGM1WW9QdUpMVWo2NmRUdGNPbC9QRWJZWlBocmkzK08rL0U5K045amJlYVFyT1E1Z0oxN3gwQ0oybURvWVlvTkJsVE5XTkh1enhhL0R1Zmpyd3ZyRzBvZytZWWJGQ2IwVEJELzNvN2l0ek43ZHpYR29kejdmSjM2eHNET2t5T1NBNDROOHJIUHYvK1RNYURGcEpuNDM0Tjg1TS9tY3ErQ0tvaWdoeXdkamtsVnpTOThIZzZRR0JHVitrU2FhMUswbHlSNVRrRGNETi9ZSlRwUi96ZmJ6U2trNWV2RjdSdWRGWUtKcW1JaEVpUkVpcjA3RkVCTmF6NEVLejc4MEJOM3FLOXJPYis0WW8xOHo3NThuY2tnUzZPK1BnTEhaayt2WGVyN0lidThCcXRyYnMxZjMzbXg1MkhleVpKeDNvaUc4MFh6ZGJBNVMvK0VKN0x4RWZzMmRQejRZZ2FzZWh3UlJhTEtMVGtZZ1FKWGtQUmJBaDFqcVhtU3JkenZnbWZFKzJUWi9mbTRqdHkrZGorL2ZHODBpUjI2bi82NTFqK2JPZEVlVjNlWkw3NFFVaXNJYlJyM1NKRjVUb25XeGpmaUlHZWQzeGFjdVhZSS9YQzlYdGhZQVlrRFVZM3QxRWdUTk9Sa2dFOFE0VURTZ1VRY09IRUF1Z1BKNkY5dlVaUUo0bkxkUXIvKzlWK0dnYTR2c1F4Q0ROWDc1OTV5TlhwTS9mV3hBbnA5dytDNmpOSW4yNVU1b3NxUUdyR0hYcEJPNE5qYmN1Nnk1ZmN2Sm9kckh3bnBXYUZYV0RWR0ZxWGYzWld1Tno3RjlldnRyeWpHNWhhVG9IUDdYdnhiV3phMmlGZ05sWHB1S2NIeUs2dEhMNUpraXhTKzFqdXVudXdscUQzNy9XMEYzUVRjZElMVVcwR05nM0ZjMmtwNk5LaTVsQVRtZW1vQWtJVDVyWnhYejNmZG1wK1FObUc2UkZ4eDNHNnllWGlvcFprVnpmbGRZclRmVFp6eFk5Z28yK2dZWG1ZSWhTM2NrdDZFRVBlelkyM1pIaGpHMHdQdUh0MXpzejdZc2RHZVB1WllsZU1NSXNLYTBtYlRGcnVsTUd5M3NtSmVSQ3NwZjhQdXpRNEhJUnFkYUlYTGhFODY3WWdZQmRudFhrYzM2YlUvUDR3L2twWlQ4VTlGME0wQjBob0Zub05hMHVjV3d4Rmk1MHM3VDE1d04wd3FUWmZCN3JMVjh5bWhicWJjT0YvamFkYXZVZk4yc2haMEdRMXBiNE40MmtkR24wY1ZURDkxL1dNeWNuNWVxSVJULzErZEZrYjB2VDFnT0p1VnZyQ0lmMjJVdUtwcDkzNlNGVzBxbHNxRnVtSlBXT1RDendVNzRYc0tBK1dCeG5xRE5Wa0FmQXFJM2pXcXNoeW45SE1hOTlTdlpCbUd3L0tjQjFlalF5b1BGWTVzdS9PRVBENzBUeVdvUS9pZlZSM2w4cVRTQXV2VFVYNEY0U2VZMGFORnpRQWlWUUZnM1pEN0cvMzBFS04vcGNFc0FCU2pCWFk5ZGk3NHJsWHBKYzRkVjQ4amFJQnJBeTR3ekx3SURWWnUrM1dnZnN1ME5wT2NZd3czdlhIWlFjclJDM050UXNMUEdtRU1YMUE4c0gzMFladWdCWXVqeENMdzdlKzVORFRkZFE4ZWJHQitZZzVhWDBLcHF3SXVwU0xyM3lENUpuRnhUdmZhbnA2T0cwKzErZG1GMzZJZ0dzdzlCQmNQNTNuZkhQN05uM1FaWHBzeE0rS3B4RE5uMStBcVdCNGtkamJpYVl2dlBxUDdXUTRLL0RqRFVaNzEzL0RiRjdCR0tTS0owOFgrTDFUUlJ5eCtWVzcyb092QTEzQVF1clh1MDQ5dDNOOUZLWUU0VzNjNkU5NmEwMXlZZHZpNzcrREJSWHc5bVJDLzdMUEdKbGtBKzdSNzIyMWNHUWZjV295NlVLY3JmeEF2QWZCeUQ2Y05hY3RlcUhDYWUrcENsbUxHdEdCZ21DU1A3akJIUjF0ZDBYOTR1MzYxYkQrWWwyZ1lzOTl0a29BMXVjODY0UGZCVGljYXBxZXZocVhCZmUyYlBsaStQMUhqTVpGYXU0Qkd1Vk1HbDI2SWFLRGxKNHo2OVhSOUd4eFhIczUwV2JMYmk4QTE4UlRlRXJoNTFXWlpUMWhUVEZncHg4V2o3U1BpcVQ2c2syT0tIODVyNEM2NFVzREt6cW5CR1hmVVVvYUY4OTZuVUpua1N2K21IdlJJaUtNQmhVUU9uenpHdkgwcTkrYXNtWTlhcHFacXdXYzhhR0RPTUVNbGdlUXFCU2gwVWFRRDIySTdzZWZUYXJrRmdMTm5PcEEwZUgrcXdkNmcvb2RYK1Z5V3cwQjFhMW0veUxQYzVWUVo5ejFaSk84TFhiNFlvcmJkMS9XTG1lN1VFQjdCcjEyRmNGZy9aVm8yNlhJc0E5SnRpQktkYXpsb3hGUDBRUXdPSnBRVW9Famd3OTNWc1EzcHQwckNLTm9oNm5KeVhWR2NPd3dmTWFkY1hRK1VSdkgvNTM1KzAwZVk0RWc1L1pMK3dmVXkxcEdKVWtuWk9qbmJqRW1IRVlodXdZMHAreG00eFpNMUswMncxRFdjYzhic2luTXRtaVpXTnl1Q0JaL3RuaEhZanovZ1pPcUx1c2d3QnpRVmR0UEZRWGVZRHZIbFJ4Y3d0c1IySTFqUjlTS2lkdk9iMnBrN0QwL2tpS3VPWHgzcG1EdzVGQUhSYm1YVmxaK2FsU3hlKzRIU3VkaXhmYS9QSllZNkVlbW8wa3RKcjY4aDUyWWNHS3ZzSDlEN3g5RlY3TDlTN3dkS3dLQnVYbUJXN2ZiTXRaMEJJUnpGbFBjYjFtWThudHBzWDJZZ0F1czBjTTBxeFJMUFd0MTFLeHZmY2pxcmdDOWFyRTNtOEo3ZmVKUmNRVkpBZXM4NHI2dS9tZ2JVbnFkei9nMEMydUpvVjdrazkvS1dDVkxvd1c1T1JTN2x2WjJqLzZxQ09rZXcrZjUySTJyeXFqeDQrcTI1Ly8xeVQ5dERvL215K1NsWmx6OWxyOE9kZGp1Q0hHbGRyREJuRUdFd25KWEJYbWRKN1hxK0pLdEJQbVBSZXBld21XOTRST0dWRVk5SzQ4K3I4aUVoQXpuVHhnVkdkRTlPSzBFWG5TQ0ZkeHZGOGE0S1RDMU55OFpxMjc3Qk5MaUZjQ0hNRDVIZWhZdGNoRCtoWjc4RldCb0JBTitraEx5bXl5QUlHV2NsYTdMVzgxbGdpY0NRZHRkaWE4TVBBSGRrSHlIcUczcEl1aHVldk0vYml4Z1B5c1plNFJ3cjRzNExjdkgzVzVCRThnVi82dzErUndlak16Q1IrSnY4L0c5RVc4UXorUXdlSXhaS0NqQStuWDRjNnRuOVlhZlVOZmw4VStjMVdNZHd2WEE4ZGE2WjNSUnVEc1hhZ0FWdlQwWng5UTZway9xc0NLU0F6ODF6WHRmdEZmRUROVHcvbk1iaDZRV1JaVFk0S241L09GWGZmU0FqLzc2YkJBZGlZb1JGcDdjMk1yd1hCVFp0NXBEMXNtMkdJVmNFZnd0cDIwYWRmMmlaVVhJM3dEV2xDQVZaSTVWTGY2Nm1Nd0dZQXh6Q3ZsaUdvKzd2aUwxOVlqNElLejA3Wm9zTVBXL1BxZjAvckl6cCttUC9PN0p4eEgwTHpUWjh6R3RHc08zRUlUNXg2VlRyWFcrTDlsZ2U5VU1MUDVaYmZDdk9ZbEduT2llQnBFblJTQnhOKy9lQk5mMGpidHdFRTZCYW96VnhWNHFXT0xRNys2aWtmZEcrQkt3dXhDeUkrcjJiK2cyTk10a1g3UjdjZlZES1dpL2dDRWtEMWMxS3k4c0xYaHZnZU9Qdmg0cUpaNkU4R3I3TlRiRUZQYzJ2RHNXMlc4bWxqdEZwNmNDWldvc3J5UkhLM1E5RHZSODhtMjlOa1ZuWHVyaVFJT2lTc2FEcCt2MjFNNGZsVWNMellldkJBQzlyK01WcU52b0RSQ2dWRmpjeWdOWEs3Q3hZRmpiL2xvMDdWdlpRdGwwbXpuL090ditkSjExZHRyd0hrMVVBNnRkQ3dlczNrMG5VMkxTeHN4N05NU1BaZXRzbWFNdWtKSG9QWGRDUjlINm96b3hHbXIyV1l5SlpMT1pGQWRndzJrOUJDejNYNjkzT0x5R1RzeTNxK2VlSkpzZTkyeWFJZzY3MS9mOGVnbjRQQU14UUsyWHcwTHZmZEo5QjdjK1FkU1RQU3ZsQ3JaNExoLzJocW03dGJhWERiekFsaHVkU0VvN0FldVdtcXB6eTFYS1YxeTFWQnJwS1JMcVZTNWxacWVOOXE5QnNUbU5Vb1FNV1JOSUlHR0kwWGt5c0VTY2dWWm83SGhZckEwYUFsU293bzhGVmZ1eStYRm1vcmhPRUVvbjh1NXhzRjVZSXc1Y2lvbm9NSUZoMjFYUjBzSGl1dW1EdEpmdytubjVoU1ZGV0wrVjlSVTNGWXlJRkp2U0d3MnBOVXlpZ1g4S3VjRG1qYU9PM0J2bjA2WHNRaGJmT2FVZFBibnVTRFdtaklrazUyVFlWMWFOSTNobGtoV3JLRVpQaXdER3J5UGNQYjcvSXhsejdhcEhrVGgvWVd2Zm1zc0Y2UzRraGJ2RDNxSmtRVVdYQlhuZmlDVVVraUpqUUpsOExYdEU4cWRJNmpGYmRGMko3bXUyN3lYbDQzejk3QzlnMVNOMld3RW8rRERrT2JQZWxwRUhYa2QwbTNETklrdWpWTktORjlUSWV6ZjFxeHBwZENJbWhmOE53bmFydjRQL1ZPTU0vM3dRY3c2NERJSnUzQm5qeER3SURVak4zbmFNbW9qZXptNlBERGNGeCtPbDhPNVF1dzE4R1FtNEM4YTVoL1JTejZQY0ZXNmdCVEYyVEdWeFZRcU9uR1pJYUtHWXlhZE9CVXdXaHdwRk00WTFNcFlBZ0hYcS9CdGVPK2FLYmNHSVVXZ01LS3lOU1I2Tmg5dXVnWXM3Q0NxSEN6MHdxZ3AzWWZZYkhuRWxFWmhnV2ZKUDU0M2ZkK09TNDFJTXFzekdqTTZKR21VdnZnOXRIeUVndkNJWlRLM1dFSEFSQ0xtY2lkaVI4VEIzaVFCcXoxQnFScVdKL0RBUkU4UzFKL1U0SXhMMEVXQmdiNkkrUUx4NXhlUHhyZFY1U2ZyWitGMkdFanNVWlhWTkhnYURNZE5Xa3NRTlovSEFLY05HbVUwbnZFRUJJK3pPbUUxaXh4WFBtNG0xYkJKSFQra1ZIa3dvOHBYRUFrYXNad1RXQzJBRmZSVll3MC9VWTR0THExWXFMU2paeXVhUjZqNXdKYjRBbSt5VDNHV1ZYdWMzWWdOVTgzZ2JibGM4SktzZlVqUTBMNWozcFVGY1hJR2NvQVYwQzd3K2I1cVJpSld4QkVya244WnVYZXlXQW9XZmVtbEF4ZHB2TGR3L3JocVhidmFzRVhZOHNDMWhmeUtjcEI4YjdsYnlQMVhBZTRXc2NMenhVTmJkM1gyMU5ZM1BFRnp3WHVMdHQ1UmY1aUtQU1dRSWpzSXZyL1ZyWWJ3L09DN0NMOHZNL0JUSEhaNTVZYUpNcERPdDdSdGF0cFpPZHcybjE1RGgrdExqUzhBZnVYalBSemV1YjlRQnpWdmRyWUpoUUVVSDJta3YweTQ5OEJHd25mdmlqdG9GYlUzU2RxMlgvZDBTM3RMeXpTTDkxTno4Mk9nQlBnc2F1K3lnVCt0T0FnNTFIQ2ZYZEdmeW5HcUVSVHZhOEEycVBMN1BhMk4zTHMvblpkQUs5OXk2Q2syNTY1RExXM1V4TEpSWSsydDkveHV2clBaMHRwU1diNnQwcmZWMHJTUDA5SFd1cTYxZGJ5MVRRdWlFcnhNcEpmY3ByZERGVFVQVmJORk56dFlhajFsK2RXOG41cGJYdVEwcTF1YUQ0TW5vRkNpMzkwbnVoamY5eURZdnh5eUkzU2FGMTBYeDBybEppdzYzYTNrVTZwMUsyZHdrdnl4V3h5cjFjOFRPa0ZPWFdLS3FqM2JpdklFWDJIR2JicEFZdVhEanFwRDFzRStuMVp0bmNSSnJtbWdjbmlWRE91d3ZQV1NDdXl3bm45YVk3VXYwMURONnhEVHQxcWxROWU3aFV0YmhNS1dwY0pFQlNGYjllVVlYQUpINW5xMGt2c2hEbTFGcldXMzhvN0IyOUJsejg1OVd5UFBBMStiandhcCtQeGtodGQxSUtJdzlmemx5azdWMms1TW5tdVZYc210dFVOenJIM3h0dFlINkpxak9LSzJRK2VtdjE3NVBxUTM4VCs5bTZTN3lmVThxOEQrQnhoVFJlSEN2alRuV2tBTTkxSlkyUWtiNUFHUFFxV0pxQTc2bmx3K3cvZTlPWUJpcGk0ZDJrdEllT1JPdjFCRmNXK2FnQ2hBM2VzbEVYVUdiY0lHQVJUYzRuaFQxMUJaNjZYWHpURkxGTnlaSVQ1TUxXK3J5Qm1vZFcyVnJFWERSTVpxUkQvMnF5TUw3MlhnUXBHRUxmTm96NzBndm83QmtCenhXcDZlaEFWYWNucGV0WGtONnhKR2RnaUp5aHBKaDdhQ01JZ0RNY3BSVDhxaWFMdkw3R2FOVStabjR1aWxyZ2EzWW9NK2lLc0hIcWo5R3U0bmdycEZIb1dydmxGUVBzUGNweGxqcU9Mc3ZkbW1qYnJlbXNIcmE5K3VTc0dEK29WdXBic09iN0Z4WllVNnNxeFJiZHgwbldPeGtra2l1czR2bncvSzBXQ0pSNXVJNzVYWFQzMTRCcys5RFRuQnhieVJtTkc1d3c1QmdXUFVKaG5ac2wyV1czTjUrM1VyZGlVMExpcXhJQzlmSmh1Zk5sK1dUSnF1MExjU2treFg0ekZBZTVSV1JMVmNQajVUTTFORlJ0UDViYmZrYy9ZYk5OVUlpTG5wVEJMVHNyc3BnQ01aeDJuRmFrTXZKdWNvaWp3YVVNYUtlTDdRUXVlajZLTzIzSkZsUUl0VXVqWXpPL1NZdUUwN2ZidklSTkc4TW5jcG81ZDNsNWxLMGpJam1kdTQ5WTliWDZvMjZZbFpjN1BmSGY5MHZNZG1IbHdaUVR5SEROWDFHbDVrMWo3Y1A0LzVNTkVwNDBRSnpUTTNHTGl2MEpyZkJSNHVBZmYwcUJCTVcwS1U0Vm1xMk9NcWNMTWRURGV2YVBpQ21iWTR3WXlWTDFnWk5uVlJzajRITHBhQXVlYW5xNExjQ3BsWHBSS2lreW1VNllhYzRldStFSW8rMS9ONStzOUZ3aTkwUVAyTnJnQ0tHcFRETERLV0xhUlc2a2JQYW1OM0VabUtSSVFReWRVZWJFUzArWEdxZHFoYmdNU200dUg5aGI3d0FhcU9JVjJDNEtQVXZtSUVMMUFQZkEzNEs1bG1peFYzNkc4MEtMc2JVbzFDbnVyQ3lCUkY3a2NGUys5RXNZWC96UWZmOEIvYmZkUGt5enNwTUk0cWpwbnNYcnJBbzcvMXFkZm5TMFRNM0FhUzJVVHZSOGVMVnVMZWp1d0xsSGRid25VV1haRlZtb3hobmFMTGpqQ2JOZmlaMlFKSkxnaUsyOHFPdWt5bHl4WnlldUpQM0MvcEliUTZURjJ1aFhnYWNLWldGYnZnejNHdndoNWdhR2R0SUNIWmRBUHdQYUN6SXVqYWUxZk1kT0Y5MmQ0UXdXSHZPWDJMS0RKbGoyaTZOamZvaHFzZ2hGdXVHOWhLcmFYTjBvaFYwRU9rR2FMTEx6T012dWhYRTh2VTVkYm9jc1pvRE1sTUlUTnkrVFdpMEpLSUw1RFUrMC9wZDBmMFE0bTZDWFdwOE1IUUkrVjluaG5jd1NES01jb1EvY2h6Vjc5YktjKy92dmc1L1NGd083OTA3UEQ1dS9kVXl2ZXY5RDJqWDBaWmRBZVNSaS92ZjZxODNXT3pKeGlZV2hqS0g5cDZEbUtVZHR3MzVmNFN4cXRiSDdvalNjV0hGcm5XK0Q3bFltMU5rK0htYXlyd2RQUkN2ZlltOE1zbGp4b2ZFYzJNdURYMzJ3L01NK2lsdXZ6ckRad1RjZWx0dXA5dWh0MEdsNDhkK1FuSFcwNVVzanpYYS9ubjJiTnM4M1Q5RUhab3U4bnQ0OHNGT1BzMTc4OTNDYlhiMnNOTFdUR05qcFU0QU1PVHJMaFd5NDVQWHF1VlJxeE9WUVRXU0dOV2h5cjh5QjU0OG9KV1lBUFpYY0RoemNLTzkzKzhCK081Ujh4S3FONWNtb3lrRkNvMXJoWUZZSzJvaEdlelJ0UVZqRzZwOGpuQU9sVXBqK1BxYmNTL25sSUNOV1E0QzdCRWNQMU9iOS9ZbmM2dGE0STNMbkpJVmtiN05tSGRXS2oyd3I5WnpLVGk3NXNYSzFORGU1eGRZNG9wejhyRS9RZW5IL2NzV1hZcUZkbWJjUWpYMkFmaXRwQkVHcEc3ZlBJdXZmQ3JLeFZhdjlZUVltV2tqZzQzcUFMVGZKZHR6S29VeG54RS8zZlJPbS9SaktpN3V6QW5PYWdnU0ZuWG5wYnJJSEMyTE5lV292RmwycFpxcmduLzVLTGtzakVpSU1OaS9JaEVvL1JGWlpnL2F4WURLUy9ZSlV6clU3dGdoOXVEbTdqdHBDRklXYjg5MngySTJ5cXlNU3JlYnI5SXEyUFdzSjJNWHJ3ck5TSWgzUUE1QTIvWlVJSzAxZmJ3dm1ZRUY4cUdxcEJpTEdYcVhTOGV1d1ppTEk3VjlxYVBMaGoyMFVKUDkycVZGNlY0dlVRZFlzMzhsOUJWZ1NuY1lPRzdaVmt0aXRyZmZ2dEIyYjdRSitLR21uTmV2SlVqV2V2aGlCQ3ZVaUdOUGR5R2VBWEx0MEo0ZnBDYzJHa0Y5OVhUVWtHNFYvdHFwS1hIOWVtcEJ4Vm52MnVEWFhwZkU4bXNtbU5XbE9NWTJGK3d5VkRNR1NkQ1llUG1ZbTZUb2RPeUN6blQ1bkRJTkZIUUlpWDRZblU2b1YzcTlVZ3duY3lsT0dhU1pvK1hTYVFtVmp1ekJrM0dhS1FYUnhaeHVnMUp2cy8wdzJENGYxdnh5VVFlR0JaNXZUSUQrNGRjOHNkNFQrM1F2bGZBWEIrYUk3K1V6Yzd6RkErTE9aeGY1S0M4UW0xdmY4eElBZEJvVXpsMU5LUCtSSGRGNGZpcDVsY2FtblkzZDFTMXYxYi90V1BJWWk4UmhMMms1UTVuYVVHZzhUb2ExMmlUbUZtYlVBMFVUV2gwQ1RPbVMrcGlnSGNscERoeDhHYW92U1dqTFhRcjBWSUVvaC96MUtVVHRuM1hlT2c3OURDKzVDU1U2UnJkUGVtVFgvMXNpZHY2RDVnVmFWWnNKVFBuVXpzbFY2dkZVdlhWRXVuVkhJbEVjN1ZYWnBOTGJiS3ZNYkJzYjYva3MzK0xvZVhUVjlJUXNnTU45bDBiMmdKWm5QTnBPTTd1dlo0dVdiWWQ1OVJUT1R3M0pHWHBudnFxaGJYK0cwREtWQ3RnRWwxVUxSUGYzZXJna045UEY2NEVFSFdaUnQzRTI2MjFmUFNIYWoreFNMMkhobHp3ZFQyenF2aC93WmRzQ0VqTm80b3VJTGQ3SWNlMWJSSHdmcFZXQlpoamZaaVpUQXRGTlZNTGc2Z1dNaGhxbVdoSzBSM0Vwb0t0eHl1V3pTMXE1bXJwT3dxOGVWeTNDL0ZSZVJNSUhLZVpLRUkrZVlpdW9tbDJDUG9NRmpYNnE4Qmx2MGNFM1Z1b1FrOEs1eWVNcGROSElJa3MzeGhMQ1NYbGZFOHF2M3granc5UVlwaFM0ekxITmYzenRyRW1NSjA0RzAxMlVzUFg1K3RxdWtYYlYyaEtiVWtSVEk2YytEeERmbE1oeG9zQ0ljL3pnSmhIRlV0ZGp5bHZXQ2twdUw0MmRXRGZwT2x1YXFsWjFoTkJ0TnNMZkJHUnFVSm1JU3Y5WjRGRWVrdmdqV3RzYkdyOFFlNTJJN2k5SmZnUlhnT1F2VjdiSk5hdCtPdHRZL1F3eWt1TndINGpDMWI1WlV2WnA3K3VxMkZrdXJzNG1nT2hkclcvZDlqZ1RRNjdwZ0tEcjhobS9rN285bzdzNTA2eTJDZWVZM1B1TzhGbW5ienZidFlQTGEzL1cvclpGSlo3R2dJTTM2N1h3UFlqZ01wci9FTWc0WG9EbTVHdWwxZ0hzNy9DSVNhYjN6dWdrMDRNYUEwSVZFVXZybTN1cFdEUjhEY0tobHRRTUZ5TmdpRVRJL2duZTYya1RkNmMyZGJrNVdIRHJ4N1pKSXNxY0tZdlN1SlJsSWFpb0J0RndUc29DdjZVb2dUQWRjZ0pMY2dKenlJblBJS2M4S0dVb2k5MHdmU2FSdXdBb28rb3FicVIydWNScGc0L2NqM0JUSmo5S2VaeDRHZmptbUFYNVRtV1lDbFRNTnltendRbHhXbURSOVYrL2lPY0pQWmZtQjZIbCtBR2pZMG80dFJ0MXZjSHU0YkZhbjJ5eitBYlJqTmI4bzFTVGpkR0dxTk94WDRTSVRWcHlDUFhJOHloaVQzQkFpWWUzeklWK0toazVpUkNQbWpUKzNTbGVwK3VCdm5nNURHTFFmRVhBOEVBOW5icm5Yb0FzWHd4ZTcrdUl0QUlmbzM2OFVnM1FtQnErd2pvYmZReCtnUjlpajVEbjZNdndKZmdQZWtyVXZ3YXFTSytWZDdENytEM3pBOGUydmgySXpEOXRlbnhWRDZKQzQ1MTJ4dDhsajVIZlQ5UGZ4cCtvczRIdEFWZHdZektuS3ErUXN6eGV4bzNyR3dMY3JkMlZkUVFOMW1YeDFQY3dDMXU0c1BiekJORUx2MkxhTERkVXRQMm9iUXhLOGF6SG9PNFczaUQzVDQ5ZldlVTJlZlIzZjcveUxGWVptRFFYdmM5SzlsYWdVVUFNZUxlZnhhc0FqQ0hmVmdBWkI2SWRZczUwWHUxM2JxTEY5YjI0STlaRDJzRGJpMTQvejhneTFpeGx0amd2T1VCNUxvQWdCWFl6YWxKZ3NhTXJSMXRYWWRSUmxHSDlSUWRzRSs2eG1SZzh5SWVvOG94UnVNUUJTb1B1TU9NWU1MZHM0eEdDSitIMlNNaTVhYnVzL3dDVlk1dE5BMFhtMHk5eEdNMEp0QU9xMXBnSzBCZEtBZjdES0d2ME1mb3k5Ri9aR2xhbE52bHdubENjaGd0Ukw5bFc2QXI0S04rb1NkZ0l4WHBJSnlGMjdnTzJPL05BbGgxVlhlTk95UGQ5LzNTSUtBL1ZDazM5WTRFUFlpdUhlTUJISnBXa20zUWVKRUxQRVlMMFc5Z2daS2E5ekdIenY4Ykk3REhlLzRZYmhmZTJFOWlvTzlKTTMyM2J1YnNTa1F2aU13K24zUU5KVWU4dE90cnp5NXYyRWE2N0EyeFZaVHM0dTh5MWpqbnU1M05DM2tFYmlFL1pqc2l1bE9qMjBRNjhVNllFaW10eGt1dUMzdkw4WVpMbzJzRkVhZFF4dXZHOWxFMGV0Nitsays3TVFIb04wUFlsc2FYYit2YU4zdHIxeTQyZFZta2ZTYlY1eGkzQmJWMXUxMU05d0QwbE96TFhuWUNSOTB0NHd0K3JpdW9LQTE5eXV3RDJwTEFKd1E3WjN5K2NJbmk4a2c2MThuVVNBVDJPNlZLLzNXQklhMWhUMmV3N0VvRlNyYU1JaitUV0UwKzk0cmFIQUp3RVQ5K1o3cGxYRWpxM3hESDNRRGc1SUdPKzVMOEwyK0ovK2l3enhQTXhnRWlCZ0FJL2l5Wm9IQW1NUDAvZUU1azl5NmlOZTFrNnc3V3o0dWNycVRweHlaM0JlVUp2MlJ5cDNYRlRQWWR5TDdKSXdSNFJranpON2F6WGkyQ0lNRTBwVFhvZFpjN0lTamQrckw0Rkh4R0V5M0FSSFVBeDFWL0xadmlqbDh3V1YybTFmU0NmK3N3YzBXMDZPcWE1bTZTS3p5dFJuaFFWYWdNNk1jaFJna0pNWFlFOFloQjl1bUtvb1RwR1JxTmtLNGZ4NE9XK3UrNENyY0dZcmdUWjV2bUc5VFVqdGZuaXFZWlVXVDZVZzBlRTNoa2lVRzVuQnBnakYxNERYYm8rRFFSYmZwVjEzek1wbElKQ3VjK1ZMSnhHZ2F6eEZ3V0kzWkxuajY1WDUwMHhCMDNvWjBNTDRhU1A2R3ZRWEtidVBNclVxdm1hUWgzVUdaclJVWk5pWW85dFhUUlU3eEdsZFN5cFk0NWJBckxVTE16dEFiNjVpbWRJT2FSRFlwSVVGNUJzSW83S1E2L1V6U3d0STJTZWRTMWs3UW9JWFBTYzBHVEY0dXpXaHhMeHZ3TnhGN2g5cjEyTExZWElkOUZENXNyTy9TMzJiS2VXelpQSnFYL0FNM1FoMXB1ZlN0NzZqaVF2WUVsMW1NMGVNN1RNa3dBQTN0OVNEbTc2WmFYS0xaNTY1dnBPMGl4dmZReUNJMmo1Qk9oVi9rMlBpVjNzUnQ0S3FGbC9tRHVEblV6Nm03VnY3OFJQYjNJMWpQTVhWQ3FWWWlmK0VURkhuVzNyY2hNYjUxZTF1dVZwekwwbGdHVElBVU1hUlVGY0tBRHNJRUUwUUlabUtmeURVbEZaWWNvMmE2LzQzUURDYVhza2NNR09LMnM1S0Z6cVB5aTdzamZKOVM4TlZvamo4b1gxTWp1eWZFRVFJQ1BjV2ltQVdnakxCd2tKcTBPSmppZEhaejJpWTNPWnpzRWtkbnJFTmx5blNOWVlsNXloREtYWWc4ajFicVRDQWhzbkM3eTVLdFFLSnRYbG1JeWhVdThOTExCQlppeXVRT1V5RGJKZEVVbXlEV1pyTDlDZWFhWlloSUg3VVMwdUpYbWViVElpalpCY3JGODAyODZKeWV2N0V5MXhFUU9xc21UdzduS3RkQVVaZXp5VGVEbGt5M1hCR1VaNDNMS3BoN1FISzd4cWVBUWV2dG9jV1JsRXRKbEEwMVJaTXBSS1RWRlhlcnB4VnhGeGI2OG5GN2pzcTdHYmRVMjBCdWVJVkpPd3NmRnE0VFBCSVVTT0xpNEpNclFWejk5ZFpNaGFQQzRXVHNZeWdFblpxczRtcndZS2R4ZXVQbFlLVExKcURTL1Y0bzRoQ28rRHZOUWIvUUkrdkhvcmVmZ01UUE1tNFk1dTA3NVA2SklYaEgvZTEveW53RUEpIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9Ym9keSxodG1se2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9aHRtbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItcGFyYWdyYXBoLHB7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNjt0ZXh0LWFsaWduOmp1c3RpZnl9Lm1vbnN0ZXItaDEsaDF7Zm9udC1zaXplOjNyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTU7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDIsaDJ7Zm9udC1zaXplOjIuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yO21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI1O21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNCxoNHtmb250LXNpemU6MS41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg1LGg1e2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6Ym9sZGVyO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDYsaDZ7Zm9udC1zaXplOjEuM3JlbTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX1wK2gxe21hcmdpbi10b3A6My43NXJlbX1wK2gye21hcmdpbi10b3A6M3JlbX1wK2gze21hcmdpbi10b3A6Mi4yNXJlbX1wK2g0e21hcmdpbi10b3A6MS41cmVtfXAraDV7bWFyZ2luLXRvcDouNzVyZW19ZGl2K2gxLGRpditoMixkaXYraDMsZGl2K2g0LGRpditoNSxkaXYraDYscCtoNnttYXJnaW4tdG9wOjB9LmRlY297YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7dGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50fTo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX06OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfWtiZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtib3JkZXItcmFkaXVzOjEwcmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3BhZGRpbmc6LjI1ZW0gLjZlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9ZGV0YWlsc3ttYXJnaW4tYm90dG9tOjFyZW19c3VtbWFyeXtjdXJzb3I6cG9pbnRlcjtmb250LWZlYXR1cmUtc2V0dGluZ3M6XFxcInRudW1cXFwiO2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMWVtO3BhZGRpbmc6LjZyZW0gMXJlbX1kZXRhaWxzW29wZW5de3BhZGRpbmc6LjZyZW0gMXJlbSAuNzVyZW19ZGV0YWlsc1tvcGVuXSBzdW1tYXJ5e21hcmdpbi1ib3R0b206LjVyZW07cGFkZGluZzowfS5tb25zdGVyLW5vLXVzZXItc2VsZWN0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1Aa2V5ZnJhbWVzIGRldGFpbHMtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41ZW0pfX1kZXRhaWxzW29wZW5dPjpub3Qoc3VtbWFyeSl7YW5pbWF0aW9uOmRldGFpbHMtc2hvdyAuMTVzIGVhc2UtaW4tb3V0fWRldGFpbHNbb3Blbl0+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tb25vc3BhY2V7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2UpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmV9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1idXR0b24tYmFyXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTppcyhkaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWJ1dHRvbi1iYXJdKSA6bm90KHNsb3RbbmFtZT1idXR0b25dKXtkaXNwbGF5OmZsZXh9OmlzKGRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9YnV0dG9uLWJhcl0pIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XXthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleH06aXMoZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1idXR0b24tYmFyXSkgW2RhdGEtbW9uc3Rlci1yb2xlPXN3aXRjaF17ZGlzcGxheTpmbGV4fS5oaWRkZW46aXMoOmlzKGRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9YnV0dG9uLWJhcl0pIFtkYXRhLW1vbnN0ZXItcm9sZT1zd2l0Y2hdKXtkaXNwbGF5Om5vbmV9OmlzKGRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9YnV0dG9uLWJhcl0pIDo6c2xvdHRlZCg6bm90KDpsYXN0LWNoaWxkKSl7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKi0xKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gc2xvdFtuYW1lPXBvcHBlcl17YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOm5vd3JhcDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgY29udmVydFRvUGl4ZWxzLCBnZXREZXZpY2VEUEkgfTtcblxuLyoqXG4gKiBTdG9yZXMgdGhlIERQSSBvZiB0aGUgZGV2aWNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKiBAc2luY2UgMy4zNC4wXG4gKiBAdHlwZSB7bnVtYmVyfGZ1bmN0aW9ufVxuICovXG5sZXQgQ1VSUkVOVF9ERVZJQ0VfRFBJID0gZnVuY3Rpb24gKCkge1xuXHRsZXQgaSA9IDA7XG5cdGZvciAoaSA9IDU2OyBpIDwgMjAwMDsgaSsrKSB7XG5cdFx0aWYgKGdldFdpbmRvdygpLm1hdGNoTWVkaWEoYChtYXgtcmVzb2x1dGlvbjogJHtpfWRwaSlgKS5tYXRjaGVzID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gaTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIERQSSBvZiB0aGUgZGV2aWNlLlxuICpcbiAqIEBzaW5jZSAzLjM0LjBcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGV2aWNlRFBJKCkge1xuXHQvLyBvbmx5IGNhbGwgdGhlIGZ1bmN0aW9uIG9uY2Vcblx0aWYgKHR5cGVvZiBDVVJSRU5UX0RFVklDRV9EUEkgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdENVUlJFTlRfREVWSUNFX0RQSSA9IENVUlJFTlRfREVWSUNFX0RQSSgpO1xuXHR9XG5cblx0cmV0dXJuIGdldFdpbmRvdygpLmRldmljZVBpeGVsUmF0aW8gKiBDVVJSRU5UX0RFVklDRV9EUEk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBDU1MgdmFsdWUgdG8gcGl4ZWxzLlxuICpcbiAqIEFzIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGNvbnZlcnRUb1BpeGVscygnMWVtJykgLy8gcmV0dXJucyB0aGUgY3VycmVudCBmb250IHNpemUgaW4gcGl4ZWxzXG4gKiBjb252ZXJ0VG9QaXhlbHMoJzFyZW0nKSAvLyByZXR1cm5zIHRoZSBjdXJyZW50IHJvb3QgZm9udCBzaXplIGluIHBpeGVsc1xuICogY29udmVydFRvUGl4ZWxzKCcxcHgnKSAvLyByZXR1cm5zIDFcbiAqIGNvbnZlcnRUb1BpeGVscygnMTAwJScpIC8vIHJldHVybnMgdGhlIGN1cnJlbnQgd2lkdGggb2YgdGhlIHBhcmVudCBlbGVtZW50IGluIHBpeGVsc1xuICogYGBgXG4gKlxuICogRm9sbG93aW5nIHVuaXRzIGFyZSBzdXBwb3J0ZWQ6XG4gKiAtIHB4XG4gKiAtIGVtXG4gKiAtIHJlbVxuICogLSAlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBbcGFyZW50RWxlbWVudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBbZm9udFNpemVFbGVtZW50PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudF1cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMzQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSBVbnN1cHBvcnRlZCB1bml0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCB2YWx1ZSBmb3JtYXRcbiAqL1xuXG5mdW5jdGlvbiBjb252ZXJ0VG9QaXhlbHMoXG5cdHZhbHVlLFxuXHRwYXJlbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRmb250U2l6ZUVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4pIHtcblx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdGNvbnN0IHJlZ2V4ID0gL14oLT9bXFxkLl0rKSguKikkLztcblx0Y29uc3QgbWF0Y2hSZXN1bHQgPSB2YWx1ZS5tYXRjaChyZWdleCk7XG5cblx0aWYgKCFtYXRjaFJlc3VsdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWx1ZSBmb3JtYXQ6ICR7dmFsdWV9YCk7XG5cdH1cblxuXHRjb25zdCBbLCBudW0sIHVuaXRdID0gbWF0Y2hSZXN1bHQ7XG5cdGNvbnN0IG51bWJlciA9IHBhcnNlRmxvYXQobnVtKTtcblx0Y29uc3QgZHBpID0gZ2V0RGV2aWNlRFBJKCk7XG5cblx0aWYgKHVuaXQgPT09IFwicHhcIikge1xuXHRcdHJldHVybiBudW1iZXI7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJlbVwiKSB7XG5cdFx0Y29uc3QgZm9udFNpemUgPSBwYXJzZUZsb2F0KFxuXHRcdFx0d2luZG93LmdldENvbXB1dGVkU3R5bGUoZm9udFNpemVFbGVtZW50KS5mb250U2l6ZSxcblx0XHQpO1xuXHRcdHJldHVybiBudW1iZXIgKiBmb250U2l6ZTtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcInJlbVwiKSB7XG5cdFx0Y29uc3Qgcm9vdEZvbnRTaXplID0gcGFyc2VGbG9hdChcblx0XHRcdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudEVsZW1lbnQpLmZvbnRTaXplLFxuXHRcdCk7XG5cdFx0cmV0dXJuIG51bWJlciAqIHJvb3RGb250U2l6ZTtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcIiVcIikge1xuXHRcdGNvbnN0IHBhcmVudFdpZHRoID0gcGFyc2VGbG9hdChcblx0XHRcdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudEVsZW1lbnQpLndpZHRoLFxuXHRcdCk7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBwYXJlbnRXaWR0aCkgLyAxMDA7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJpblwiKSB7XG5cdFx0cmV0dXJuIG51bWJlciAqIGRwaTtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcImNtXCIpIHtcblx0XHRyZXR1cm4gKG51bWJlciAqIGRwaSkgLyAyLjU0O1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwibW1cIikge1xuXHRcdHJldHVybiAobnVtYmVyICogZHBpKSAvIDI1LjQ7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJwdFwiKSB7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBkcGkpIC8gNzI7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJwY1wiKSB7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBkcGkpIC8gNjtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHVuaXQ6ICR7dW5pdH1gKTtcblx0fVxufVxuIiwgImltcG9ydCB7XG4gICAgdGVzdGFibGVXcmFwcGVyU2hvdWxkU2hvd1RleHRGb3JtYXR0aW5nVG9vbGJhclxufSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvY29udGVudC9lZGl0b3IvcGx1Z2luL3RleHQubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5cbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuXG5jbGFzcyBNb2NrUmFuZ2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNvbnRlbnRzID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBcbiAgICB9XG5cbiAgICBjbG9uZUNvbnRlbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50cy5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgYWRkRWxlbWVudCh0YWdOYW1lLCB0ZXh0KSB7XG4gICAgICAgIGxldCBlbGVtZW50ID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgICAgICB0aGlzLmNvbnRlbnRzLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNOb2RlRW52aXJvbm1lbnQoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZTtcbn1cblxuXG5cbmRlc2NyaWJlKCdUZXh0IEZvcm1hdHRpbmcgVG9vbGJhciBWaXNpYmlsaXR5JywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKGlzTm9kZUVudmlyb25tZW50KCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2tpcCgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgXG4gICAgaXQoJ3Nob3VsZCBzaG93IHRvb2xiYXIgd2hlbiBzZWxlY3Rpb24gaXMgd2l0aGluIHNpbXBsZSB0ZXh0IGluIGRpdicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IHJhbmdlID0gbmV3IE1vY2tSYW5nZSgpO1xuICAgICAgICByYW5nZS5hZGRFbGVtZW50KCdkaXYnLCAnSGVsbG8sIHdvcmxkIScpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGVzdGFibGVXcmFwcGVyU2hvdWxkU2hvd1RleHRGb3JtYXR0aW5nVG9vbGJhcihyYW5nZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmJlLnRydWU7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBzaG93IHRvb2xiYXIgd2hlbiBzZWxlY3Rpb24gaW5jbHVkZXMgbm9uLWZvcm1hdHRhYmxlIGVsZW1lbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgcmFuZ2UgPSBuZXcgTW9ja1JhbmdlKCk7XG4gICAgICAgIHJhbmdlLmFkZEVsZW1lbnQoJ2RpdicsICdIZWxsbywgJyk7XG4gICAgICAgIHJhbmdlLmFkZEVsZW1lbnQoJ2ltZycsICcnKTsgLy8gTmljaHQtZm9ybWF0aWVyYmFyZXMgRWxlbWVudFxuICAgICAgICByYW5nZS5hZGRFbGVtZW50KCdzcGFuJywgJ3dvcmxkIScpO1xuZGVidWdnZXJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRlc3RhYmxlV3JhcHBlclNob3VsZFNob3dUZXh0Rm9ybWF0dGluZ1Rvb2xiYXIocmFuZ2UpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5iZS5mYWxzZTtcbiAgICB9KTtcblxuICAgIC8vIEZcdTAwRkNnZSB3ZWl0ZXJlIFRlc3RzemVuYXJpZW4gZW50c3ByZWNoZW5kIGRlaW5lbiBCZWRcdTAwRkNyZm5pc3NlbiBoaW56dVxufSk7IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uLW1vY2subWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbmxldCBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXI7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmRlc2NyaWJlKCdSZWxvYWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAvLyBqc2RvbS10ZXN0aW5nLW1vY2tzIG5lZWQgamVzdFxuICAgIGxldCBSZWxvYWQsIHZpZXdwb3J0LCBtb2NrVmlld3BvcnQ7XG5cbiAgICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlci5yZXN0b3JlKCk7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIFxuICAgICAgICBcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlciA9IHNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNb2NrKCk7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcmVsb2FkLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgUmVsb2FkID0gbVsnUmVsb2FkJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBSZWxvYWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG5cbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIC8vIGxhbmd1YWdlPUhUTUxcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1vbnN0ZXItcmVsb2FkPjwvbW9uc3Rlci1yZWxvYWQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXJlbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHJlbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKSkuaXMuaW5zdGFuY2VvZihSZWxvYWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcztcbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBubyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgcmVsb2FkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHJlbG9hZCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnbG9hZCBjb250ZW50JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcywgZmV0Y2hSZWZlcmVuY2UsIGludGVyc2VjdGlvbk9ic2VydmVyO1xuICAgICAgICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0aGlzLWNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gbmV3IE1hcDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvazp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOjIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0MikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlMignaGVsbG8gd29ybGQhJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2FkIGNvbnRlbnQgZnJvbSB1cmwnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCByZWxvYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgcmVsb2FkLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXVybCcsICdodHRwOi8vbG9jYWxob3N0LycpXG5cbiAgICAgICAgICAgIHJlbG9hZC5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLWZldGNoZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnaGVsbG8gd29ybGQnKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChyZWxvYWQpO1xuICAgICAgICAgICAgbW9ja2ludGVyc2VjdGlvbm9ic2VydmVyLmdldEluc3RhbmNlKCkuZW50ZXJOb2RlKCk7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9jayhcbiAgICB7XG4gICAgICAgIHJvb3QgPSBudWxsLFxuICAgICAgICByb290TWFyZ2luID0gJycsXG4gICAgICAgIHRocmVzaG9sZHMgPSBbXSxcbiAgICAgICAgZGlzY29ubmVjdCA9ICgpID0+IG51bGwsXG4gICAgICAgIG9ic2VydmUgPSAoKSA9PiBudWxsLFxuICAgICAgICB0YWtlUmVjb3JkcyA9ICgpID0+IFtdLFxuICAgICAgICB1bm9ic2VydmUgPSAoKSA9PiBudWxsLFxuICAgIH0gPSB7fSkge1xuXG4gICAgY29uc3Qgc2F2ZWRJbXBsZW1lbnRhdGlvbiA9IHdpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlcjtcblxuICAgIGxldCBsYXN0T2JqZWN0O1xuXG4gICAgY2xhc3MgTW9ja0ludGVyc2VjdGlvbk9ic2VydmVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgICAgICAgICB0aGlzLnJvb3RNYXJnaW4gPSByb290TWFyZ2luO1xuICAgICAgICAgICAgdGhpcy50aHJlc2hvbGRzID0gdGhyZXNob2xkcztcbiAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCA9IGRpc2Nvbm5lY3Q7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmUgPSBvYnNlcnZlO1xuICAgICAgICAgICAgdGhpcy50YWtlUmVjb3JkcyA9IHRha2VSZWNvcmRzO1xuICAgICAgICAgICAgdGhpcy51bm9ic2VydmUgPSB1bm9ic2VydmU7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgICAgICBsYXN0T2JqZWN0ID0gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGVudGVyTm9kZSgpIHtcblxuICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpc0ludGVyc2VjdGluZzogdHJ1ZVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgdGhpc1snY2FsbGJhY2snXShlbnRyaWVzLCB0aGlzKTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInLCB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBNb2NrSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWwsICdJbnRlcnNlY3Rpb25PYnNlcnZlcicsIHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IE1vY2tJbnRlcnNlY3Rpb25PYnNlcnZlclxuICAgIH0pO1xuXG5cbiAgICByZXR1cm4ge1xuICAgICAgICByZXN0b3JlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBzYXZlZEltcGxlbWVudGF0aW9uO1xuICAgICAgICB9LFxuICAgICAgICBnZXRJbnN0YW5jZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RPYmplY3Q7XG4gICAgICAgIH1cbiAgICB9XG59IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgPG1vbnN0ZXItc3RhdGUtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz0ne1xuICBcInVybFwiOiBcIm1vY2stZGF0YS5qc29uXCIsXG4gIFwibWFwcGluZ1wiOiB7XG4gICAgXCJ2YWx1ZVBhdGhcIjogXCJcXCR7Zmlyc3RfbmFtZX0gXFwke2xhc3RfbmFtZX1cIixcbiAgICBcImtleVBhdGhcIjogXCJpZFwiXG4gIH0sXG4gICAgICBcInR5cGVcIjpcImNoZWNrYm94XCJcblxufSc+PC9tb25zdGVyLXN0YXRlLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBTdGF0ZUJ1dHRvbjtcblxuZGVzY3JpYmUoJ1N0YXRlQnV0dG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgIH0pXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgICAgIGlmKCFnbG9iYWwuUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWwuUmVzaXplT2JzZXJ2ZXIgPSBSZXNpemVPYnNlcnZlck1vY2s7XG4gICAgICAgICAgICB9ICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3RhdGUtYnV0dG9uLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgU3RhdGVCdXR0b24gPSBtWydTdGF0ZUJ1dHRvbiddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcgU3RhdGVCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXN0YXRlLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXN0YXRlLWJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHN0YXRlLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zdGF0ZS1idXR0b24nKSkuaXMuaW5zdGFuY2VvZihTdGF0ZUJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zdGF0ZS1idXR0b24nKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBidXR0b24uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdidXR0b24nKTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucykuaXMuaW5zdGFuY2VvZihIVE1MQnV0dG9uRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmhhc0NoaWxkTm9kZXMoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiXG5cblxuZXhwb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9XG5cblxuY2xhc3MgUmVzaXplT2JzZXJ2ZXJNb2NrIHtcbiAgICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSBbXTtcbiAgICB9XG5cbiAgICBvYnNlcnZlKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHVub2JzZXJ2ZShlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzLmZpbHRlcigoZWwpID0+IGVsICE9PSBlbGVtZW50KTtcbiAgICB9XG5cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gW107XG4gICAgfVxuXG4gICAgdHJpZ2dlclJlc2l6ZShlbnRyaWVzKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2soZW50cmllcywgdGhpcyk7XG4gICAgfVxufVxuXG4iLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge1Jlc2l6ZU9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvcmVzaXplLW9ic2VydmVyLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6dmFsdWVzLmNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7XG4gIFwidXJsXCI6IFwibW9jay1kYXRhLmpzb25cIixcbiAgXCJtYXBwaW5nXCI6IHtcbiAgICBcInNlbGVjdG9yXCI6IFwiKlwiLFxuICAgIFwidmFsdWVUZW1wbGF0ZVwiOiBcIlxcJHtmaXJzdF9uYW1lfSBcXCR7bGFzdF9uYW1lfVwiLFxuICAgIFwibGFiZWxUZW1wbGF0ZVwiOiBcImlkXCJcbiAgfSxcbiAgICAgIFwidHlwZVwiOlwiY2hlY2tib3hcIlxuXG59Jz48L21vbnN0ZXItc2VsZWN0PlxuICAgIDwvZGl2PlxuYDtcblxubGV0IFNlbGVjdCwgZmV0Y2hSZWZlcmVuY2U7XG5cbmRlc2NyaWJlKCdTZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsWydmZXRjaCddO1xuXG4gICAgICAgICAgICBpZiAoIWdsb2JhbC5SZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgIGdsb2JhbC5SZXNpemVPYnNlcnZlciA9IFJlc2l6ZU9ic2VydmVyTW9jaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBTZWxlY3QgPSBtWydTZWxlY3QnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnV2l0aCBmZXRjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gbmV3IE1hcDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QyKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiQWxleGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFzdF9uYW1lXCI6IFwiT3VnaHRyaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtYWlsXCI6IFwiYW91Z2h0cmlnaHQwQGV4YmxvZy5qcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdlbmRlclwiOiBcIkFnZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IFwibW5cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiQmV0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkJvZGRpbmd0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImJib2RkaW5ndG9uMUBzdGF0Y291bnRlci5jb21cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJOb24tYmluYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcInN5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiU2hlbGxpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFzdF9uYW1lXCI6IFwiQSdCYXJyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcInNhYmFycm93MkBnb29nbGUuY28udWtcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJQb2x5Z2VuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcIm5vXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXWApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUyKEpTT04uc3RyaW5naWZ5KGpzb24pKVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfTtcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2Ygc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHNlbGVjdCkuaXMuaW5zdGFuY2VvZihTZWxlY3QpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgaGF2ZSBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgc2VsZWN0LnNldE9wdGlvbigndXJsJywgJ2h0dHBzOi8vZXhhbXBsZS5jb20nKVxuICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRPcHRpb24oJ21hcHBpbmcuc2VsZWN0b3InLCAnKicpXG4gICAgICAgICAgICAgICAgc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy5sYWJlbFRlbXBsYXRlJywgJyR7aWR9JylcbiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnZhbHVlVGVtcGxhdGUnLCAnJHtpZH0nKVxuXG4gICAgICAgICAgICAgICAgc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItb3B0aW9ucy1zZXQnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gc2VsZWN0LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5sZW5ndGgpLmlzLmVxdWFsKDMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uSHRtbCA9IHNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0wXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMVwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTJcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLm5vdC5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtM1wiJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoc2VsZWN0KTtcblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBubyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNlbGVjdCcpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoc2VsZWN0KTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zKS5pcy5pbnN0YW5jZW9mKEhUTUxEaXZFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gb3B0aW9ucy5wYXJlbnROb2RlLm91dGVySFRNTDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYiA9IG9wdGlvbnMuY2hpbGROb2Rlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmhhc0NoaWxkTm9kZXMoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtEYXRhVXJsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5cbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEsIG9wdGlvbnMsIGh0bWwyLCBDb25maXJtQnV0dG9uO1xuXG5kZXNjcmliZSgnQ29uZmlybUJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7ICAgIFxuICAgICAgICBcbiAgICAgICAgaWYoIWdsb2JhbC5SZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgZ2xvYmFsLlJlc2l6ZU9ic2VydmVyID0gUmVzaXplT2JzZXJ2ZXJNb2NrO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucyA9IG5ldyBEYXRhVXJsKGJ0b2EoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgcG9wcGVyOiB7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiBcInRvcFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSksICdhcHBsaWNhdGlvbi9qc29uJywgdHJ1ZSkudG9TdHJpbmcoKVxuXG4gICAgICAgIGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgIDxtb25zdGVyLWNvbmZpcm0tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz1cImAgKyBvcHRpb25zICsgYFwiPjwvbW9uc3Rlci1jb25maXJtLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbmA7XG5cbiAgICAgICAgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gXG5cblxuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIENvbmZpcm1CdXR0b24gPSBtWydDb25maXJtQnV0dG9uJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBDb25maXJtQnV0dG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1jb25maXJtLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJykpLmlzLmluc3RhbmNlb2YoQ29uZmlybUJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgY2hpbGRzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChidXR0b24pO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYnV0dG9uLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignbW9uc3Rlci1idXR0b24nKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRlbnQuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7RGF0YXNvdXJjZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2UubWpzXCI7XG5pbXBvcnQge1Byb2Nlc3Npbmd9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuXG5pbXBvcnQge3N0b3JhZ2VPYmplY3RTeW1ib2x9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPG1vbnN0ZXItZm9ybSBpZD1cImZvcm0xXCI+PC9tb25zdGVyLWZvcm0+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgICAgIDxtb25zdGVyLWZvcm0gaWQ9XCJmb3JtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWRhdGFzb3VyY2U9XCJsb2NhbHN0b3JhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1kYXRhc291cmNlLWFyZ3VtZW50cz0nXCJ0ZXN0LWtleVwiJz5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJjb250cm9sMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbnRyb2wxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDphXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJjb250cm9sMlwiXG4gICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpiXCI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L21vbnN0ZXItZm9ybT5cbiAgICA8L2Rpdj5cbmA7XG5cbmRlc2NyaWJlKCdGb3JtJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGZvcm07XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICBcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoeCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9mb3JtLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybSA9IG1bJ0Zvcm0nXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndGVzdC1rZXknKVxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnSFRNTC1UZW1wbGF0ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlIGh0bWwxJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Rlc3Qta2V5JywgJ3t9JylcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItZm9ybScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItZm9ybScpO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUgaHRtbDInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGJlZm9yZUVhY2goKGRvbmUpID0+IHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGVzdC1rZXknLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgIGE6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGI6IDcsXG4gICAgICAgICAgICAgICAgICAgIGM6IFsxLCA1LCA2XSxcbiAgICAgICAgICAgICAgICAgICAgZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItZm9ybScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWZvcm0nKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNsaWNrJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWZvcm0nKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybTInKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKG5ldyBFcnJvcignbm8gc2hhZG93Um9vdCcpKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wxID0gZm9ybS5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ3Nsb3QnKS5hc3NpZ25lZEVsZW1lbnRzKClbMF0ucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuICAgICAgICAgICAgICAgICAgICBjb250cm9sMS5jbGljaygpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0sIDEpXG5cbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbn0pXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi9kYXRhc291cmNlLm1qc1wiO1xuXG5leHBvcnQgeyBTdG9yYWdlLCBzdG9yYWdlT2JqZWN0U3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHN0b3JhZ2VPYmplY3RTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UvQEBzdG9yYWdlT2JqZWN0XCIsXG4pO1xuXG4vKipcbiAqIFRoZSBjbGFzcyByZXByZXNlbnRzIGEgcmVjb3JkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBTdG9yYWdlIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgYWNjZXNzIHRvIGRhdGEgb2JqZWN0cyBvdmVyIFdlYlN0b3JhZ2VBUEkuXG4gKi9cbmNsYXNzIFN0b3JhZ2UgZXh0ZW5kcyBEYXRhc291cmNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgTG9jYWxTdG9yYWdlIEtleVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0Y29uc3RydWN0b3Ioa2V5KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnNldE9wdGlvbihcImtleVwiLCB2YWxpZGF0ZVN0cmluZyhrZXkpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGtleT11bmRlZmluZWQgTG9jYWxTdG9yYWdlIEtleVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0a2V5OiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtleHRlcm5hbDpTdG9yYWdlfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0W3N0b3JhZ2VPYmplY3RTeW1ib2xdKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZGF0YSBjYW5ub3QgYmUgcmVhZFxuXHQgKi9cblx0cmVhZCgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHN0b3JhZ2UgPSBzZWxmW3N0b3JhZ2VPYmplY3RTeW1ib2xdKCk7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHN0b3JhZ2UuZ2V0SXRlbShzZWxmLmdldE9wdGlvbihcImtleVwiKSkpO1xuXHRcdFx0c2VsZi5zZXQoZGF0YSA/PyB7fSk7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7U3RvcmFnZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSB3cml0dGVuXG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHN0b3JhZ2UgPSBzZWxmW3N0b3JhZ2VPYmplY3RTeW1ib2xdKCk7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBzZWxmLmdldCgpO1xuXHRcdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRzdG9yYWdlLnJlbW92ZUl0ZW0oc2VsZi5nZXRPcHRpb24oXCJrZXlcIikpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RvcmFnZS5zZXRJdGVtKHNlbGYuZ2V0T3B0aW9uKFwia2V5XCIpLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdG9yYWdlfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBTdG9yYWdlKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLmtleSk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgPG1vbnN0ZXItdHJlZS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6dmFsdWVzLmNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7XG4gIFwidXJsXCI6IFwibW9jay1kYXRhLmpzb25cIixcbiAgXCJtYXBwaW5nXCI6IHtcbiAgICBcInZhbHVlVGVtcGxhdGVcIjogXCJcXCR7Zmlyc3RfbmFtZX0gXFwke2xhc3RfbmFtZX1cIixcbiAgICBcImxhYmVsVGVtcGxhdGVcIjogXCJpZFwiLFxuICAgIFwic2VsZWN0b3JcIjogXCIqXCJcbiAgfSxcbiAgICAgIFwidHlwZVwiOlwiY2hlY2tib3hcIlxuXG59Jz48L21vbnN0ZXItdHJlZS1zZWxlY3Q+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgVHJlZVNlbGVjdCwgZmV0Y2hSZWZlcmVuY2U7XG5cbmRlc2NyaWJlKCdUcmVlc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsWydmZXRjaCddO1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgVHJlZVNlbGVjdCA9IG1bJ1RyZWVTZWxlY3QnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnV2l0aCBmZXRjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gbmV3IE1hcDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QyKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiQWxleGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFzdF9uYW1lXCI6IFwiT3VnaHRyaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtYWlsXCI6IFwiYW91Z2h0cmlnaHQwQGV4YmxvZy5qcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdlbmRlclwiOiBcIkFnZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IFwibW5cIiAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFyZW50XCI6IFwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIkJldGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJCb2RkaW5ndG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJiYm9kZGluZ3RvbjFAc3RhdGNvdW50ZXIuY29tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiTm9uLWJpbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJzeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBhcmVudFwiOiBcIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpcnN0X25hbWVcIjogXCJTaGVsbGlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJBJ0JhcnJvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtYWlsXCI6IFwic2FiYXJyb3cyQGdvb2dsZS5jby51a1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdlbmRlclwiOiBcIlBvbHlnZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IFwibm9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXJlbnRcIjogXCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXWApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUyKEpTT04uc3RyaW5naWZ5KGpzb24pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXRyZWUtc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdHJlZS1zZWxlY3QnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBzZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdHJlZS1zZWxlY3QnKSkuaXMuaW5zdGFuY2VvZihUcmVlU2VsZWN0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhdmUgb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmVlc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10cmVlLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3Quc2V0T3B0aW9uKCd1cmwnLCAnaHR0cHM6Ly9leGFtcGxlLmNvbScpXG5cbiAgICAgICAgICAgICAgICB0cmVlc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy5zZWxlY3RvcicsICcqJyk7XG4gICAgICAgICAgICAgICAgdHJlZXNlbGVjdC5zZXRPcHRpb24oJ21hcHBpbmcubGFiZWxUZW1wbGF0ZScsICcke2xhc3RfbmFtZX0nKTtcbiAgICAgICAgICAgICAgICB0cmVlc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy52YWx1ZVRlbXBsYXRlJywgJyR7aWQgfCB0b3N0cmluZyB9Jyk7XG5cbiAgICAgICAgICAgICAgICB0cmVlc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItb3B0aW9ucy1zZXQnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdHJlZXNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIG9wdGlvbnMgKHNlZSBmZXRjaCBhYm92ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5sZW5ndGgpLmlzLmVxdWFsKDMpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25IdG1sID0gdHJlZXNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0wXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMVwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTJcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLm5vdC5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtM1wiJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQodHJlZXNlbGVjdCk7XG5cbiAgICAgICAgICAgIFxuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG5vIG9wdGlvbnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdHJlZS1zZWxlY3QnKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHNlbGVjdCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uc10nKTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucykuaXMuaW5zdGFuY2VvZihIVE1MRGl2RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmhhc0NoaWxkTm9kZXMoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgPG1vbnN0ZXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz0ne1xuICBcInVybFwiOiBcIm1vY2stZGF0YS5qc29uXCIsXG4gIFwibWFwcGluZ1wiOiB7XG4gICAgXCJ2YWx1ZVBhdGhcIjogXCJcXCR7Zmlyc3RfbmFtZX0gXFwke2xhc3RfbmFtZX1cIixcbiAgICBcImtleVBhdGhcIjogXCJpZFwiXG4gIH0sXG4gICAgICBcInR5cGVcIjpcImNoZWNrYm94XCJcblxufSc+PC9tb25zdGVyLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBCdXR0b247XG5cbmRlc2NyaWJlKCdCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vYnV0dG9uLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgQnV0dG9uID0gbVsnQnV0dG9uJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIGJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1idXR0b24nKSkuaXMuaW5zdGFuY2VvZihCdXR0b24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG5vIG9wdGlvbnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItYnV0dG9uJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChidXR0b24pO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGJ1dHRvbi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zKS5pcy5pbnN0YW5jZW9mKEhUTUxCdXR0b25FbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMTAwKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7IGNoYWlEb20gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7IGluaXRKU0RPTSB9IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICAgICAgIDxtb25zdGVyLXRvZ2dsZS1zd2l0Y2g+PC9tb25zdGVyLXRvZ2dsZS1zd2l0Y2g+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgVG9nZ2xlU3dpdGNoO1xuXG5kZXNjcmliZSgnVG9nZ2xlU3dpdGNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2gubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBUb2dnbGVTd2l0Y2ggPSBtWydUb2dnbGVTd2l0Y2gnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3IFRvZ2dsZVN3aXRjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItdG9nZ2xlLXN3aXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpKS5pcy5pbnN0YW5jZW9mKFRvZ2dsZVN3aXRjaCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd0b2dnbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgndG9nZ2xlIHRvIG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCB0b2dnbGVTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC5zZXRPcHRpb24oJ2FjdGlvbnMub24nLCAndHJ1ZScpO1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnNldE9wdGlvbignYWN0aW9ucy5vZmYnLCAnZmFsc2UnKTtcblxuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC52YWx1ZSkuaXMuZXF1YWwoJ29mZicpO1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5zdGF0ZSkuaXMuZXF1YWwoJ29mZicpO1xuXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudG9nZ2xlKCk7XG5cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2gudmFsdWUpLmlzLmVxdWFsKCdvbicpO1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5zdGF0ZSkuaXMuZXF1YWwoJ29uJyk7XG5cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC50b2dnbGUoKTtcblxuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC52YWx1ZSkuaXMuZXF1YWwoJ29mZicpO1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5zdGF0ZSkuaXMuZXF1YWwoJ29mZicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgndG9nZ2xlIG9uIHRvIG9mZicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgdG9nZ2xlU3dpdGNoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC50b2dnbGVPbigpO1xuXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnZhbHVlKS5pcy5lcXVhbCgnb24nKTtcbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guc3RhdGUpLmlzLmVxdWFsKCdvbicpO1xuXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudG9nZ2xlT2ZmKCk7XG5cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2gudmFsdWUpLmlzLmVxdWFsKCdvZmYnKTtcbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guc3RhdGUpLmlzLmVxdWFsKCdvZmYnKTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZGVzY3JpYmUgY3NzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY3NzIHRvZ2dsZScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogbmV3IENvbnRyb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3QgdG9nZ2xlU3dpdGNoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogc2V0IGluaXQgdmFsdWUgdG8gb25cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnZhbHVlID0gXCJvblwiO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGluc2VydCBET01cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykuYXBwZW5kQ2hpbGQodG9nZ2xlU3dpdGNoKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBleHBlY3QgdGhhdCBjbGFzc2VzLm9uIGlzIHNldCB0byBFbGVtZW50IFN3aXRjaFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBsZXQgaGFzQ2xhc3NBID0gdG9nZ2xlU3dpdGNoLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbW9uc3Rlci1yb2xlPVwic3dpdGNoXCJdJylbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKHRvZ2dsZVN3aXRjaC5nZXRPcHRpb24oJ2NsYXNzZXMub24nKSk7XG4gICAgICAgICAgICBleHBlY3QoaGFzQ2xhc3NBKS5pcy50cnVlO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICogc3dpdGNoIG9mZlxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC52YWx1ZSA9IFwib2ZmXCI7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVXBkYXRlciBwcm96ZXNzIHJ1bnMgaW4gc2V0VGltZW91dFxuICAgICAgICAgICAgICogc2VsZltpbnRlcm5hbFN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIoKTtcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgKiBleHBlY3QgdGhhdCBjbGFzc2VzLm9uIGlzIHJlbW92ZWQgZnJvbSBFbGVtZW50IFN3aXRjaFxuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgbGV0IGhhc0NsYXNzQiAgPSB0b2dnbGVTd2l0Y2guc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tb25zdGVyLXJvbGU9XCJzd2l0Y2hcIl0nKVswXS5jbGFzc0xpc3QuY29udGFpbnModG9nZ2xlU3dpdGNoLmdldE9wdGlvbignY2xhc3Nlcy5vbicpKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoaGFzQ2xhc3NCKS5pcy5mYWxzZTtcblxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICogZXhwZWN0IHRoYXQgY2xhc3Nlcy5vZmYgaXMgc2V0IHRvIEVsZW1lbnQgU3dpdGNoXG4gICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBsZXQgaGFzQ2xhc3NDICA9IHRvZ2dsZVN3aXRjaC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW1vbnN0ZXItcm9sZT1cInN3aXRjaFwiXScpWzBdLmNsYXNzTGlzdC5jb250YWlucyh0b2dnbGVTd2l0Y2guZ2V0T3B0aW9uKCdjbGFzc2VzLm9mZicpKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoaGFzQ2xhc3NDKS5pcy50cnVlOyAgICBcblxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMCk7XG5cbiAgICAgICAgfSlcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2Rlc2NyaWJlIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCd0aGUgZGVmYXVsdCB2YWx1ZSBpcyBvZmYnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogbmV3IENvbnRyb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbGV0IHRvZ2dsZVN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHRoZSBzd2l0Y2ggaXMgb2ZmIGFuZCBwcm92aWRlcyB0aGUgdmFsdWUgZm9yIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnZhbHVlKS5pcy5lcXVhbCgnb2ZmJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogdGhlIHN3aXRjaCBpcyBvZmZcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5zdGF0ZSkuaXMuZXF1YWwoJ29mZicpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdpbmNvcnJlY3QgdmFsdWVzIGFyZSBub3QgYWNjZXB0ZWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCB0b2dnbGVTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBkZWZpbmUgdGhlIHZhbHVlcyBmb3Igb24gYW5kIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2guc2V0T3B0aW9uKCd2YWx1ZXMub24nLCAndHJ1ZScpO1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnNldE9wdGlvbigndmFsdWVzLm9mZicsICdmYWxzZScpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoaXMgdmFsdWUgaXMgbm90IFwidHJ1ZVwiIGFuZCBub3QgXCJmYWxzZVwiXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC52YWx1ZSA9IFwidGVzdFwiO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHRoZSBzd2l0Y2ggaXMgb2ZmIGFuZCBwcm92aWRlcyB0aGUgdmFsdWUgZm9yIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnZhbHVlKS5pcy5lcXVhbCgnZmFsc2UnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiB0aGUgc3dpdGNoIGlzIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb2ZmJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgKiBkaXNhYmxlZCBhdHRyaWJ1dGUgaXMgb25seSBzZXQgd2hlbiB0aGUgZWxlbWVudCBoYXMgYmVlbiBtb3VudGVkIGluIHRoZSBET01cbiAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkuaXMuZmFsc2U7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogaW5zZXJ0IERPTVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKS5hcHBlbmRDaGlsZCh0b2dnbGVTd2l0Y2gpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICogbm93IHRoZSBlbGVtZW50IGlzIGRpc2FibGVkXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpLmlzLnRydWU7XG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnY29ycmVjdCB2YWx1ZXMgYXJlIGFjY2VwdGVkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCB0b2dnbGVTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBkZWZpbmUgdGhlIHZhbHVlcyBmb3Igb24gYW5kIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2guc2V0T3B0aW9uKCd2YWx1ZXMub24nLCAndHJ1ZScpO1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnNldE9wdGlvbigndmFsdWVzLm9mZicsICdmYWxzZScpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoaXMgdmFsdWUgaXMgY29ycmVjdFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudmFsdWUgPSBcInRydWVcIjtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiB0aGUgc3dpdGNoIGlzIG9uIGFuZCBwcm92aWRlcyB0aGUgdmFsdWUgZm9yIG9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2gudmFsdWUpLmlzLmVxdWFsKCd0cnVlJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogdGhlIHN3aXRjaCBpcyBvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb24nKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAqIGluc2VydCBET01cbiAgICAgICAgICAgICovXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKS5hcHBlbmRDaGlsZCh0b2dnbGVTd2l0Y2gpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGRpc2FibGVkIGF0dHJpYnV0ZSBpcyBub3Qgc2V0XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKS5pcy5mYWxzZTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cblxufSk7IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uLW1vY2subWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbmxldCBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXI7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmRlc2NyaWJlKCdUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIC8vIGpzZG9tLXRlc3RpbmctbW9ja3MgbmVlZCBqZXN0XG4gICAgbGV0IFRlbXBsYXRlLCB2aWV3cG9ydCwgbW9ja1ZpZXdwb3J0O1xuXG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIucmVzdG9yZSgpO1xuICAgIH0pXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIgPSBzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9jaygpO1xuXG4gICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGUubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9IG1bJ1RlbXBsYXRlJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW9uc3Rlci10ZW1wbGF0ZT48L21vbnN0ZXItdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdGVtcGxhdGUnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZW1wbGF0ZScpKS5pcy5pbnN0YW5jZW9mKFRlbXBsYXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbW9ja3M7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZW1wbGF0ZScpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQodGVtcGxhdGUpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10ZW1wbGF0ZScpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnbG9hZCBjb250ZW50JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcywgZmV0Y2hSZWZlcmVuY2UsIGludGVyc2VjdGlvbk9ic2VydmVyO1xuICAgICAgICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0aGlzLWNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gbmV3IE1hcDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvazp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOjIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0MikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlMignaGVsbG8gd29ybGQhJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2FkIGNvbnRlbnQgZnJvbSB1cmwnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVtcGxhdGUnKTtcbiAgICAgICAgICAgIHRlbXBsYXRlLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXVybCcsICdodHRwOi8vbG9jYWxob3N0LycpXG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgICAgIHRlbXBsYXRlLmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItZmV0Y2hlZCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRlbXBsYXRlJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBlbGVtZW50LnNoYWRvd1Jvb3Q7XG5cblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc2hhZG93Um9vdCkuY29udGFpbi5odG1sKCdoZWxsbyB3b3JsZCcpO1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIuZ2V0SW5zdGFuY2UoKS5lbnRlck5vZGUoKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cblxuXG5sZXQgTWVzc2FnZTtcblxuZGVzY3JpYmUoJ01lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgTWVzc2FnZSA9IG1bJ01lc3NhZ2UnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIE1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW5vdGlmeS1tZXNzYWdlJyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sKS5pcy5pbnN0YW5jZW9mKE1lc3NhZ2UpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KVxuIiwgIi8vaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG4vLyBjb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbi8vXG4vLyBsZXQgaHRtbDEgPSBgXG4vLyAgICAgPGRpdiBpZD1cInRlc3QxXCI+XG4vLyAgICAgPC9kaXY+XG4vLyBgO1xuLy9cbi8vIC8vIGxhbmd1YWdlPUhUTUxcbi8vIGxldCBodG1sMiA9IGBcbi8vICAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbi8vICAgICAgICAgPG1vbnN0ZXItbm90aWZ5IGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7fSc+PC9tb25zdGVyLW5vdGl0Znk+XG4vLyAgICAgPC9kaXY+XG4vLyBgO1xuXG5sZXQgTm90aWZ5LCBmZXRjaFJlZmVyZW5jZTtcblxuZGVzY3JpYmUoJ05vdGlmeScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBOb3RpZnkgPSBtWydOb3RpZnknXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIG5vdGlmeScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5JykpLmlzLmluc3RhbmNlb2YoTm90aWZ5KTtcbiAgICAgICAgICAgIFxuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG1lc3NhZ2VzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBub3RpZnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW5vdGlmeScpO1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgbm90aWZ5LnB1c2goXCJ0aGlzIGlzIG1lc3NhZ2UgXCIgKyBpKyspO1xuICAgICAgICAgICAgbm90aWZ5LnB1c2goXCJ0aGlzIGlzIG1lc3NhZ2UgXCIgKyBpKyspO1xuICAgICAgICAgICAgbm90aWZ5LnB1c2goXCJ0aGlzIGlzIG1lc3NhZ2UgXCIgKyBpKyspO1xuXG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbLCBtdXRhdGlvbl0gb2YgbXV0YXRpb25zLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXV0YXRpb24uYWRkZWROb2Rlc1swXS50YWdOYW1lID09PSAnTU9OU1RFUi1OT1RJRlknKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0aW9ub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBub3RpZnkuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdtb25zdGVyLW5vdGlmeS1tZXNzYWdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgb3B0aW9ucyAoc2VlIGZldGNoIGFib3ZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QobWVzc2FnZXMubGVuZ3RoKS5pcy5lcXVhbCgzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBtdXRhdGlvbm9ic2VydmVyLm9ic2VydmUobW9ja3MsIHtjaGlsZExpc3Q6IHRydWV9KTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKG5vdGlmeSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KVxuIiwgImltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuZGVzY3JpYmUoJ0hvc3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgaG9zdDtcbiAgICBsZXQgaHRtbDEgPSBgXG4gICAgICAgIDxtb25zdGVyLWhvc3QgaWQ9XCJob3N0MVwiPjwvbW9uc3Rlci1ob3N0PlxuICAgIGA7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L2hvc3QubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBob3N0ID0gbVsnSG9zdCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgIC8vIHJlZ2lzdGVyIG93biBkYXRhc291cmNlLCBhZnRlciB0aGUgZm9ybSBpcyBsb2FkZWRcbiAgICAgICAgLy8gYmVjYXVzZSBpbiB0aGUgd2lsZCwgdGhlIGZvcm0gaXMgcGFyc2VkIGJlZm9yZSB0aGUgZGF0YXNvdXJjZSBpcyByZWdpc3RlcmVkXG4gICAgICAgIC8vZm9ybS5yZWdpc3RlckRhdGFzb3VyY2UoJ3Rlc3QzJywgdGVzdDNEYXRhc291cmNlKTtcblxuXG4gICAgfSk7ICAgIFxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd0ZXN0LWtleScpXG4gICAgfSlcbiAgICBcbiAgICBcbiAgICBpdCgnc2hvdWxkIHJ1bicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ob3N0Jyk7XG4gICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGZvcm1Db250cm9sKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWhvc3QgZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2woQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rKVwiPjwvbW9uc3Rlci1ob3N0PicpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSwgMClcblxuXG5cblxuXG4gICAgfSk7XG5cblxufSk7XG4iLCAiaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5cblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbmRlc2NyaWJlKCdPdmVybGF5JywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGhvc3Q7XG4gICAgbGV0IGh0bWwxID0gYFxuICAgICAgICA8bW9uc3Rlci1vdmVybGF5IGlkPVwiZGV0YWlsczFcIj48L21vbnN0ZXItb3ZlcmxheT5cbiAgICBgO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9vdmVybGF5Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgaG9zdCA9IG1bJ0RldGFpbHMnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICB9KTsgICAgXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuICAgIFxuICAgIFxuICAgIGl0KCdzaG91bGQgcnVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW92ZXJsYXknKTtcbiAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoZm9ybUNvbnRyb2wpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykpLmNvbnRhaW4uaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJyA8bW9uc3Rlci1vdmVybGF5IGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rPVwiU3ltYm9sKEBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBvcHRpb25zLXVwZGF0ZXItbGluaylcIj48L21vbnN0ZXItb3ZlcmxheT4nKVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0sIDApXG5cbiAgICB9KTtcblxufSk7XG4iLCAiLy8gSW1wb3J0IHRoZSByZXF1aXJlZCBsaWJyYXJpZXNcbmltcG9ydCB7IGV4cGVjdCB9IGZyb20gJ2NoYWknO1xuLy9pbXBvcnQgeyBKU0RPTSB9IGZyb20gJ2pzZG9tJztcbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IH0gZnJvbSAnLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC91dGlsLm1qcyc7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbi8vIENyZWF0ZSBhIEpTRE9NIGluc3RhbmNlIHRvIHNpbXVsYXRlIHRoZSBicm93c2VyIGVudmlyb25tZW50XG4vL2NvbnN0IGRvbSA9IG5ldyBKU0RPTSgpO1xuXG5cbi8vIFRlc3Qgc3VpdGUgZm9yIHRoZSBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleSBmdW5jdGlvblxuZGVzY3JpYmUoJ2dlbmVyYXRlVW5pcXVlQ29uZmlnS2V5JywgKCkgPT4ge1xuXG4gICAgLy9sZXQgb3JpZ2luYWxXaW5kb3c7XG5cbiAgICAvLyBiZWZvcmUoKCkgPT4ge1xuICAgIC8vICAgICAvLyBTdG9yZSB0aGUgb3JpZ2luYWwgd2luZG93IG9iamVjdFxuICAgIC8vICAgICBvcmlnaW5hbFdpbmRvdyA9IGdsb2JhbFRoaXMud2luZG93O1xuICAgIC8vXG4gICAgLy8gICAgIC8vIENyZWF0ZSBhIEpTRE9NIGluc3RhbmNlIHRvIHNpbXVsYXRlIHRoZSBicm93c2VyIGVudmlyb25tZW50XG4gICAgLy8gICAgIGNvbnN0IGRvbSA9IG5ldyBKU0RPTSgpO1xuICAgIC8vICAgICBnbG9iYWxUaGlzLndpbmRvdyA9IGRvbS53aW5kb3c7XG4gICAgLy8gfSk7XG5cblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSk7XG4gICAgfSkgICAgXG5cbiAgICAvLyAuLi4gKHNhbWUgdGVzdCBjYXNlcyBhcyBiZWZvcmUpXG5cbiAgICBhZnRlcigoKSA9PiB7XG4gICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHdpbmRvdyBvYmplY3RcbiAgICAgICAvLyBnbG9iYWxUaGlzLndpbmRvdyA9IG9yaWdpbmFsV2luZG93O1xuICAgIH0pOyAgICBcbiAgICBcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgdW5pcXVlIGtleSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gJ015Q29tcG9uZW50JztcbiAgICAgICAgY29uc3QgaWQgPSAnMTIzJztcbiAgICAgICAgY29uc3QgcHJlZml4ID0gJ215UHJlZml4JztcblxuICAgICAgICBjb25zdCB1bmlxdWVLZXkgPSBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleShjb21wb25lbnROYW1lLCBpZCwgcHJlZml4KTtcblxuICAgICAgICAvLyBFbnN1cmUgdGhlIHVuaXF1ZSBrZXkgY29udGFpbnMgdGhlIGdpdmVuIHBhcmFtZXRlcnMgYW5kIGZvbGxvd3MgdGhlIGV4cGVjdGVkIGZvcm1hdFxuICAgICAgICBleHBlY3QodW5pcXVlS2V5KS50by5pbmNsdWRlKHByZWZpeCk7XG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLmluY2x1ZGUoY29tcG9uZW50TmFtZSk7XG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLmluY2x1ZGUoaWQpO1xuICAgICAgICBleHBlY3QodW5pcXVlS2V5KS50by5tYXRjaCgvXlthLXpBLVowLTlfXSskLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlcGxhY2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBzcGFjZXMgd2l0aCB1bmRlcnNjb3JlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9ICdNeSRDb21wb25lbnQnO1xuICAgICAgICBjb25zdCBpZCA9ICcxMiMzJztcbiAgICAgICAgY29uc3QgcHJlZml4ID0gJ215IFByZWZpeCc7XG5cbiAgICAgICAgY29uc3QgdW5pcXVlS2V5ID0gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkoY29tcG9uZW50TmFtZSwgaWQsIHByZWZpeCk7XG5cbiAgICAgICAgLy8gRW5zdXJlIHRoZSB1bmlxdWUga2V5IGRvZXMgbm90IGNvbnRhaW4gYW55IHNwZWNpYWwgY2hhcmFjdGVycyBvciBzcGFjZXNcbiAgICAgICAgZXhwZWN0KHVuaXF1ZUtleSkudG8ubWF0Y2goL15bYS16QS1aMC05X10rJC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpbmNsdWRlIHRoZSBicm93c2VyIGxvY2F0aW9uIHdpdGhvdXQgcGFyYW1ldGVycycsICgpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9ICdNeUNvbXBvbmVudCc7XG4gICAgICAgIGNvbnN0IGlkID0gJzEyMyc7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9ICdteVByZWZpeCc7XG5cbiAgICAgICAgY29uc3QgdW5pcXVlS2V5ID0gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkoY29tcG9uZW50TmFtZSwgaWQsIHByZWZpeCk7XG5cbiAgICAgICAgLy8gRW5zdXJlIHRoZSB1bmlxdWUga2V5IGNvbnRhaW5zIHRoZSBicm93c2VyIGxvY2F0aW9uIHdpdGhvdXQgcGFyYW1ldGVyc1xuICAgICAgICBjb25zdCB1cmxXaXRob3V0UGFyYW1zID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkVXJsID0gdXJsV2l0aG91dFBhcmFtcy5yZXBsYWNlKC9bXlxcd1xcc10vZ2ksICdfJykucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xuICAgICAgICBleHBlY3QodW5pcXVlS2V5KS50by5pbmNsdWRlKHNhbml0aXplZFVybCk7XG4gICAgfSk7XG5cbiAgICBcbiAgICBcbn0pIiwgImltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbmRlc2NyaWJlKCdEZXRhaWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGhvc3Q7XG4gICAgbGV0IGh0bWwxID0gYFxuICAgICAgICA8bW9uc3Rlci1kZXRhaWxzIGlkPVwiZGV0YWlsczFcIj48L21vbnN0ZXItZGV0YWlscz5cbiAgICBgO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9kZXRhaWxzLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgaG9zdCA9IG1bJ0RldGFpbHMnXTtcblxuICAgICAgICAgICAgICAgIGlmKCFnbG9iYWwuUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLlJlc2l6ZU9ic2VydmVyID0gUmVzaXplT2JzZXJ2ZXJNb2NrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICBcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICB9KTsgICAgXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuICAgIFxuICAgIFxuICAgIGl0KCdzaG91bGQgcnVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWRldGFpbHMnKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICc8bW9uc3Rlci1kZXRhaWxzIGlkPVwiZGV0YWlsczFcIiBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmspXCIgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbD1cIkRldGFpbHNcIj48L21vbnN0ZXItZGV0YWlscz4nKVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0sIDApXG5cbiAgICB9KTtcblxufSk7XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdGb3JtYXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAvLyBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy80N1xuICAgIGRlc2NyaWJlKCdleGFtcGxlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmZjIGV4YW1wbGUgc2hvdWxkIHJ1bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKHtcblxuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzogXCJIZWxsb1wiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6IFwiV29ybGRcIixcbiAgICAgICAgICAgICAgICAgICAgZTogMVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSkuZm9ybWF0KFwiJHthLmIuY30gJHthLmQgfCB0b3VwcGVyfSFcIikpLnRvLmJlLmVxdWFsKCdIZWxsbyBXT1JMRCEnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnZG9jIGV4YW1wbGUgc2hvdWxkIHJ1bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKHtcblxuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzogXCJIZWxsb1wiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6IFwid29ybGRcIixcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pLmZvcm1hdChcIiR7YS5iLmN9ICR7YS5kIHwgdWNmaXJzdH0hXCIpKS50by5iZS5lcXVhbCgnSGVsbG8gV29ybGQhJyk7XG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnc2V0IG1hcmtlcigpJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycjYSMnLCAnIycsIHVuZGVmaW5lZCwgJ3Rlc3QnXSxcbiAgICAgICAgICAgIFsne2F9JywgJ3snLCAnfScsICd0ZXN0J10sXG4gICAgICAgICAgICBbJ2kxOG57YX0nLCAnaTE4bnsnLCAnfScsICd0ZXN0J10sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdmb3JtYXQgJyArIGEgKyAnIHdpdGggbWFya2VyICcgKyBiICsgJyBhbmQgJyArIGMgKyAnIHNob3VsZCByZXR1cm4gICcgKyBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGb3JtYXR0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgfSkuc2V0TWFya2VyKGIsIGMpLmZvcm1hdChhKVxuICAgICAgICAgICAgICAgICkudG8uZXF1YWwoZClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdleGFtcGxlcygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnJHthIHwgdG9qc29ufScsIFwie1xcXCJiXFxcIjp7XFxcImNcXFwiOlxcXCJIZWxsb1xcXCJ9LFxcXCJkXFxcIjpcXFwiV29ybGRcXFwiLFxcXCJlXFxcIjoxfVwiXSxcbiAgICAgICAgICAgIFsnY2xpY2sgJHthLmR9IHRpbWVzJywgXCJjbGljayBXb3JsZCB0aW1lc1wiXSxcbiAgICAgICAgICAgIFsnICR7YS5iLmN9ICcsICcgSGVsbG8gJ10sXG4gICAgICAgICAgICBbJyAke2EuYi5jfScsICcgSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30gJywgJ0hlbGxvICddLFxuICAgICAgICAgICAgWycke2EuYi5jfScsICdIZWxsbyddLFxuICAgICAgICAgICAgWycke2EuYi5jfSR7YS5iLmN9JywgJ0hlbGxvSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30gJHthLmIuY30nLCAnSGVsbG8gSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30gJHthLmIuY30gJywgJ0hlbGxvIEhlbGxvICddLFxuICAgICAgICAgICAgWycgJHthLmIuY30gJHthLmIuY30gJywgJyBIZWxsbyBIZWxsbyAnXSxcbiAgICAgICAgICAgIFsnICR7YS5iLmN9ICR7YS5kfSAnLCAnIEhlbGxvIFdvcmxkICddLFxuICAgICAgICAgICAgWycgJHthLmIuY30gJHthLmIuYyB8IHRvdXBwZXIgfCBsZW5ndGggfCB0b3N0cmluZ30gJywgJyBIZWxsbyA1ICddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2Zvcm1hdCAnICsgYSArICcgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiSGVsbG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6IFwiV29ybGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGU6IDFcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIob2JqKS5mb3JtYXQoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdNYXJrZXIgaW4gbWFya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB0ZXh0ID0gJyR7bXlrZXkke3N1YmtleX19JztcbiAgICAgICAgbGV0IGV4cGVjdGVkID0gJzEnO1xuXG4gICAgICAgIGl0KCdmb3JtYXQgJyArIHRleHQgKyAnIHNob3VsZCAnICsgZXhwZWN0ZWQsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBteWtleTI6IFwiMVwiLFxuICAgICAgICAgICAgICAgIHN1YmtleTogXCIyXCJcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKG9iaikuZm9ybWF0KHRleHQpKS5pcy5lcXVhbChleHBlY3RlZClcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2V0UGFyYW1ldGVyQ2hhcnMoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2V0UGFyYW1ldGVyQ2hhcnMoKSBzaG91bGQgcmV0dXJuIEluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIoe30pLnNldFBhcmFtZXRlckNoYXJzKCdhJywgJ2InKSkuaXMuaW5zdGFuY2VvZihGb3JtYXR0ZXIpO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ3dpdGggY2FsbGJhY2tzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdhZGQgY2FsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtcbiAgICAgICAgICAgICAgICB4OiAnMSdcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgbXk6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiIVwiICsgdmFsdWUgKyBcIiFcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChmb3JtYXR0ZXIuZm9ybWF0KCcke3ggfCBjYWxsOm15fScpKS5pcy5lcXVhbCgnITEhJyk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ01hcmtlciBpbiBtYXJrZXIgd2l0aCBwYXJhbWV0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHRleHQgPSAnJHtteWtleTo6bXlrZXk9JHtzdWJrZXl9fSc7XG4gICAgICAgIGxldCBleHBlY3RlZCA9ICcyJztcblxuICAgICAgICBpdCgnZm9ybWF0ICcgKyB0ZXh0ICsgJyBzaG91bGQgJyArIGV4cGVjdGVkLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgc3Via2V5OiBcIjJcIlxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIob2JqKS5mb3JtYXQodGV4dCkpLmlzLmVxdWFsKGV4cGVjdGVkKVxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2V4Y2VwdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycke2EuYi54fScsIFR5cGVFcnJvcl0sXG4gICAgICAgICAgICBbJyR7YS5iLmQgfCB0b3VwcGVyIHwgbGVuZ3RofScsIFR5cGVFcnJvcl0sXG4gICAgICAgICAgICBbJyR7YS5iLmR9JywgVHlwZUVycm9yXSwgIC8vIGEuYi5kIHJldHVybiB1bmRlZmluZWQgYnkgcGF0aGZpbmRlciBcbiAgICAgICAgICAgIFsnJHthLmIuZCB8IHRvbG93ZXJ9JywgVHlwZUVycm9yXSwgIC8vIGEuYi5kIHJldHVybiB1bmRlZmluZWQgYnkgcGF0aGZpbmRlciBcbiAgICAgICAgICAgIFsnJHthIHwgfScsIEVycm9yXSxcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdmb3JtYXQgJyArIGEgKyAnIHNob3VsZCB0aHJvdyAnICsgdHlwZW9mIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybWF0dGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwidGVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogNFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuZm9ybWF0KGEpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLnRvLnRocm93KGIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuXG5cbiAgICBkZXNjcmliZSgnRm9ybWF0dGVyJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIGJhc2ljIHN0cmluZyB3aXRoIG9iamVjdCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtuYW1lOiAnSm9obicsIGFnZTogMzB9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdHRlci5mb3JtYXQoJ015IG5hbWUgaXMgJHtuYW1lfSBhbmQgSSBhbSAke2FnZSB8IHRvc3RyaW5nfSB5ZWFycyBvbGQuJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCdNeSBuYW1lIGlzIEpvaG4gYW5kIEkgYW0gMzAgeWVhcnMgb2xkLicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIHN0cmluZyB3aXRoIG5lc3RlZCBtYXJrZXJzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9ICcke215a2V5JHtzdWJrZXl9fSc7XG4gICAgICAgICAgICBjb25zdCBvYmogPSB7bXlrZXkyOiAnMScsIHN1YmtleTogJzInfTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIob2JqKTtcblxuICAgICAgICAgICAgZXhwZWN0KGZvcm1hdHRlci5mb3JtYXQodGV4dCkpLnRvLmVxdWFsKCcxJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZm9ybWF0IGEgc3RyaW5nIHdpdGggY3VzdG9tIG1hcmtlcnMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtuYW1lOiAnSm9obicsIGFnZTogMzB9KTtcbiAgICAgICAgICAgIGZvcm1hdHRlci5zZXRNYXJrZXIoJ1snLCAnXScpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0dGVyLmZvcm1hdCgnTXkgbmFtZSBpcyBbbmFtZV0gYW5kIEkgYW0gW2FnZSB8IHRvc3RyaW5nXSB5ZWFycyBvbGQuJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCdNeSBuYW1lIGlzIEpvaG4gYW5kIEkgYW0gMzAgeWVhcnMgb2xkLicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIHN0cmluZyB1c2luZyBjYWxsYmFjaycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoe3g6ICcxJ30sIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgcXVvdGU6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcIicgKyB2YWx1ZSArICdcIic7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBleHBlY3QoZm9ybWF0dGVyLmZvcm1hdCgnJHt4IHwgY2FsbDpxdW90ZX0nKSkudG8uZXF1YWwoJ1wiMVwiJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZm9ybWF0IGEgc3RyaW5nIHdpdGggcGFyYW1ldGVycycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6ICdIZWxsbycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6ICd3b3JsZCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKG9iaik7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXR0ZXIuZm9ybWF0KCcke2EuYi5jfSAke2EuZCB8IHVjZmlyc3R9IScpO1xuXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnSGVsbG8gV29ybGQhJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhIHRvbyBkZWVwIG5lc3RpbmcgZXJyb3InLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtuYW1lOiAnSm9obid9KTtcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZFRleHQgPSAnJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lfX19fX19fX19fX19fX19fX19JztcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBmb3JtYXR0ZXIuZm9ybWF0KG5lc3RlZFRleHQpKS50by50aHJvdygnc3ludGF4IGVycm9yIGluIGZvcm1hdHRlciB0ZW1wbGF0ZScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGEgdG9vIGRlZXAgbmVzdGluZyBlcnJvcicsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0T2JqID0ge1xuICAgICAgICAgICAgICAgIG15a2V5OiAnJHtteWtleX0nLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihpbnB1dE9iaik7XG5cbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSAnJHtteWtleX0nO1xuICAgICAgICAgICAgbGV0IGZvcm1hdHRlZFRleHQgPSB0ZXh0O1xuXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBzdHJpbmcgd2l0aCAyMSBsZXZlbHMgb2YgbmVzdGluZ1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkVGV4dCA9ICckeycgKyBmb3JtYXR0ZWRUZXh0ICsgJ30nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZm9ybWF0dGVyLmZvcm1hdChmb3JtYXR0ZWRUZXh0KSkudG8udGhyb3coJ3RvbyBkZWVwIG5lc3RpbmcnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgIH0pO1xuXG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQgeyBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24gfTtcblxuLyoqXG4gKiBUaGUgYGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbigpYCBmdW5jdGlvbiBpcyBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvblxuICogb2YgYSBjb21wYXJpc29uIGV4cHJlc3Npb24gYmFzZWQgb24gYSByYW5nZSBvZiB2YWx1ZXMuIEl0IHRha2VzIHRocmVlIGFyZ3VtZW50czpcbiAqXG4gKiAtIGV4cHJlc3Npb24gKHJlcXVpcmVkKTogYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSByYW5nZSBvZiB2YWx1ZXMgaW4gdGhlIGZvcm1hdCBvZiBzdGFydDEtZW5kMSxzdGFydDItZW5kMix2YWx1ZTMuLi4uXG4gKiAtIHZhbHVlTmFtZSAocmVxdWlyZWQpOiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIHZhbHVlIHRoYXQgaXMgYmVpbmcgY29tcGFyZWQgdG8gdGhlIHJhbmdlIG9mIHZhbHVlcy5cbiAqIC0gb3B0aW9ucyAob3B0aW9uYWwpOiBhbiBvYmplY3QgY29udGFpbmluZyBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSBjb21wYXJpc29uIGV4cHJlc3Npb24uXG4gKlxuICogVGhlIGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbigpIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbXBhcmlzb24gZXhwcmVzc2lvbi5cbiAqXG4gKiAjIyBPcHRpb25zXG4gKiBUaGUgb3B0aW9uIHBhcmFtZXRlciBpcyBhbiBvYmplY3QgdGhhdCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogdXJsRW5jb2RlIChib29sZWFuLCBkZWZhdWx0OiBmYWxzZSk6IGlmIHNldCB0byB0cnVlLCBVUkwgZW5jb2RlcyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuXG4gKiBhbmRPcCAoc3RyaW5nLCBkZWZhdWx0OiAnJiYnKTogdGhlIGxvZ2ljYWwgQU5EIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqIG9yT3AgKHN0cmluZywgZGVmYXVsdDogJ3x8Jyk6IHRoZSBsb2dpY2FsIE9SIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqIGVxT3AgKHN0cmluZywgZGVmYXVsdDogJz09Jyk6IHRoZSBlcXVhbGl0eSBvcGVyYXRvciB0byB1c2UgaW4gdGhlIGV4cHJlc3Npb24uXG4gKiBnZU9wIChzdHJpbmcsIGRlZmF1bHQ6ICc+PScpOiB0aGUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqIGxlT3AgKHN0cmluZywgZGVmYXVsdDogJzw9Jyk6IHRoZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gb3BlcmF0b3IgdG8gdXNlIGluIHRoZSBleHByZXNzaW9uLlxuICpcbiAqIEV4YW1wbGVzXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogY29uc3QgZXhwcmVzc2lvbiA9ICcwLTEwLDIwLTMwJztcbiAqIGNvbnN0IHZhbHVlTmFtZSA9ICdhZ2UnO1xuICogY29uc3Qgb3B0aW9ucyA9IHsgdXJsRW5jb2RlOiB0cnVlLCBhbmRPcDogJ2FuZCcsIG9yT3A6ICdvcicsIGVxT3A6ICc9JywgZ2VPcDogJz49JywgbGVPcDogJzw9JyB9O1xuICogY29uc3QgY29tcGFyaXNvbkV4cHJlc3Npb24gPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCBvcHRpb25zKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhjb21wYXJpc29uRXhwcmVzc2lvbik7IC8vIGFnZSUzRSUzRDAlMjBhbmQlMjBhZ2UlM0MlM0QxMCUyMG9yJTIwYWdlJTNFJTNEMjAlMjBhbmQlMjBhZ2UlM0MlM0QzMFxuICogYGBgXG4gKlxuICogSW4gdGhpcyBleGFtcGxlLCB0aGUgZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKCkgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21wYXJpc29uXG4gKiBleHByZXNzaW9uIGZvciB0aGUgZXhwcmVzc2lvbiBhbmQgdmFsdWVOYW1lIHBhcmFtZXRlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuIFRoZSByZXN1bHRpbmcgY29tcGFyaXNvblxuICogZXhwcmVzc2lvbiBpcyAnYWdlPj0wIGFuZCBhZ2U8PTEwIG9yIGFnZT49MjAgYW5kIGFnZTw9MzAnLCBVUkwgZW5jb2RlZCBhY2NvcmRpbmcgdG8gdGhlIHVybEVuY29kZSBvcHRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gLSBUaGUgc3RyaW5nIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgdGhlIGNvbXBhcmlzb24gZm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gVGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnVybEVuY29kZT1mYWxzZV0gLSBXaGV0aGVyIHRvIGVuY29kZSBjb21wYXJpc29uIG9wZXJhdG9ycyBmb3IgdXNlIGluIGEgVVJMLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuZE9wPScmJiddIC0gVGhlIGxvZ2ljYWwgQU5EIG9wZXJhdG9yIHRvIHVzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5vck9wPSd8fCddIC0gVGhlIGxvZ2ljYWwgT1Igb3BlcmF0b3IgdG8gdXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmVxT3A9Jz09J10gLSBUaGUgY29tcGFyaXNvbiBvcGVyYXRvciBmb3IgZXF1YWxpdHkgdG8gdXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmdlT3A9Jz49J10gLSBUaGUgY29tcGFyaXNvbiBvcGVyYXRvciBmb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRvIHVzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sZU9wPSc8PSddIC0gVGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgZm9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0byB1c2UuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBnZW5lcmF0ZWQgY29tcGFyaXNvbiBleHByZXNzaW9uLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBpbnB1dCBpcyBpbnZhbGlkLlxuICogQHN1bW1hcnkgR2VuZXJhdGVzIGEgY29tcGFyaXNvbiBleHByZXNzaW9uIGJhc2VkIG9uIGEgcmFuZ2Ugb2YgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oXG5cdGV4cHJlc3Npb24sXG5cdHZhbHVlTmFtZSxcblx0b3B0aW9ucyA9IHt9LFxuKSB7XG5cdGNvbnN0IHtcblx0XHR1cmxFbmNvZGUgPSBmYWxzZSxcblx0XHRhbmRPcCA9IFwiJiZcIixcblx0XHRvck9wID0gXCJ8fFwiLFxuXHRcdGVxT3AgPSBcIj09XCIsXG5cdFx0Z2VPcCA9IFwiPj1cIixcblx0XHRsZU9wID0gXCI8PVwiLFxuXHR9ID0gb3B0aW9ucztcblx0Y29uc3QgcmFuZ2VzID0gZXhwcmVzc2lvbi5zcGxpdChcIixcIik7XG5cdGxldCBjb21wYXJpc29uID0gXCJcIjtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCByYW5nZSA9IHJhbmdlc1tpXS50cmltKCk7XG5cdFx0aWYgKHJhbmdlID09PSBcIlwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmFuZ2UgJyR7cmFuZ2V9J2ApO1xuXHRcdH0gZWxzZSBpZiAocmFuZ2UuaW5jbHVkZXMoXCItXCIpKSB7XG5cdFx0XHRjb25zdCBbc3RhcnQsIGVuZF0gPSByYW5nZVxuXHRcdFx0XHQuc3BsaXQoXCItXCIpXG5cdFx0XHRcdC5tYXAoKHMpID0+IChzID09PSBcIlwiID8gbnVsbCA6IHBhcnNlRmxvYXQocykpKTtcblx0XHRcdGlmICgoc3RhcnQgIT09IG51bGwgJiYgaXNOYU4oc3RhcnQpKSB8fCAoZW5kICE9PSBudWxsICYmIGlzTmFOKGVuZCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWx1ZSBpbiByYW5nZSAnJHtyYW5nZX0nYCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc3RhcnQgIT09IG51bGwgJiYgZW5kICE9PSBudWxsICYmIHN0YXJ0ID4gZW5kKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByYW5nZSAnJHtyYW5nZX0nYCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjb21wU3RhcnQgPVxuXHRcdFx0XHRzdGFydCAhPT0gbnVsbFxuXHRcdFx0XHRcdD8gYCR7dmFsdWVOYW1lfSR7dXJsRW5jb2RlID8gZW5jb2RlVVJJQ29tcG9uZW50KGdlT3ApIDogZ2VPcH0ke3N0YXJ0fWBcblx0XHRcdFx0XHQ6IFwiXCI7XG5cdFx0XHRjb25zdCBjb21wRW5kID1cblx0XHRcdFx0ZW5kICE9PSBudWxsXG5cdFx0XHRcdFx0PyBgJHt2YWx1ZU5hbWV9JHt1cmxFbmNvZGUgPyBlbmNvZGVVUklDb21wb25lbnQobGVPcCkgOiBsZU9wfSR7ZW5kfWBcblx0XHRcdFx0XHQ6IFwiXCI7XG5cdFx0XHRjb25zdCBjb21wUmFuZ2UgPSBgJHtjb21wU3RhcnR9JHtcblx0XHRcdFx0Y29tcFN0YXJ0ICYmIGNvbXBFbmQgPyBgICR7YW5kT3B9IGAgOiBcIlwiXG5cdFx0XHR9JHtjb21wRW5kfWA7XG5cdFx0XHRjb21wYXJpc29uICs9IHJhbmdlcy5sZW5ndGggPiAxID8gYCgke2NvbXBSYW5nZX0pYCA6IGNvbXBSYW5nZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KHJhbmdlKTtcblx0XHRcdGlmIChpc05hTih2YWx1ZSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZhbHVlICcke3JhbmdlfSdgKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbXBWYWx1ZSA9IGAke3ZhbHVlTmFtZX0ke1xuXHRcdFx0XHR1cmxFbmNvZGUgPyBlbmNvZGVVUklDb21wb25lbnQoZXFPcCkgOiBlcU9wXG5cdFx0XHR9JHt2YWx1ZX1gO1xuXHRcdFx0Y29tcGFyaXNvbiArPSByYW5nZXMubGVuZ3RoID4gMSA/IGAoJHtjb21wVmFsdWV9KWAgOiBjb21wVmFsdWU7XG5cdFx0fVxuXHRcdGlmIChpIDwgcmFuZ2VzLmxlbmd0aCAtIDEpIHtcblx0XHRcdGNvbXBhcmlzb24gKz0gYCAke29yT3B9IGA7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb21wYXJpc29uO1xufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2dlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90ZXh0L3V0aWwubWpzXCI7XG5cbmRlc2NyaWJlKCdnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiBmb3Igc2luZ2xlIHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLDMsNSc7XG4gICAgICAgIGNvbnN0IHZhbHVlTmFtZSA9ICd4JztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCcoeD09MSkgfHwgKHg9PTMpIHx8ICh4PT01KScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiBmb3IgcmFuZ2VzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gJzEtMyw2LTgnO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnKHg+PTEgJiYgeDw9MykgfHwgKHg+PTYgJiYgeDw9OCknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gZm9yIG1peGVkIHJhbmdlcyBhbmQgc2luZ2xlIHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLTMsNSw3LTknO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnKHg+PTEgJiYgeDw9MykgfHwgKHg9PTUpIHx8ICh4Pj03ICYmIHg8PTkpJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBpbnZhbGlkIHJhbmdlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gJzEtMyw1LTQnO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lKSkudG8udGhyb3coYEludmFsaWQgcmFuZ2UgJzUtNCdgKTtcbiAgICB9KTtcblxuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3IgaW52YWxpZCB2YWx1ZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLTMsYSc7XG4gICAgICAgIGNvbnN0IHZhbHVlTmFtZSA9ICd4JztcbiAgICAgICAgZXhwZWN0KCgpID0+IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUpKS50by50aHJvdygnSW52YWxpZCB2YWx1ZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiB3aXRoIGN1c3RvbSBvcGVyYXRvcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnMS0zLDUnO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBhbmRPcDogJ0FORCcsXG4gICAgICAgICAgICBvck9wOiAnT1InLFxuICAgICAgICAgICAgZXFPcDogJz09PScsXG4gICAgICAgICAgICBnZU9wOiAnPj0nLFxuICAgICAgICAgICAgbGVPcDogJzw9JyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSwgb3B0aW9ucyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCcoeD49MSBBTkQgeDw9MykgT1IgKHg9PT01KScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiB3aXRoIHVybEVuY29kZSBvcHRpb24nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlc3RDYXNlcyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnMSwzLDUnLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3gnLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAnKHglM0QlM0QxKSB8fCAoeCUzRCUzRDMpIHx8ICh4JTNEJTNENSknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnLTEwJyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd4JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJ3glM0MlM0QxMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICcxMC0nLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3gnLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAneCUzRSUzRDEwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJzEtMyw2LTgnLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3knLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAnKHklM0UlM0QxICYmIHklM0MlM0QzKSB8fCAoeSUzRSUzRDYgJiYgeSUzQyUzRDgpJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJzEtMyw1LDctOScsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneicsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICcoeiUzRSUzRDEgJiYgeiUzQyUzRDMpIHx8ICh6JTNEJTNENSkgfHwgKHolM0UlM0Q3ICYmIHolM0MlM0Q5KScsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7ZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCBleHBlY3RlZH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUsIHt1cmxFbmNvZGU6IHRydWV9KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGNvcnJlY3QgY29tcGFyaXNvbiBleHByZXNzaW9uIGZvciBvcGVuLWVuZGVkIHJhbmdlcyB3aXRoIHVybEVuY29kZSBvcHRpb24nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlc3RDYXNlcyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnMTAtJyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd4JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJ3glM0UlM0QxMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICctMTAnLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3knLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAneSUzQyUzRDEwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgdGVzdENhc2VzLmZvckVhY2goKHtleHByZXNzaW9uLCB2YWx1ZU5hbWUsIGV4cGVjdGVkfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSwge3VybEVuY29kZTogdHJ1ZX0pO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQgeyBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaCwgY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoIH07XG5cbi8qKlxuICogUGFyc2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYnJhY2tldGVkIGtleS12YWx1ZSBwYWlycyBhbmQgcmV0dXJucyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwYXJzZWQgcmVzdWx0LlxuICpcbiAqIC0gVGhlIHN0cmluZyBzdGFydHMgd2l0aCBhIGhhc2ggc3ltYm9sICMuXG4gKiAtIEFmdGVyIHRoZSBoYXNoIHN5bWJvbCwgdGhlcmUgYXJlIG9uZSBvciBtb3JlIHNlbGVjdG9yIHN0cmluZ3MsIHNlcGFyYXRlZCBieSBhIHNlbWljb2xvbiA7LlxuICogLSBFYWNoIHNlbGVjdG9yIHN0cmluZyBoYXMgdGhlIGZvcm1hdCBzZWxlY3Rvck5hbWUoa2V5MT12YWx1ZTEsa2V5Mj12YWx1ZTIsLi4uKS5cbiAqIC0gVGhlIHNlbGVjdG9yIG5hbWUgaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuXG4gKiAtIFRoZSBrZXktdmFsdWUgcGFpcnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMgLCBhbmQgYXJlIG9mIHRoZSBmb3JtIGtleT12YWx1ZS5cbiAqIC0gVGhlIGtleSBpcyBhIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy5cbiAqIC0gVGhlIHZhbHVlIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcgb3IgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgY2hhcmFjdGVycy5cbiAqIC0gSWYgdGhlIHZhbHVlIGNvbnRhaW5zIGNvbW1hcywgaXQgbXVzdCBiZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzIFwiLlxuICogLSBUaGUgZW50aXJlIGtleS12YWx1ZSBwYWlyIG11c3QgYmUgVVJMLWVuY29kZWQuXG4gKiAtIFRoZSBjbG9zaW5nIHBhcmVudGhlc2lzICkgZm9yIGVhY2ggc2VsZWN0b3IgbXVzdCBiZSBwcmVzZW50LCBldmVuIGlmIHRoZXJlIGFyZSBubyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBFeGFtcGxlIDE6XG4gKiBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcjEoa2V5MT12YWx1ZTEsa2V5Mj12YWx1ZTIpO3NlbGVjdG9yMihrZXkzPXZhbHVlMyknO1xuICogY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gKiAvLyByZXN1bHQgPT4geyBzZWxlY3RvcjE6IHsga2V5MTogXCJ2YWx1ZTFcIiwga2V5MjogXCJ2YWx1ZTJcIiB9LCBzZWxlY3RvcjI6IHsga2V5MzogXCJ2YWx1ZTNcIiB9IH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gRXhhbXBsZSAyOlxuICogY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3IxKGtleTE9dmFsdWUxLGtleTI9dmFsdWUyKTtzZWxlY3RvcjIoJztcbiAqIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICogLy8gcmVzdWx0ID0+IHt9XG4gKiBgYGBcbiAqXG4gKiBAc2luY2UgMy4zNy4wXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFN0cmluZyAtIFRoZSBzdHJpbmcgdG8gcGFyc2UsIGNvbnRhaW5pbmcgYnJhY2tldGVkIGtleS12YWx1ZSBwYWlycy5cbiAqIEByZXR1cm4ge09iamVjdH0gLSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwYXJzZWQgcmVzdWx0LCB3aXRoIGtleXMgcmVwcmVzZW50aW5nIHRoZSBzZWxlY3RvcnMgYW5kIHZhbHVlcyByZXByZXNlbnRpbmcgdGhlIGtleS12YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggZWFjaCBzZWxlY3Rvci5cbiAqICAgICAgICAgICAgICAgICAgICAtIFJldHVybnMgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgcGFyc2luZy4gKi9cbmZ1bmN0aW9uIHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpIHtcblx0Y29uc3Qgc2VsZWN0b3JzID0ge307XG5cdC8vY29uc3Qgc2VsZWN0b3JTdGFjayA9IFtdO1xuXHQvL2NvbnN0IGtleVZhbHVlU3RhY2sgPSBbXTtcblxuXHRjb25zdCB0cmltbWVkSGFzaFN0cmluZyA9IGhhc2hTdHJpbmcudHJpbSgpO1xuXHRjb25zdCBjbGVhbmVkSGFzaFN0cmluZyA9XG5cdFx0dHJpbW1lZEhhc2hTdHJpbmcuY2hhckF0KDApID09PSBcIiNcIlxuXHRcdFx0PyB0cmltbWVkSGFzaFN0cmluZy5zbGljZSgxKVxuXHRcdFx0OiB0cmltbWVkSGFzaFN0cmluZztcblxuXHQvL2NvbnN0IHNlbGVjdG9ycyA9IChrZXlWYWx1ZVN0YWNrLmxlbmd0aCA+IDApID8gcmVzdWx0W3NlbGVjdG9yU3RhY2tbc2VsZWN0b3JTdGFjay5sZW5ndGggLSAxXV0gOiByZXN1bHQ7XG5cdGxldCBjdXJyZW50U2VsZWN0b3IgPSBcIlwiO1xuXG5cdGZ1bmN0aW9uIGFkZFRvUmVzdWx0KGtleSwgdmFsdWUpIHtcblx0XHRpZiAoY3VycmVudFNlbGVjdG9yICYmIGtleSkge1xuXHRcdFx0aWYgKCFzZWxlY3RvcnNbY3VycmVudFNlbGVjdG9yXSkge1xuXHRcdFx0XHRzZWxlY3RvcnNbY3VycmVudFNlbGVjdG9yXSA9IHt9O1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvcnNbY3VycmVudFNlbGVjdG9yXVtrZXldID0gdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0bGV0IGN1cnJlbnRLZXkgPSBcIlwiO1xuXHRsZXQgY3VycmVudFZhbHVlID0gXCJcIjtcblx0bGV0IGluS2V5ID0gdHJ1ZTtcblx0bGV0IGluVmFsdWUgPSBmYWxzZTtcblx0bGV0IGluUXVvdGVkVmFsdWUgPSBmYWxzZTtcblx0bGV0IGluU2VsZWN0b3IgPSB0cnVlO1xuXHRsZXQgZXNjYXBlZCA9IGZhbHNlO1xuXHRsZXQgcXVvdGVkVmFsdWVTdGFydENoYXIgPSBcIlwiO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY2xlYW5lZEhhc2hTdHJpbmcubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBjID0gY2xlYW5lZEhhc2hTdHJpbmdbaV07XG5cdFx0Y29uc3QgbmV4dENoYXIgPSBjbGVhbmVkSGFzaFN0cmluZz8uW2kgKyAxXTtcblxuXHRcdGlmIChjID09PSBcIlxcXFxcIiAmJiAhZXNjYXBlZCkge1xuXHRcdFx0ZXNjYXBlZCA9IHRydWU7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoZXNjYXBlZCkge1xuXHRcdFx0aWYgKGluU2VsZWN0b3IpIHtcblx0XHRcdFx0Y3VycmVudFNlbGVjdG9yICs9IGM7XG5cdFx0XHR9IGVsc2UgaWYgKGluS2V5KSB7XG5cdFx0XHRcdGN1cnJlbnRLZXkgKz0gYztcblx0XHRcdH0gZWxzZSBpZiAoaW5WYWx1ZSkge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgKz0gYztcblx0XHRcdH1cblx0XHRcdGVzY2FwZWQgPSBmYWxzZTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChpblF1b3RlZFZhbHVlICYmIHF1b3RlZFZhbHVlU3RhcnRDaGFyICE9PSBjKSB7XG5cdFx0XHRpZiAoaW5TZWxlY3Rvcikge1xuXHRcdFx0XHRjdXJyZW50U2VsZWN0b3IgKz0gYztcblx0XHRcdH0gZWxzZSBpZiAoaW5LZXkpIHtcblx0XHRcdFx0Y3VycmVudEtleSArPSBjO1xuXHRcdFx0fSBlbHNlIGlmIChpblZhbHVlKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSArPSBjO1xuXHRcdFx0fVxuXG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoYyA9PT0gXCI7XCIgJiYgaW5TZWxlY3Rvcikge1xuXHRcdFx0aW5TZWxlY3RvciA9IHRydWU7XG5cdFx0XHRjdXJyZW50U2VsZWN0b3IgPSBcIlwiO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGluU2VsZWN0b3IgPT09IHRydWUgJiYgYyAhPT0gXCIoXCIpIHtcblx0XHRcdGN1cnJlbnRTZWxlY3RvciArPSBjO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGMgPT09IFwiKFwiICYmIGluU2VsZWN0b3IpIHtcblx0XHRcdGluU2VsZWN0b3IgPSBmYWxzZTtcblx0XHRcdGluS2V5ID0gdHJ1ZTtcblxuXHRcdFx0Y3VycmVudEtleSA9IFwiXCI7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoaW5LZXkgPT09IHRydWUgJiYgYyAhPT0gXCI9XCIpIHtcblx0XHRcdGN1cnJlbnRLZXkgKz0gYztcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChjID09PSBcIj1cIiAmJiBpbktleSkge1xuXHRcdFx0aW5LZXkgPSBmYWxzZTtcblx0XHRcdGluVmFsdWUgPSB0cnVlO1xuXG5cdFx0XHRpZiAobmV4dENoYXIgPT09ICdcIicgfHwgbmV4dENoYXIgPT09IFwiJ1wiKSB7XG5cdFx0XHRcdGluUXVvdGVkVmFsdWUgPSB0cnVlO1xuXHRcdFx0XHRxdW90ZWRWYWx1ZVN0YXJ0Q2hhciA9IG5leHRDaGFyO1xuXHRcdFx0XHRpKys7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50VmFsdWUgPSBcIlwiO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGluVmFsdWUgPT09IHRydWUpIHtcblx0XHRcdGlmIChpblF1b3RlZFZhbHVlKSB7XG5cdFx0XHRcdGlmIChjID09PSBxdW90ZWRWYWx1ZVN0YXJ0Q2hhcikge1xuXHRcdFx0XHRcdGluUXVvdGVkVmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSArPSBjO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGMgPT09IFwiLFwiKSB7XG5cdFx0XHRcdGluVmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0aW5LZXkgPSB0cnVlO1xuXHRcdFx0XHRjb25zdCBkZWNvZGVkQ3VycmVudFZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KGN1cnJlbnRWYWx1ZSk7XG5cdFx0XHRcdGFkZFRvUmVzdWx0KGN1cnJlbnRLZXksIGRlY29kZWRDdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRjdXJyZW50S2V5ID0gXCJcIjtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gXCJcIjtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjID09PSBcIilcIikge1xuXHRcdFx0XHRpblZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdC8vaW5LZXkgPSB0cnVlO1xuXHRcdFx0XHRpblNlbGVjdG9yID0gdHJ1ZTtcblxuXHRcdFx0XHRjb25zdCBkZWNvZGVkQ3VycmVudFZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KGN1cnJlbnRWYWx1ZSk7XG5cdFx0XHRcdGFkZFRvUmVzdWx0KGN1cnJlbnRLZXksIGRlY29kZWRDdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRjdXJyZW50S2V5ID0gXCJcIjtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gXCJcIjtcblx0XHRcdFx0Y3VycmVudFNlbGVjdG9yID0gXCJcIjtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnRWYWx1ZSArPSBjO1xuXG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdH1cblxuXHRpZiAoaW5TZWxlY3Rvcikge1xuXHRcdHJldHVybiBzZWxlY3RvcnM7XG5cdH1cblxuXHRyZXR1cm4ge307XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggc2VsZWN0b3Igc3RyaW5nIGZyb20gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgLSBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgc2VsZWN0b3JzIGFuZCBrZXktdmFsdWUgcGFpcnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkZEhhc2hQcmVmaXggLSBXaGV0aGVyIHRvIGFkZCB0aGUgaGFzaCBwcmVmaXggIyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBoYXNoIHNlbGVjdG9yIHN0cmluZy5cbiAqIEBzaW5jZSAzLjM3LjBcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoKG9iamVjdCwgYWRkSGFzaFByZWZpeCA9IHRydWUpIHtcblx0aWYgKCFvYmplY3QpIHtcblx0XHRyZXR1cm4gYWRkSGFzaFByZWZpeCA/IFwiI1wiIDogXCJcIjtcblx0fVxuXG5cdGxldCBoYXNoU3RyaW5nID0gXCJcIjtcblxuXHRmdW5jdGlvbiBlbmNvZGVLZXlWYWx1ZShrZXksIHZhbHVlKSB7XG5cdFx0cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHR9XG5cblx0Zm9yIChjb25zdCBzZWxlY3RvciBpbiBvYmplY3QpIHtcblx0XHRpZiAob2JqZWN0Lmhhc093blByb3BlcnR5KHNlbGVjdG9yKSkge1xuXHRcdFx0Y29uc3Qga2V5VmFsdWVQYWlycyA9IG9iamVjdFtzZWxlY3Rvcl07XG5cdFx0XHRsZXQgc2VsZWN0b3JTdHJpbmcgPSBzZWxlY3Rvcjtcblx0XHRcdGxldCBrZXlWYWx1ZVN0cmluZyA9IFwiXCI7XG5cblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGtleVZhbHVlUGFpcnMpIHtcblx0XHRcdFx0aWYgKGtleVZhbHVlUGFpcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0ga2V5VmFsdWVQYWlyc1trZXldO1xuXHRcdFx0XHRcdGtleVZhbHVlU3RyaW5nICs9IGtleVZhbHVlU3RyaW5nLmxlbmd0aCA9PT0gMCA/IFwiXCIgOiBcIixcIjtcblx0XHRcdFx0XHRrZXlWYWx1ZVN0cmluZyArPSBlbmNvZGVLZXlWYWx1ZShrZXksIHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoa2V5VmFsdWVTdHJpbmcubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRzZWxlY3RvclN0cmluZyArPSBcIihcIiArIGtleVZhbHVlU3RyaW5nICsgXCIpXCI7XG5cdFx0XHRcdGhhc2hTdHJpbmcgKz0gaGFzaFN0cmluZy5sZW5ndGggPT09IDAgPyBcIlwiIDogXCI7XCI7XG5cdFx0XHRcdGhhc2hTdHJpbmcgKz0gc2VsZWN0b3JTdHJpbmc7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFkZEhhc2hQcmVmaXggPyBcIiNcIiArIGhhc2hTdHJpbmcgOiBoYXNoU3RyaW5nO1xufVxuIiwgIi8vIHRlc3QuanNcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiO1xuaW1wb3J0IHtcbiAgICBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaCxcbiAgICBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2hcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90ZXh0L2JyYWNrZXRlZC1rZXktdmFsdWUtaGFzaC5tanNcIjtcblxuZGVzY3JpYmUoXCJwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaFwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBmb3IgYW4gZW1wdHkgc3RyaW5nXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIlwiO1xuICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHt9O1xuICAgICAgICBleHBlY3QocGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpKS50by5kZWVwLmVxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHBhcnNlIGEgc2luZ2xlIHNlbGVjdG9yIHdpdGggb25lIGtleS12YWx1ZSBwYWlyXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIiNzZWxlY3RvcjEoa2V5MT12YWx1ZTEpXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICAgICAgc2VsZWN0b3IxOiB7XG4gICAgICAgICAgICAgICAga2V5MTogXCJ2YWx1ZTFcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGV4cGVjdChwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCkpLnRvLmRlZXAuZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcGFyc2UgbXVsdGlwbGUgc2VsZWN0b3JzIHdpdGggbXVsdGlwbGUga2V5LXZhbHVlIHBhaXJzXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIiNzZWxlY3RvcjEoa2V5MT12YWx1ZTEsa2V5Mj12YWx1ZTIpO3NlbGVjdG9yMihrZXkzPXZhbHVlMyxrZXk0PXZhbHVlNClcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgICAgICBzZWxlY3RvcjE6IHtcbiAgICAgICAgICAgICAgICBrZXkxOiBcInZhbHVlMVwiLFxuICAgICAgICAgICAgICAgIGtleTI6IFwidmFsdWUyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0b3IyOiB7XG4gICAgICAgICAgICAgICAga2V5MzogXCJ2YWx1ZTNcIixcbiAgICAgICAgICAgICAgICBrZXk0OiBcInZhbHVlNFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgZXhwZWN0KHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KSkudG8uZGVlcC5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBkZWNvZGUgVVJMLWVuY29kZWQgdmFsdWVzXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIiNzZWxlY3RvcjEoa2V5MT12YWx1ZTElMkN3aXRoJTIwY29tbWEpXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICAgICAgc2VsZWN0b3IxOiB7XG4gICAgICAgICAgICAgICAga2V5MTogXCJ2YWx1ZTEsd2l0aCBjb21tYVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpO1xuICAgICAgICBleHBlY3QocmVzdWx0LnNlbGVjdG9yMS5rZXkxKS50by5lcXVhbChleHBlY3RlZFJlc3VsdC5zZWxlY3RvcjEua2V5MSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgaW5wdXQgd2l0aG91dCBhIGxlYWRpbmcgaGFzaFwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gXCJzZWxlY3RvcjEoa2V5MT12YWx1ZTEpXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICAgICAgc2VsZWN0b3IxOiB7XG4gICAgICAgICAgICAgICAga2V5MTogXCJ2YWx1ZTFcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGV4cGVjdChwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCkpLnRvLmRlZXAuZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBmb3IgaW52YWxpZCBpbnB1dFwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gXCIjc2VsZWN0b3IxKGtleTE9dmFsdWUxLGtleTJcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7fTtcbiAgICAgICAgZXhwZWN0KHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KSkudG8uZGVlcC5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgZm9yIGFuIGVtcHR5IGlucHV0IHN0cmluZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgZm9yIGFuIGludmFsaWQgaW5wdXQgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNpbnZhbGlkJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBhIHNpbXBsZSBpbnB1dCBzdHJpbmcgd2l0aCBvbmUgc2VsZWN0b3IgYW5kIG9uZSBrZXktdmFsdWUgcGFpcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5PXZhbHVlKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3Rvcjoge2tleTogJ3ZhbHVlJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgYW4gaW5wdXQgc3RyaW5nIHdpdGggbXVsdGlwbGUgc2VsZWN0b3JzIGFuZCBrZXktdmFsdWUgcGFpcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yMShrZXkxPXZhbHVlMSk7c2VsZWN0b3IyKGtleTI9dmFsdWUyKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3RvcjE6IHtrZXkxOiAndmFsdWUxJ30sIHNlbGVjdG9yMjoge2tleTI6ICd2YWx1ZTInfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZW1wdHkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXkxPSxrZXkyPSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXkxOiAnJywga2V5MjogJyd9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBwZXJjZW50LWVuY29kZWQgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXkxPXZhbHVlJTIwMSxrZXkyPXZhbHVlJTJDMiknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXkxOiAndmFsdWUgMScsIGtleTI6ICd2YWx1ZSwyJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGRvdWJsZS1xdW90ZWQgdmFsdWVzIHdpdGggY29tbWFzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXkxPVwidmFsdWUsMVwiLGtleTI9XCJ2YWx1ZSwyXCIpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5MTogJ3ZhbHVlLDEnLCBrZXkyOiAndmFsdWUsMid9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBsZWFkaW5nIGhhc2ggc3ltYm9sICgjKScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICdzZWxlY3RvcihrZXk9dmFsdWUpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5OiAndmFsdWUnfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpZ25vcmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnICAjc2VsZWN0b3Ioa2V5PXZhbHVlKSAgJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5OiAndmFsdWUnfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpbnB1dCBzdHJpbmcgZW5kcyBwcmVtYXR1cmVseScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5PXZhbHVlJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIGEgc2VsZWN0b3IgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjKGtleT12YWx1ZSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgYSBrZXkgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3IoPXZhbHVlKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZmEgdmFsdWUgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5PSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7XG4gICAgICAgICAgICBzZWxlY3Rvcjoge1xuICAgICAgICAgICAgICAgIGtleTogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBpcyBubyBjbG9zaW5nIHBhcmVudGhlc2lzIGZvciBhIHNlbGVjdG9yJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9dmFsdWU7JztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIGlzIG5vIHNlbWljb2xvbiBhZnRlciBhIHNlbGVjdG9yJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9dmFsdWUpc2VsZWN0b3IyKGtleTI9dmFsdWUyKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiB7XG4gICAgICAgICAgICAgICAga2V5OiAndmFsdWUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdG9yMjoge1xuICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBoYXNoIHN0cmluZyBmb3IgYSBzaW1wbGUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB7XG4gICAgICAgICAgICAgICAgJy5leGFtcGxlJzoge1xuICAgICAgICAgICAgICAgICAgICAnY29sb3InOiAncmVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZSc6ICcxNHB4J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJy5vdGhlcic6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQnOiAnYmx1ZSdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChcIiMuZXhhbXBsZShjb2xvcj1yZWQsZm9udC1zaXplPTE0cHgpOy5vdGhlcihiYWNrZ3JvdW5kPWJsdWUpXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgdXJsLWVuY29kZWQgaGFzaCBzdHJpbmcgZm9yIGEgc2ltcGxlIG9iamVjdCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0ge1xuICAgICAgICAgICAgICAgICcuZXhhbXBsZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2NvbG9yJzogJ3JcImVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZSc6ICcxNHB4J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJy5vdGhlcic6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQnOiAnYmx1ZSdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQsIHRydWUpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChcIiMuZXhhbXBsZShjb2xvcj1yJTIyZWQsZm9udC1zaXplPTE0cHgpOy5vdGhlcihiYWNrZ3JvdW5kPWJsdWUpXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBmb3IgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCxmYWxzZSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFwiXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBmb3IgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCxmYWxzZSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFwiXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgfSk7XG5cblxufSk7XG4iLCAiLyoqIG5vZGVqcyBkb2VzbnQgc3VwcG9ydCB3aW5kb3cuY3J5cHQgKi9cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdNYXRoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IHJhbmRvbSA9ICgpID0+IHt9XG4gICAgXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgaWYgKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvbWF0aC9yYW5kb20ubWpzXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICByYW5kb20gPSBtLnJhbmRvbTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KSlcblxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5yYW5kb20oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnYSBncmVhdGVyIGIgc2hvdWxkIHRocm93IGVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiByYW5kb20oMTAsIDIpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcgc2hvdWxkIHJldHVybiBhIG51bWJlciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgciA9IHJhbmRvbSgpO1xuICAgICAgICAgICAgZXhwZWN0KHIpLnRoYXQuaXMuYSgnbnVtYmVyJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcgc2hvdWxkIHJldHVybiBhIG51bWJlciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gcmFuZG9tKDUsIDYpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcgc2hvdWxkIHRocm93IEVycm9yIHdlIGNhbm5vdCBnZW5lcmF0ZSBudW1iZXJzIGxhcmdlciB0aGFuIDUzIGJpdHMuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHJhbmRvbSgtOTk5OTk5OTk5LCA5OTk5OTk5OTk5OTk5OTk5OTk5OSkpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJyBzaG91bGQgdGhyb3cgRXJyb3Igd2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy4nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMSwgMTAwXSxcbiAgICAgICAgICAgICAgICBbNTAwLCA2MDBdLFxuICAgICAgICAgICAgICAgIFsxMDAsIDEwMDBdXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGxldCByID0gcmFuZG9tKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgaXQociArICcgc2hvdWxkIHJldHVybiB2YWx1ZSBiZXR3ZWVuICcgKyBhICsgJyAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QociA+PSBhKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QociA8PSBiKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMSwgMTAwXSxcbiAgICAgICAgICAgICAgICBbNTAwLCA2MDBdLFxuICAgICAgICAgICAgICAgIFsxMDAsIDEwMDBdXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdW5kcyA9IDUwMFxuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1heCA9IHJvdW5kczsgaSA8IG1heDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSByYW5kb20oYSwgYik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGF2ZyA9IHN1bSAvIHJvdW5kcztcblxuICAgICAgICAgICAgICAgIGl0KGF2ZyArICcgc2hvdWxkIGJldHdlZW4gJyArIGEgKyAnICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChhdmcgPiBhKS50by5iZS50cnVlXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChhdmcgPCBiKS50by5iZS50cnVlXG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cblxufSkiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7dHJpbVNwYWNlc30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL3RyaW1zcGFjZXMubWpzXCI7XG5cblxuZGVzY3JpYmUoJ3RyaW1TcGFjZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgW1xuICAgICAgICAvLyBvbmUgc3Ryb2tlIGlzIGVzY3BlZCBieSB0aGUgamF2YXNjcmlwdCBpbnRlcnByZXRlciwgdGhlIHNlY29uZCBzdHJva2UgZXNjYXBlcyB0aGUgc3Ryb2tlXG4gICAgICAgIFsnIHZhbHVlICcsICd2YWx1ZSddLFxuICAgICAgICBbJyB2YWx1ZVxcXFwgJywgJ3ZhbHVlXFxcXCAnXSxcbiAgICAgICAgWydcXFxcIHZhbHVlXFxcXCAnLCAnXFxcXCB2YWx1ZVxcXFwgJ10sXG4gICAgICAgIFsnXFwgdmFsdWVcXCAnLCAndmFsdWUnXSwgICBcbiAgICAgICAgW1wiICAgdmFsdWUgXFwgXCIsICd2YWx1ZSddLCBcblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaXQoJ3RyaW1TcGFjZXMoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYiksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCh0cmltU3BhY2VzKGEpKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiAgICAiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7UHJvY2Vzc2luZ30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL3Byb2Nlc3NpbmcubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1Byb2Nlc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgncnVuIGluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIG1hbnkgZnVuY3Rpb24nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICBsZXQgdCA9ICtuZXcgRGF0ZSgpO1xuXG4gICAgICAgICAgICBjb25zdCBkZXNpcmVkRGVsYXkgPSAyMDA7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXQoZGVzaXJlZERlbGF5KzEwMCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGRlbGF5IDEyIFxuICAgICAgICAgICAgbmV3IFByb2Nlc3NpbmcoKHYpID0+IHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9LCAodikgPT4ge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrK1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKytcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH0sIGRlc2lyZWREZWxheSxmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrK1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfSkucnVuKCd0ZXN0JykudGhlbigodikgPT4ge1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNvdW50ZXIpLnRvLmJlLmVxdWFsKDQpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodiA9PT0gJ3Rlc3QnKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBkZWxheVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoK25ldyBEYXRlKCkgPiB0ICsgZGVzaXJlZERlbGF5KzEpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gb25lIGZ1bmN0aW9uJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgICAgICAgICBuZXcgUHJvY2Vzc2luZygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKytcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KS5ydW4oJ3Rlc3QnKS50aGVuKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHYgPT09ICd0ZXN0JykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIG5vIGZ1bmN0aW9uJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgICAgICAgICBuZXcgUHJvY2Vzc2luZygpLnJ1bigndGVzdCcpLnRoZW4oKHYpID0+IHtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2ID09PSAndGVzdCcpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlIG5ldyBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIFByb2Nlc3Npbmcgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBQcm9jZXNzaW5nKCkpLnRvLmJlLmEoJ29iamVjdCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIFByb2Nlc3Npbmcgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBQcm9jZXNzaW5nKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIH0pKS50by5iZS5hKCdvYmplY3QnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFByb2Nlc3NpbmcodHJ1ZSkpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBQcm9jZXNzaW5nKFwidGVzdFwiKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG59KTsiLCAiaW1wb3J0IHtEZWFkTWFuc1N3aXRjaH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdEZWFkTWFuc1N3aXRjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdydW4gaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBtczEgPSAgRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgbmV3IERlYWRNYW5zU3dpdGNoKDEwMCwgKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbXMyID0gIERhdGUubm93KCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkaWZmID0gbXMyIC0gbXMxO1xuICAgICAgICAgICAgICAgIGlmIChkaWZmIDwgMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoJ3RvIHNob3J0ICcgKyBkaWZmKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncnVuIGluc3RhbmNlIGFuZCB0b3VjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1bicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IG1zMSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRlYWRtYW5zc3dpdGNoID0gbmV3IERlYWRNYW5zU3dpdGNoKDEwMCwgKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbXMyID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBtczIgLSBtczE7XG5cbiAgICAgICAgICAgICAgICBpZiAobXMxID4gbXMyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKCd0aW1pbmcgZXJyb3InKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGlmZiA8IDYwMCkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcigndG8gc2hvcnQgJyArIGRpZmYpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAvLyAgIDAgbXM6IGluaXQoKSAtPiB3YWl0IDEwMCBtcyBcbiAgICAgICAgICAgIC8vICA1MCBtczogdG91Y2goKSAtPiB3YWl0IDEwMCBtc1xuICAgICAgICAgICAgLy8gICAgICAgICAgLT4gd2FpdCAxMDBcbiAgICAgICAgICAgIC8vIDEwMCBtczogdG91Y2goNTAwKSAtPiB3YWl0IDUwMCBtc1xuICAgICAgICAgICAgLy8gICAgICAgICAgLT4gd2FpdCA1MDBcbiAgICAgICAgICAgIC8vIDYwMCBtczogZXhlY3V0ZSBjYWxsYmFja1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVhZG1hbnNzd2l0Y2gudG91Y2goKVxuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlYWRtYW5zc3dpdGNoLnRvdWNoKDUwMClcbiAgICAgICAgICAgICAgICB9LCA1MClcblxuICAgICAgICAgICAgfSwgNTApXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5cbmV4cG9ydCB7IENvbXBhcmF0b3IgfTtcblxuLyoqXG4gKiBUaGUgY29tcGFyYXRvciBhbGxvd3MgYSBjb21wYXJpc29uIGZ1bmN0aW9uIHRvIGJlIGFic3RyYWN0ZWQuXG4gKlxuICogVGhlIGZvbGxvd2luZyBhcmUgc29tZSBleGFtcGxlcyBvZiB0aGUgYXBwbGljYXRpb24gb2YgdGhlIGNsYXNzLlxuICpcbiAqIGBgYFxuICogbmV3IENvbXBhcmF0b3IoKS5sZXNzVGhhbk9yRXF1YWwoMiwgNSkgLy8gXHUyMUE2IHRydWVcbiAqIG5ldyBDb21wYXJhdG9yKCkuZ3JlYXRlclRoYW4oNCwgMikgLy8gXHUyMUE2IHRydWVcbiAqIG5ldyBDb21wYXJhdG9yKCkuZXF1YWwoNCwgNCkgLy8gXHUyMUE2IHRydWVcbiAqIG5ldyBDb21wYXJhdG9yKCkuZXF1YWwoNCwgNSkgLy8gXHUyMUE2IGZhbHNlXG4gKiBgYGBcbiAqXG4gKiBZb3UgY2FuIGFsc28gcGFzcyB5b3VyIG93biBjb21wYXJpc29uIGZ1bmN0aW9uLCBhbmQgdGh1cyBkZWZpbmUgdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24uXG4gKlxuICogYGBgXG4gKiBuZXcgQ29tcGFyYXRvcihmdW5jdGlvbiAoYSwgYikge1xuICogICAgICBpZiAoYS52ID09PSBiLnYpIHJldHVybiAwO1xuICogICAgICAgICByZXR1cm4gYS52IDwgYi52ID8gLTEgOiAxO1xuICogICAgICB9KS5lcXVhbCh7djogMn0sIHt2OiAyfSk7ICAvLyBcdTIxQTYgdHJ1ZVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGUvY29tcGFyYXRvci9zaW1wbGUvIFNpbXBsZSBleGFtcGxlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICovXG5jbGFzcyBDb21wYXJhdG9yIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBjcmVhdGUgbmV3IGNvbXBhcmF0b3Jcblx0ICpcblx0ICogQHBhcmFtIHtNb25zdGVyLlV0aWx+ZXhhbXBsZUNhbGxiYWNrfSBbY2FsbGJhY2tdIENvbXBhcmF0b3IgY2FsbGJhY2tcblx0ICogQHRocm93IHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93IHtUeXBlRXJyb3J9IGltcHJhY3RpY2FsIGNvbXBhcmlzb25cblx0ICovXG5cdGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdFx0dGhpcy5jb21wYXJlID0gY2FsbGJhY2s7XG5cdFx0fSBlbHNlIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gZGVmYXVsdCBjb21wYXJlIGZ1bmN0aW9uXG5cblx0XHRcdC8qKlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7Kn0gYVxuXHRcdFx0ICogQHBhcmFtIHsqfSBiXG5cdFx0XHQgKiBAcmV0dXJuIHtpbnRlZ2VyfSAtMSwgMCBvciAxXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uIChhLCBiKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW1wcmFjdGljYWwgY29tcGFyaXNvblwiLCBcInR5cGVzL2NvbXBhcmF0b3IubWpzXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGEgPT09IGIpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYSA8IGIgPyAtMSA6IDE7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBjaGFuZ2VzIHRoZSBvcmRlciBvZiB0aGUgb3BlcmF0b3JzXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NvbXBhcmF0b3J9XG5cdCAqL1xuXHRyZXZlcnNlKCkge1xuXHRcdGNvbnN0IG9yaWdpbmFsID0gdGhpcy5jb21wYXJlO1xuXHRcdHRoaXMuY29tcGFyZSA9IChhLCBiKSA9PiBvcmlnaW5hbChiLCBhKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdHdvIHZhcmlhYmxlcyBhcmUgZXF1YWwuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGVxdWFsKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlKGEsIGIpID09PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB2YXJpYWJsZSBgYWAgaXMgZ3JlYXRlciB0aGFuIGBiYFxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFcblx0ICogQHBhcmFtIHsqfSBiXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRncmVhdGVyVGhhbihhLCBiKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZShhLCBiKSA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHZhcmlhYmxlIGBhYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYGJgXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGdyZWF0ZXJUaGFuT3JFcXVhbChhLCBiKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ3JlYXRlclRoYW4oYSwgYikgfHwgdGhpcy5lcXVhbChhLCBiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdmFyaWFibGUgYGFgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYmBcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhXG5cdCAqIEBwYXJhbSB7Kn0gYlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0bGVzc1RoYW5PckVxdWFsKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5sZXNzVGhhbihhLCBiKSB8fCB0aGlzLmVxdWFsKGEsIGIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB2YXJpYWJsZSBhIGlzIGxlc3MgdGhhbiBiXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGxlc3NUaGFuKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlKGEsIGIpIDwgMDtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCBieSB0aGUgb3BlcmF0b3JcbiAqXG4gKiBgYGBcbiAqIG5ldyBDb21wYXJhdG9yKGZ1bmN0aW9uIChhLCBiKSB7XG4gKiAgICAgIGlmIChhLnYgPT09IGIudikgcmV0dXJuIDA7XG4gKiAgICAgICAgIHJldHVybiBhLnYgPCBiLnYgPyAtMSA6IDE7XG4gKiAgICAgIH0pLmVxdWFsKHt2OiAyfSwge3Y6IDJ9KTsgIC8vIFx1MjFBNiB0cnVlXG4gKiBgYGBcbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5VdGlsfmV4YW1wbGVDYWxsYmFja1xuICogQHBhcmFtIHsqfSBhXG4gKiBAcGFyYW0geyp9IGJcbiAqIEByZXR1cm4ge2ludGVnZXJ9IC0xLCAwIG9yIDFcbiAqIEBzZWUgTW9uc3Rlci5VdGlsLkNvbXBhcmF0b3JcbiAqL1xuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0NvbXBhcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdXRpbC9jb21wYXJhdG9yLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdDb21wYXJhdG9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZSBuZXcgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBjb21wYXJhdG9yIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpKS50by5iZS5hKCdvYmplY3QnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBjb21wYXJhdG9yIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB9KSkudG8uYmUuYSgnb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBDb21wYXJhdG9yKHRydWUpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgQ29tcGFyYXRvcihcInRlc3RcIikpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdlcXVhbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBcInRlc3RcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWzUuMSwgNSwgZmFsc2VdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbLTQsIC00LCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb21wYXJlICcgKyBhICsgJyBhbmQgJyArIGIgKyAnIHJldHVybiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmVxdWFsKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXF1YWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgNV0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgbnVsbF0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgcGFyc2VJbnQoXCJhXCIpXSxcbiAgICAgICAgICAgIFtmYWxzZSwgNV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBudWxsXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgQ29tcGFyYXRvcigpLmVxdWFsKGEsIGIpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ3JlYXRlclRoYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZ3JlYXRlclRoYW4oYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdyZXZlcnNlKCkuZ3JlYXRlclRoYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkucmV2ZXJzZSgpLmdyZWF0ZXJUaGFuKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ3JlYXRlclRoYW5PckVxdWFsKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIFwidGVzdFwiLCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbLTQsIC00LCB0cnVlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZ3JlYXRlclRoYW5PckVxdWFsKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbGVzc1RoYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkubGVzc1RoYW4oYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudGF0aW9ucycsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIC4uLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmxlc3NUaGFuT3JFcXVhbCgyLCA1KSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmdyZWF0ZXJUaGFuKDQsIDIpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZXF1YWwoNCwgNCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5lcXVhbCg0LCA1KSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gd2l0aCBvd24gZnVuY3Rpb24gLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGEudiA9PT0gYi52KSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS52IDwgYi52ID8gLTEgOiAxO1xuICAgICAgICAgICAgfSkuZXF1YWwoe3Y6IDJ9LCB7djogMn0pKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdsZXNzVGhhbk9yRXF1YWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIHRydWVdLFxuICAgICAgICAgICAgW3RydWUsIHRydWUsIHRydWVdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIHRydWVdLFxuICAgICAgICAgICAgWy00LCA0LCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29tcGFyZSAnICsgYSArICcgYW5kICcgKyBiICsgJyByZXR1cm4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5sZXNzVGhhbk9yRXF1YWwoYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGRlZXBGcmVlemUgfTtcblxuLyoqXG4gKiBEZWVwIGZyZWV6ZSBhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3Qgb2JqZWN0IHRvIGJlIGZyZWV6ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICovXG5mdW5jdGlvbiBkZWVwRnJlZXplKG9iamVjdCkge1xuXHR2YWxpZGF0ZU9iamVjdChvYmplY3QpO1xuXG5cdC8vIFJldHJpZXZlIHRoZSBkZWZpbmVkIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBvYmplY3Rcblx0bGV0IHByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG5cblx0Ly8gRnJlZXplIHByb3BlcnRpZXMgYmVmb3JlIGZyZWV6aW5nIHlvdXJzZWxmXG5cdGZvciAoY29uc3QgbmFtZSBvZiBwcm9wTmFtZXMpIHtcblx0XHRjb25zdCB2YWx1ZSA9IG9iamVjdFtuYW1lXTtcblxuXHRcdG9iamVjdFtuYW1lXSA9XG5cdFx0XHR2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgPyBkZWVwRnJlZXplKHZhbHVlKSA6IHZhbHVlO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdC5mcmVlemUob2JqZWN0KTtcbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtkZWVwRnJlZXplfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvZnJlZXplLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdkZWVwRnJlZXplJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2RlZXBGcmVlemUgYW4gb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgZnJlZXplIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iajEgPSB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOjFcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBvYmoyID0ge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzoyXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBleHBlY3Qob2JqMikudG8ubm90LmVxbChvYmoxKVxuICAgICAgICAgICAgb2JqMS5hLmIuYyA9IDI7XG4gICAgICAgICAgICBleHBlY3Qob2JqMikudG8uZXFsKG9iajEpO1xuXG4gICAgICAgICAgICBjb25zdCBvYmoxRnJlZXplZCA9IGRlZXBGcmVlemUob2JqMSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChvYmoyKS50by5lcWwob2JqMUZyZWV6ZWQpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9mcmVlemVcbiAgICAgICAgICAgICAgICAvLyBubyBjaGFuZ2UgdG8gdGhlIG9iamVjdCwgZXhjZXB0aW9uIGRlcGVuZHMgb24gbW9kZSAoc3RyaWN0IEVTIDIwMTUsIGV0YylcbiAgICAgICAgICAgICAgICBvYmoxRnJlZXplZC5hLmIuYyA9IDMgICAgXG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KG9iajIpLnRvLmVxbChvYmoxRnJlZXplZCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2Nsb25lfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnQ2xvbmUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBjbGFzcyBBIHtcbiAgICAgICAgY29uc3RydWN0b3IoYikge1xuICAgICAgICAgICAgdGhpcy5iID0gYlxuICAgICAgICB9XG5cbiAgICAgICAgYSgpIHtcblxuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGNsYXNzIEIge1xuICAgICAgICBjb25zdHJ1Y3RvcihiKSB7XG4gICAgICAgICAgICB0aGlzLmIgPSBiXG4gICAgICAgIH1cblxuICAgICAgICBhKCkge1xuXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGdldENsb25lKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiRE9ORVwiXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgfVxuXG4gICAgZGVzY3JpYmUoJy5jbG9uZShCKSB3aXRoIGdldENsb25lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnLmNsb25lKEIpIHNob3VsZCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYiA9IG5ldyBCKHtcbiAgICAgICAgICAgICAgICB4OiB7XG4gICAgICAgICAgICAgICAgICAgIHk6IDEsIGQ6IG5ldyBBKDEpLCB6OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCByID0gY2xvbmUoYik7XG4gICAgICAgICAgICBleHBlY3QoYikudG8uYmUuaW5zdGFuY2VPZihCKVxuICAgICAgICAgICAgZXhwZWN0KHIpLm5vdC5lcXVhbChiKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShyKSkuZXF1YWwoSlNPTi5zdHJpbmdpZnkoJ0RPTkUnKSk7XG5cbiAgICAgICAgfSk7XG4gICAgfSlcbiAgICBcbiAgICBkZXNjcmliZSgnLmNsb25lKEEpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnLmNsb25lKEEpIHNob3VsZCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYSA9IG5ldyBBKHtcbiAgICAgICAgICAgICAgICB4OiB7XG4gICAgICAgICAgICAgICAgICAgIHk6IDEsIGQ6IG5ldyBBKDEpLCB6OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICBleHBlY3QoYSkudG8uYmUuaW5zdGFuY2VPZihBKVxuICAgICAgICAgICAgZXhwZWN0KGIpLnRvLmJlLmluc3RhbmNlT2YoQSlcbiAgICAgICAgICAgIGV4cGVjdChiKS5ub3QuZXF1YWwoYSk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoYSkpLmVxdWFsKEpTT04uc3RyaW5naWZ5KGIpKTtcblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgLy8gbm9kZWpzIGRvZXMgbm90IGhhdmUgYSBET01cbiAgICBpZiAodHlwZW9mIERvY3VtZW50RnJhZ21lbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZGVzY3JpYmUoJy5jbG9uZShEb2N1bWVudEZyYWdtZW50KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCcuY2xvbmUoRG9jdW1lbnRGcmFnbWVudCkgc2hvdWxkIHNhbWUgRG9jdW1lbnRGcmFnbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChiKS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGRlc2NyaWJlKCcuY2xvbmUobnVsbCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIHR5cGVvZiBudWxsIHJlc3VsdHMgaW4gJ29iamVjdCcuICBodHRwczovLzJhbGl0eS5jb20vMjAxMy8xMC90eXBlb2YtbnVsbC5odG1sXG4gICAgICAgIGl0KCcuY2xvbmUobnVsbCkgc2hvdWxkICBudWxsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSBudWxsXG4gICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGIpLmVxdWFsKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGIpLnRvLmJlLm51bGw7XG4gICAgICAgICAgICBleHBlY3QoYSkudG8uYmUubnVsbDtcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCcuY2xvbmUodW5kZWZpbmVkKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJy5jbG9uZSh1bmRlZmluZWQpIHNob3VsZCAgdW5kZWZpbmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICBleHBlY3QoYSA9PT0gYikudG8uYmUudHJ1ZVxuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBiID09PSAndW5kZWZpbmVkJykudG8uYmUudHJ1ZVxuICAgICAgICAgICAgZXhwZWN0KGEgPT09IHVuZGVmaW5lZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgZXhwZWN0KGIgPT09IHVuZGVmaW5lZCkudG8uYmUudHJ1ZVxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJy5jbG9uZShvYmplY3QpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCcuY2xvbmUoe30pIHNob3VsZCAgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSB7fVxuICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgYiA9PT0gJ29iamVjdCcpLnRvLmJlLnRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5jbG9uZSh7eDoxfSkgc2hvdWxkICBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYSA9IHt4OiAxfVxuICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgIGV4cGVjdChhLngpLmlzLmVxdWFsKGIueClcbiAgICAgICAgfSk7XG4gICAgfSlcbiAgICBkZXNjcmliZSgnLmNsb25lKGZ1bmN0aW9uKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnLmNsb25lKGZ1bmN0aW9uKSBzaG91bGQgIGZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSAoKSA9PiB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBiID09PSAnZnVuY3Rpb24nKS50by5iZS50cnVlXG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCcuY2xvbmUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgJ3N0cmluZyddLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgJ3VuZGVmaW5lZCddLFxuICAgICAgICAgICAgW251bGwsICdvYmplY3QnXSwgLy8gdHlwZW9mIG51bGwgcmVzdWx0cyBpbiAnb2JqZWN0Jy4gIGh0dHBzOi8vMmFsaXR5LmNvbS8yMDEzLzEwL3R5cGVvZi1udWxsLmh0bWxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCAnZnVuY3Rpb24nXSxcbiAgICAgICAgICAgIFsyLCAnbnVtYmVyJ10sXG4gICAgICAgICAgICBbZmFsc2UsICdib29sZWFuJ10sXG4gICAgICAgICAgICBbdHJ1ZSwgJ2Jvb2xlYW4nXSxcbiAgICAgICAgICAgIFs0LjUsICdudW1iZXInXSxcbiAgICAgICAgICAgIFt7fSwgJ29iamVjdCddLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgJ29iamVjdCddLCAvLyBhcnJheSBpc3QgYXVjaCB0eXBlIG9iamVjdFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgJ3N5bWJvbCddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgaXQoJy5jbG9uZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgICcgKyBiICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGMgPSBjbG9uZShhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGMpLmlzLmVxdWFsKGIpO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IEhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlci5tanNcIjtcbmltcG9ydCB7IExvZ0VudHJ5IH0gZnJvbSBcIi4uL2xvZ2VudHJ5Lm1qc1wiO1xuaW1wb3J0IHsgVFJBQ0UsIFdBUk4sIERFQlVHLCBFUlJPUiwgRkFUQUwsIElORk8gfSBmcm9tIFwiLi4vbG9nZ2VyLm1qc1wiO1xuXG5leHBvcnQgeyBDb25zb2xlSGFuZGxlciB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIG9iamVjdCBvZiB0aGUgY2xhc3Mgc2ltcGx5IGJ5IHVzaW5nIHRoZSBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLkxvZ2dpbmcuSGFuZGxlci5Db25zb2xlSGFuZGxlcigpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgQ29uc29sZUhhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHtcblx0LyoqXG5cdCAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgbG9nIGZ1bmN0aW9uLiB0aGlzIG1ldGhvZCBtdXN0IGJlXG5cdCAqIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgaGFuZGxlcnMgd2l0aCB0aGVpciBvd24gbG9naWMuXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7TG9nRW50cnl9IGVudHJ5XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRsb2coZW50cnkpIHtcblx0XHRpZiAoc3VwZXIubG9nKGVudHJ5KSkge1xuXHRcdFx0Y29uc3QgY29uc29sZSA9IGdldEdsb2JhbE9iamVjdChcImNvbnNvbGVcIik7XG5cdFx0XHRpZiAoIWNvbnNvbGUpIHJldHVybiBmYWxzZTtcblxuXHRcdFx0aWYgKCFjb25zb2xlLmVycm9yKSBjb25zb2xlLmVycm9yID0gY29uc29sZS5sb2c7XG5cdFx0XHRpZiAoIWNvbnNvbGUud2FybikgY29uc29sZS53YXJuID0gY29uc29sZS5sb2c7XG5cblx0XHRcdHN3aXRjaCAoZW50cnkuZ2V0TG9nTGV2ZWwoKSkge1xuXHRcdFx0XHRjYXNlIFRSQUNFOlxuXHRcdFx0XHRjYXNlIERFQlVHOlxuXHRcdFx0XHRjYXNlIElORk86XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coZW50cnkudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRkFUQUw6XG5cdFx0XHRcdGNhc2UgRVJST1I6XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlbnRyeS50b1N0cmluZygpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBXQVJOOlxuXHRcdFx0XHRcdGNvbnNvbGUud2FybihlbnRyeS50b1N0cmluZygpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhlbnRyeS50b1N0cmluZygpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVJbnRlZ2VyIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgTG9nRW50cnkgfSBmcm9tIFwiLi9sb2dlbnRyeS5tanNcIjtcbmltcG9ydCB7IEFMTCwgREVCVUcsIEVSUk9SLCBGQVRBTCwgSU5GTywgT0ZGLCBUUkFDRSwgV0FSTiB9IGZyb20gXCIuL2xvZ2dlci5tanNcIjtcblxuZXhwb3J0IHsgSGFuZGxlciB9O1xuXG4vKipcbiAqIFRoZSBsb2cgaGFuZGxlciBpcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGxvZyBlbnRyaWVzIGFuZCB0aGUgbG9nIGxpc3RlbmVycy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgSGFuZGxlciBleHRlbmRzIEJhc2Uge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0LyoqXG5cdFx0ICogTG9nbGV2ZWxcblx0XHQgKlxuXHRcdCAqIEB0eXBlIHtpbnRlZ2VyfVxuXHRcdCAqL1xuXHRcdHRoaXMubG9nbGV2ZWwgPSBPRkY7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyB0aGUgY2VudHJhbCBsb2cgZnVuY3Rpb24uIHRoaXMgbWV0aG9kIG11c3QgYmVcblx0ICogb3ZlcndyaXR0ZW4gYnkgZGVyaXZlZCBoYW5kbGVycyB3aXRoIHRoZWlyIG93biBsb2dpYy5cblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHtMb2dFbnRyeX0gZW50cnlcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGxvZyhlbnRyeSkge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2UoZW50cnksIExvZ0VudHJ5KTtcblxuXHRcdGlmICh0aGlzLmxvZ2xldmVsIDwgZW50cnkuZ2V0TG9nTGV2ZWwoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIHNldCBsb2dsZXZlbFxuXHQgKlxuXHQgKiBAcGFyYW0ge2ludGVnZXJ9IGxvZ2xldmVsXG5cdCAqIEByZXR1cm4ge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0TG9nTGV2ZWwobG9nbGV2ZWwpIHtcblx0XHR2YWxpZGF0ZUludGVnZXIobG9nbGV2ZWwpO1xuXHRcdHRoaXMubG9nbGV2ZWwgPSBsb2dsZXZlbDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBnZXQgbG9nbGV2ZWxcblx0ICpcblx0ICogQHJldHVybiB7aW50ZWdlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRnZXRMb2dMZXZlbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5sb2dsZXZlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiAgU2V0IGxvZyBsZXZlbCB0byBBbGxcblx0ICpcblx0ICogQHJldHVybiB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRBbGwoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChBTEwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gVHJhY2Vcblx0ICpcblx0ICogQHJldHVybiB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRUcmFjZSgpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKFRSQUNFKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIERlYnVnXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0RGVidWcoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChERUJVRyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBJbmZvXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0SW5mbygpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKElORk8pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gV2FyblxuXHQgKlxuXHQgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0V2FybigpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKFdBUk4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gRXJyb3Jcblx0ICpcblx0ICogQHJldHVybiB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRFcnJvcigpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKEVSUk9SKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIEZhdGFsXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0RmF0YWwoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChGQVRBTCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBPZmZcblx0ICpcblx0ICogQHJldHVybiB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRPZmYoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChPRkYpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnRlZ2VyIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBMb2dFbnRyeSB9O1xuXG4vKipcbiAqIEEgbG9nIGVudHJ5IGZvciB0aGUgbG9nZ2VyXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIExvZ0VudHJ5IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0ludGVnZXJ9IGxvZ2xldmVsXG5cdCAqIEBwYXJhbSB7Li4uKn0gYXJnc1xuXHQgKi9cblx0Y29uc3RydWN0b3IobG9nbGV2ZWwsIC4uLmFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXHRcdHZhbGlkYXRlSW50ZWdlcihsb2dsZXZlbCk7XG5cblx0XHR0aGlzLmxvZ2xldmVsID0gbG9nbGV2ZWw7XG5cdFx0dGhpcy5hcmd1bWVudHMgPSBhcmdzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge2ludGVnZXJyfVxuXHQgKi9cblx0Z2V0TG9nTGV2ZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMubG9nbGV2ZWw7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7YXJyYXl9XG5cdCAqL1xuXHRnZXRBcmd1bWVudHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYXJndW1lbnRzO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXIubWpzXCI7XG5pbXBvcnQgeyBMb2dFbnRyeSB9IGZyb20gXCIuL2xvZ2VudHJ5Lm1qc1wiO1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUludGVnZXIsXG5cdHZhbGlkYXRlT2JqZWN0LFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBMb2dnZXIsIEFMTCwgVFJBQ0UsIERFQlVHLCBJTkZPLCBXQVJOLCBFUlJPUiwgRkFUQUwsIE9GRiB9O1xuXG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IEFMTCA9IDI1NTtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgVFJBQ0UgPSA2NDtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgREVCVUcgPSAzMjtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgSU5GTyA9IDE2O1xuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBXQVJOID0gODtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgRVJST1IgPSA0O1xuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBGQVRBTCA9IDI7XG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IE9GRiA9IDA7XG5cbi8qKlxuICogVGhlIGxvZ2dlciBpcyBhIGNsYXNzIHRoYXQgdGFrZXMgY2FyZSBvZiBsb2dnaW5nLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBMb2dnZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuaGFuZGxlciA9IG5ldyBTZXQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hhbmRsZXJ9IGhhbmRsZXJcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGhhbmRsZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBIYW5kbGVyXG5cdCAqL1xuXHRhZGRIYW5kbGVyKGhhbmRsZXIpIHtcblx0XHR2YWxpZGF0ZU9iamVjdChoYW5kbGVyKTtcblx0XHRpZiAoIShoYW5kbGVyIGluc3RhbmNlb2YgSGFuZGxlcikpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBoYW5kbGVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgSGFuZGxlclwiKTtcblx0XHR9XG5cblx0XHR0aGlzLmhhbmRsZXIuYWRkKGhhbmRsZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7SGFuZGxlcn0gaGFuZGxlclxuXHQgKiBAcmV0dXJuIHtMb2dnZXJ9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgaGFuZGxlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEhhbmRsZXJcblx0ICovXG5cdHJlbW92ZUhhbmRsZXIoaGFuZGxlcikge1xuXHRcdHZhbGlkYXRlT2JqZWN0KGhhbmRsZXIpO1xuXHRcdGlmICghKGhhbmRsZXIgaW5zdGFuY2VvZiBIYW5kbGVyKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGhhbmRsZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBIYW5kbGVyXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuaGFuZGxlci5kZWxldGUoaGFuZGxlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIFRyYWNlIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ1RyYWNlKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW1RSQUNFLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIERlYnVnIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ0RlYnVnKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW0RFQlVHLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIEluZm8gbWVzc2FnZVxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJuIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nSW5mbyguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtJTkZPLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIFdhcm4gbWVzc2FnZVxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJuIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nV2FybiguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtXQVJOLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIEVycm9yIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ0Vycm9yKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW0VSUk9SLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIEZhdGFsIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ0ZhdGFsKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW0ZBVEFMLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogTGFiZWxzXG5cdCAqXG5cdCAqIEBwYXJhbSB7aW50ZWdlcn0gbGV2ZWxcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0TGFiZWwobGV2ZWwpIHtcblx0XHR2YWxpZGF0ZUludGVnZXIobGV2ZWwpO1xuXG5cdFx0aWYgKGxldmVsID09PSBBTEwpIHJldHVybiBcIkFMTFwiO1xuXHRcdGlmIChsZXZlbCA9PT0gVFJBQ0UpIHJldHVybiBcIlRSQUNFXCI7XG5cdFx0aWYgKGxldmVsID09PSBERUJVRykgcmV0dXJuIFwiREVCVUdcIjtcblx0XHRpZiAobGV2ZWwgPT09IElORk8pIHJldHVybiBcIklORk9cIjtcblx0XHRpZiAobGV2ZWwgPT09IFdBUk4pIHJldHVybiBcIldBUk5cIjtcblx0XHRpZiAobGV2ZWwgPT09IEVSUk9SKSByZXR1cm4gXCJFUlJPUlwiO1xuXHRcdGlmIChsZXZlbCA9PT0gRkFUQUwpIHJldHVybiBcIkZBVEFMXCI7XG5cdFx0aWYgKGxldmVsID09PSBPRkYpIHJldHVybiBcIk9GRlwiO1xuXG5cdFx0cmV0dXJuIFwidW5rbm93blwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIExldmVsXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbFxuXHQgKiBAcmV0dXJuIHtpbnRlZ2VyfVxuXHQgKi9cblx0Z2V0TGV2ZWwobGFiZWwpIHtcblx0XHR2YWxpZGF0ZVN0cmluZyhsYWJlbCk7XG5cblx0XHRpZiAobGFiZWwgPT09IFwiQUxMXCIpIHJldHVybiBBTEw7XG5cdFx0aWYgKGxhYmVsID09PSBcIlRSQUNFXCIpIHJldHVybiBUUkFDRTtcblx0XHRpZiAobGFiZWwgPT09IFwiREVCVUdcIikgcmV0dXJuIERFQlVHO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJJTkZPXCIpIHJldHVybiBJTkZPO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJXQVJOXCIpIHJldHVybiBXQVJOO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJFUlJPUlwiKSByZXR1cm4gRVJST1I7XG5cdFx0aWYgKGxhYmVsID09PSBcIkZBVEFMXCIpIHJldHVybiBGQVRBTDtcblx0XHRpZiAobGFiZWwgPT09IFwiT0ZGXCIpIHJldHVybiBPRkY7XG5cblx0XHRyZXR1cm4gMDtcblx0fVxufVxuXG4vKipcbiAqIExvZyB0cmlnZ2VyblxuICpcbiAqIEBwYXJhbSB7aW50ZWdlcn0gbG9nbGV2ZWxcbiAqIEBwYXJhbSB7Kn0gYXJnc1xuICogQHJldHVybiB7TG9nZ2VyfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdHJpZ2dlckxvZyhsb2dsZXZlbCwgLi4uYXJncykge1xuXHRmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVyKSB7XG5cdFx0aGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KGxvZ2xldmVsLCBhcmdzKSk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIjtcbmltcG9ydCB7Q29uc29sZUhhbmRsZXJ9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyL2NvbnNvbGUubWpzXCI7XG5pbXBvcnQge0xvZ0VudHJ5fSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZW50cnkubWpzXCI7XG5pbXBvcnQge1RSQUNFLCBXQVJOLCBERUJVRywgRVJST1IsIEZBVEFMLCBJTkZPfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZ2VyLm1qc1wiO1xuXG5kZXNjcmliZSgnTG9nZ2luZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdDb25zb2xlSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBDb25zb2xlSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKSkudG8uYmUuaW5zdGFuY2VvZihDb25zb2xlSGFuZGxlcilcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KEZBVEFMLCBbMSwgdHJ1ZSwgJ2ZhdGFsJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KFRSQUNFLCBbMSwgdHJ1ZSwgJ3RyYWNlJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KFdBUk4sIFsxLCB0cnVlLCAnd2FybiddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbG9nIHRvIGNvbnNvbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbnNvbGVIYW5kbGVyKCkuc2V0QWxsKCkubG9nKG5ldyBMb2dFbnRyeShERUJVRywgWzEsIHRydWUsICdkZWJ1ZyddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbG9nIHRvIGNvbnNvbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbnNvbGVIYW5kbGVyKCkuc2V0QWxsKCkubG9nKG5ldyBMb2dFbnRyeShFUlJPUiwgWzEsIHRydWUsICdlcnJvciddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbG9nIHRvIGNvbnNvbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbnNvbGVIYW5kbGVyKCkuc2V0QWxsKCkubG9nKG5ldyBMb2dFbnRyeShJTkZPLCBbMSwgdHJ1ZSwgJ2luZm8nXSkpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TG9nZ2VyLCBPRkYsIEFMTCwgVFJBQ0UsIERFQlVHLCBJTkZPLCBXQVJOLCBFUlJPUiwgRkFUQUx9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dnZXIubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0xvZ2dpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnbmV3IExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dUcmFjZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nVHJhY2UoXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nRGVidWcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmxvZ0RlYnVnKFwidGVzdFwiKSkudG8uaW5zdGFuY2VPZihMb2dnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmxvZ0luZm8oKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmxvZ0luZm8oXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nV2FybigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nV2FybihcInRlc3RcIikpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dFcnJvcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nRXJyb3IoXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nRmF0YWwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmxvZ0ZhdGFsKFwidGVzdFwiKSkudG8uaW5zdGFuY2VPZihMb2dnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmdldExldmVsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnQUxMJywgQUxMXSxcbiAgICAgICAgICAgIFsnVFJBQ0UnLCBUUkFDRV0sXG4gICAgICAgICAgICBbJ0RFQlVHJywgREVCVUddLFxuICAgICAgICAgICAgWydJTkZPJywgSU5GT10sXG4gICAgICAgICAgICBbJ1dBUk4nLCBXQVJOXSxcbiAgICAgICAgICAgIFsnRVJST1InLCBFUlJPUl0sXG4gICAgICAgICAgICBbJ0ZBVEFMJywgRkFUQUxdLFxuICAgICAgICAgICAgWydPRkYnLCBPRkZdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KGEgKyAnIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmdldExldmVsKGEpKS50by5iZS5lcXVhbHMoYik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5nZXRMYWJlbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBbXG4gICAgICAgICAgICBbJ0FMTCcsIEFMTF0sXG4gICAgICAgICAgICBbJ1RSQUNFJywgVFJBQ0VdLFxuICAgICAgICAgICAgWydERUJVRycsIERFQlVHXSxcbiAgICAgICAgICAgIFsnSU5GTycsIElORk9dLFxuICAgICAgICAgICAgWydXQVJOJywgV0FSTl0sXG4gICAgICAgICAgICBbJ0VSUk9SJywgRVJST1JdLFxuICAgICAgICAgICAgWydGQVRBTCcsIEZBVEFMXSxcbiAgICAgICAgICAgIFsnT0ZGJywgT0ZGXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdChhICsgJyBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5nZXRMYWJlbChiKSkudG8uYmUuZXF1YWxzKGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiO1xuaW1wb3J0IHtBTEwsIFRSQUNFLCBERUJVRywgSU5GTywgV0FSTiwgRVJST1IsIEZBVEFMLCBPRkZ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dnZXIubWpzXCI7XG5pbXBvcnQge0hhbmRsZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyLm1qc1wiO1xuaW1wb3J0IHtMb2dFbnRyeX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2VudHJ5Lm1qc1wiO1xuXG5kZXNjcmliZSgnTG9nZ2luZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldExvZ0xldmVsKCkuZ2V0TG9nTGV2ZWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbQUxMXSwgW1RSQUNFXSwgW0RFQlVHXSwgW0lORk9dLCBbV0FSTl0sIFtFUlJPUl0sIFtGQVRBTF0sIFtPRkZdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3RoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBzZXQgdmFsdWUgJyArIGEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRMb2dMZXZlbChhKS5nZXRMb2dMZXZlbCgpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIubG9nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLmxvZyhuZXcgTG9nRW50cnkoMCwgXCJ0ZXN0XCIpKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5sb2coKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgaGFuZGxlcjtcblxuICAgICAgICBjbGFzcyBUZXN0SGFuZGxlciBleHRlbmRzIEhhbmRsZXIge1xuICAgICAgICAgICAgbG9nKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgc3VwZXIubG9nKGVudHJ5KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgaGFuZGxlciA9IG5ldyBUZXN0SGFuZGxlcigpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLmxvZyhuZXcgTG9nRW50cnkoMCwgXCJ0ZXN0XCIpKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5sb2coKSB3aXRoIGxvZ2xldmVsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBUZXN0SGFuZGxlcjtcblxuICAgICAgICBiZWZvcmUoKCkgPT4ge1xuICAgICAgICAgICAgVGVzdEhhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEhhbmRsZXIge1xuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxzID0gMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsb2cobG9nbGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1cGVyLmxvZyhsb2dsZXZlbCkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbHMrK1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgWyAvLyBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuICAgICAgICAgICAgW0FMTCwgNl0sXG4gICAgICAgICAgICBbVFJBQ0UsIDZdLFxuICAgICAgICAgICAgW0RFQlVHLCA1XSxcbiAgICAgICAgICAgIFtJTkZPLCA0XSxcbiAgICAgICAgICAgIFtXQVJOLCAzXSxcbiAgICAgICAgICAgIFtFUlJPUiwgMl0sXG4gICAgICAgICAgICBbRkFUQUwsIDFdLFxuICAgICAgICAgICAgW09GRiwgMF1cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMubG9nKCcgKyBhICsgJykgc2hvdWxkIGxvZyAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGVyID0gbmV3IFRlc3RIYW5kbGVyKCkuc2V0TG9nTGV2ZWwoYSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KFRSQUNFKSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KERFQlVHKSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KElORk8pKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkoV0FSTikpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIubG9nKG5ldyBMb2dFbnRyeShFUlJPUikpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIubG9nKG5ldyBMb2dFbnRyeShGQVRBTCkpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGhhbmRsZXIuY2FsbHMpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRMb2dMZXZlbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRMb2dMZXZlbChBTEwpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLmdldExvZ0xldmVsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgbG9nZ2VyIHNob3VsZCBiZSAwJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuZ2V0TG9nTGV2ZWwoKSkudG8uYmUuZXF1YWwoT0ZGKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRBbGwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJyBzaG91bGQgaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0QWxsKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldFRyYWNlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgbG9nZ2VyIHNob3VsZCBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRUcmFjZSgpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXREZWJ1ZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnIHNob3VsZCBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXREZWJ1ZygpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRJbmZvKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldEluZm8oKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0V2FybigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnIHNob3VsZCBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRXYXJuKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldEVycm9yKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldEVycm9yKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldEZhdGFsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldEZhdGFsKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldE9mZigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRPZmYoKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TG9nRW50cnl9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dlbnRyeS5tanNcIjtcblxuXG5kZXNjcmliZSgnTG9nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ25ldyBMb2cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dFbnRyeSgxLCAnYScsICdiJywgJ2MnKSkudG8uaW5zdGFuY2VPZihMb2dFbnRyeSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0xvZy5sb2dsZXZlbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbG9nO1xuXG4gICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbG9nID0gbmV3IExvZ0VudHJ5KDEsIGZhbHNlLCAndGVzdCcsIDk5LCB7YTogdHJ1ZX0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGxvZ2xldmVsIDEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobG9nLmdldExvZ0xldmVsKCkpLnRvLmJlLmVxdWFsKDEpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFyZ3VtZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChsb2cuZ2V0QXJndW1lbnRzKCkpLnRvLmhhdmUuZGVlcC5tZW1iZXJzKFtmYWxzZSwgJ3Rlc3QnLCA5OSwge2E6IHRydWV9XSlcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc0ludGVnZXIsIGlzU3RyaW5nLCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlUXVldWUgfSBmcm9tIFwiLi4vdHlwZXMvb2JzZXJ2YWJsZXF1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gXCIuL3dlYmNvbm5lY3QvbWVzc2FnZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuZXhwb3J0IHsgV2ViQ29ubmVjdCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZWNlaXZlUXVldWVTeW1ib2wgPSBTeW1ib2woXCJyZWNlaXZlUXVldWVcIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzZW5kUXVldWVTeW1ib2wgPSBTeW1ib2woXCJzZW5kUXVldWVcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKlxuICogaGludDogdGhpcyBuYW1lIGlzIHVzZWQgaW4gdGhlIHRlc3RzLiBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgaXQsIHBsZWFzZSBjaGFuZ2UgaXQgaW4gdGhlIHRlc3RzIGFzIHdlbGwuXG4gKi9cbmNvbnN0IGNvbm5lY3Rpb25TeW1ib2wgPSBTeW1ib2woXCJjb25uZWN0aW9uXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtYW51YWxDbG9zZVN5bWJvbCA9IFN5bWJvbChcIm1hbnVhbENsb3NlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi03LjQuMVxuICogQHR5cGUge09iamVjdH1cbiAqL1xuY29uc3QgY29ubmVjdGlvblN0YXR1c0NvZGUgPSB7XG5cdDEwMDA6IFwiTm9ybWFsIGNsb3N1cmVcIixcblx0MTAwMTogXCJHb2luZyBhd2F5XCIsXG5cdDEwMDI6IFwiUHJvdG9jb2wgZXJyb3JcIixcblx0MTAwMzogXCJVbnN1cHBvcnRlZCBkYXRhXCIsXG5cdDEwMDQ6IFwiUmVzZXJ2ZWRcIixcblx0MTAwNTogXCJObyBzdGF0dXMgY29kZVwiLFxuXHQxMDA2OiBcIkNvbm5lY3Rpb24gY2xvc2VkIGFibm9ybWFsbHlcIixcblx0MTAwNzogXCJJbnZhbGlkIGZyYW1lIHBheWxvYWQgZGF0YVwiLFxuXHQxMDA4OiBcIlBvbGljeSB2aW9sYXRpb25cIixcblx0MTAwOTogXCJUaGUgTWVzc2FnZSBpcyB0b28gYmlnXCIsXG5cdDEwMTA6IFwiTWFuZGF0b3J5IGV4dGVuc2lvblwiLFxuXHQxMDExOiBcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHQxMDE1OiBcIlRMUyBoYW5kc2hha2VcIixcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aGlzIHtXZWJDb25uZWN0fVxuICogQHRocm93cyB7RXJyb3J9IE5vIHVybCBkZWZpbmVkIGZvciB3ZWJzb2NrZXQgZGF0YXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gY29ubmVjdFNlcnZlcihyZXNvbHZlLCByZWplY3QpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0Y29uc3QgdXJsID0gc2VsZi5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdGlmICghdXJsKSB7XG5cdFx0cmVqZWN0KFwiTm8gdXJsIGRlZmluZWQgZm9yIHdlYiBjb25uZWN0LlwiKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRsZXQgcHJvbWlzZUFsbHJlZHlSZXNvbHZlZCA9IGZhbHNlO1xuXG5cdGxldCBjb25uZWN0aW9uVGltZW91dCA9IHNlbGYuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi50aW1lb3V0XCIpO1xuXHRpZiAoIWlzSW50ZWdlcihjb25uZWN0aW9uVGltZW91dCkgfHwgY29ubmVjdGlvblRpbWVvdXQgPCAxMDApIHtcblx0XHRjb25uZWN0aW9uVGltZW91dCA9IDUwMDA7XG5cdH1cblxuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRpZiAocHJvbWlzZUFsbHJlZHlSZXNvbHZlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZWplY3QobmV3IEVycm9yKFwiQ29ubmVjdGlvbiB0aW1lb3V0XCIpKTtcblx0fSwgY29ubmVjdGlvblRpbWVvdXQpO1xuXG5cdGxldCByZWNvbm5lY3RUaW1lb3V0ID0gc2VsZi5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0XCIpO1xuXHRpZiAoIWlzSW50ZWdlcihyZWNvbm5lY3RUaW1lb3V0KSB8fCByZWNvbm5lY3RUaW1lb3V0IDwgMTAwMClcblx0XHRyZWNvbm5lY3RUaW1lb3V0ID0gMTAwMDtcblx0bGV0IHJlY29ubmVjdEF0dGVtcHRzID0gc2VsZi5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC5hdHRlbXB0c1wiKTtcblx0aWYgKCFpc0ludGVnZXIocmVjb25uZWN0QXR0ZW1wdHMpIHx8IHJlY29ubmVjdEF0dGVtcHRzIDwgMSlcblx0XHRyZWNvbm5lY3RBdHRlbXB0cyA9IDE7XG5cdGxldCByZWNvbm5lY3RFbmFibGVkID0gc2VsZi5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC5lbmFibGVkXCIpO1xuXHRpZiAocmVjb25uZWN0RW5hYmxlZCAhPT0gdHJ1ZSkgcmVjb25uZWN0RW5hYmxlZCA9IGZhbHNlO1xuXG5cdHNlbGZbbWFudWFsQ2xvc2VTeW1ib2xdID0gZmFsc2U7XG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlcisrO1xuXG5cdGlmIChcblx0XHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCAmJlxuXHRcdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LnJlYWR5U3RhdGUgPCAyXG5cdCkge1xuXHRcdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LmNsb3NlKCk7XG5cdH1cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQgPSBudWxsO1xuXG5cdGNvbnN0IFdlYlNvY2tldCA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiV2ViU29ja2V0XCIpO1xuXHRpZiAoIVdlYlNvY2tldCkge1xuXHRcdHJlamVjdChuZXcgRXJyb3IoXCJXZWJTb2NrZXQgaXMgbm90IGF2YWlsYWJsZVwiKSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KHVybCk7XG5cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0aWYgKGV2ZW50LmRhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG5cdFx0XHRjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXHRcdFx0cmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkZW5kXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0c2VsZltyZWNlaXZlUXVldWVTeW1ib2xdLmFkZChuZXcgTWVzc2FnZShyZWFkZXIucmVzdWx0KSk7XG5cdFx0XHR9KTtcblx0XHRcdHJlYWRlci5yZWFkQXNUZXh0KG5ldyBNZXNzYWdlKGV2ZW50LmRhdGEpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZltyZWNlaXZlUXVldWVTeW1ib2xdLmFkZChNZXNzYWdlLmZyb21KU09OKGV2ZW50LmRhdGEpKTtcblx0XHR9XG5cdH07XG5cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQub25vcGVuID0gZnVuY3Rpb24gKCkge1xuXHRcdHNlbGZbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlciA9IDA7XG5cdFx0aWYgKHR5cGVvZiByZXNvbHZlID09PSBcImZ1bmN0aW9uXCIgJiYgIXByb21pc2VBbGxyZWR5UmVzb2x2ZWQpIHtcblx0XHRcdHByb21pc2VBbGxyZWR5UmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH1cblx0fTtcblxuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5jbG9zZSA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGlmIChzZWxmW21hbnVhbENsb3NlU3ltYm9sXSkge1xuXHRcdFx0c2VsZlttYW51YWxDbG9zZVN5bWJvbF0gPSBmYWxzZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRyZWNvbm5lY3RFbmFibGVkICYmXG5cdFx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIgPCByZWNvbm5lY3RBdHRlbXB0c1xuXHRcdCkge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHNlbGYuY29ubmVjdCgpO1xuXHRcdFx0fSwgcmVjb25uZWN0VGltZW91dCAqIHRoaXNbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlcik7XG5cdFx0fVxuXHR9O1xuXG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0Lm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcblx0XHRpZiAoXG5cdFx0XHRyZWNvbm5lY3RFbmFibGVkICYmXG5cdFx0XHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIgPCByZWNvbm5lY3RBdHRlbXB0c1xuXHRcdCkge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHNlbGYuY29ubmVjdCgpO1xuXHRcdFx0fSwgcmVjb25uZWN0VGltZW91dCAqIHRoaXNbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0eXBlb2YgcmVqZWN0ID09PSBcImZ1bmN0aW9uXCIgJiYgIXByb21pc2VBbGxyZWR5UmVzb2x2ZWQpIHtcblx0XHRcdFx0cHJvbWlzZUFsbHJlZHlSZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIFRoZSBSZXN0QVBJIGlzIGEgY2xhc3MgdGhhdCBlbmFibGVzIGEgUkVTVCBBUEkgc2VydmVyLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9uZXQvd2ViY29ubmVjdC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIFdlYkNvbm5lY3QgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBvcHRpb25zIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgd2ViY29ubmVjdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9O1xuXHRcdH1cblxuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0dGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdID0gbmV3IE9ic2VydmFibGVRdWV1ZSgpO1xuXHRcdHRoaXNbc2VuZFF1ZXVlU3ltYm9sXSA9IG5ldyBPYnNlcnZhYmxlUXVldWUoKTtcblxuXHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0gPSB7fTtcblx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCA9IG51bGw7XG5cdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyID0gMDtcblx0XHR0aGlzW21hbnVhbENsb3NlU3ltYm9sXSA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25uZWN0U2VydmVyLmNhbGwodGhpcywgcmVzb2x2ZSwgcmVqZWN0KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aXNDb25uZWN0ZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbY29ubmVjdGlvblN5bWJvbF0/LnNvY2tldD8ucmVhZHlTdGF0ZSA9PT0gMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9uZXQvd2ViY29ubmVjdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZCBEZWZpbmVzIHRoZSByZXNvdXJjZSB0aGF0IHlvdSB3aXNoIHRvIGZldGNoLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvbi50aW1lb3V0PTUwMDAgRGVmaW5lcyB0aGUgdGltZW91dCBmb3IgdGhlIGNvbm5lY3Rpb24uXG5cdCAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0IFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgdGhlIHJlY29ubmVjdC5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZWNvbm5lY3RzLlxuXHQgKiBAcHJvcGVydHkge0Jvb2x9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmVuYWJsZWQgSWYgdGhlIHJlY29ubmVjdCBpcyBlbmFibGVkLlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dXJsOiB1bmRlZmluZWQsXG5cdFx0XHRjb25uZWN0aW9uOiB7XG5cdFx0XHRcdHRpbWVvdXQ6IDUwMDAsXG5cdFx0XHRcdHJlY29ubmVjdDoge1xuXHRcdFx0XHRcdHRpbWVvdXQ6IDEwMDAsXG5cdFx0XHRcdFx0YXR0ZW1wdHM6IDEsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNsb3NlcyB0aGUgY29ubmVjdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2RlPTEwMDBdIFRoZSBjbG9zZSBjb2RlLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3JlYXNvbj1cIlwiXSBUaGUgY2xvc2UgcmVhc29uLlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi03LjQuMVxuXHQgKi9cblx0Y2xvc2Uoc3RhdHVzQ29kZSwgcmVhc29uKSB7XG5cdFx0aWYgKCFpc0ludGVnZXIoc3RhdHVzQ29kZSkgfHwgc3RhdHVzQ29kZSA8IDEwMDAgfHwgc3RhdHVzQ29kZSA+IDQ5OTkpIHtcblx0XHRcdHN0YXR1c0NvZGUgPSAxMDAwO1xuXHRcdH1cblx0XHRpZiAoIWlzU3RyaW5nKHJlYXNvbikpIHtcblx0XHRcdHJlYXNvbiA9IFwiXCI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbbWFudWFsQ2xvc2VTeW1ib2xdID0gdHJ1ZTtcblx0XHRcdFx0aWYgKHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0KSB7XG5cdFx0XHRcdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQuY2xvc2Uoc3RhdHVzQ29kZSwgcmVhc29uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQb2xscyB0aGUgcmVjZWl2ZSBxdWV1ZSBmb3IgbmV3IG1lc3NhZ2VzLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNZXNzYWdlfVxuXHQgKi9cblx0cG9sbCgpIHtcblx0XHRyZXR1cm4gdGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLnBvbGwoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcmUgdGhlcmUgYW55IG1lc3NhZ2VzIGluIHRoZSByZWNlaXZlIHF1ZXVlP1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0ZGF0YVJlY2VpdmVkKCkge1xuXHRcdHJldHVybiAhdGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLmlzRW1wdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgTWVzc2FnZSBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlLCBidXQgZG8gbm90IHJlbW92ZSBpdC5cblx0ICpcblx0ICogQHJldHVybiB7T2JqZWN0fVxuXHQgKi9cblx0cGVlaygpIHtcblx0XHRyZXR1cm4gdGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLnBlZWsoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXNbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5jb250YWluc09ic2VydmVyKG9ic2VydmVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge01lc3NhZ2V8T2JqZWN0fSBtZXNzYWdlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRzZW5kKG1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0aWYgKHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LnJlYWR5U3RhdGUgIT09IDEpIHtcblx0XHRcdFx0cmVqZWN0KFwidGhlIHNvY2tldCBpcyBub3QgcmVhZHlcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgUXVldWUgfSBmcm9tIFwiLi9xdWV1ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sLCBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlckxpc3QgfSBmcm9tIFwiLi9vYnNlcnZlcmxpc3QubWpzXCI7XG5cbmV4cG9ydCB7IE9ic2VydmFibGVRdWV1ZSB9O1xuXG4vKipcbiAqIEFuIG9ic2VydmFibGUgcXVldWUgaXMgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgYXJlIHByb2Nlc3NlZCBvbmUgYWZ0ZXIgYW5vdGhlciAoZmlyc3QgaW4sIGZpcnN0IG91dCkuXG4gKlxuICogYFF1ZXVlLmFkZCgpYCBhbmQgYFF1ZXVlLmNsZWFyKClgIG5vdGlmeSBhbGwgb2JzZXJ2ZXJzLlxuICpcbiAqIEBzaW5jZSAzLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEFuIG9ic2VydmFibGUgUXVldWUgKEZpZm8pXG4gKi9cbmNsYXNzIE9ic2VydmFibGVRdWV1ZSBleHRlbmRzIFF1ZXVlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0b2JzZXJ2ZXJzOiBuZXcgT2JzZXJ2ZXJMaXN0KCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9vYnNlcnZhYmxlcXVldWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgbmV3IGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UXVldWV9XG5cdCAqL1xuXHRhZGQodmFsdWUpIHtcblx0XHRzdXBlci5hZGQodmFsdWUpO1xuXHRcdHRoaXMubm90aWZ5T2JzZXJ2ZXJzKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCBlbnRyaWVzXG5cdCAqXG5cdCAqIEByZXR1cm4ge1F1ZXVlfVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0c3VwZXIuY2xlYXIoKTtcblx0XHR0aGlzLm5vdGlmeU9ic2VydmVycygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5vYnNlcnZlcnMuYXR0YWNoKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5vYnNlcnZlcnMuZGV0YWNoKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBOb3RpZnkgYWxsIG9ic2VydmVyXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRub3RpZnlPYnNlcnZlcnMoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLm9ic2VydmVycy5ub3RpZnkodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0ub2JzZXJ2ZXJzLmNvbnRhaW5zKG9ic2VydmVyKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZSB9O1xuXG5jb25zdCBkYXRhU3ltYm9sID0gU3ltYm9sKFwiQEBkYXRhXCIpO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdlYlNvY2tldCBtZXNzYWdlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIE1lc3NhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIGEgV2ViU29ja2V0IG1lc3NhZ2UuXG4gKi9cbmNsYXNzIE1lc3NhZ2UgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihkYXRhKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2RhdGFTeW1ib2xdID0gdmFsaWRhdGVPYmplY3QoZGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcmF3IG1lc3NhZ2UuXG5cdCAqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICovXG5cdGdldERhdGEoKSB7XG5cdFx0cmV0dXJuIHRoaXNbZGF0YVN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHRvSlNPTigpIHtcblx0XHRyZXR1cm4gdGhpc1tkYXRhU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ganNvblxuXHQgKiBAcmV0dXJuIHtNZXNzYWdlfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c3RhdGljIGZyb21KU09OKGpzb24pIHtcblx0XHR2YWxpZGF0ZVN0cmluZyhqc29uKTtcblx0XHRyZXR1cm4gbmV3IE1lc3NhZ2UoSlNPTi5wYXJzZShqc29uKSk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtXZWJDb25uZWN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL25ldC93ZWJjb25uZWN0Lm1qc1wiO1xuaW1wb3J0IHtNZXNzYWdlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL25ldC93ZWJjb25uZWN0L21lc3NhZ2UubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtpbml0V2ViU29ja2V0fSBmcm9tIFwiLi4vLi4vdXRpbC93ZWJzb2NrZXQubWpzXCI7XG5cbmNvbnN0IHRlc3RVcmwgPSBcIndzczovL3dzLnBvc3RtYW4tZWNoby5jb20vcmF3XCJcblxuZGVzY3JpYmUoJ1dlYnNvY2tldCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBkcyA9IHVuZGVmaW5lZFxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRXZWJTb2NrZXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGlmIChkcykge1xuICAgICAgICAgICAgZHMuY2xvc2UoKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2l0aG91dCB0aGlzLCB0aGUgbm9kZSB0ZXN0IHdpbGwgaGFuZyBcbiAgICAgICAgZm9yIChjb25zdCBzeW0gb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhkcykpIHtcbiAgICAgICAgICAgIGlmIChzeW0udG9TdHJpbmcoKSA9PT0gJ1N5bWJvbChjb25uZWN0aW9uKScpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRzW3N5bV0/LnNvY2tldD8udGVybWluYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGRzW3N5bV0/LnNvY2tldD8uWyd0ZXJtaW5hdGUnXSgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZG9uZSgpXG4gICAgfSk7XG5cblxuICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtIGRhdGEnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3QoIHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgfSlcblxuICAgICAgICBkcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGRzLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcigoKT0+IHtcbiAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGRzLnNlbmQoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJIZWxsbyBXb3JsZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBjb25uZWN0JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgICAgICByZWNvbm5lY3Q6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIHNlbmQgbWVzc2FnZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3Qoe1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICAgICAgcmVjb25uZWN0OiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgZHMuYXR0YWNoT2JzZXJ2ZXIobmV3IE9ic2VydmVyKCgpPT4ge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGV4cGVjdChkcy5kYXRhUmVjZWl2ZWQoKSkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGRzLnBvbGwoKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QobXNnKS50by5iZS5pbnN0YW5jZU9mKE1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBtc2cuZ2V0RGF0YSgpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkYXRhKS50by5iZS5kZWVwLmVxdWFsKHttZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJ9KVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgZHMuc2VuZCh7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIlxuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KS50aW1lb3V0KDEwMDAwKTtcblxufSk7XG4iLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5mdW5jdGlvbiBpbml0V2ViU29ja2V0KCkge1xuXG4vLyAgICBjb25zdCBpc0Jyb3dzZXIgPSB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyAmJiAnW29iamVjdCBXaW5kb3ddJyA9PT0gd2luZG93LnRvU3RyaW5nLmNhbGwod2luZG93KVxuICAgIGNvbnN0IGlzTm9kZSA9IHR5cGVvZiBnbG9iYWwgPT09ICdvYmplY3QnICYmICdbb2JqZWN0IGdsb2JhbF0nID09PSBnbG9iYWwudG9TdHJpbmcuY2FsbChnbG9iYWwpXG5cblxuICAgIGlmICghaXNOb2RlKSB7XG4gICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGltcG9ydChcIndzXCIpLnRoZW4oKHdzKSA9PiB7XG4gICAgICAgIGdldEdsb2JhbCgpLldlYlNvY2tldCA9IGNsYXNzIGV4dGVuZHMgd3NbJ1dlYlNvY2tldCddIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHVybCwgcHJvdG9jb2xzKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIodXJsLCBwcm90b2NvbHMsIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZHNoYWtlVGltZW91dDogMTAwMCxcbiAgICAgICAgICAgICAgICAgICAgbWF4UGF5bG9hZDogMTAyNCAqIDEwMjQgKiAxMDI0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICB9KTtcblxuXG59XG5cbmV4cG9ydCB7aW5pdFdlYlNvY2tldH0iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TWVzc2FnZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qc1wiO1xuXG5kZXNjcmliZSgnTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGl0KCdjb25zdHJ1Y3Qgd2l0aG91dGggcGFyYW1ldGVycyBzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBNZXNzYWdlKCk7XG4gICAgICAgICAgICBkb25lKG5ldyBFcnJvcignc2hvdWxkIHRocm93JykpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH1cblxuICAgIH0pXG4gICAgXG4gICAgaXQoJ2Zyb20ganNvbiBzaG91bGQgJyAsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBcImlkXCI6IFwiMTIzXCIsXG4gICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXN0XCIsXG4gICAgICAgICAgICBcImRhdGFcIjoge1xuICAgICAgICAgICAgICAgIFwidGVzdFwiOiBcInRlc3RcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBNZXNzYWdlLmZyb21KU09OKEpTT04uc3RyaW5naWZ5KGpzb24pKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1lc3NhZ2UuZ2V0RGF0YSgpO1xuICAgICAgICBleHBlY3QoZGF0YS5pZCkudG8uZXF1YWwoanNvbi5pZCk7XG4gICAgICAgIGV4cGVjdChkYXRhLnR5cGUpLnRvLmVxdWFsKGpzb24udHlwZSk7XG4gICAgICAgIGV4cGVjdChkYXRhLmRhdGEpLnRvLmRlZXAuZXF1YWwoanNvbi5kYXRhKTtcbiAgICAgICAgZG9uZSgpO1xuICAgIH0pXG4gICAgXG4gICAgaXQgKFwidG8ganNvbiBzaG91bGRcIiwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgXCJpZFwiOiBcIjEyM1wiLFxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGVzdFwiLFxuICAgICAgICAgICAgXCJkYXRhXCI6IHtcbiAgICAgICAgICAgICAgICBcInRlc3RcIjogXCJ0ZXN0XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gbmV3IE1lc3NhZ2Uob2JqKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpO1xuICAgICAgICBleHBlY3QoZGF0YSkudG8uZXF1YWwoJ3tcImlkXCI6XCIxMjNcIixcInR5cGVcIjpcInRlc3RcIixcImRhdGFcIjp7XCJ0ZXN0XCI6XCJ0ZXN0XCJ9fScpO1xuICAgICAgICBkb25lKCk7XG4gICAgfSlcblxuXG5cbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBWZXJzaW9uLCBnZXRNb25zdGVyVmVyc2lvbiB9O1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9iamVjdCBjb250YWlucyBhIHNlbWFudGljIHZlcnNpb24gbnVtYmVyXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3ZlcnNpb24tMS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAYXV0aG9yIHNjaHVrYWkgR21iSFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSB2ZXJzaW9uIG9iamVjdCBjb250YWlucyBhIHNlbWFudGljIHZlcnNpb24gbnVtYmVyXG4gKi9cbmNsYXNzIFZlcnNpb24gZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBtYWpvclxuXHQgKiBAcGFyYW0gbWlub3Jcblx0ICogQHBhcmFtIHBhdGNoXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtYWpvciBpcyBub3QgYSBudW1iZXJcblx0ICogQHRocm93cyB7RXJyb3J9IG1pbm9yIGlzIG5vdCBhIG51bWJlclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gcGF0Y2ggaXMgbm90IGEgbnVtYmVyXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihtYWpvciwgbWlub3IsIHBhdGNoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChcblx0XHRcdHR5cGVvZiBtYWpvciA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0bWlub3IgPT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0cGF0Y2ggPT09IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgcGFydHMgPSBtYWpvci50b1N0cmluZygpLnNwbGl0KFwiLlwiKTtcblx0XHRcdG1ham9yID0gcGFyc2VJbnQocGFydHNbMF0gfHwgMCk7XG5cdFx0XHRtaW5vciA9IHBhcnNlSW50KHBhcnRzWzFdIHx8IDApO1xuXHRcdFx0cGF0Y2ggPSBwYXJzZUludChwYXJ0c1syXSB8fCAwKTtcblx0XHR9XG5cblx0XHRpZiAobWFqb3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWFqb3IgdmVyc2lvbiBpcyB1bmRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0aWYgKG1pbm9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG1pbm9yID0gMDtcblx0XHR9XG5cblx0XHRpZiAocGF0Y2ggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGF0Y2ggPSAwO1xuXHRcdH1cblxuXHRcdHRoaXMubWFqb3IgPSBwYXJzZUludChtYWpvcik7XG5cdFx0dGhpcy5taW5vciA9IHBhcnNlSW50KG1pbm9yKTtcblx0XHR0aGlzLnBhdGNoID0gcGFyc2VJbnQocGF0Y2gpO1xuXG5cdFx0aWYgKGlzTmFOKHRoaXMubWFqb3IpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYWpvciBpcyBub3QgYSBudW1iZXJcIik7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTmFOKHRoaXMubWlub3IpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaW5vciBpcyBub3QgYSBudW1iZXJcIik7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTmFOKHRoaXMucGF0Y2gpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJwYXRjaCBpcyBub3QgYSBudW1iZXJcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy92ZXJzaW9uXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiBgJHt0aGlzLm1ham9yfS4ke3RoaXMubWlub3J9LiR7dGhpcy5wYXRjaH1gO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJldHVybnMgMCBpZiBlcXVhbCwgLTEgaWYgdGhlIG9iamVjdCB2ZXJzaW9uIGlzIGxlc3MgYW5kIDEgaWYgZ3JlYXRlclxuXHQgKiB0aGFuIHRoZSBjb21wYXJlZCB2ZXJzaW9uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFZlcnNpb259IHZlcnNpb24gVmVyc2lvbiB0byBjb21wYXJlXG5cdCAqIEByZXR1cm4ge251bWJlcn1cblx0ICovXG5cdGNvbXBhcmVUbyh2ZXJzaW9uKSB7XG5cdFx0aWYgKHZlcnNpb24gaW5zdGFuY2VvZiBWZXJzaW9uKSB7XG5cdFx0XHR2ZXJzaW9uID0gdmVyc2lvbi50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgdmVyc2lvbiAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBleGNlcHRpb25cIik7XG5cdFx0fVxuXG5cdFx0aWYgKHZlcnNpb24gPT09IHRoaXMudG9TdHJpbmcoKSkge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYSA9IFt0aGlzLm1ham9yLCB0aGlzLm1pbm9yLCB0aGlzLnBhdGNoXTtcblx0XHRjb25zdCBiID0gdmVyc2lvbi5zcGxpdChcIi5cIik7XG5cdFx0Y29uc3QgbGVuID0gTWF0aC5tYXgoYS5sZW5ndGgsIGIubGVuZ3RoKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDEpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0KGFbaV0gJiYgIWJbaV0gJiYgcGFyc2VJbnQoYVtpXSkgPiAwKSB8fFxuXHRcdFx0XHRwYXJzZUludChhW2ldKSA+IHBhcnNlSW50KGJbaV0pXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHQoYltpXSAmJiAhYVtpXSAmJiBwYXJzZUludChiW2ldKSA+IDApIHx8XG5cdFx0XHRcdHBhcnNlSW50KGFbaV0pIDwgcGFyc2VJbnQoYltpXSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDA7XG5cdH1cbn1cblxubGV0IG1vbnN0ZXJWZXJzaW9uO1xuXG4vKipcbiAqIFZlcnNpb24gb2YgbW9uc3RlclxuICpcbiAqIEByZXR1cm4ge1ZlcnNpb259XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBhdXRob3Igc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGdldE1vbnN0ZXJWZXJzaW9uKCkge1xuXHRpZiAobW9uc3RlclZlcnNpb24gaW5zdGFuY2VvZiBWZXJzaW9uKSB7XG5cdFx0cmV0dXJuIG1vbnN0ZXJWZXJzaW9uO1xuXHR9XG5cblx0LyoqIGRvbid0IHRvdWNoLCByZXBsYWNlZCBieSBtYWtlIHdpdGggcGFja2FnZS5qc29uIHZlcnNpb24gKi9cblx0bW9uc3RlclZlcnNpb24gPSBuZXcgVmVyc2lvbihcIjMuODguMFwiKTtcblxuXHRyZXR1cm4gbW9uc3RlclZlcnNpb247XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VmVyc2lvbiwgZ2V0TW9uc3RlclZlcnNpb259IGZyb20gXCIuLi8uLi9zb3VyY2UvdHlwZXMvdmVyc2lvbi5tanNcIjtcblxuZGVzY3JpYmUoJ01vbnN0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmdldE1vbnN0ZXJWZXJzaW9uKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBtb25zdGVyVmVyc2lvblxuXG4gICAgICAgIC8qKiBkb25cdTAwQjR0IHRvdWNoLCByZXBsYWNlZCBieSBtYWtlIHdpdGggcGFja2FnZS5qc29uIHZlcnNpb24gKi9cbiAgICAgICAgbW9uc3RlclZlcnNpb24gPSBuZXcgVmVyc2lvbihcIjMuODguMFwiKVxuXG4gICAgICAgIGxldCBtID0gZ2V0TW9uc3RlclZlcnNpb24oKTtcblxuICAgICAgICBpdCgnc2hvdWxkICcgKyBtb25zdGVyVmVyc2lvbiArICcgaXMgJyArIG0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChtLmNvbXBhcmVUbyhtb25zdGVyVmVyc2lvbikpLmlzLmVxdWFsKDApO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NvbnZlcnRUb1BpeGVscywgZ2V0RGV2aWNlRFBJfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9kaW1lbnNpb24ubWpzXCI7XG5pbXBvcnQge2dldFdpbmRvd30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NLCBpc0Jyb3dzZXIsIEpTRE9NRXhwb3J0IGFzIEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7ZGV0ZWN0UnVudGltZUVudmlyb25tZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvcnVudGltZS5tanNcIjtcblxuXG5mdW5jdGlvbiBnZXRNb2NrV2luZG93KGRwaSkge1xuXG4gICAgaWYoZGV0ZWN0UnVudGltZUVudmlyb25tZW50KCkgPT09ICdicm93c2VyJykge1xuICAgICAgICByZXR1cm4gZ2V0V2luZG93KCk7XG4gICAgfVxuICAgIFxuICAgIFxuICAgIGNvbnN0IGRvbSA9IG5ldyBKU0RPTSgnJywge1xuICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZSxcbiAgICAgICAgcmVzb3VyY2VzOiAndXNhYmxlJyxcbiAgICB9KTtcblxuICAgIGRvbS53aW5kb3cubWF0Y2hNZWRpYSA9IChxdWVyeSkgPT4ge1xuICAgICAgICBjb25zdCBkcGlSZWdleCA9IC9cXChtYXgtcmVzb2x1dGlvbjogKFxcZCspZHBpXFwpLztcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBxdWVyeS5tYXRjaChkcGlSZWdleCk7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhEcGkgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICAgICAgICAgICAgcmV0dXJuIHttYXRjaGVzOiBkcGkgPD0gbWF4RHBpfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7bWF0Y2hlczogZmFsc2V9O1xuICAgIH07XG5cbiAgICByZXR1cm4gZG9tLndpbmRvdztcbn1cblxuZGVzY3JpYmUoJ2RpbWVuc2lvbicsICgpID0+IHtcbiAgICBsZXQgY3VycmVudEVudmlyb25tZW50O1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy9jaGFpRG9tKGdldERvY3VtZW50KCkpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgY29uc3QgdGVzdERwaSA9IDk2O1xuICAgICAgICBjb25zdCB0ZXN0V2luZG93ID0gZ2V0TW9ja1dpbmRvdyh0ZXN0RHBpKTtcbiAgICAgICAgZ2V0R2xvYmFsKCkud2luZG93ID0gdGVzdFdpbmRvdztcblxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZGVsZXRlIGdldEdsb2JhbCgpLndpbmRvdztcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjb252ZXJ0VG9QaXhlbHMnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGNvbnZlcnQgcHggdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvUGl4ZWxzKCcxMDBweCcpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoMTAwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiB0aGUgaW5wdXQgdmFsdWUgaGFzIGFuIGludmFsaWQgZm9ybWF0XCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGludmFsaWRWYWx1ZSA9IFwiaW52YWxpZF92YWx1ZVwiO1xuXG4gICAgICAgICAgICBjb25zdCBlcnJvckZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnZlcnRUb1BpeGVscyhpbnZhbGlkVmFsdWUpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZXhwZWN0KGVycm9yRm4pLnRvLnRocm93KEVycm9yLCBgSW52YWxpZCB2YWx1ZSBmb3JtYXQ6ICR7aW52YWxpZFZhbHVlfWApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcInNob3VsZCBoYW5kbGUgbmVnYXRpdmUgdmFsdWVzIGNvcnJlY3RseVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZWdhdGl2ZVZhbHVlID0gXCItMTBweFwiO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSAtMTA7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1BpeGVscyhuZWdhdGl2ZVZhbHVlKTtcblxuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBjb252ZXJ0IGVtIHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXN0RWxlbWVudC5zdHlsZS5mb250U2l6ZSA9ICcxNnB4JztcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9QaXhlbHMoJzJlbScsIHRlc3RFbGVtZW50LCB0ZXN0RWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgzMik7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGVzdEVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBjb252ZXJ0IHJlbSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGVzdEVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSAnMTZweCc7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGVzdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9QaXhlbHMoJzJyZW0nLCB0ZXN0RWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgzMik7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0ZXN0RWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGNvbnZlcnQgcGVyY2VudGFnZSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGVzdEVsZW1lbnQuc3R5bGUud2lkdGggPSAnNTAwcHgnO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXN0RWxlbWVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1BpeGVscygnNTAlJywgdGVzdEVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoMjUwKTtcblxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXN0RWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIHVuc3VwcG9ydGVkIHVuaXRzJywgKCkgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGNvbnZlcnRUb1BpeGVscygnMTB1bnN1cHBvcnRlZFVuaXQnKSkudG8udGhyb3coJ1Vuc3VwcG9ydGVkIHVuaXQ6IHVuc3VwcG9ydGVkVW5pdCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2dldERldmljZURQSScsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgZGV2aWNlIERQSScsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3REcGkgPSA5NjtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RXaW5kb3cgPSBnZXRNb2NrV2luZG93KHRlc3REcGkpO1xuICAgICAgICAgICAgZ2V0R2xvYmFsKCkud2luZG93ID0gdGVzdFdpbmRvdztcblxuICAgICAgICAgICAgY29uc3QgZGV2aWNlRHBpID0gZ2V0RGV2aWNlRFBJKCk7XG4gICAgICAgICAgICBleHBlY3QoZGV2aWNlRHBpKS50by5lcXVhbCh0ZXN0RHBpICogdGVzdFdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKTtcblxuICAgICAgICAgICAgZGVsZXRlIGdldEdsb2JhbCgpLndpbmRvdztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjYWNoZSB0aGUgcmVzdWx0IGFuZCByZXR1cm4gdGhlIHNhbWUgdmFsdWUnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RHBpID0gOTY7XG4gICAgICAgICAgICBjb25zdCB0ZXN0V2luZG93ID0gZ2V0TW9ja1dpbmRvdyh0ZXN0RHBpKTtcbiAgICAgICAgICAgIGdldEdsb2JhbCgpLndpbmRvdyA9IHRlc3RXaW5kb3c7XG5cbiAgICAgICAgICAgIGNvbnN0IGRldmljZURwaTEgPSBnZXREZXZpY2VEUEkoKTtcbiAgICAgICAgICAgIGNvbnN0IGRldmljZURwaTIgPSBnZXREZXZpY2VEUEkoKTtcbiAgICAgICAgICAgIGV4cGVjdChkZXZpY2VEcGkxKS50by5lcXVhbChkZXZpY2VEcGkyKTtcblxuICAgICAgICAgICAgZGVsZXRlIGdldEdsb2JhbCgpLndpbmRvdztcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5jb25zdCBFTlZfQVdTX0xBTUJEQSA9IFwiYXdzLWxhbWJkYVwiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfR09PR0xFX0ZVTkNUSU9OUyA9IFwiZ29vZ2xlLWZ1bmN0aW9uc1wiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfRUxFQ1RST04gPSBcImVsZWN0cm9uXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9OT0RFID0gXCJub2RlXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9CUk9XU0VSID0gXCJicm93c2VyXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9XRUJfV09SS0VSID0gXCJ3ZWItd29ya2VyXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9ERU5PID0gXCJkZW5vXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9VTktOT1dOID0gXCJ1bmtub3duXCI7XG5cbi8qKlxuICogRGV0ZWN0cyBhbmQgcmV0dXJucyB0aGUgY3VycmVudCBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIC0gJ2F3cy1sYW1iZGEnOiBBV1MgTGFtYmRhIGVudmlyb25tZW50XG4gKiAtICdnb29nbGUtZnVuY3Rpb25zJzogR29vZ2xlIENsb3VkIEZ1bmN0aW9ucyBlbnZpcm9ubWVudFxuICogLSAnZWxlY3Ryb24nOiBFbGVjdHJvbiBlbnZpcm9ubWVudFxuICogLSAnbm9kZSc6IE5vZGUuanMgZW52aXJvbm1lbnRcbiAqIC0gJ2Jyb3dzZXInOiBCcm93c2VyIGVudmlyb25tZW50XG4gKiAtICd3ZWItd29ya2VyJzogV2ViIFdvcmtlciBlbnZpcm9ubWVudFxuICogLSAnZGVubyc6IERlbm8gZW52aXJvbm1lbnRcbiAqIC0gJ3JlYWN0LW5hdGl2ZSc6IFJlYWN0IE5hdGl2ZSBlbnZpcm9ubWVudFxuICogLSAndW5rbm93bic6IFVua25vd24gZW52aXJvbm1lbnRcbiAqXG4gKiBAc2luY2UgMy4zNC4wXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBkZXRlY3RlZCBydW50aW1lIGVudmlyb25tZW50LiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuICovXG5mdW5jdGlvbiBkZXRlY3RSdW50aW1lRW52aXJvbm1lbnQoKSB7XG5cdC8vIEFXUyBMYW1iZGEgZW52aXJvbm1lbnRcblx0aWYgKFxuXHRcdHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0cHJvY2Vzcy5lbnYgIT0gbnVsbCAmJlxuXHRcdHByb2Nlc3MuZW52LkFXU19MQU1CREFfRlVOQ1RJT05fTkFNRVxuXHQpIHtcblx0XHRyZXR1cm4gRU5WX0FXU19MQU1CREE7XG5cdH1cblxuXHQvLyBHb29nbGUgQ2xvdWQgRnVuY3Rpb25zIGVudmlyb25tZW50XG5cdGlmIChcblx0XHR0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdHByb2Nlc3MuZW52ICE9IG51bGwgJiZcblx0XHRwcm9jZXNzLmVudi5GVU5DVElPTl9OQU1FXG5cdCkge1xuXHRcdHJldHVybiBFTlZfR09PR0xFX0ZVTkNUSU9OUztcblx0fVxuXG5cdC8vIE5vZGUuanMgZW52aXJvbm1lbnRcblx0aWYgKFxuXHRcdHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0cHJvY2Vzcy52ZXJzaW9ucyAhPSBudWxsICYmXG5cdFx0cHJvY2Vzcy52ZXJzaW9ucy5ub2RlICE9IG51bGxcblx0KSB7XG5cdFx0Ly8gRWxlY3Ryb24gZW52aXJvbm1lbnRcblx0XHRpZiAocHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbiAhPSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gRU5WX0VMRUNUUk9OO1xuXHRcdH1cblx0XHRyZXR1cm4gRU5WX05PREU7XG5cdH1cblxuXHQvLyBCcm93c2VyIGVudmlyb25tZW50XG5cdGlmIChcblx0XHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0dHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHR0eXBlb2YgbmF2aWdhdG9yLnVzZXJBZ2VudCA9PT0gXCJzdHJpbmdcIlxuXHQpIHtcblx0XHQvLyBXZWIgV29ya2VyIGVudmlyb25tZW50XG5cdFx0aWYgKHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJldHVybiBFTlZfV0VCX1dPUktFUjtcblx0XHR9XG5cdFx0cmV0dXJuIEVOVl9CUk9XU0VSO1xuXHR9XG5cblx0Ly8gRGVubyBlbnZpcm9ubWVudFxuXHRpZiAodHlwZW9mIERlbm8gIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRyZXR1cm4gRU5WX0RFTk87XG5cdH1cblxuXHQvLyBVbmtub3duIGVudmlyb25tZW50XG5cdHJldHVybiBFTlZfVU5LTk9XTjtcbn1cblxuZXhwb3J0IHtcblx0RU5WX0FXU19MQU1CREEsXG5cdEVOVl9HT09HTEVfRlVOQ1RJT05TLFxuXHRFTlZfRUxFQ1RST04sXG5cdEVOVl9OT0RFLFxuXHRFTlZfQlJPV1NFUixcblx0RU5WX1dFQl9XT1JLRVIsXG5cdEVOVl9ERU5PLFxuXHRFTlZfVU5LTk9XTixcblx0ZGV0ZWN0UnVudGltZUVudmlyb25tZW50LFxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge1N0eWxlc2hlZXR9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldC5tanNcIjtcbmltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG5cbmA7XG5cblxuZGVzY3JpYmUoJ1N0eWxlc2hlZXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKHtcbiAgICAgICAgICAgIHJ1blNjcmlwdHM6IFwiZGFuZ2Vyb3VzbHlcIixcbiAgICAgICAgICAgIHJlc291cmNlczogXCJ1c2FibGVcIlxuICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpXG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnU3R5bGVzaGVldCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnY29ubmVjdCgpLmF2YWlsYWJsZSgpJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3Qgc3R5bGVzaGVldCA9IG5ldyBTdHlsZXNoZWV0KHtcbiAgICAgICAgICAgICAgICBocmVmOiBuZXcgRGF0YVVybCgnJywgJ3RleHQvY3NzJykudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzdHlsZXNoZWV0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHN0eWxlc2hlZXQuZ2V0T3B0aW9uKCdpZCcpXG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnRXh0ZXJuYWwgU3R5bGVzaGVldCcsICgpID0+IHtcblxuICAgICAgICBsZXQgaWQgPSBuZXcgSUQoJ1N0eWxlc2hlZXQnKS50b1N0cmluZygpO1xuICAgICAgICBsZXQgc3R5bGVzaGVldCwgdXJsID0gJ2h0dHBzOi8vYWx2aW5lLmlvL21haW4ubWluLmNzcyc7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIHN0eWxlc2hlZXQgPSBuZXcgU3R5bGVzaGVldCh7XG4gICAgICAgICAgICAgICAgaHJlZjogdXJsLFxuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhcHBlbmQgYW5kIHJlbW92ZSBTdHlsZXNoZWV0ICcsIChkb25lKSA9PiB7XG5cbiAgICAgICAgICAgIGV4cGVjdChzdHlsZXNoZWV0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICBzdHlsZXNoZWV0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3R5bGVzaGVldC5pc0Nvbm5lY3RlZCgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdHlsZXNoZWV0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc3R5bGVzaGVldC5pc0Nvbm5lY3RlZCgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHN0eWxlc2hlZXQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cblxubGV0IGFkZGVkTm9kZXMsIG11dGF0aW9ub2JzZXJ2ZXI7XG5cbmZ1bmN0aW9uIGluaXQoKSB7XG5cbiAgICBhZGRlZE5vZGVzID0gW107XG4gICAgbXV0YXRpb25vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcbiAgICAgICAgbXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2NoaWxkTGlzdCcgJiYgbXV0YXRpb24ucmVtb3ZlZE5vZGVzKSB7XG5cbiAgICAgICAgICAgICAgICBtdXRhdGlvbi5hZGRlZE5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWROb2Rlcy5wdXNoKG4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpIHtcblxuICAgIGlmIChtdXRhdGlvbm9ic2VydmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaW5pdCgpXG4gICAgfVxuXG4gICAgbXV0YXRpb25vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKSwge2NoaWxkTGlzdDogdHJ1ZX0pO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKSB7XG4gICAgbXV0YXRpb25vYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cbiAgICBmb3IgKGNvbnN0IG4gb2YgYWRkZWROb2Rlcykge1xuICAgICAgICBuLnJlbW92ZSgpO1xuICAgIH1cbn0iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtMaW5rfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9saW5rLm1qc1wiO1xuaW1wb3J0IHtEYXRhVXJsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5pbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcblxuY2hhaS51c2UoY2hhaURvbSk7XG5cblxuXG5kZXNjcmliZSgnTGluaycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0xpbmsoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0KDUwMDApO1xuXG4gICAgICAgIGl0KCdjb25uZWN0KCkuYXZhaWxhYmxlKCknLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBsaW5rID0gbmV3IExpbmsoe1xuICAgICAgICAgICAgICAgIGhyZWY6IG5ldyBEYXRhVXJsKCcnLCAndGV4dC9jc3MnKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHJlbDogJ3N0eWxlc2hlZXQnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGluay5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnRXh0ZXJuYWwgTGluaycsICgpID0+IHtcbiAgICAgICAgdGhpcy50aW1lb3V0KDUwMDApO1xuXG4gICAgICAgIGxldCBpZCA9IG5ldyBJRCgnbGluaycpLnRvU3RyaW5nKCk7XG4gICAgICAgIGxldCBsaW5rLCB1cmwgPSAnaHR0cHM6Ly9hbHZpbmUuaW8vbWFpbi5taW4uY3NzJztcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgbGluayA9IG5ldyBMaW5rKHtcbiAgICAgICAgICAgICAgICBocmVmOiB1cmwsXG4gICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgIHJlbDogJ3N0eWxlc2hlZXQnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYXBwZW5kIGFuZCByZW1vdmUgTGluayAnLCAoZG9uZSkgPT4ge1xuXG4gICAgICAgICAgICBleHBlY3QobGluay5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgbGluay5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxpbmsuaXNDb25uZWN0ZWQoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobGluay5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBsaW5rLmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGxpbmsuaXNDb25uZWN0ZWQoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChsaW5rLmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtTY3JpcHR9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL3NjcmlwdC5tanNcIjtcbmltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG5cbmA7XG5cblxuZGVzY3JpYmUoJ1NjcmlwdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1NjcmlwdCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2V0RXZlbnRUeXBlcygpJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0gbmV3IFNjcmlwdCh7XG4gICAgICAgICAgICAgICAgc3JjOiBuZXcgRGF0YVVybCgnJywgJ3RleHQvamF2YXNjcmlwdCcpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxuICAgICAgICAgICAgICAgIGRlZmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBub21vZHVsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbm9uY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByZWZlcnJlcnBvbGljeTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2NyaXB0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gc2NyaXB0LmdldE9wdGlvbignaWQnKVxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0V4dGVybmFsIEpTJywgKCkgPT4ge1xuXG4gICAgICAgIGxldCBpZCA9IG5ldyBJRCgnc2NyaXB0JykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHNlcnZlciwgc2NyaXB0LCB1cmwgPSAnaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGF5enIuanMvMi4yLjIvbGF5enIubWluLmpzJztcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgc2NyaXB0ID0gbmV3IFNjcmlwdCh7XG4gICAgICAgICAgICAgICAgc3JjOiB1cmwsXG4gICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxuICAgICAgICAgICAgICAgIGRlZmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBub21vZHVsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbm9uY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByZWZlcnJlcnBvbGljeTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnLFxuICAgICAgICAgICAgICAgIGlkOiBpZFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2FwcGVuZCBhbmQgcmVtb3ZlIHNjcmlwdCAnLCAoZG9uZSkgPT4ge1xuXG4gICAgICAgICAgICBleHBlY3Qoc2NyaXB0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICBzY3JpcHQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChzY3JpcHQuaXNDb25uZWN0ZWQoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3NyYz1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzY3JpcHQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tzcmM9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBzY3JpcHQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc2NyaXB0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbc3JjPVwiJyArIHVybCArICdcIl0nKSkudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3NyYz1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHNjcmlwdC5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7RGF0YX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvZGF0YS5tanNcIjtcbmltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG5cbmA7XG5cblxuZGVzY3JpYmUoJ0RhdGEnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZmV0Y2hSZWZlcmVuY2UsIHJldHVyblN0YXR1cywgbXV0YXRpb25vYnNlcnZlciwgYWRkZWROb2RlcyA9IFtdO1xuXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuXG4gICAgICAgIHJldHVyblN0YXR1cyA9IDIwMDtcbiAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICBpZiAoIXVybCkgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVybCcpXG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmV0dXJuU3RhdHVzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH07XG5cblxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnRGF0YSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2V0RXZlbnRUeXBlcygpJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBEYXRhKHtcbiAgICAgICAgICAgICAgICBzcmM6IG5ldyBEYXRhVXJsKCcnLCAndGV4dC9qYXZhc2NyaXB0JykudG9TdHJpbmcoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRhdGEuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0V4dGVybmFsIERhdGEnLCAoKSA9PiB7XG5cbiAgICAgICAgbGV0IGlkID0gbmV3IElEKCdkYXRhJykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHNlcnZlciwgZGF0YSwgdXJsID0gJ2h0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2xheXpyLmpzLzIuMi4yL2xheXpyLm1pbi5qcyc7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIGRhdGEgPSBuZXcgRGF0YSh7XG4gICAgICAgICAgICAgICAgc3JjOiB1cmwsXG4gICAgICAgICAgICAgICAgaWQ6IGlkXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnZGF0YSBpcyBub3QgY29ubmVjdGVkJywgKCkgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KGRhdGEuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2Nvbm5lY3QgYW5kIGNoZWNrIGF2YWlsYWJpbGl0eScsIChkb25lKSA9PiB7XG5cbiAgICAgICAgICAgIGRhdGEuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkYXRhLmlzQ29ubmVjdGVkKCksICdpc0Nvbm5lY3RlZCAxJykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3R5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJdJyksICdleGlzdHMgMScpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5wYXJlbnRFbGVtZW50O1xuXG5cbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZGF0YS5pc0Nvbm5lY3RlZCgpLCAnaXNDb25uZWN0ZWQgMicpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIl0nKSwgJ2V4aXN0cyAyJykubm90LnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgZGF0YS5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkYXRhLmlzQ29ubmVjdGVkKCksICdpc0Nvbm5lY3RlZCAzJykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXScpLCAnZXhpc3RzIDMnKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIl0nKSwgJ2V4aXN0cyA0Jykubm90LnRvLmV4aXN0O1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZGF0YS5pc0Nvbm5lY3RlZCgpLCAnaXNDb25uZWN0ZWQgNCcpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcycsICgpID0+IHtcbiAgICBsZXQgZWxlbWVudDtcbiAgICBsZXQgb3B0aW9ucztcbiAgICBsZXQgaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcztcblxuICAgIGJlZm9yZSggZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2RvbS91dGlsL2luaXQtb3B0aW9ucy1mcm9tLWF0dHJpYnV0ZXMubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzID0gbVsnaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyddO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgb3B0aW9ucyA9IHt1cmw6IFwiXCIsIGtleToge3N1YmtleTogXCJcIiwgY2FzZVNlbnNpdGl2ZTogdHJ1ZX19O1xuICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgb3B0aW9ucyB3aXRoIG1hdGNoaW5nIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcsICdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLWtleS1zdWJrZXknLCAndGVzdCcpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LnN1YmtleSkudG8uZXF1YWwoJ3Rlc3QnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IG1vZGlmeSBvcHRpb25zIHdpdGhvdXQgbWF0Y2hpbmcgYXR0cmlidXRlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJycpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKCcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaWdub3JlIGF0dHJpYnV0ZXMgd2l0aG91dCB0aGUgY29ycmVjdCBwcmVmaXgnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXNvbWUtb3B0aW9uLXVybCcsICdodHRwczovL2V4YW1wbGUuY29tJyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpZ25vcmUgYXR0cmlidXRlcyB3aXRoIGludmFsaWQgb3B0aW9uIHBhdGhzJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1ub25leGlzdGVudCcsICd2YWx1ZScpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChvcHRpb25zKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgbWFwcGluZyBmb3IgYSBzaW5nbGUgYXR0cmlidXRlJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi11cmwnLCAnZXhhbXBsZScpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICh2YWx1ZSkgPT4gJ2h0dHBzOi8vJyArIHZhbHVlICsgJy5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJ2h0dHBzOi8vZXhhbXBsZS5jb20nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgbWFwcGluZyBmb3IgYSBuZXN0ZWQgYXR0cmlidXRlJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1rZXktc3Via2V5JywgJzEyMycpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ2tleS5zdWJrZXknOiAodmFsdWUpID0+IHBhcnNlSW50KHZhbHVlLCAxMCkgKiAyXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKFwiMjQ2XCIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBtdWx0aXBsZSBtYXBwaW5ncycsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24ta2V5LXN1YmtleScsICcxMjMnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAodmFsdWUpID0+ICdodHRwczovLycgKyB2YWx1ZSArICcuY29tJyxcbiAgICAgICAgICAgICdrZXkuc3Via2V5JzogKHZhbHVlKSA9PiBwYXJzZUludCh2YWx1ZSwgMTApICogMlxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LnN1YmtleSkudG8uZXF1YWwoXCIyNDZcIik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBtYXBwaW5ncyBmb3Igbm9uLWV4aXN0aW5nIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogKHZhbHVlKSA9PiAnaHR0cHM6Ly8nICsgdmFsdWUgKyAnLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBtYXBwaW5ncyBmb3IgaW52YWxpZCBvcHRpb24gcGF0aHMnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLW5vbmV4aXN0ZW50JywgJ3ZhbHVlJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAnbm9uZXhpc3RlbnQnOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwob3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IG1hcHBpbmcgb25seSB0byBzcGVjaWZpZWQgYXR0cmlidXRlcycsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24ta2V5LXN1YmtleScsICcxMjMnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAodmFsdWUpID0+ICdodHRwczovLycgKyB2YWx1ZSArICcuY29tJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LnN1YmtleSkudG8uZXF1YWwoJzEyMycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYXBwbHkgbWFwcGluZyBpZiBub3QgYSBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAnaHR0cHM6Ly9leGFtcGxlLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnZXhhbXBsZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBtYXBwaW5nIHdpdGggY3VzdG9tIHByZWZpeCcsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtY3VzdG9tLW9wdGlvbi11cmwnLCAnZXhhbXBsZScpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICh2YWx1ZSkgPT4gJ2h0dHBzOi8vJyArIHZhbHVlICsgJy5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nLCAnZGF0YS1jdXN0b20tb3B0aW9uLScpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYXBwbHkgbWFwcGluZyB3aXRoIGluY29ycmVjdCBjdXN0b20gcHJlZml4JywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1jdXN0b20tb3B0aW9uLXVybCcsICdleGFtcGxlJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogKHZhbHVlKSA9PiAnaHR0cHM6Ly8nICsgdmFsdWUgKyAnLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IGNhc2Ugc2Vuc2l0aXZlIG1hcHBpbmcnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLWtleS1jYXNlU2Vuc2l0aXZlJywgJ2ZhbHNlJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5rZXkuY2FzZVNlbnNpdGl2ZSkudG8uZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG59KTtcbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSAnY2hhaSc7XG5pbXBvcnQge2V4dHJhY3RLZXlzfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RvbS91dGlsL2V4dHJhY3Qta2V5cy5tanNcIjtcblxuXG5kZXNjcmliZSgnZXh0cmFjdEtleXMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleHRyYWN0IGtleXMgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBmaXJzdE5hbWU6ICdKb2huJyxcbiAgICAgICAgICAgIGxhc3ROYW1lOiAnRG9lJyxcbiAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgICBzdHJlZXQ6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBuZXcgTWFwKFtcbiAgICAgICAgICAgIFsnZmlyc3RuYW1lJywgJ2ZpcnN0TmFtZSddLFxuICAgICAgICAgICAgWydsYXN0bmFtZScsICdsYXN0TmFtZSddLFxuICAgICAgICAgICAgWydhZGRyZXNzLXN0cmVldCcsICdhZGRyZXNzLnN0cmVldCddLFxuICAgICAgICAgICAgWydhZGRyZXNzLWNpdHknLCAnYWRkcmVzcy5jaXR5J10sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RLZXlzKG9iaik7XG5cbiAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20ocmVzdWx0KSkpLnRvLmVxdWFsKEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20oZXhwZWN0ZWQpKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHVzZSBjdXN0b20ga2V5IGFuZCB2YWx1ZSBzZXBhcmF0b3JzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBmaXJzdE5hbWU6ICdKb2huJyxcbiAgICAgICAgICAgIGxhc3ROYW1lOiAnRG9lJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBleHBlY3RlZCA9IG5ldyBNYXAoW1xuICAgICAgICAgICAgWydwcmVmaXgrZmlyc3RuYW1lJywgJ3ByZWZpeCtmaXJzdE5hbWUnXSxcbiAgICAgICAgICAgIFsncHJlZml4K2xhc3RuYW1lJywgJ3ByZWZpeCtsYXN0TmFtZSddLFxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0S2V5cyhvYmosICdwcmVmaXgnLCAnKycsICcrJyk7XG5cbiAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20ocmVzdWx0KSkpLnRvLmVxdWFsKEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20oZXhwZWN0ZWQpKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2hlY2sgaWYgdmFsdWUgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgZmlyc3ROYW1lOiAnSm9obicsXG4gICAgICAgICAgICBsYXN0TmFtZTogJ0RvZScsXG4gICAgICAgICAgICBhZGRyZXNzOiBudWxsLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gbmV3IE1hcChbXG4gICAgICAgICAgICBbJ2ZpcnN0bmFtZScsICdmaXJzdE5hbWUnXSxcbiAgICAgICAgICAgIFsnbGFzdG5hbWUnLCAnbGFzdE5hbWUnXSxcbiAgICAgICAgICAgIFsnYWRkcmVzcycsICdhZGRyZXNzJ10sXG4gICAgICAgICAgICBcbiAgICAgICAgXSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdEtleXMob2JqKTtcblxuICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShyZXN1bHQpKSkudG8uZXF1YWwoSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShleHBlY3RlZCkpKTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBtb3JlIHRlc3QgY2FzZXMgYXMgbmVlZGVkXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwsIGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgRmFjdG9yeSB9O1xuXG4vKipcbiAqIEEgZmFjdG9yeSBmb3IgY3JlYXRpbmcgd29ya2VyIGluc3RhbmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHNtYWxsIGZhY3RvcnkgdG8gY3JlYXRlIHdvcmtlclxuICovXG5jbGFzcyBGYWN0b3J5IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHdvcmtlcjogbmV3IFdlYWtNYXAoKSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB3b3JrZXIgZnJvbSBhIFVSTFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXNzYWdlSGFuZGxlclxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBlcnJvckhhbmRsZXJcblx0ICogQHJldHVybiB7V29ya2VyfVxuXHQgKi9cblx0Y3JlYXRlRnJvbVVSTCA9IGZ1bmN0aW9uICh1cmwsIG1lc3NhZ2VIYW5kbGVyLCBlcnJvckhhbmRsZXIpIHtcblx0XHRpZiAodXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHRjb25zdCB3b3JrZXJDbGFzcyA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiV29ya2VyXCIpO1xuXHRcdHZhciB3b3JrZXIgPSBuZXcgd29ya2VyQ2xhc3ModmFsaWRhdGVTdHJpbmcodXJsKSk7XG5cblx0XHRpZiAoaXNGdW5jdGlvbihtZXNzYWdlSGFuZGxlcikpIHtcblx0XHRcdHdvcmtlci5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIuY2FsbCh3b3JrZXIsIGV2ZW50KTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKGlzRnVuY3Rpb24oZXJyb3JIYW5kbGVyKSkge1xuXHRcdFx0d29ya2VyLm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0ZXJyb3JIYW5kbGVyLmNhbGwod29ya2VyLCBldmVudCk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiB3b3JrZXI7XG5cdH07XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB3b3JrZXIgZnJvbSBhIHNjcmlwdFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudFxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXNzYWdlSGFuZGxlclxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBlcnJvckhhbmRsZXJcblx0ICogQHJldHVybiB7V29ya2VyfVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0FQSS9VUkwvY3JlYXRlT2JqZWN0VVJMXG5cdCAqL1xuXHRjcmVhdGVGcm9tU2NyaXB0ID0gZnVuY3Rpb24gKGNvbnRlbnQsIG1lc3NhZ2VIYW5kbGVyLCBlcnJvckhhbmRsZXIpIHtcblx0XHRjb25zdCBibG9iRnVuY3Rpb24gPSBuZXcgZ2V0R2xvYmFsRnVuY3Rpb24oXCJCbG9iXCIpO1xuXHRcdGNvbnN0IGJsb2IgPSBuZXcgYmxvYkZ1bmN0aW9uKFt2YWxpZGF0ZVN0cmluZyhjb250ZW50KV0sIHtcblx0XHRcdHR5cGU6IFwic2NyaXB0L2phdmFzY3JpcHRcIixcblx0XHR9KTtcblxuXHRcdGNvbnN0IHVybCA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiVVJMXCIpLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHRjb25zdCB3b3JrZXIgPSB0aGlzLmNyZWF0ZUZyb21VUkwodXJsLCBtZXNzYWdlSGFuZGxlciwgZXJyb3JIYW5kbGVyKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wid29ya2VyXCJdLnNldCh3b3JrZXIsIHVybCk7XG5cblx0XHRyZXR1cm4gd29ya2VyO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBUZXJtaW5hdGUgdGhlIHdvcmtlciBhbmQgY2FsbCByZXZva2VPYmplY3RVUkwgaWYgbmVjZXNzYXJ5LlxuXHQgKlxuXHQgKiBAcGFyYW0gd29ya2VyXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLldvcmtlci5GYWN0b3J5fVxuXHQgKi9cblx0dGVybWluYXRlKHdvcmtlcikge1xuXHRcdGNvbnN0IHdvcmtlckNsYXNzID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJXb3JrZXJcIik7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZSh3b3JrZXIsIHdvcmtlckNsYXNzKTtcblxuXHRcdHdvcmtlci50ZXJtaW5hdGUoKTtcblxuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXVtcIndvcmtlclwiXS5oYXMod29ya2VyKSkge1xuXHRcdFx0Y29uc3QgdXJsID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ3b3JrZXJcIl0uZ2V0KHdvcmtlcik7XG5cdFx0XHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge0ZhY3Rvcnl9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3dvcmtlci9mYWN0b3J5Lm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET00sIGlzTm9kZX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5kZXNjcmliZSgnV29ya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgaWYgKGlzTm9kZSgpKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsWydVUkwnXSwgJ2NyZWF0ZU9iamVjdFVSTCcsIHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIvZXhhbXBsZS5tanNcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGdsb2JhbFsnV29ya2VyJ10gPSBjbGFzcyB7XG4gICAgICAgICAgICAgICAgdGVybWluYXRlKCkge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvbmVycm9yKCkge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvbm1lc3NhZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGEgPSB0eXBlb2YgZ2xvYmFsWydXb3JrZXInXTtcbiAgICAgICAgICAgIGxldCBhMSA9IHR5cGVvZiBXb3JrZXI7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGpzZG9tID0gaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0ZhY3RvcnknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2NyZWF0ZSB3b3JrZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgRmFjdG9yeSgpO1xuICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gZmFjdG9yeS5jcmVhdGVGcm9tU2NyaXB0KCdjb25zb2xlLmxvZyhcImhlbGxvIHdvcmxkXCIpOycpXG4gICAgICAgICAgICBleHBlY3Qod29ya2VyKS5pcy5pbnN0YW5jZW9mKFdvcmtlcik7XG5cbiAgICAgICAgICAgIGV4cGVjdChmYWN0b3J5LnRlcm1pbmF0ZSh3b3JrZXIpKS5pcy5pbnN0YW5jZW9mKEZhY3RvcnkpXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5cbmltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtQcm94eU9ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPHRlbXBsYXRlIGlkPVwiY3VycmVudFwiPlxuICAgICAgICA8bGkgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmN1cnJlbnQgfCB0b2pzb25cIj48L2xpPlxuICAgIDwvdGVtcGxhdGU+XG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgICAgIDx1bCBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiY3VycmVudCBwYXRoOmEuYlwiPlxuICAgICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgICAgICA8dWwgZGF0YS1tb25zdGVyLWluc2VydD1cImN1cnJlbnQgcGF0aDphLmIgfCBkb2l0XCI+XG4gICAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBpZD1cInRlc3QzXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmEuYlwiPlxuICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLmNcIiBpZD1cImlucHV0MVwiPlxuICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2hlY2tlZCBwYXRoOmEuY2hlY2tib3hcIiB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiY2hlY2tib3hcIiBpZD1cImNoZWNrYm94XCI+XG4gICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEudGV4dFwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInRleHRcIiBpZD1cInRleHRcIj5cbiAgICAgICAgICAgIDxpbnB1dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNoZWNrZWQgcGF0aDphLnJhZGlvXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyMVwiIGlkPVwicmFkaW9cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInIyXCIgaWQ9XCJyMlwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicnhcIiBpZD1cInJ4XCI+XG5cbiAgICAgICAgICAgIDxzZWxlY3QgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEuc2VsZWN0XCIgbmFtZT1cInNlbGVjdFwiIGlkPVwic2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm90aGVyLXZhbHVlXCI+dmFsdWUxPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTI8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICA8c2VsZWN0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLm11bHRpc2VsZWN0XCIgbmFtZT1cIm11bHRpc2VsZWN0XCIgbXVsdGlwbGUgaWQ9XCJtdWx0aXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUxPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWU0PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm90aGVyLXZhbHVlNVwiPnZhbHVlNTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPVwidGV4dGFyZWFcIiBpZD1cInRleHRhcmVhXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEudGV4dGFyZWFcIj48L3RleHRhcmVhPlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOnRleHQgfCB0b2xvd2VyXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOnRleHQgfCBjYWxsOm15Zm9ybWF0dGVyXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJzdGF0aWM6aGVsbG9cXFxcIFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuYDtcblxubGV0IGh0bWwzID0gYFxuXG4gICAgPHRlbXBsYXRlIGlkPVwibXlpbm5lcmlkXCI+XG4gICAgICAgIDxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpteWlubmVyaWQgfCB0b2pzb25cIj48L3NwYW4+XG4gICAgPC90ZW1wbGF0ZT5cblxuICAgIDx0ZW1wbGF0ZSBpZD1cIm15aWRcIj5cbiAgICAgICAgPHAgZGF0YS1tb25zdGVyLWluc2VydD1cIm15aW5uZXJpZCBwYXRoOmEuYlwiPjwvcD5cbiAgICA8L3RlbXBsYXRlPlxuXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWluc2VydD1cIm15aWQgcGF0aDphLmJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cblxuYDtcblxubGV0IGh0bWw0ID0gYFxuICAgIDxkaXY+XG4gICAgICAgIDxmb3JtIGlkPVwiZm9ybTFcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cImNoZWNrZWRcIiBuYW1lPVwiY2hlY2tib3hcIiBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6c3RhdGVcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJ0ZXh0XCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyMVwiIGlkPVwicjFcIiBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6cmFkaW9cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInIyXCIgaWQ9XCJyMlwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpyYWRpb1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicnhcIiBpZD1cInJ4XCIgZGF0YS1jb21tZW50PVwibm90IGNhbGxlZCBiZWNhdXNlIG5vIGJpbmQgYXR0cmlidXRlXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG5hbWU9XCJidXR0b25cIj5cblxuICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwic2VsZWN0MVwiIGlkPVwic2VsZWN0MVwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpzZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUyPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwic2VsZWN0MlwiIG11bHRpcGxlIGlkPVwic2VsZWN0MlwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDptdWx0aXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUxPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWU0PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTU8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT1cInRleHRhcmVhXCIgaWQ9XCJ0ZXh0YXJlYVwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDp0ZXh0YXJlYVwiPlxuICAgICAgICAgICAgXG4gICAgICAgIDwvdGV4dGFyZWE+XG5cbiAgICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuXG5gO1xuXG5cblxuZGVzY3JpYmUoJ0RPTScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBVcGRhdGVyID0gbnVsbDtcbiAgICBcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgfVxuICAgICAgICBpbml0SlNET00ob3B0aW9ucykudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXBkYXRlci5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFVwZGF0ZXIgPSBtLlVwZGF0ZXI7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ3Rlc3QgR2V0dGVyICYmIFNldHRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzZXRFdmVudFR5cGVzKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgVXBkYXRlcihlbGVtZW50KS5zZXRFdmVudFR5cGVzKFsndG91Y2gnXSkpLnRvLmJlLmluc3RhbmNlb2YoVXBkYXRlcik7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaXQoJ2dldFN1YmplY3QoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSB7YTogMX07XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBVcGRhdGVyKGVsZW1lbnQsIHN1YmplY3QpLmdldFN1YmplY3QoKS5hKS50by5iZS5lcXVhbCgxKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCd0ZXN0IGNvbnRyb2wgbWV0aG9kcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdlbmFibGVFdmVudFByb2Nlc3NpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBVcGRhdGVyKGVsZW1lbnQpLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpKS50by5iZS5pbnN0YW5jZW9mKFVwZGF0ZXIpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ2Rpc2FibGVFdmVudFByb2Nlc3NpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBVcGRhdGVyKGVsZW1lbnQpLmRpc2FibGVFdmVudFByb2Nlc3NpbmcoKSkudG8uYmUuaW5zdGFuY2VvZihVcGRhdGVyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCd0ZXN0IEVycm9ycycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBVcGRhdGVyKCkpLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgdGhyb3cgdmFsdWUgaXMgd3JvbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBVcGRhdGVyKGVsZW1lbnQsIG51bGwpKS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHRocm93IEVycm9yOiB0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG5cbiAgICAgICAgICAgICAgICBsZXQgdSA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogW11cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IHUucnVuKCk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwic2hvdWxkIG5ldmVyIGNhbGxlZCFcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlKS5pcy5pbnN0YW5jZU9mKEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlICsgXCJcIikudG8uYmUuZXF1YWwoJ0Vycm9yOiB0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcblxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCduZXcgVXBkYXRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZG9jdW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ1JlcGVhdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBidWlsZCA2IGxpIGVsZW1lbnRzJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzAnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICcxJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnMid9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICc0J30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnNSd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8bGkgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmEuYi4nICsgaSArICcgfCB0b2pzb25cIiBkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cImN1cnJlbnQtJyArIGkgKyAnXCI+e1wiaVwiOlwiJyArIGkgKyAnXCJ9PC9saT4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZSkpXG4gICAgICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sNDtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnRXZlbnRoYW5kbGluZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IHVwZGF0ZXIsIGZvcm0xLCBwcm94eW9ic2VydmVyO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlciA9IG5ldyBQcm94eU9ic2VydmVyKHt9KVxuICAgICAgICAgICAgICAgIHVwZGF0ZXIgPSBuZXcgVXBkYXRlcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybTEnKSwgcHJveHlvYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgZm9ybTEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybTEnKTtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgLy8gaGVyZSBjbGljayBldmVudHMgYXJlIHRocm93biBvbiB0aGUgY2hlY2tib3ggYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSB2YWx1ZSBpcyBvYnNlcnZlZCB2aWEgdGhlIHByb3h5b2JzZXJ2ZXIuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSBjaGVja2JveCBjbGljayBldmVudHMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gdXBkYXRlci5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLmlzLmVxdWFsKHByb3h5b2JzZXJ2ZXIuZ2V0U3ViamVjdCgpKTtcblxuICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IFsnY2hlY2tlZCcsIHVuZGVmaW5lZCwgJ2NoZWNrZWQnXTtcbiAgICAgICAgICAgICAgICAvLyBoZXJlIHRoZSBub3RhdGlvbiB3aXRoIGZ1bmN0aW9uIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldFN1YmplY3QoKVsnc3RhdGUnXSAhPT0gZSkgZG9uZShuZXcgRXJyb3IodGhpcy5nZXRTdWJqZWN0KClbJ3N0YXRlJ10gKyAnIHNob3VsZCAnICsgZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0xLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPWNoZWNrYm94XScpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMClcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm0xLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPWNoZWNrYm94XScpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfSwgMTApXG5cblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgcmFkaW8gY2xpY2sgZXZlbnRzIDEnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gdXBkYXRlci5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLmlzLmVxdWFsKHByb3h5b2JzZXJ2ZXIuZ2V0U3ViamVjdCgpKTtcblxuICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IFsncjEnLCAncjInLCAncjEnXTtcbiAgICAgICAgICAgICAgICBsZXQgY2xpY2tUYXJnZXRzID0gWydyMicsICdyMSddXG4gICAgICAgICAgICAgICAgLy8gaGVyZSB0aGUgbm90YXRpb24gd2l0aCBmdW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHRoaXMgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5nZXRTdWJqZWN0KClbJ3JhZGlvJ107XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBlKSBkb25lKG5ldyBFcnJvcih2ICsgJyBzaG91bGQgJyArIGUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2xpY2tUYXJnZXRzLnNoaWZ0KCkpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMClcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyMScpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfSwgMTApXG5cbiAgICAgICAgICAgICAgICAvLyBubyBoYW5kbGVyIC8vIGJpbmRcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3J4JykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9LCAyMClcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgc2VsZWN0IGNsaWNrIGV2ZW50cyAyJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdDEnKTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS5pcy5lcXVhbChwcm94eW9ic2VydmVyLmdldFN1YmplY3QoKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXhwZWN0ZWQgPSBbJ3ZhbHVlMicsICd2YWx1ZTEnLCAndmFsdWUyJ107XG4gICAgICAgICAgICAgICAgLy8gaGVyZSB0aGUgbm90YXRpb24gd2l0aCBmdW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHRoaXMgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5nZXRTdWJqZWN0KClbJ3NlbGVjdCddO1xuICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gZSkgZG9uZShuZXcgRXJyb3IodiArICcgc2hvdWxkICcgKyBlKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IHNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9PT0gMSA/IDAgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHZhbHVlIGFuZCBzaW11bGF0ZSBjbGljayBldmVudCBmb3IgYnViYmxlXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuY2xpY2soKTtcblxuICAgICAgICAgICAgICAgIH0sIDIwKVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgdGV4dGFyZWEgZXZlbnRzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCB0ZXh0YXJlYUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dGFyZWEnKTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS5pcy5lcXVhbChwcm94eW9ic2VydmVyLmdldFN1YmplY3QoKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXhwZWN0ZWQgPSBbJ3Rlc3RYJywgJ2xvcmVtIGlwc3VtJywgJyddO1xuICAgICAgICAgICAgICAgIGxldCB0ZXN0VmFsdWVzID0gW1wibG9yZW0gaXBzdW1cIiwgXCJcIl07XG4gICAgICAgICAgICAgICAgLy8gaGVyZSB0aGUgbm90YXRpb24gd2l0aCBmdW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHRoaXMgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5nZXRTdWJqZWN0KClbJ3RleHRhcmVhJ107XG4gICAgICAgICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoZSkpIGRvbmUobmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHYpICsgJyBzaG91bGQgJyArIEpTT04uc3RyaW5naWZ5KGUpKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhRWxlbWVudC52YWx1ZSA9IHRlc3RWYWx1ZXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYUVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdmFsdWUgYW5kIHNpbXVsYXRlIGNsaWNrIGV2ZW50IGZvciBidWJibGVcbiAgICAgICAgICAgICAgICAgICAgdGV4dGFyZWFFbGVtZW50LnZhbHVlID0gXCJ0ZXN0WFwiO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYUVsZW1lbnQuY2xpY2soKTtcblxuICAgICAgICAgICAgICAgIH0sIDIwKVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgbXVsdGlwbGUgc2VsZWN0IGV2ZW50cycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3QyJyk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVyLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSB1cGRhdGVyLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkuaXMuZXF1YWwocHJveHlvYnNlcnZlci5nZXRTdWJqZWN0KCkpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGV4cGVjdGVkID0gW1xuICAgICAgICAgICAgICAgICAgICBbJ3ZhbHVlMSddLFxuICAgICAgICAgICAgICAgICAgICBbJ3ZhbHVlMicsICd2YWx1ZTMnLCAndmFsdWU0J10sXG4gICAgICAgICAgICAgICAgICAgIFsndmFsdWUxJywgJ3ZhbHVlNCddLFxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICBsZXQgdGVzdFNlbGVjdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgICAgIFt0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICAgIC8vIGhlcmUgdGhlIG5vdGF0aW9uIHdpdGggZnVuY3Rpb24gaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoZSB0aGlzIHBvaW50ZXIgaXMgc2V0LlxuICAgICAgICAgICAgICAgIHByb3h5b2JzZXJ2ZXIuYXR0YWNoT2JzZXJ2ZXIobmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZSA9IGV4cGVjdGVkLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlID09PSB1bmRlZmluZWQgJiYgZXhwZWN0ZWQubGVuZ3RoID09PSAwKSBkb25lKG5ldyBFcnJvcigndG8gbWFueSBjYWxscycpKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IHRoaXMuZ2V0U3ViamVjdCgpWydtdWx0aXNlbGVjdCddO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoZSkpIGRvbmUobmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHYpICsgJyBzaG91bGQgJyArIEpTT04uc3RyaW5naWZ5KGUpKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGVzdFNlbGVjdGlvbnMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB2WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1sxXS5zZWxlY3RlZCA9IHZbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzJdLnNlbGVjdGVkID0gdlsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbM10uc2VsZWN0ZWQgPSB2WzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMV0uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzJdLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1szXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LmNsaWNrKCk7XG5cbiAgICAgICAgICAgICAgICB9LCAyMClcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnUmVwbGFjZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBhZGQgbG93ZXIgaGVsbG8gYW5kIEhFTExPeWVzIScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuXG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBcIkhBTExPXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cblxuICAgICAgICAgICAgICAgIGQuc2V0Q2FsbGJhY2soJ215Zm9ybWF0dGVyJywgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgKyAneWVzISdcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IHRvbG93ZXJcIj5oYWxsbzwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IGNhbGw6bXlmb3JtYXR0ZXJcIj5IQUxMT3llcyE8L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJzdGF0aWM6aGVsbG9cXFxcIFwiPmhlbGxvIDwvZGl2PicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlKSlcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwzO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdSZXBsYWNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkICcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBuZXcgVXBkYXRlcihcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICcwJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcblxuXG4gICAgICAgICAgICAgICAgZC5ydW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGQpLmlzLmVxdWFsKCdvYmplY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXYgZGF0YS1tb25zdGVyLWluc2VydD1cIm15aWQgcGF0aDphLmJcIj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxwIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJteWlubmVyaWQgcGF0aDphLmJcIiBkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm15aWQtMFwiPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPHNwYW4gZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmEuYi4wIHwgdG9qc29uXCIgZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJteWlubmVyaWQtMFwiPntcImlcIjpcIjBcIn08L3NwYW4+Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZSkpXG4gICAgICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgnQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjaGFuZ2UgYXR0cmlidXRlcycsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDMnKVxuXG4gICAgICAgICAgICAgICAgbGV0IHRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dCcpXG4gICAgICAgICAgICAgICAgZXhwZWN0KHRleHQudmFsdWUpLnRvLmJlLmVxdWFsKFwiXCIpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHJhZGlvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhZGlvJylcbiAgICAgICAgICAgICAgICBleHBlY3QocmFkaW8uY2hlY2tlZCkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBsZXQgY2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hlY2tib3gnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChjaGVja2JveC5jaGVja2VkKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0JylcbiAgICAgICAgICAgICAgICBleHBlY3Qoc2VsZWN0LnNlbGVjdGVkSW5kZXgpLnRvLmJlLmVxdWFsKDApO1xuXG4gICAgICAgICAgICAgICAgbGV0IG11bHRpc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ211bHRpc2VsZWN0JylcbiAgICAgICAgICAgICAgICBleHBlY3QobXVsdGlzZWxlY3Quc2VsZWN0ZWRJbmRleCkudG8uYmUuZXF1YWwoLTEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RleHRhcmVhJylcbiAgICAgICAgICAgICAgICBleHBlY3QodGV4dGFyZWEudmFsdWUpLnRvLmJlLmVxdWFsKFwiXCIpO1xuXG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYjogXCJkaXYtY2xhc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcImhlbGxvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogXCJoZWxsb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvOiBcInRydWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYTogXCJ0ZXN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlzZWxlY3Q6IFsndmFsdWUzJywgJ3ZhbHVlNCcsICdvdGhlci12YWx1ZTUnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Q6IFwidmFsdWUyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tib3g6IFwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG5cbiAgICAgICAgICAgICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6YS5iXCIgY2xhc3M9XCJkaXYtY2xhc3NcIj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxpbnB1dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YS5jXCIgaWQ9XCJpbnB1dDFcIiB2YWx1ZT1cImhlbGxvXCI+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8dGV4dGFyZWEgbmFtZT1cInRleHRhcmVhXCIgaWQ9XCJ0ZXh0YXJlYVwiIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLnRleHRhcmVhXCIgdmFsdWU9XCJ0ZXN0XCI+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8aW5wdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjaGVja2VkIHBhdGg6YS5yYWRpb1wiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicjFcIiBpZD1cInJhZGlvXCIgY2hlY2tlZD1cInRydWVcIj4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHRleHQudmFsdWUsICd0ZXh0IGNvbnRyb2wnKS50by5iZS5lcXVhbChkLmdldFN1YmplY3QoKVsnYSddWydjJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHJhZGlvLmNoZWNrZWQsICdyYWRpbyBjb250cm9sJykudG8uYmUuZXF1YWwodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QodGV4dGFyZWEudmFsdWUsICd0ZXh0YXJlYSBjb250cm9sJykudG8uYmUuZXF1YWwoZC5nZXRTdWJqZWN0KClbJ2EnXVsndGV4dGFyZWEnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc2VsZWN0LnNlbGVjdGVkSW5kZXgsICdzZWxlY3QgY29udHJvbCcpLnRvLmJlLmVxdWFsKDEpOyAvLyBbMD0+b3RoZXItdmFsdWUsIDE9PnZhbHVlMl1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG11bHRpc2VsZWN0U2VsZWN0ZWRPcHRpb25zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgb2JqXSBvZiBPYmplY3QuZW50cmllcyhtdWx0aXNlbGVjdC5zZWxlY3RlZE9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlzZWxlY3RTZWxlY3RlZE9wdGlvbnMucHVzaChvYmoudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShtdWx0aXNlbGVjdFNlbGVjdGVkT3B0aW9ucyksICdtdWx0aXNlbGVjdCBjb250cm9sJykudG8uYmUuZXF1YWwoSlNPTi5zdHJpbmdpZnkoZC5nZXRTdWJqZWN0KClbJ2EnXVsnbXVsdGlzZWxlY3QnXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNoZWNrYm94LmNoZWNrZWQsICdjaGVja2JveCBjb250cm9sJykudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlKSlcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnR2V0IEF0dHJpYnV0ZSBQaXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgaWQsIG1vY2tzO1xuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBpZCA9IG5ldyBJRCgnbW9uc3RlcicpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYCA8ZGl2IGlkPVwiYCArIGlkICsgYFwiXG4gICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6YSB8IGlmOnZhbHVlOlxcXFwgXCI+PC9kaXY+YFxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaW5jbHVkZSBzcGFjZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkLnRvU3RyaW5nKCkpXG5cbiAgICAgICAgICAgIGNvbnN0IHBpcGUgPSBkaXYuZ2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItcmVwbGFjZScpO1xuICAgICAgICAgICAgZXhwZWN0KHBpcGUubGVuZ3RoKS50by5iZS5lcXVhbCgyMCk7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdtYW51ZWwgdXBkYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgaWQsIG1vY2tzO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGlkID0gbmV3IElEKCdtb25zdGVyJykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGA8aW5wdXQgaWQ9XCJgICsgaWQgKyBgXCJkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6bXl2YWx1ZVwiPmBcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGdldCB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnZhbHVlID0gXCJoZWxsb1wiO1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlciA9IG5ldyBVcGRhdGVyKG1vY2tzKTtcbiAgICAgICAgICAgIGNvbnN0IHN1YmplY3QgPSB1cGRhdGVyLmdldFN1YmplY3QoKTtcblxuICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdteXZhbHVlJyk7XG4gICAgICAgICAgICB1cGRhdGVyLnJldHJpZXZlKCk7XG4gICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkudG8uaGF2ZS5wcm9wZXJ0eSgnbXl2YWx1ZScpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIC8qKlxuICAgICAqIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzExMlxuICAgICAqL1xuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCkgMjAyMjAxMDcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIC8vIGxhbmd1YWdlPUhUTUxcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcblxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIGA7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ0J1Z2ZpeCAjMTEyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGFkZCAnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBjb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpO1xuICAgICAgICAgICAgICAgIGxldCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSAneWVhaCEgPGI+VGVzdDwvYj4hJztcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckhUTUwgPSBjb250YWluZXJFbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdIVE1MID0gbmV3RWxlbWVudC5pbm5lckhUTUw7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBuZXdFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChjb250YWluZXJFbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXY+eWVhaCEgPGI+VGVzdDwvYj4hPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sIDEwMClcblxuICAgICAgICAgICAgICAgIC8vIGQuc2V0Q2FsbGJhY2soJ215Zm9ybWF0dGVyJywgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuIGEgKyAneWVzISdcbiAgICAgICAgICAgICAgICAvLyB9KVxuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IHRvbG93ZXJcIj5oYWxsbzwvZGl2PicpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IGNhbGw6bXlmb3JtYXR0ZXJcIj5IQUxMT3llcyE8L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJzdGF0aWM6aGVsbG9cXFxcIFwiPmhlbGxvIDwvZGl2PicpO1xuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4gZG9uZSgpO1xuICAgICAgICAgICAgICAgIC8vICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGUgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAvLyB9LCAxMDApXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge0xvY2FsZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7Z2V0TG9jYWxlT2ZEb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0TG9jYWxlT2ZEb2N1bWVudCcsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcImRlXCJdLFxuICAgICAgICAgICAgW1wic2wtSVQtbmVkaXNcIl0sXG4gICAgICAgICAgICBbXCJlbi1HQlwiXSxcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICBpdCgncmV0dXJuIGxhbmd1YWdlICcgKyBhLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpO1xuICAgICAgICAgICAgICAgIGxldCBub2RlID0gaHRtbC5pdGVtKDApO1xuXG4gICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2xhbmcnLCBhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZ2V0TG9jYWxlT2ZEb2N1bWVudCgpLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgaXQoJ3JldHVybiBsYW5ndWFnZSBlbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGh0bWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpO1xuICAgICAgICBsZXQgbm9kZSA9IGh0bWwuaXRlbSgwKTtcbiAgICAgICAgbGV0IGxhbmc9IG5vZGUuZ2V0QXR0cmlidXRlKCdsYW5nJyk7XG5cbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ2xhbmcnKTtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuICAgICAgICBleHBlY3QobG9jYWxlKS50by5iZS5pbnN0YW5jZU9mKExvY2FsZSk7XG4gICAgICAgIGV4cGVjdChsb2NhbGUubG9jYWxlU3RyaW5nKS50by5iZS5lcXVhbChuYXZpZ2F0b3IubGFuZ3VhZ2UpO1xuXG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdsYW5nJywgbGFuZyk7XG4gICAgICAgIFxuICAgIH0pXG5cblxufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2dldERvY3VtZW50RnJhZ21lbnRGcm9tU3RyaW5nfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VGhlbWUsIGdldERvY3VtZW50VGhlbWV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3RoZW1lLm1qc1wiO1xuXG5kZXNjcmliZSgnVGhlbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25ldyBUaGVtZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBUaGVtZSBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRoZW1lKCdteS10aGVtZScpKS5pcy5hLmluc3RhbmNlT2YoVGhlbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gVGhlbWUtTmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVGhlbWUoJ215LXRoZW1lJykuZ2V0TmFtZSgpKS5pcy5lcXVhbCgnbXktdGhlbWUnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgRXJyb3IgYmVjYXVzZSBlbXB0eSBhcmd1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgVGhlbWUoKSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBFcnJvciBiZWNhdXNlIG5vIHN0cmluZyBhcmd1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgVGhlbWUoMikpLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0RG9jdW1lbnRUaGVtZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBUaGVtZSBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoZ2V0RG9jdW1lbnRUaGVtZSgpKS5pcy5hLmluc3RhbmNlT2YoVGhlbWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBEZWZhdWx0IFRoZW1lIG5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoZ2V0RG9jdW1lbnRUaGVtZSgpLmdldE5hbWUoKSkuaXMuZXF1YWwoJ21vbnN0ZXInKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXREb2N1bWVudFRoZW1lKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJykuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZScsICd0ZXN0dGhlbWUnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXRoZW1lLW5hbWUnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0ZXN0dGhlbWUgVGhlbWUgbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRoZW1lKCkuZ2V0TmFtZSgpKS5pcy5lcXVhbCgndGVzdHRoZW1lJyk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG59KTtcblxuXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtpbnRlcm5hbFN5bWJvbH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge2dldERvY3VtZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHtQcm94eU9ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGlucHV0IGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDphXCIgaWQ9XCJ0ZXN0MlwiIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphXCI+XG5gO1xuXG4vLyBkZWZpbmVkIGluIGNvbnN0YW50cy5tanNcbmNvbnN0IHVwZGF0ZXJTeW1ib2xLZXkgPSBcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBvcHRpb25zLXVwZGF0ZXItbGlua1wiXG5jb25zdCB1cGRhdGVyU3ltYm9sU3ltYm9sID0gU3ltYm9sLmZvcih1cGRhdGVyU3ltYm9sS2V5KTtcblxuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IEN1c3RvbUVsZW1lbnQsIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCwgVGVzdENvbXBvbmVudCwgZG9jdW1lbnQsIFRlc3RDb21wb25lbnQyLCBhc3NpZ25VcGRhdGVyVG9FbGVtZW50LFxuICAgICAgICBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudDtcblxuICAgIGRlc2NyaWJlKFwiYXNzaWduVXBkYXRlclRvRWxlbWVudFwiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgICAgICBpbml0SlNET00ob3B0aW9ucykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS91cGRhdGVyLm1qc1wiKS50aGVuKCh5eSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudCA9IHl5WydhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudCddO1xuICAgICAgICAgICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWVsZW1lbnQubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRWxlbWVudCA9IG1bJ0N1c3RvbUVsZW1lbnQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25VcGRhdGVyVG9FbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnRzLCBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50LmNhbGwodGhpcywgZWxlbWVudHMsIHVwZGF0ZXJTeW1ib2xTeW1ib2wsIG9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHRoaXMgdGVzdCB0cnkgdG8gc2ltdWxhdGUgdGhlIGJ1ZyB0aGF0IHdhcyBmb3VuZCBpbiB0aGUgYXNzaWduVXBkYXRlclRvRWxlbWVudCBmdW5jdGlvbi5cbiAgICAgICAgICogVGhlIGJ1ZyB3YXMgdGhhdCB0aGUgdXBkYXRlciB3YXMgbm90IGFzc2lnbmVkIHRvIHRoZSBlbGVtZW50IHdoZW4gdGhlIGVsZW1lbnQgd2FzIGNyZWF0ZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIHVuZm9ydHVuYXRlbHksIHRoaXMgdGVzdCBkb2VzIG5vdCByZXByb2R1Y2UgdGhlIGJ1Zy5cbiAgICAgICAgICovXG4gICAgICAgIGl0KFwic2hvdWxkIGFzc2lnbiBhbiB1cGRhdGVyIHRvIGFuIGVsZW1lbnRcIiwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1vY2tzXCIpLmlubmVySFRNTCkudG8uZXF1YWwoaHRtbDIpO1xuXG4gICAgICAgICAgICBjb25zdCBhID0ge2E6IDF9O1xuICAgICAgICAgICAgY29uc3QgYiA9IHtiOiAyfTtcblxuICAgICAgICAgICAgY29uc3QgYXAgPSBuZXcgUHJveHlPYnNlcnZlcihhKTtcbiAgICAgICAgICAgIGNvbnN0IGJwID0gbmV3IFByb3h5T2JzZXJ2ZXIoYik7XG5cbiAgICAgICAgICAgIGNvbnN0IHggPSBhcC5nZXRTdWJqZWN0KClcbiAgICAgICAgICAgIGNvbnN0IHkgPSBicC5nZXRTdWJqZWN0KClcblxuICAgICAgICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgc2V0LmFkZChlbGVtZW50KTtcblxuICAgICAgICAgICAgYXNzaWduVXBkYXRlclRvRWxlbWVudC5jYWxsKGVsZW1lbnQsIHNldCwgYXApO1xuICAgICAgICAgICAgYXNzaWduVXBkYXRlclRvRWxlbWVudC5jYWxsKGVsZW1lbnQsIHNldCwgYnApO1xuXG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoeCkpLnRvLmVxdWFsKCd7XCJhXCI6MX0nKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeSh5KSkudG8uZXF1YWwoJ3tcImJcIjoyfScpO1xuXG4gICAgICAgICAgICBjb25zdCBzeSA9IHVwZGF0ZXJTeW1ib2xTeW1ib2w7XG5cbiAgICAgICAgICAgIGxldCB2ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItb2JqZWN0bGlua1wiKTtcbiAgICAgICAgICAgIGV4cGVjdCh2KS50by5lcXVhbCgnU3ltYm9sKCcgKyB1cGRhdGVyU3ltYm9sS2V5ICsgJyknKTtcblxuICAgICAgICAgICAgY29uc3QgdXBkYXRlciA9IGVsZW1lbnRbc3ldO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdXBkYXRlcikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdSBvZiB2KSB7XG4gICAgICAgICAgICAgICAgICAgIHUucnVuKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1LmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4cGVjdCh1cGRhdGVyKS50by5iZS5hbi5pbnN0YW5jZW9mKFNldCk7XG4gICAgICAgICAgICBleHBlY3QodXBkYXRlcikudG8uYmUuYShcIlNldFwiKTtcblxuICAgICAgICAgICAgeC5hID0gMztcbiAgICAgICAgICAgIGJwLmdldFN1YmplY3QoKS5iID0gNDtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja0hUTUwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1vY2tzXCIpO1xuXG4gICAgICAgICAgICAgICAgLy8gaHRtbCBleHBleHRlZDpcbiAgICAgICAgICAgICAgICAvLyA8aW5wdXQgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOmFcIiBpZD1cInRlc3QyXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmFcIiBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChAc2NodWthaS9tb25zdGVyL2RvbS9AQG9iamVjdC11cGRhdGVyLWxpbmspXCIgdmFsdWU9XCIzXCI+XG5cbiAgICAgICAgICAgICAgICBleHBlY3QobW9ja0hUTUwucXVlcnlTZWxlY3RvcihcIiN0ZXN0MlwiKSkudG8uaGF2ZS52YWx1ZSgnMycpXG4gICAgICAgICAgICAgICAgZXhwZWN0KG1vY2tIVE1MLnF1ZXJ5U2VsZWN0b3IoXCIjdGVzdDJcIikpLnRvLmhhdmUuYXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb2JqZWN0bGluaycsICdTeW1ib2woJyArIHVwZGF0ZXJTeW1ib2xLZXkgKyAnKScpXG4gICAgICAgICAgICAgICAgLy9leHBlY3QobW9ja0hUTUwpLnRvLmhhdmUuaHRtbChyZXN1bHRIVE1MKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LnZhbHVlKS50by5lcXVhbChcIjNcIik7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoYXAuZ2V0UmVhbFN1YmplY3QoKSkpLnRvLmVxdWFsKCd7XCJhXCI6M30nKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoYnAuZ2V0UmVhbFN1YmplY3QoKSkpLnRvLmVxdWFsKCd7XCJiXCI6NH0nKTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0sIDUwKVxuXG4gICAgICAgIH0pXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0N1c3RvbUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGluaXRKU0RPTSh7fSkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWVsZW1lbnQubWpzXCIpLnRoZW4oKG0pID0+IHtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRWxlbWVudCA9IG1bJ0N1c3RvbUVsZW1lbnQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCA9IG1bJ3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCddO1xuICAgICAgICAgICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudCA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibW9uc3Rlci10ZXN0Y2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnQpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnQyID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtb25zdGVyLXRlc3RjbGFzczJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbW90ZXN0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluOiAnPGgxPjwvaDE+PGFydGljbGU+PHA+dGVzdDwvcD48ZGl2IGlkPVwiY29udGFpbmVyXCI+PC9kaXY+PC9hcnRpY2xlPidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50MilcblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdDdXN0b21FbGVtZW50KCkgd2l0aCBDb25maWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIHJlYWQgY29uZmlnIGZyb20gdGFnJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDxzY3JpcHQgaWQ9XCJjb25maWcxXCIgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIj5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZGVtb3Rlc3RcIjoxNDI1XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvc2NyaXB0PlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDxtb25zdGVyLXRlc3RjbGFzczIgaWQ9XCJ0aGlzaXNhdGVzdFwiIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yPVwiI2NvbmZpZzFcIj5cbiAgICAgICAgICAgICAgICA8L21vbnN0ZXItdGVzdGNsYXNzMj5cbiAgICAgICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vbnN0ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGhpc2lzYXRlc3QnKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobW9uc3Rlci5nZXRPcHRpb24oJ2RlbW90ZXN0JykpLmlzLmVxbCgxNDI1KTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBjdXN0b20tZWxlbWVudCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBuZXcgVGVzdENvbXBvbmVudCgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjb25uZWN0IGVtcHR5IGVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnZG9jdW1lbnQgc2hvdWxkIGNvbnRhaW4gbW9uc3Rlci10ZXN0Y2xhc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpLmFwcGVuZENoaWxkKGQpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbW9uc3Rlci10ZXN0Y2xhc3MnKS5sZW5ndGgpLmlzLmVxdWFsKDEpO1xuICAgICAgICAgICAgICAgIC8vIG5vIGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rPVwiU3ltYm9sKG1vbnN0ZXJVcGRhdGVyKVwiIGJlY2F1c2UgaXQgaGFzIG5vdGhpbmcgdG8gdXBkYXRlXG4gICAgICAgICAgICAgICAgLy8gYnV0IGRhdGEtbW9uc3Rlci1lcnJvcj1cIkVycm9yOiBodG1sIGlzIG5vdCBzZXQuXCJcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdGVzdGNsYXNzIGRhdGEtbW9uc3Rlci1lcnJvcj1cIkVycm9yOiBodG1sIGlzIG5vdCBzZXQuXCI+PC9tb25zdGVyLXRlc3RjbGFzcz4nKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY29ubmVjdCBlbGVtZW50IHdpdGggaHRtbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdkb2N1bWVudCBzaG91bGQgY29udGFpbiBtb25zdGVyLXRlc3RjbGFzczInLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MyJyk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykuYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICAvLyBpbnNlcnQgRE9NIHJ1biBpbiBleHRyYSBwcm9jZXNzIHZpYSBzZXRUaW1lb3V0IVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtb25zdGVyLXRlc3RjbGFzczInKS5sZW5ndGgpLmlzLmVxdWFsKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtb25zdGVyLXRlc3RjbGFzczInKS5pdGVtKDApLnNoYWRvd1Jvb3QuaW5uZXJIVE1MKS5pcy5lcXVhbCgnPGgxPjwvaDE+PGFydGljbGU+PHA+dGVzdDwvcD48ZGl2IGlkPVwiY29udGFpbmVyXCI+PC9kaXY+PC9hcnRpY2xlPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXRlc3RjbGFzczIgZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2woJyArIHVwZGF0ZXJTeW1ib2xLZXkgKyAnKVwiPjwvbW9uc3Rlci10ZXN0Y2xhc3MyPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSwgMTApO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ09wdGlvbnMgY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnZGVsZWdhdGVzRm9jdXMgc2hvdWxkIGNoYW5nZSBmcm9tIHRydWUgdG8gZmFsc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpXG5cbiAgICAgICAgICAgICAgICBjb25zdCBvID0gZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3Q7XG4gICAgICAgICAgICAgICAgZXhwZWN0KE9iamVjdC5pcyhlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdCwgbykpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3Qub3B0aW9ucy5kZWxlZ2F0ZXNGb2N1cykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5vcHRpb25zLmRlbGVnYXRlc0ZvY3VzKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldE9wdGlvbignZGVsZWdhdGVzRm9jdXMnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoT2JqZWN0LmlzKGVsZW1lbnRbaW50ZXJuYWxTeW1ib2xdLnJlYWxTdWJqZWN0LCBvKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TLCBKU09OLnN0cmluZ2lmeSh7ZGVsZWdhdGVzRm9jdXM6IGZhbHNlfSkpO1xuICAgICAgICAgICAgICAgIC8vIGV4cGVjdChPYmplY3QuaXMoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3QsIG8pKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gZXhwZWN0KGVsZW1lbnQuZ2V0T3B0aW9uKCdkZWxlZ2F0ZXNGb2N1cycpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBleHBlY3QoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3Qub3B0aW9ucy5kZWxlZ2F0ZXNGb2N1cykudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gZXhwZWN0KE9iamVjdC5pcyhlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdCwgbykpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdzZXRPcHRpb25zKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydzaGFkb3dNb2RlJywgJ3gxJ10sXG4gICAgICAgICAgICAgICAgWyd0ZW1wbGF0ZXMubWFpbicsICd4MiddLCAvLyBpcyBleHBsaWNpdGx5IHNldCB0byB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBbJ2RlbGVnYXRlc0ZvY3VzJywgJ3g0J10sXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBuZXdWYWx1ZSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgbGV0IHRleHQgPSBrZXkgKyAnIHNob3VsZCByZXR1cm4gJyArIG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBrZXkgKyAnIHdhcyBub3Qgc2V0LCB0aGVyZWZvcmUgZGVmYXVsdCAnICsgbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICBpdCh0ZXh0LCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZC5nZXRPcHRpb24oa2V5KSkudG8uYmUubm90LmVxdWFsKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHggPSBkLnNldE9wdGlvbihrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGQuZ2V0T3B0aW9uKGtleSkpLnRvLmJlLmVxdWFsKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdnZXRPcHRpb25zKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ3NoYWRvd01vZGUnLCAnb3BlbiddLFxuICAgICAgICAgICAgICAgIFsndGVtcGxhdGVzLm1haW4nLCB1bmRlZmluZWRdLCAvLyBpcyBleHBsaWNpdGx5IHNldCB0byB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBbJ2RlbGVnYXRlc0ZvY3VzJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWyd4LnkueicsIHRydWUsIHRydWVdLCAvLyB4LnkueiBpc250IHNldCwgZGVmYXVsdFZhbHVlIGlzIHVzZWRcbiAgICAgICAgICAgICAgICBbJ3gnLCB0cnVlLCB0cnVlXSAvLyB4IGlzbnQgc2V0LCBkZWZhdWx0VmFsdWUgaXMgdXNlZFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cblxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IGtleSArICcgc2hvdWxkIHJldHVybiAnICsgdmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBrZXkgKyAnIHdhcyBub3Qgc2V0LCB0aGVyZWZvcmUgZGVmYXVsdCAnICsgZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgaXQodGV4dCwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHggPSBkLmdldE9wdGlvbihrZXksIGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh4KS50by5iZS5lcXVhbCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTNcbiAgICAgICAgICovXG4gICAgICAgIGRlc2NyaWJlKCdBc3NpZ24gQ1NTU3R5bGUgYXMgQXJyYXkgd2l0aCB3cm9uZyB0eXBlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBodG1sVEFHID0gJ21vbnN0ZXItdGVzdGNsYXNzLXgxJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDE7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cblxuICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnRYMSA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbFRBR1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3RydWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW46ICc8aDE+dGVzdDwvaDE+J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgdGhyb3cgRXhjZXB0aW9uXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGh0bWxUQUcpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmQoZCk7XG5cblxuICAgICAgICAgICAgICAgIGV4cGVjdChkaXYpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWVycm9yPVwiVHlwZUVycm9yOiB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgQ1NTU3R5bGVTaGVldFwiJyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSlcblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTNcbiAgICAgICAgICovXG4gICAgICAgIGRlc2NyaWJlKCdBc3NpZ24gQ1NTU3R5bGUgYXMgQXJyYXkgYW5kIENTU1N0eWxlc2hlZXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGh0bWxUQUcgPSAnbW9uc3Rlci10ZXN0Y2xhc3MteDExMy0yJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDExM1gyO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudFgxMTNYMiA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbFRBR1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczoge21haW46ICc8aDE+dGVzdDwvaDE+J30sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IChuZXcgQ1NTU3R5bGVTaGVldCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcy5pbnNlcnRSdWxlKCdhIHsgY29sb3IgOiByZWR9Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbc107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxMTNYMilcblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdChodG1sVEFHICsgXCIgc2hvdWxkIHRocm93IEV4Y2VwdGlvbiAyXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGh0bWxUQUcpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXEoJzxoMT50ZXN0PC9oMT4nKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzExM1xuICAgICAgICAgKi9cbiAgICAgICAgZGVzY3JpYmUoJ0Fzc2lnbiBDU1NTdHlsZSBhcyBBcnJheSBhbmQgQ1NTIGFzIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgaHRtbFRBRyA9ICdtb25zdGVyLXRlc3RjbGFzcy14MTEzLTIxJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDExM1gyMjtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnRYMTEzWDIyID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sVEFHXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7bWFpbjogJzxoMT50ZXN0PC9oMT4nfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdhIHsgY29sb3I6cmVkIH0nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnRYMTEzWDIyKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgZXEgPHN0eWxlPmEgeyBjb2xvcjpyZWQgfTwvc3R5bGU+PGgxPnRlc3Q8L2gxPlwiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChodG1sVEFHKTtcblxuICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kKGQpO1xuXG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXEoJzxzdHlsZT5hIHsgY29sb3I6cmVkIH08L3N0eWxlPjxoMT50ZXN0PC9oMT4nKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTNcbiAgICAgICAgICovXG4gICAgICAgIGRlc2NyaWJlKCdBc3NpZ24gQ1NTU3R5bGUgYXMgQXJyYXkgYW5kIENTUyBhcyBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGh0bWxUQUcgPSAnbW9uc3Rlci10ZXN0Y2xhc3MteDExMy0yMic7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcywgVGVzdENvbXBvbmVudFgxMTNYMjIzO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudFgxMTNYMjIzID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sVEFHXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7bWFpbjogJzxoMT50ZXN0PC9oMT4nfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnYSB7IGNvbG9yOnJlZCB9J107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxMTNYMjIzKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgZXEgPHN0eWxlPmEgeyBjb2xvcjpyZWQgfTwvc3R5bGU+PGgxPnRlc3Q8L2gxPlwiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChodG1sVEFHKTtcblxuICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kKGQpO1xuXG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXEoJzxzdHlsZT5hIHsgY29sb3I6cmVkIH08L3N0eWxlPjxoMT50ZXN0PC9oMT4nKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2hhc05vZGUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdChcImhhc05vZGUgbW9uc3Rlci10ZXN0Y2xhc3Mgc2hvdWxkIHJldHVybiAuLi5cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MnKTtcblxuICAgICAgICAgICAgICAgIGxldCBwMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBwMS5hcHBlbmRDaGlsZCh0MSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGxldCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ3Rlc3QnKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHAxKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHQpO1xuICAgICAgICAgICAgICAgIGQuYXBwZW5kQ2hpbGQocCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZChkKTtcblxuXG4gICAgICAgICAgICAgICAgbGV0IG4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZShuMSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUodCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZShwKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHAxKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHQxKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoXCJoYXNOb2RlIG1vbnN0ZXItdGVzdGNsYXNzMiBzaG91bGQgcmV0dXJuIC4uLlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzczInKTtcblxuICAgICAgICAgICAgICAgIGxldCBwMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBwMS5hcHBlbmRDaGlsZCh0MSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGxldCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ3Rlc3QnKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHAxKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHQpO1xuXG5cbiAgICAgICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZChkKTtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZC5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKTtcblxuICAgICAgICAgICAgICAgIGQuc2hhZG93Um9vdC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKG4xKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZSh0KSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHApKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUocDEpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUodDEpKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSlcblxuICAgIH0pO1xufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIjtcbmltcG9ydCB7Rm9jdXNNYW5hZ2VyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9mb2N1c21hbmFnZXIubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnRm9jdXNNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykuaW5uZXJIVE1MID0gJydcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIEZvY3VzTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9jdXNNYW5hZ2VyKCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgfSlcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnc3RvcmUgYW5kIHJlc3RvcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBtYW5hZ2VyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbWFuYWdlciA9IG5ldyBGb2N1c01hbmFnZXIoKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHgxXCI+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0ZXN0aXRcIiBpZD1cInR4MlwiPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidGVzdGl0XCIgaWQ9XCJ0eDNcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHg0XCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRlc3RpdFwiIHRhYmluZGV4PVwiMlwiIGlkPVwidHg1XCI+aGVsbG88L3A+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0ZXN0aXRcIiBpZD1cInR4NlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHg3XCI+PC9idXR0b24+XG4gICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50ZXN0aXQnKSkpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9ICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjAwLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMjAwLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3J1biBpc3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIG1hbmFnZXIuZm9jdXMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4MScpKTtcbiAgICAgICAgICAgIG1hbmFnZXIuc3RvcmVGb2N1cygpO1xuXG4gICAgICAgICAgICBjb25zdCBlMSA9IG1hbmFnZXIuZ2V0QWN0aXZlKCk7XG4gICAgICAgICAgICBleHBlY3QoZTEuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3IxJykudG8uYmUuZXF1YWwoJ3R4MScpO1xuXG4gICAgICAgICAgICBtYW5hZ2VyLmZvY3VzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0eDInKSk7XG5cbiAgICAgICAgICAgIG1hbmFnZXIuc3RvcmVGb2N1cygpO1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuZ2V0QWN0aXZlKCkuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3IyJykudG8uYmUuZXF1YWwoJ3R4MicpO1xuICAgICAgICAgICAgbWFuYWdlci5mb2N1c05leHQoKTtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmdldEFjdGl2ZSgpLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yMycpLnRvLmJlLmVxdWFsKCd0eDQnKTtcbiAgICAgICAgICAgIG1hbmFnZXIuZm9jdXNOZXh0KCk7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5nZXRBY3RpdmUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjQnKS50by5iZS5lcXVhbCgndHg1Jyk7XG4gICAgICAgICAgICBtYW5hZ2VyLnJlc3RvcmVGb2N1cygpO1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuZ2V0QWN0aXZlKCkuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3I1JykudG8uYmUuZXF1YWwoJ3R4MicpO1xuICAgICAgICAgICAgbWFuYWdlci5yZXN0b3JlRm9jdXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmdldEFjdGl2ZSgpLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yNicpLnRvLmJlLmVxdWFsKCd0eDEnKTtcbiAgICAgICAgICAgIG1hbmFnZXIucmVzdG9yZUZvY3VzKCk7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5nZXRBY3RpdmUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjcnKS50by5iZS5lcXVhbCgndHgxJyk7XG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgncmV0dXJudHlwZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgZm9jdXNtYW5hZ2VyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgZm9jdXNtYW5hZ2VyID0gbmV3IEZvY3VzTWFuYWdlcigpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjaGVjayByZXR1cm5zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBleHBlY3QoZm9jdXNtYW5hZ2VyLmdldEZvY3VzYWJsZSgpKS5pcy5pbnN0YW5jZW9mKEFycmF5KTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIuZ2V0QWN0aXZlKCkpLmlzLmluc3RhbmNlb2YoSFRNTEVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5mb2N1c05leHQoKSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5mb2N1c1ByZXYoKSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5zdG9yZUZvY3VzKCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIuZm9jdXMoZG9jdW1lbnQuYm9keSkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIucmVzdG9yZUZvY3VzKCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcblxuICAgICAgICB9KVxuXG4gICAgfSlcblxuXG59KTsiLCAiaW1wb3J0IHtcbiAgICBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHNcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gJ2NoYWknO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5mdW5jdGlvbiBzZXR1cFRlc3RFbnZpcm9ubWVudCgpIHtcblxuXG4gICAgY2xhc3MgVGVzdENvbXBvbmVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hTaGFkb3coe21vZGU6ICdvcGVuJ30pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjdXN0b21FbGVtZW50cy5nZXQoJ3Rlc3QtY29tcG9uZW50JykpIHtcbiAgICAgICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKCd0ZXN0LWNvbXBvbmVudCcsIFRlc3RDb21wb25lbnQpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2xlYW51cFRlc3RFbnZpcm9ubWVudCgpIHtcbiAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5kZXNjcmliZSgnZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzJywgKCkgPT4ge1xuICAgIGJlZm9yZSgoZG9uZSkgPT4ge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHNldHVwVGVzdEVudmlyb25tZW50KCk7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlcigoKSA9PiB7XG4gICAgICAgIGNsZWFudXBUZXN0RW52aXJvbm1lbnQoKTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAvLyBTZXQgdXAgdGhlIERPTVxuXG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICA8ZGl2IGlkPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgaWQ9XCJwYXJlbnRcIj5cbiAgICAgICAgICA8ZGl2IGlkPVwiY2hpbGRcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gO1xuXG4gICAgICAgIGNvbnN0IHNoYWRvd0hvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzaGFkb3dIb3N0KTtcbiAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IHNoYWRvd0hvc3QuYXR0YWNoU2hhZG93KHttb2RlOiAnb3Blbid9KTtcbiAgICAgICAgY29uc3QgaW5uZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGlubmVyRWxlbWVudC5pZCA9ICdpbm5lcic7XG4gICAgICAgIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoaW5uZXJFbGVtZW50KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmluZCB0aGUgZWxlbWVudCB3aXRoIHRoZSB0YXJnZXQgSUQgaW4gdGhlIG5vcm1hbCBET00nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoaWxkJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjaGlsZCwgJ3BhcmVudCcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFyZW50JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmaW5kIHRoZSBlbGVtZW50IHdpdGggdGhlIHRhcmdldCBJRCBpbiB0aGUgc2hhZG93IERPTScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5uZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2W3NoYWRvd3Jvb3RdID4gZGl2Jyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhpbm5lckVsZW1lbnQsICdpbm5lcicpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChpbm5lckVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCBpZiB0aGUgZWxlbWVudCB3aXRoIHRoZSB0YXJnZXQgSUQgaXMgbm90IGZvdW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGlsZCcpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoY2hpbGQsICdub25leGlzdGVudCcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5iZS5udWxsO1xuICAgIH0pO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5cbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IHdpbmRvd1JlYWR5O1xubGV0IGRvbVJlYWR5O1xuXG5kZXNjcmliZSgnUmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vcmVhZHkubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBkb21SZWFkeSA9IG1bJ2RvbVJlYWR5J107XG4gICAgICAgICAgICAgICAgd2luZG93UmVhZHkgPSBtWyd3aW5kb3dSZWFkeSddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZG9tUmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBkb21SZWFkeS50aGVuKGRvbmUpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2luZG93UmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICB3aW5kb3dSZWFkeS50aGVuKGRvbmUpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7XG4gICAgZ2V0RG9jdW1lbnQsIGdldFdpbmRvdywgZ2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmdcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcblxuaW1wb3J0IHtnZXRDb250YWluaW5nRG9jdW1lbnR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzXCI7XG5cbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluaXRKU0RPTSgpO1xuICAgIH0pXG4gICAgZGVzY3JpYmUoJ2dldERvY3VtZW50KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGRvY3VtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRXaW5kb3coKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZG9jdW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBnZXRXaW5kb3coKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXREb2N1bWVudEZyYWdtZW50RnJvbVN0cmluZygpJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyc8ZGl2PjwvZGl2PiddLFxuICAgICAgICAgICAgWyc8ZGl2PjxkaXY+MjwvZGl2PjwvZGl2PiddLFxuICAgICAgICAgICAgWyc8ZGl2PjxkaXY+MjwvZGl2PicsICc8ZGl2PjxkaXY+MjwvZGl2PjwvZGl2PiddLCAvLyB0ZXN0IGludmFsaWQgaHRtbFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmICghYikgYiA9IGE7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGRvY3VtZW50RnJhZ21lbnQgb2JqZWN0ICcgKyBhLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZyYWdtZW50ID0gZ2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmcoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGZyYWdtZW50KS50by5iZS5pbnN0YW5jZU9mKERvY3VtZW50RnJhZ21lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChmcmFnbWVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkaXYuaW5uZXJIVE1MKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdnZXRDb250YWluaW5nRG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgIGxldCAganNEb21Eb2N1bWVudDtcblxuICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAganNEb21Eb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICAgICB9KTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgLy8gICAgIGRvbS53aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgLy8gfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZ2V0Q29udGFpbmluZ0RvY3VtZW50KG51bGwpKS50by50aHJvdygnSW52YWxpZCBhcmd1bWVudC4gRXhwZWN0ZWQgYW4gSFRNTEVsZW1lbnQuJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IGNvbnRhaW5pbmcgZG9jdW1lbnQgZm9yIGFuIGVsZW1lbnQgaW4gdGhlIG1haW4gZG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5pbmdEb2N1bWVudCA9IGdldENvbnRhaW5pbmdEb2N1bWVudChlbGVtZW50KTtcblxuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5pbmdEb2N1bWVudCkudG8ubnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgY29udGFpbmluZyBkb2N1bWVudCBmb3IgYW4gZWxlbWVudCBpbnNpZGUgYSBzaGFkb3cgcm9vdCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhvc3QgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZChlbGVtZW50KTtcblxuICAgICAgICAgICAgY29uc3QgY29udGFpbmluZ0RvY3VtZW50ID0gZ2V0Q29udGFpbmluZ0RvY3VtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5pbmdEb2N1bWVudCkudG8ubm90Lm51bGw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IGNvbnRhaW5pbmcgZG9jdW1lbnQgZm9yIGFuIGVsZW1lbnQgaW5zaWRlIGEgbmVzdGVkIHNoYWRvdyByb290JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3V0ZXJIb3N0ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnN0IG91dGVyU2hhZG93Um9vdCA9IG91dGVySG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlubmVySG9zdCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBvdXRlclNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoaW5uZXJIb3N0KTtcblxuICAgICAgICAgICAgY29uc3QgaW5uZXJTaGFkb3dSb290ID0gaW5uZXJIb3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgaW5uZXJTaGFkb3dSb290LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCBjb250YWluaW5nRG9jdW1lbnQgPSBnZXRDb250YWluaW5nRG9jdW1lbnQoZWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbmluZ0RvY3VtZW50KS50by5ub3QubnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCBhdHRhY2hlZCB0byBhbnkgZG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZXRhY2hlZEVsZW1lbnQgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGV0YWNoZWRFbGVtZW50LnJlbW92ZSgpO1xuXG4gICAgICAgICAgICBjb25zdCBjb250YWluaW5nRG9jdW1lbnQgPSBnZXRDb250YWluaW5nRG9jdW1lbnQoZGV0YWNoZWRFbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChjb250YWluaW5nRG9jdW1lbnQpLnRvLmJlLm51bGw7XG4gICAgICAgIH0pO1xuICAgIH0pOyAgICBcbiAgICBcbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2dldERvY3VtZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuLy8gbGV0IGh0bWwxID0gYFxuLy8gICAgIDxkaXYgaWQ9XCJzY3JpcHRob3N0XCI+XG4vLyAgICAgPC9kaXY+XG4vLyAgICBcbi8vICAgICA8ZGl2PlxuLy8gICAgIDxcbi8vIDwvZGl2PlxuLy8gYDtcblxuXG4vLyBkZWZpbmVkIGluIGNvbnN0YW50cy5tanNcbi8vIGNvbnN0IHVwZGF0ZXJTeW1ib2xLZXkgPSBcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBvcHRpb25zLXVwZGF0ZXItbGlua1wiXG4vLyBjb25zdCB1cGRhdGVyU3ltYm9sU3ltYm9sID0gU3ltYm9sLmZvcih1cGRhdGVyU3ltYm9sS2V5KTtcblxuXG5cbmRlc2NyaWJlKCdET00nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgQ3VzdG9tRWxlbWVudCwgcmVnaXN0ZXJDdXN0b21FbGVtZW50LCBUZXN0Q29tcG9uZW50LCBkb2N1bWVudCwgVGVzdENvbXBvbmVudDIsYXNzaWduVXBkYXRlclRvRWxlbWVudDtcblxuICAgIGRlc2NyaWJlKCdpbml0RnJvbVNjcmlwdEhvc3QoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCByYW5kb21UYWdOdW1iZXIgPSBcIm1vbnN0ZXItdGVzdFwiK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApO1xuICAgICAgICBcbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vY3VzdG9tZWxlbWVudC5tanNcIikudGhlbigobSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21FbGVtZW50ID0gbVsnQ3VzdG9tRWxlbWVudCddO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50ID0gbVsncmVnaXN0ZXJDdXN0b21FbGVtZW50J107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnQyID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmFuZG9tVGFnTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluOiAnPGgxPjwvaDE+PGFydGljbGU+PHA+dGVzdDwvcD48ZGl2IGlkPVwiY29udGFpbmVyXCI+PC9kaXY+PC9hcnRpY2xlPidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50MilcblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY2FsbCBjYWxsYmFjaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgbm90IGZvdW5kIGNhbGxiYWNrIGFuZCBhZGQgZXJyb3IgYXR0cmlidXRlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYDxkaXYgaWQ9XCJjYWxsLWJhY2staG9zdFwiPjwvZGl2PjxkaXYgaWQ9XCJjb250YWluZXJcIj48L2Rpdj5gO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGxldCBjb250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChyYW5kb21UYWdOdW1iZXIpO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItc2NyaXB0LWhvc3QnLCBcImNhbGwtYmFjay1ob3N0XCIpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5hcHBlbmRDaGlsZChjb250cm9sKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5nZXRPcHRpb24oJ3Rlc3QnKSkuaXMuZXFsKDApO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sLmhhc0F0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLWVycm9yJykpLmlzLnRydWU7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGZvdW5kIGNhbGxiYWNrIGluaXRDdXN0b21Db250cm9sQ2FsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgPGRpdiBpZD1cImNhbGwtYmFjay1ob3N0XCI+PC9kaXY+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PmA7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbGwtYmFjay1ob3N0Jyk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmluaXRDdXN0b21Db250cm9sQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNldE9wdGlvbigndGVzdCcsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBsZXQgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmFuZG9tVGFnTnVtYmVyKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXNjcmlwdC1ob3N0JywgXCJjYWxsLWJhY2staG9zdFwiKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQoY29udHJvbCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuZ2V0T3B0aW9uKCd0ZXN0JykpLmlzLmVxbCgxKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1lcnJvcicpKS5pcy5mYWxzZTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGl0KCdzaG91bGQgZm91bmQgY2FsbGJhY2sgaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFjayBmcm9tIHNlbGYnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgPGRpdiBpZD1cImNhbGwtYmFjay1ob3N0XCI+PC9kaXY+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PmA7XG5cbiAgICAgICAgICAgICAgICBsZXQgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmFuZG9tVGFnTnVtYmVyKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5nZXRPcHRpb24oJ3Rlc3QnKSkuaXMuZXFsKDApO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFjayA9IGZ1bmN0aW9uIChjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0T3B0aW9uKCd0ZXN0JywgMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItc2NyaXB0LWhvc3QnLCBcImNhbGwtYmFjay1ob3N0XCIpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5hcHBlbmRDaGlsZChjb250cm9sKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5nZXRPcHRpb24oJ3Rlc3QnKSkuaXMuZXFsKDIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sLmhhc0F0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLWVycm9yJykpLmlzLmZhbHNlO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgIH0pO1xufSkiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gJ2NoYWknO1xuaW1wb3J0IHtnZXRTbG90dGVkTm9kZXN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3Nsb3R0ZWQubWpzXCI7XG5cblxuZGVzY3JpYmUoJ2dldFNsb3R0ZWROb2RlcycsICgpID0+IHtcblxuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgU2V0IGlmIHRoZXJlIGlzIG5vIFNoYWRvd1Jvb3QnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChnZXRTbG90dGVkTm9kZXMpLmlzLmEoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG5cblxufSk7XG5cbiIsICJcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7XG4gICAgYWRkQXR0cmlidXRlVG9rZW4sXG4gICAgYWRkVG9PYmplY3RMaW5rLFxuICAgIGNsZWFyQXR0cmlidXRlVG9rZW5zLFxuICAgIGNvbnRhaW5zQXR0cmlidXRlVG9rZW4sXG4gICAgZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSxcbiAgICBmaW5kQ2xvc2VzdE9iamVjdExpbmssXG4gICAgZ2V0TGlua2VkT2JqZWN0cyxcbiAgICBoYXNPYmplY3RMaW5rLFxuICAgIHJlbW92ZUF0dHJpYnV0ZVRva2VuLFxuICAgIHJlbW92ZU9iamVjdExpbmssXG4gICAgcmVwbGFjZUF0dHJpYnV0ZVRva2VuLFxuICAgIHRvZ2dsZUF0dHJpYnV0ZVRva2VuLFxuICAgIGZpbmRDbG9zZXN0QnlDbGFzc1xufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuXG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBodG1sMSwgaHRtbDIsIGh0bWwzO1xuXG5kZXNjcmliZSgnQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBodG1sMSA9IGA8ZGl2IGlkPVwidGVzdDFcIj48L2Rpdj5gO1xuICAgICAgICBodG1sMiA9IGA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8ZGl2IGlkPVwic3ViMVwiPlxuICAgICAgICA8ZGl2IGlkPVwic3ViMlwiPlxuICAgICAgICAgICAgPGRpdiBpZD1cInN1YjNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic3ViNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic3ViNVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5gO1xuICAgICAgICBcbiAgICAgICAgaHRtbDMgPSBgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInRlc3QxXCI+XG4gICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN1YjFcIiBpZD1cImExXCIgY2xhc3M9XCJzdWIxXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWIyXCIgaWQ9XCJhMlwiIGNsYXNzPVwic3ViMlwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN1YjNcIiBpZD1cImEzXCIgY2xhc3M9XCJzdWIzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN1YjRcIiBpZD1cImE0XCIgY2xhc3M9XCJzdWI0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWI1XCIgaWQ9XCJhNVwiIGNsYXNzPVwic3ViNVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5gO1xuXG5cbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdPYmplY3RMaW5rJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IFN5bWJvbCgnbXl0ZXN0Jyk7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgb2JqZWN0LWxpbmtzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9iaiA9IHthOiAxfTtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBleHBlY3QoaGFzT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGFkZFRvT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wsIG9iaik7XG4gICAgICAgICAgICBleHBlY3QoaGFzT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICBsZXQgbyA9IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgc3ltYm9sKS5uZXh0KCk7XG4gICAgICAgICAgICBleHBlY3Qoby52YWx1ZSkudG8uZXF1YWwob2JqKTtcblxuICAgICAgICAgICAgcmVtb3ZlT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpO1xuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCBzeW1ib2wpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pXG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2ZpbmRDbG9zZXN0T2JqZWN0TGluaygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IFN5bWJvbCgnbXl0ZXN0Jyk7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gb2JqZWN0bGluaycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IHN1YjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ViNCcpXG4gICAgICAgICAgICBsZXQgc3ViMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWIyJylcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHt9O1xuXG4gICAgICAgICAgICBleHBlY3QoaGFzT2JqZWN0TGluayhzdWIyLCBzeW1ib2wpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGFkZFRvT2JqZWN0TGluayhzdWIyLCBzeW1ib2wsIG9iaik7XG4gICAgICAgICAgICBleHBlY3QoaGFzT2JqZWN0TGluayhzdWIyLCBzeW1ib2wpKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGZpbmRDbG9zZXN0T2JqZWN0TGluayhzdWI0KTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5pcy5pbnN0YW5jZU9mKEhUTUxEaXZFbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSkudG8uYmUuZXF1YWwoJ3N1YjInKTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0F0dHJpYnV0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMztcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdmaW5kIGNsb3Nlc3QgQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYTUnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCB1bmRlZmluZWQsICdzdWI1J10sXG4gICAgICAgICAgICAgICAgWydhNScsICdkYXRhLW1vbnN0ZXItcm9sZScsICdzdWIzJywgJ3N1YjMnXSxcbiAgICAgICAgICAgICAgICBbJ2E1JywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTQnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCAnc3ViMScsICdzdWIxJ10sXG4gICAgICAgICAgICAgICAgWydhMycsICdkYXRhLW1vbnN0ZXItcm9sZScsICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2EyJywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgdW5kZWZpbmVkLCAnc3ViMiddLFxuICAgICAgICAgICAgICAgIFsnYTUnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCAnc3ViNScsICdzdWI1J11cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGl0KCdmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKCcgKyBhICsgJywgJyArIGIgKyAnLCcgKyBjICsgJykgc2hvdWxkIHJldHVybiAnICsgZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKSwgYiwgYykuZ2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItcm9sZScpKS50by5iZS5lcXVhbChkKTtcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTsgXG4gICAgICAgIFxuICAgICAgICBkZXNjcmliZSgnZmluZCBjbG9zZXN0IEVsZW1lbnQgd2l0aCBjbGFzcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYTUnLCAgJ3N1YjMnLCAnc3ViMyddLFxuICAgICAgICAgICAgICAgIFsnYTUnLCAgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTQnLCAgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTMnLCAgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTUnLCAgJ3N1YjUnLCAnc3ViNSddXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGl0KCdmaW5kQ2xvc2VzdEJ5Q2xhc3MoJyArIGEgKyAnLCAnICsgYiArICcpIHNob3VsZCByZXR1cm4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGZpbmRDbG9zZXN0QnlDbGFzcyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKSwgYikuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS50by5iZS5lcXVhbChjKTtcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGF0cmlidXRlS2V5ID0gJ2RhdGEtdGVzdCc7XG5cbiAgICAgICAgaXQoJ3RvZ2dsZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdmFsdWUpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXksICdhcHBsZSBiYW5hbm5hJylcbiAgICAgICAgICAgIHRvZ2dsZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAncGluYXBwbGUnKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdhcHBsZSBiYW5hbm5hIHBpbmFwcGxlJyk7XG4gICAgICAgICAgICB0b2dnbGVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgYmFuYW5uYScpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdhZGRBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAncGluYXBwbGUnKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdwaW5hcHBsZScpO1xuICAgICAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdiYW5hbm5hJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgncGluYXBwbGUgYmFuYW5uYScpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdyZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSwgJ2FwcGxlIGJhbmFubmEgbGVtbW9uJylcbiAgICAgICAgICAgIHJlbW92ZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAncGluYXBwbGUnKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdhcHBsZSBiYW5hbm5hIGxlbW1vbicpO1xuICAgICAgICAgICAgcmVtb3ZlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdiYW5hbm5hJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgbGVtbW9uJyk7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJykpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXksICdhcHBsZSBiYW5hbm5hJylcbiAgICAgICAgICAgIGV4cGVjdChjb250YWluc0F0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAncGluYXBwbGUnKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ2JhbmFubmEnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChjb250YWluc0F0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAnYXBwbGUnKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCcgcmVwbGFjZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdmFsdWUpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0cmlidXRlS2V5LCAnYXBwbGUgYmFuYW5uYSB0b21hdG8nKVxuICAgICAgICAgICAgcmVwbGFjZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAndG9tYXRvJywgJ2xlbW1vbicpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ2FwcGxlIGJhbmFubmEgbGVtbW9uJyk7XG4gICAgICAgICAgICByZXBsYWNlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdiYW5hbm5hJywgJ3BlYXInKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdhcHBsZSBwZWFyIGxlbW1vbicpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjbGVhckF0dHJpYnV0ZVRva2VucyhlbGVtZW50LCBrZXkpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0cmlidXRlS2V5LCAnYXBwbGUgYmFuYW5uYScpXG4gICAgICAgICAgICBjbGVhckF0dHJpYnV0ZVRva2VucyhlbGVtZW50LCBhdHJpYnV0ZUtleSk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnJyk7XG5cbiAgICAgICAgfSlcblxuXG4gICAgfSlcbn0pIiwgIid1c2Ugc3RyaWN0JztcblxuXG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxubGV0IFJlc291cmNlLERlcml2ZWRSZXNvdXJjZTtcblxuXG5cbmRlc2NyaWJlKCdSZXNvdXJjZScsIGZ1bmN0aW9uKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgUmVzb3VyY2UgPSBtWydSZXNvdXJjZSddO1xuXG5cbiAgICAgICAgICAgICAgICBEZXJpdmVkUmVzb3VyY2UgPSBjbGFzcyAgZXh0ZW5kcyBSZXNvdXJjZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS11cmxcIjogXCJodHRwOi8vZXhhbXBsZS5jb21cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGF0YS11cmwnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0Rlcml2ZWRSZXNvdXJjZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlb2YgUmVzb3VyY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IERlcml2ZWRSZXNvdXJjZSgpKS50by5iZS5hbi5pbnN0YW5jZW9mKFJlc291cmNlKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge1Jlc291cmNlTWFuYWdlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2VtYW5hZ2VyLm1qc1wiO1xuaW1wb3J0IHtjbGVhbnVwRE9NRnJvbVRlc3RpbmcsIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZ30gZnJvbSBcIi4uLy4uL3V0aWwvY2xlYW51cGRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ1Jlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBmZXRjaFJlZmVyZW5jZSwgcmV0dXJuU3RhdHVzO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuXG4gICAgICAgIHJldHVyblN0YXR1cyA9IDIwMDtcbiAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICBpZiAoIXVybCkgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVybCcpXG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmV0dXJuU3RhdHVzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH07XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ25ldyBSZXNvdXJjZU1hbmFnZXIoKSBzaG91bGQgcmV0dXJuIFJlc291cmNlTWFuYWdlciBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBSZXNvdXJjZU1hbmFnZXIoKTtcbiAgICAgICAgICAgIGV4cGVjdChkKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2xvYWQgcmVzb3VyY2VzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtYW5hZ2VyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbWFuYWdlciA9IG5ldyBSZXNvdXJjZU1hbmFnZXIoKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnYWRkIHNjcmlwdCBzaG91bGQgaW5zdGFuY2Ugb2YgUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkU2NyaXB0KCcvZXhhbXBsZS5qcycpKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhZGQgc3R5bGUgc2hvdWxkIGluc3RhbmNlIG9mIFJlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZFN0eWxlc2hlZXQoJy9zdHlsZS5qcycpKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhZGQgZGF0YSBzaG91bGQgaW5zdGFuY2Ugb2YgUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkRGF0YSgnL2RhdGEuanNvbicpKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjb25uZWN0IHJlc291cmNlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdhZGQgc2NyaXB0IGFuZCBjb25uZWN0IHNob3VsZCBpbnN0YW5jZSBvZiBSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkU2NyaXB0KCcvZXhhbXBsZS5qcycpLmNvbm5lY3QoKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdhZGQgc3R5bGUgYW5kIGNvbm5lY3Qgc2hvdWxkIGluc3RhbmNlIG9mIFJlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGRTdHlsZXNoZWV0KCcvc3R5bGUuanMnKS5jb25uZWN0KCkpLnRvLmJlLmluc3RhbmNlT2YoUmVzb3VyY2VNYW5hZ2VyKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnYWRkIGRhdGEgYW5kIGNvbm5lY3QgIHNob3VsZCBpbnN0YW5jZSBvZiBSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkRGF0YSgnL2RhdGEuanNvbicpLmNvbm5lY3QoKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cblxuICAgICAgICBkZXNjcmliZSgnY2hlY2sgYXZhaWxhYmlsaXR5IHJlc291cmNlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdhZGQgc2NyaXB0IGFuZCBjaGVjayBhdmFpbGFiaWxpdHkgc2hvdWxkIHJldHVybiBQcm9taXNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZFNjcmlwdCgnL2V4YW1wbGUuanMnKS5hdmFpbGFibGUoKSkudG8uYmUuaW5zdGFuY2VPZihQcm9taXNlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnYWRkIHN0eWxlIGFuZCBjaGVjayBhdmFpbGFiaWxpdHkgc2hvdWxkIHNob3VsZCByZXR1cm4gUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGRTdHlsZXNoZWV0KCcvc3R5bGUuanMnKS5hdmFpbGFibGUoKSkudG8uYmUuaW5zdGFuY2VPZihQcm9taXNlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnYWRkIGRhdGEgYW5kIGNoZWNrIGF2YWlsYWJpbGl0eSAgc2hvdWxkIHNob3VsZCByZXR1cm4gUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGREYXRhKCcvZGF0YS5qc29uJykuYXZhaWxhYmxlKCkpLnRvLmJlLmluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY2hlY2sgYXZhaWxhYmlsaXR5IGV4YW1wbGUuanNvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdhZGQgZGF0YSBhbmQgY2hlY2sgY29udGVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbWFuYWdlci5hZGREYXRhKCdodHRwczovL2V4YW1wbGUuY29tL2V4YW1wbGUuanNvbicpLmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLm91dGVySFRNTCkuY29udGFpbnMoJz57XCJhXCI6XCJ0ZXN0XCJ9PC9zY3JpcHQ+PC9oZWFkPicpO1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IEFUVFJJQlVURVBSRUZJWCwgQXNzZW1ibGVyIH07XG5cbi8qKlxuICogYXR0cmlidXRlIHByZWZpeFxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURVBSRUZJWCA9IFwiZGF0YS1tb25zdGVyLVwiO1xuXG4vKipcbiAqIEFzc2VtYmxlciBjbGFzc1xuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQWxsb3dzIHlvdSB0byBidWlsZCBhbiBodG1sIGZyYWdtZW50XG4gKi9cbmNsYXNzIEFzc2VtYmxlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHtEb2N1bWVudEZyYWdtZW50fSBmcmFnbWVudFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZnVuY3Rpb24gaXMgbm90IGRlZmluZWRcblx0ICovXG5cdGNvbnN0cnVjdG9yKGZyYWdtZW50KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmF0dHJpYnV0ZVByZWZpeCA9IEFUVFJJQlVURVBSRUZJWDtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKGZyYWdtZW50LCBnZXRHbG9iYWxGdW5jdGlvbihcIkRvY3VtZW50RnJhZ21lbnRcIikpO1xuXHRcdHRoaXMuZnJhZ21lbnQgPSBmcmFnbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG5cdCAqIEByZXR1cm4ge0Fzc2VtYmxlcn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICovXG5cdHNldEF0dHJpYnV0ZVByZWZpeChwcmVmaXgpIHtcblx0XHR2YWxpZGF0ZVN0cmluZyhwcmVmaXgpO1xuXHRcdHRoaXMuYXR0cmlidXRlUHJlZml4ID0gcHJlZml4O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldEF0dHJpYnV0ZVByZWZpeCgpIHtcblx0XHRyZXR1cm4gdGhpcy5hdHRyaWJ1dGVQcmVmaXg7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtQcm94eU9ic2VydmVyfHVuZGVmaW5lZH0gZGF0YVxuXHQgKiBAcmV0dXJuIHtEb2N1bWVudEZyYWdtZW50fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKi9cblx0Y3JlYXRlRG9jdW1lbnRGcmFnbWVudChkYXRhKSB7XG5cdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZGF0YSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKGRhdGEsIFByb3h5T2JzZXJ2ZXIpO1xuXHRcdGNvbnN0IGZyYWdtZW50ID0gdGhpcy5mcmFnbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0cmV0dXJuIGZyYWdtZW50O1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtBVFRSSUJVVEVQUkVGSVgsIEFzc2VtYmxlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vYXNzZW1ibGVyLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnQXNzZW1ibGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluaXRKU0RPTSgpO1xuICAgIH0pXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZURvY3VtZW50RnJhZ21lbnQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gPGRpdj5PbmU8L2Rpdj48ZGl2PlR3bzwvZGl2PicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoJzxkaXY+T25lPC9kaXY+PGRpdj5Ud288L2Rpdj4nKTtcblxuICAgICAgICAgICAgbGV0IGYgPSBuZXcgQXNzZW1ibGVyKGZyYWdtZW50KTtcblxuICAgICAgICAgICAgLy8gY29udmVydCB0byBzdHJpbmdcbiAgICAgICAgICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChmLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS5jbG9uZU5vZGUodHJ1ZSkpO1xuXG4gICAgICAgICAgICBleHBlY3QoY29udGFpbmVyLmlubmVySFRNTCkudG8uYmUuZXF1YWwoJzxkaXY+T25lPC9kaXY+PGRpdj5Ud288L2Rpdj4nKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBEb2N1bWVudEZyYWdtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IEFzc2VtYmxlcihkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgZXhwZWN0KGQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS50by5iZS5pbnN0YW5jZU9mKERvY3VtZW50RnJhZ21lbnQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCduZXcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgUmVuZGVyZXIoKSBzaG91bGQgcmV0dXJuIEFzc2VtYmxlciBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBBc3NlbWJsZXIoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgIGV4cGVjdChkKS50by5iZS5pbnN0YW5jZU9mKEFzc2VtYmxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEF0dHJpYnV0ZVByZWZpeCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAnICsgQVRUUklCVVRFUFJFRklYLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBBc3NlbWJsZXIoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgIGV4cGVjdChkLmdldEF0dHJpYnV0ZVByZWZpeCgpKS50by5iZS5lcXVhbChBVFRSSUJVVEVQUkVGSVgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzZXRBdHRyaWJ1dGVQcmVmaXgoKS5nZXRBdHRyaWJ1dGVQcmVmaXgoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gc2FtZSB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IEFzc2VtYmxlcihkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgZXhwZWN0KGQuc2V0QXR0cmlidXRlUHJlZml4KCd0ZXN0MDEnKS5nZXRBdHRyaWJ1dGVQcmVmaXgoKSkudG8uYmUuZXF1YWwoJ3Rlc3QwMScpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtnZXREb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxuZGVzY3JpYmUoJ0RPTScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBDdXN0b21Db250cm9sLCByZWdpc3RlckN1c3RvbUVsZW1lbnQsIFRlc3RDb21wb25lbnQsIGRvY3VtZW50LCBqc2RvbUZsYWc7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKHt9KS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIG0ucG9seWZpbGwoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBqc2RvbSBkb2VzIG5vdCBzdXBwb3J0IEVsZW1lbnRJbnRlcm5hbHNcbiAgICAgICAgICAgIGpzZG9tRmxhZyA9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoXCJqc2RvbVwiKTtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiKS50aGVuKChtKSA9PiB7XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQgPSBtWydyZWdpc3RlckN1c3RvbUVsZW1lbnQnXTtcblxuXG4gICAgICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21jb250cm9sLm1qc1wiKS50aGVuKChtKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21Db250cm9sID0gbVsnQ3VzdG9tQ29udHJvbCddO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50ID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21Db250cm9sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtb25zdGVyLWN1c3RvbWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdmb3JtRGlzYWJsZWRDYWxsYmFjaygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBcbiAgICAgICAgbGV0IGVsZW1lbnRcbiAgICAgICAgXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBUZXN0Q29tcG9uZW50MiA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24uXG4gICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gZGVzY3JpcHRpb24gb2YgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibW9uc3Rlci1jdXN0b21jb250cm9sMlwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnQyKVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChlKS50by5iZS5ub3QubnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wyJyk7XG5cbiAgICAgICAgfSlcbiAgICAgICAgXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5mb3JtRGlzYWJsZWRDYWxsYmFjaygpKS50by5iZS51bmRlZmluZWQ7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZm9ybURpc2FibGVkQ2FsbGJhY2sodHJ1ZSkpLnRvLmJlLnVuZGVmaW5lZDtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGV4cGVjdChkKS50by5ub3QuYmUubnVsbDtcbiAgICAgICAgICAgIFxuICAgICAgICB9KTtcblxuICAgIH0pXG5cblxuICAgIGRlc2NyaWJlKCdDdXN0b21Db250cm9sKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgY2xlYW51cERPTUZyb21UZXN0aW5nKCk7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gY3VzdG9tLWVsZW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBkXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZCA9IG5ldyBUZXN0Q29tcG9uZW50KCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZSkudG8uYmUubnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGQpLmlzLmVxdWFsKCdvYmplY3QnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY29ubmVjdCBlbXB0eSBlbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ2RvY3VtZW50IHNob3VsZCBjb250YWluIG1vbnN0ZXItY3VzdG9tY29udHJvbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykuYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpLmxlbmd0aCkuaXMuZXF1YWwoMSk7XG4gICAgICAgICAgICAgICAgLy8gbm8gZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2wobW9uc3RlclVwZGF0ZXIpXCIgYmVjYXVzZSBpdCBoYXMgbm90aGluZyB0byB1cGRhdGUgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWN1c3RvbWNvbnRyb2wgZGF0YS1tb25zdGVyLWVycm9yPVwiRXJyb3I6IGh0bWwgaXMgbm90IHNldC5cIj48L21vbnN0ZXItY3VzdG9tY29udHJvbD4nKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGRlc2NyaWJlKCdPcHRpb25zIGNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIGl0KCdkZWxlZ2F0ZXNGb2N1cyBzaG91bGQgY2hhbmdlIGZyb20gdHJ1ZSB0byBmYWxzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIC8vICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKVxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldE9wdGlvbignZGVsZWdhdGVzRm9jdXMnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgLy8gICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlMsIEpTT04uc3RyaW5naWZ5KHtkZWxlZ2F0ZXNGb2N1czogZmFsc2V9KSk7XG4gICAgICAgIC8vICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0T3B0aW9uKCdkZWxlZ2F0ZXNGb2N1cycpKS50by5iZS5mYWxzZTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgfSwgMTApO1xuICAgICAgICAvLyAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIH0pLnRpbWVvdXQoMTAwKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gfSlcblxuICAgICAgICBkZXNjcmliZSgnVGVzdCBFbGVtZW50SW50ZXJuYWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgZm9ybTtcblxuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCdmb3JtQXNzb2NpYXRlZCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLmNvbnN0cnVjdG9yLmZvcm1Bc3NvY2lhdGVkKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2Zvcm0nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5mb3JtKS50by5iZS5pbnN0YW5jZW9mKEhUTUxGb3JtRWxlbWVudClcblxuICAgICAgICAgICAgICAgIC8vIGlmIChqc2RvbUZsYWcpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgZXhwZWN0KCgpID0+IGQuZm9ybSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICAgICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGV4cGVjdChkLmZvcm0pLnRvLmJlLmluc3RhbmNlb2YoSFRNTEZvcm1FbGVtZW50KVxuICAgICAgICAgICAgICAgIC8vIH1cblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3ZhbHVlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBkLnZhbHVlKS50by50aHJvdyhFcnJvcik7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndmFsdWUgc2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IGQudmFsdWUgPSA0KS50by50aHJvdyhFcnJvcik7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2V0Rm9ybVZhbHVlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ25hbWUgZ2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGQubmFtZSkudG8uYmUubnVsbDtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCd0eXBlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLnR5cGUpLnRvLmJlLmVxdWFsKCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCd2YWxpZGl0eSBnZXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndmFsaWRhdGlvbk1lc3NhZ2UgZ2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnd2lsbFZhbGlkYXRlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0KCdjaGVja1ZhbGlkaXR5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdyZXBvcnRWYWxpZGl0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIGl0KCdzZXRWYWxpZGl0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLnNldFZhbGlkaXR5KHsndmFsdWVNaXNzaW5nJzogdHJ1ZX0sIFwibXkgbWVzc2FnZVwiKSkudG8uYmUudW5kZWZpbmVkO1xuXG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG59KTtcblxuXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtBVFRSSUJVVEVfVEhFTUVfTkFNRX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQge2ZpbmREb2N1bWVudFRlbXBsYXRlLCBUZW1wbGF0ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdGVtcGxhdGUubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1RlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaW5pdEpTRE9NKCk7XG4gICAgfSlcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgPHRlbXBsYXRlIGlkPVwibXl0ZW1wbGF0ZVwiPjwvdGVtcGxhdGU+YDtcbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUgSFRNTEZyYWdtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBbXG4gICAgICAgICAgICBbXCI8ZGl2PmZpcnN0PC9kaXY+PGRpdj5zZWNvbmQ8L2Rpdj5cIl0sXG4gICAgICAgICAgICBbXCI8ZGl2PmZpcnN0PC9kaXY+XCJdLFxuICAgICAgICAgICAgW1wiPGRpdj5maXJzdDwvZGl2PjxwPnNlY29uZDwvcD5cIl1cblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ25ldyBUZW1wbGF0ZSgpLmdldE5ld0RvY3VtZW50RnJhZ21lbnRBc1N0cmluZygpIHNob3VsZCByZXR1cm4gc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYTtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250YWluZXIuaW5uZXJIVE1MKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgVGVtcGxhdGUoKSBzaG91bGQgcmV0dXJuIGRvY3VtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IFRlbXBsYXRlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJykpO1xuICAgICAgICAgICAgZXhwZWN0KGQpLnRvLmJlLmluc3RhbmNlT2YoVGVtcGxhdGUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuZ2V0VGVtcGxhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgVGVtcGxhdGUoKS5nZXRUZW1wbGF0ZUVsZW1lbnQoKSBzaG91bGQgcmV0dXJuIEhUTUxUZW1wbGF0ZUVsZW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBuZXcgVGVtcGxhdGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKSk7XG4gICAgICAgICAgICBleHBlY3QoZC5nZXRUZW1wbGF0ZUVsZW1lbnQoKSkudG8uYmUuaW5zdGFuY2VPZihIVE1MVGVtcGxhdGVFbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmZpbmREb2N1bWVudFRlbXBsYXRlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgVGVtcGxhdGUgbm90IGZvdW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpbmREb2N1bWVudFRlbXBsYXRlKFwibm93YXlcIiwgZGl2KVxuICAgICAgICAgICAgfSkudG8udGhyb3dzKEVycm9yKTtcbiAgICAgICAgfSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuZmluZERvY3VtZW50VGVtcGxhdGUoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ1RlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBmaW5kIHRlbXBsYXRlIG92ZXIgb3duZXJEb2N1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBkaXYucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUw7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IHQgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15dGVtcGxhdGVcIiwgZGl2KTtcbiAgICAgICAgICAgICAgICBleHBlY3QodCkuaXMuaW5zdGFuY2VvZihUZW1wbGF0ZSk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdUaG1lbmVkIFRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG1lbUF0dHJpYnV0ZVZhbHVlO1xuXG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15dGVtcGxhdGVcIj48cD4xPC9wPjwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15dGVtcGxhdGUtbW9uc3RlclwiPjxwPjI8L3A+PC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlkPVwibXl0ZW1wbGF0ZS10ZXN0dGhlbWVcIj48cD40PC9wPjwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15cHJlZml4LW15dGVtcGxhdGUtbW9uc3RlclwiPjxwPjM8L3A+PC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJyk7XG4gICAgICAgICAgICAgICAgaWYgKGh0bWwuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKSkge1xuICAgICAgICAgICAgICAgICAgICBtZW1BdHRyaWJ1dGVWYWx1ZSA9IGh0bWwuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaHRtbC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWVtQXR0cmlidXRlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUsIG1lbUF0dHJpYnV0ZVZhbHVlKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGZpbmQgdGVtcGxhdGUgb3ZlciBvd25lckRvY3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBodG1sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci10ZW1wbGF0ZS1wcmVmaXgnLCAnbXlwcmVmaXgnKVxuICAgICAgICAgICAgICAgIGRpdi5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15dGVtcGxhdGVcIiwgZGl2KTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDEpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0MS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkudGV4dENvbnRlbnQpLmlzLmVxdWFsKFwiM1wiKTtcblxuICAgICAgICAgICAgICAgIGRpdi5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci10ZW1wbGF0ZS1wcmVmaXgnKVxuICAgICAgICAgICAgICAgIGxldCB0MiA9IGZpbmREb2N1bWVudFRlbXBsYXRlKFwibXl0ZW1wbGF0ZVwiLCBkaXYpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0MikuaXMuaW5zdGFuY2VvZihUZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS50ZXh0Q29udGVudCkuaXMuZXF1YWwoXCIyXCIpO1xuXG4gICAgICAgICAgICAgICAgaHRtbC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUsJ3Rlc3R0aGVtZScpO1xuICAgICAgICAgICAgICAgIGxldCBhPSBodG1sLm91dGVySFRNTDtcbiAgICAgICAgICAgICAgICBsZXQgdDMgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15dGVtcGxhdGVcIiwgZGl2KTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDMpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0My5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkudGV4dENvbnRlbnQpLmlzLmVxdWFsKFwiNFwiKTtcblxuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7ZmlyZUV2ZW50LCBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCwgZmlyZUN1c3RvbUV2ZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdFdmVudHMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBpbml0SlNET00oKTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2ZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZpbmQgb2JqZWN0JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3RlcicsICdoZWxsbycpO1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGRpdik7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZSA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCAnZGF0YS1tb25zdGVyJyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXInKSkudG8uYmUuZXF1YWwoJ2hlbGxvJylcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZmlyZUV2ZW50KGRpdiwgJ2NsaWNrJyk7XG4gICAgICAgICAgICB9LCAwKVxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZmlyZUV2ZW50KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIGNsaWNrIGV2ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZmlyZUV2ZW50KGRpdiwgJ2NsaWNrJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZmlyZUV2ZW50KGRpdiwgJ3RvdWNoJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50IG9uIGNvbGxlY3Rpb24nLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKCdkaXYnKTtcblxuXG4gICAgICAgICAgICBmaXJlRXZlbnQoY29sbGVjdGlvbiwgJ3RvdWNoJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnZGl2Jyk7XG5cblxuICAgICAgICAgICAgZmlyZUV2ZW50KGNvbGxlY3Rpb24sICd0b3VjaCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGZpcmVFdmVudCh7fSwgJ3RvdWNoJykpLnRvLnRocm93KEVycm9yKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdmaXJlQ3VzdG9tRXZlbnQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgY2xpY2sgZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBmaXJlQ3VzdG9tRXZlbnQoZGl2LCAnY2xpY2snKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBmaXJlQ3VzdG9tRXZlbnQoZGl2LCAndG91Y2gnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQgb24gY29sbGVjdGlvbjEnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwuZGV0YWlsICE9PSAnaGVsbG8gd29ybGQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKCdkaXYnKTtcblxuICAgICAgICAgICAgZmlyZUN1c3RvbUV2ZW50KGNvbGxlY3Rpb24sICd0b3VjaCcsIFwiaGVsbG8gd29ybGRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50IG9uIGNvbGxlY3Rpb24yJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsLmEgIT09ICdoZWxsbyB3b3JsZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgnZXJyb3InKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdicpO1xuXG4gICAgICAgICAgICBmaXJlQ3VzdG9tRXZlbnQoY29sbGVjdGlvbiwgJ3RvdWNoJywge2E6IFwiaGVsbG8gd29ybGRcIn0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdicpO1xuXG5cbiAgICAgICAgICAgIGZpcmVDdXN0b21FdmVudChjb2xsZWN0aW9uLCAndG91Y2gnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBmaXJlQ3VzdG9tRXZlbnQoe30sICd0b3VjaCcpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vZGF0YXNvdXJjZS5tanNcIjtcblxuZXhwb3J0IHsgRG9tU3RvcmFnZSB9O1xuXG4vKipcbiAqIFRoZSBEb21TdG9yYWdlIGlzIGEgY2xhc3MgdGhhdCBzdG9yZXMgZGF0YSBpbiBtZW1vcnkuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBEb21TdG9yYWdlIGV4dGVuZHMgRGF0YXNvdXJjZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhc291cmNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UvZG9tLXN0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGRlZmF1bHRzXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkZWZhdWx0cy5yZWFkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkZWZhdWx0cy5yZWFkLnNlbGVjdG9yXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkZWZhdWx0cy53cml0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZGVmYXVsdHMud3JpdGUuc2VsZWN0b3Jcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHJlYWQ6IHtcblx0XHRcdFx0c2VsZWN0b3I6IHVuZGVmaW5lZCxcblx0XHRcdH0sXG5cdFx0XHR3cml0ZToge1xuXHRcdFx0XHRzZWxlY3RvcjogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlIHJlYWQgc2VsZWN0b3IgaXMgbm90IGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGFyZSBubyBzdG9yYWdlIGVsZW1lbnRcblx0ICovXG5cdHJlYWQoKSB7XG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldE9wdGlvbihcInJlYWQuc2VsZWN0b3JcIiwgdW5kZWZpbmVkKTtcblx0XHRpZiAoIXNlbGVjdG9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcmVhZCBzZWxlY3RvciBpcyBub3QgZGVmaW5lZFwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBzdG9yYWdlID0gZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzKHRoaXMsIHNlbGVjdG9yKTtcblx0XHRpZiAoIXN0b3JhZ2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIHN0b3JhZ2UgZWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZS5pbm5lckhUTUwpO1xuXHRcdFx0XHR0aGlzLnNldChkYXRhKTtcblx0XHRcdFx0cmVzb2x2ZShkYXRhKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGUgd3JpdGUgc2VsZWN0b3IgaXMgbm90IGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGFyZSBubyBzdG9yYWdlIGVsZW1lbnRcblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5zZWxlY3RvclwiKTtcblx0XHRpZiAoIXNlbGVjdG9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgb3B0aW9uIHdyaXRlLnNlbGVjdG9yIGlzIG5vdCBkZWZpbmVkXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHN0b3JhZ2UgPSBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHModGhpcywgc2VsZWN0b3IpO1xuXHRcdGlmICghc3RvcmFnZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gc3RvcmFnZSBlbGVtZW50XCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRzdG9yYWdlLmlubmVySFRNTCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0KCkpO1xuXHRcdFx0XHRyZXNvbHZlKHN0b3JhZ2UpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtEb21TdG9yYWdlfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9kb20ubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1NlcnZlRG9tcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGl0KCdzaG91bGQgaW5pdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBkb20gPSBuZXcgRG9tU3RvcmFnZSh7XG4gICAgICAgICAgICBcbiAgICAgICAgfSlcblxuICAgICAgICBleHBlY3QoZG9tKS50by5iZS5ub3QubnVsbFxuXG5cbiAgICB9KVxuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vLi4vZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IFN0b3JhZ2UsIHN0b3JhZ2VPYmplY3RTeW1ib2wgfSBmcm9tIFwiLi4vc3RvcmFnZS5tanNcIjtcblxuZXhwb3J0IHsgTG9jYWxTdG9yYWdlIH07XG5cbi8qKlxuICogVGhlIExvY2FsU3RvcmFnZSBEYXRhc291cmNlIHByb3ZpZGVzIGEgZGF0YSBzdG9yZSBpbiB0aGUgYnJvd3NlciBsb2NhbFN0b3JhZ2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIExvY2FsU3RvcmFnZSBleHRlbmRzIFN0b3JhZ2Uge1xuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtleHRlcm5hbDpsb2NhbFN0b3JhZ2V9XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRbc3RvcmFnZU9iamVjdFN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIGdldEdsb2JhbE9iamVjdChcImxvY2FsU3RvcmFnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UvbG9jYWxzdG9yYWdlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSBjbG9uZVxuXHQgKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IExvY2FsU3RvcmFnZShcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLmtleSxcblx0XHQpO1xuXHR9XG59XG4iLCAiZnVuY3Rpb24gY3JlYXRlU3RvcmFnZSgpIHtcbiAgICBcbiAgICBsZXQgVU5TRVQgPSBTeW1ib2woKTtcbiAgICBsZXQgcyA9IHt9LFxuICAgICAgICBub29wQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgIH0sXG4gICAgICAgIF9pdGVtSW5zZXJ0aW9uQ2FsbGJhY2sgPSBub29wQ2FsbGJhY2s7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ3NldEl0ZW0nLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChrLCB2ID0gVU5TRVQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodiA9PT0gVU5TRVQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldEl0ZW0nIG9uICdTdG9yYWdlJzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IDEgcHJlc2VudC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgayA9IGsgKyAnJztcbiAgICAgICAgICAgICAgICBpZiAoIXMuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgX2l0ZW1JbnNlcnRpb25DYWxsYmFjayhzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNba10gPSB2ICsgJyc7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICdnZXRJdGVtJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBrID0+IHtcbiAgICAgICAgICAgICAgICBrID0gayArICcnO1xuICAgICAgICAgICAgICAgIGlmIChzLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzW2tdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ3JlbW92ZUl0ZW0nLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGsgPT4ge1xuICAgICAgICAgICAgICAgIGsgPSBrICsgJyc7XG4gICAgICAgICAgICAgICAgaWYgKHMuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNba107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAnY2xlYXInLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrIGluIHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzW2tdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAnbGVuZ3RoJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzKS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgXCJrZXlcIiwge1xuICAgICAgICB2YWx1ZTogayA9PiB7XG4gICAgICAgICAgICBsZXQga2V5ID0gT2JqZWN0LmtleXMocylba107XG4gICAgICAgICAgICByZXR1cm4gKCFrZXkpID8gbnVsbCA6IGtleTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ2l0ZW1JbnNlcnRpb25DYWxsYmFjaycsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gX2l0ZW1JbnNlcnRpb25DYWxsYmFjaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB2ID0+IHtcbiAgICAgICAgICAgIGlmICghdiB8fCB0eXBlb2YgdiAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdiA9IG5vb3BDYWxsYmFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9pdGVtSW5zZXJ0aW9uQ2FsbGJhY2sgPSB2O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHM7XG59XG5cblxuZXhwb3J0IHtjcmVhdGVTdG9yYWdlfTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0xvY2FsU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzXCI7XG5pbXBvcnQge2NyZWF0ZVN0b3JhZ2V9IGZyb20gXCIuLi8uLi8uLi8uLi91dGlsL2xvY2Fsc3RvcmFnZS5tanNcIjtcblxuXG5sZXQgbG9jYWxTdG9yYWdlUmVmZXJlbmNlO1xuXG5kZXNjcmliZSgnTG9jYWxTdG9yYWdlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZ2xvYmFsVGhpc1snbG9jYWxTdG9yYWdlJ10gPSBsb2NhbFN0b3JhZ2VSZWZlcmVuY2U7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsb2NhbFN0b3JhZ2VSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydsb2NhbFN0b3JhZ2UnXVxuICAgICAgICBnbG9iYWxUaGlzWydsb2NhbFN0b3JhZ2UnXSA9IGNyZWF0ZVN0b3JhZ2UoKTtcblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIExvY2FsU3RvcmFnZSAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTG9jYWxTdG9yYWdlKCdteWtleScpKS50by5iZS5pbnN0YW5jZW9mKExvY2FsU3RvcmFnZSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVhZCBzaG91bGQgcmV0dXJuIG9iamVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBMb2NhbFN0b3JhZ2UoJ215a2V5JylcbiAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IExvY2FsU3RvcmFnZSgnbXlrZXknKVxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG5cbn0pIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi8uLi9kYXRhc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgU3RvcmFnZSwgc3RvcmFnZU9iamVjdFN5bWJvbCB9IGZyb20gXCIuLi9zdG9yYWdlLm1qc1wiO1xuXG5leHBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9O1xuXG4vKipcbiAqIFRoZSBTZXNzaW9uU3RvcmFnZSBjbGFzcyBwcm92aWRlcyBhIGRhdGEgc291cmNlIHRoYXQgdXNlcyB0aGUgU2Vzc2lvblN0b3JhZ2UgQVBJIG9uIHRoZSBjbGllbnQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIFNlc3Npb25TdG9yYWdlIGV4dGVuZHMgU3RvcmFnZSB7XG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge2V4dGVybmFsOnNlc3Npb25TdG9yYWdlfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0W3N0b3JhZ2VPYmplY3RTeW1ib2xdKCkge1xuXHRcdHJldHVybiBnZXRHbG9iYWxPYmplY3QoXCJzZXNzaW9uU3RvcmFnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uLXN0b3JhZ2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSBDbG9uZVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtTZXNzaW9uU3RvcmFnZX1cblx0ICovXG5cdGdldENsb25lKCkge1xuXHRcdHJldHVybiBuZXcgU2Vzc2lvblN0b3JhZ2UoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXS5rZXksXG5cdFx0KTtcblx0fVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtTZXNzaW9uU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS5tanNcIjtcbmltcG9ydCB7Y3JlYXRlU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvbG9jYWxzdG9yYWdlLm1qc1wiO1xuXG5cbmxldCBzdG9yYWdlUmVmZXJlbmNlO1xuXG5kZXNjcmliZSgnU2Vzc2lvblN0b3JhZ2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydzZXNzaW9uU3RvcmFnZSddID0gc3RvcmFnZVJlZmVyZW5jZTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHN0b3JhZ2VSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydzZXNzaW9uU3RvcmFnZSddXG4gICAgICAgIGdsb2JhbFRoaXNbJ3Nlc3Npb25TdG9yYWdlJ10gPSBjcmVhdGVTdG9yYWdlKCk7XG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBTZXNzaW9uU3RvcmFnZSAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgU2Vzc2lvblN0b3JhZ2UoJ215a2V5JykpLnRvLmJlLmluc3RhbmNlb2YoU2Vzc2lvblN0b3JhZ2UpXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncncnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3JlYWQgc2hvdWxkIHJldHVybiBvYmplY3QnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgU2Vzc2lvblN0b3JhZ2UoJ215a2V5JylcbiAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IFNlc3Npb25TdG9yYWdlKCdteWtleScpXG4gICAgICAgICAgICBkcy53cml0ZSgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSkiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNPYmplY3QgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uL2RhdGFzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBkaWZmIH0gZnJvbSBcIi4uL2RpZmYubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBQaXBlIH0gZnJvbSBcIi4uL3BpcGUubWpzXCI7XG5cbmV4cG9ydCB7IFNlcnZlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzZXJ2ZXJWZXJzaW9uU3ltYm9sID0gU3ltYm9sKFwic2VydmVyVmVyc2lvblwiKTtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgc2VydmVyIGRhdGEgc291cmNlc1xuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIFNlcnZlciBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBhIHNlcnZlciBkYXRhc291cmNlXG4gKi9cbmNsYXNzIFNlcnZlciBleHRlbmRzIERhdGFzb3VyY2Uge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlclwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIHByZXBhcmVzIHRoZSBkYXRhIHRoYXQgY29tZXMgZnJvbSB0aGUgc2VydmVyLlxuXHQgKiBTaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtPYmplY3R9IHBheWxvYWRcblx0ICogQHJldHVybiB7T2JqZWN0fVxuXHQgKi9cblx0dHJhbnNmb3JtU2VydmVyUGF5bG9hZChwYXlsb2FkKSB7XG5cdFx0cGF5bG9hZCA9IGRvVHJhbnNmb3JtLmNhbGwodGhpcywgXCJyZWFkXCIsIHBheWxvYWQpO1xuXHRcdHRoaXNbc2VydmVyVmVyc2lvblN5bWJvbF0gPSBwYXlsb2FkO1xuXG5cdFx0Y29uc3QgZGF0YVBhdGggPSB0aGlzLmdldE9wdGlvbihcInJlYWQucGF0aFwiKTtcblx0XHRpZiAoZGF0YVBhdGgpIHtcblx0XHRcdHBheWxvYWQgPSBuZXcgUGF0aGZpbmRlcihwYXlsb2FkKS5nZXRWaWEoZGF0YVBhdGgpO1xuXHRcdH1cblxuXHRcdHJldHVybiBwYXlsb2FkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgcHJlcGFyZXMgdGhlIGRhdGEgZm9yIHdyaXRpbmcgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGF5bG9hZFxuXHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdCAqL1xuXHRwcmVwYXJlU2VydmVyUGF5bG9hZChwYXlsb2FkKSB7XG5cdFx0cGF5bG9hZCA9IGRvVHJhbnNmb3JtLmNhbGwodGhpcywgXCJ3cml0ZVwiLCBwYXlsb2FkKTtcblx0XHRwYXlsb2FkID0gZG9EaWZmLmNhbGwodGhpcywgcGF5bG9hZCk7XG5cblx0XHRjb25zdCBzaGVhdGhpbmdPYmplY3QgPSB0aGlzLmdldE9wdGlvbihcIndyaXRlLnNoZWF0aGluZy5vYmplY3RcIik7XG5cdFx0Y29uc3Qgc2hlYXRoaW5nUGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUuc2hlYXRoaW5nLnBhdGhcIik7XG5cblx0XHRpZiAoc2hlYXRoaW5nT2JqZWN0ICYmIHNoZWF0aGluZ1BhdGgpIHtcblx0XHRcdGNvbnN0IHN1YiA9IHBheWxvYWQ7XG5cdFx0XHRwYXlsb2FkID0gc2hlYXRoaW5nT2JqZWN0O1xuXHRcdFx0bmV3IFBhdGhmaW5kZXIocGF5bG9hZCkuc2V0VmlhKHNoZWF0aGluZ1BhdGgsIHN1Yik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBheWxvYWQ7XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIG9ialxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gZG9EaWZmKG9iaikge1xuXHRpZiAoXG5cdFx0dGhpc1tzZXJ2ZXJWZXJzaW9uU3ltYm9sXSA9PT0gbnVsbCB8fFxuXHRcdHRoaXNbc2VydmVyVmVyc2lvblN5bWJvbF0gPT09IHVuZGVmaW5lZFxuXHQpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcIndyaXRlLnBhcnRpYWwuY2FsbGJhY2tcIik7XG5cdGlmICghaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0cyA9IGRpZmYodGhpc1tzZXJ2ZXJWZXJzaW9uU3ltYm9sXSwgb2JqKTtcblx0aWYgKCFyZXN1bHRzKSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdG9iaiA9IGNhbGxiYWNrKG9iaiwgcmVzdWx0cyk7XG5cdHRoaXNbc2VydmVyVmVyc2lvblN5bWJvbF0gPSBvYmo7XG5cblx0cmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZG9UcmFuc2Zvcm0odHlwZSwgb2JqKSB7XG5cdGNvbnN0IHRyYW5zZm9ybWF0aW9uID0gdGhpcy5nZXRPcHRpb24oYCR7dHlwZX0ubWFwcGluZy50cmFuc2Zvcm1lcmApO1xuXHRpZiAodHJhbnNmb3JtYXRpb24gIT09IHVuZGVmaW5lZCAmJiB0cmFuc2Zvcm1hdGlvbiAhPT0gbnVsbCkge1xuXHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZSh0cmFuc2Zvcm1hdGlvbik7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5nZXRPcHRpb24oYCR7dHlwZX0ubWFwcGluZy5jYWxsYmFja3NgKTtcblxuXHRcdGlmIChpc0FycmF5KGNhbGxiYWNrcykpIHtcblx0XHRcdGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHBpcGUuc2V0Q2FsbGJhY2soY2FsbGJhY2spO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzT2JqZWN0KGNhbGxiYWNrcykpIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGNhbGxiYWNrcykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Y2FsbGJhY2tzLmhhc093blByb3BlcnR5KGtleSkgJiZcblx0XHRcdFx0XHR0eXBlb2YgY2FsbGJhY2tzW2tleV0gPT09IFwiZnVuY3Rpb25cIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKGtleSwgY2FsbGJhY2tzW2tleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0b2JqID0gcGlwZS5ydW4ob2JqKTtcblx0fVxuXG5cdHJldHVybiBvYmo7XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7U2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1NlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtIGRhdGEnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHdyaXRlQ2FsbGJhY2tDYWxsZWQgPSBmYWxzZVxuICAgICAgICBsZXQgcmVhZENhbGxiYWNrQ2FsbGVkID0gZmFsc2VcblxuICAgICAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgU2VydmVyKHtcbiAgICAgICAgICAgIHdyaXRlOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjogXCJjYWxsOm9uV3JpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbldyaXRlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlQ2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2hlYXRoaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVtbzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eXo6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBcImRhdGEueHl6XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWFkOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjogXCJjYWxsOm9uUmVhZFwiLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVhZDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGF0aDogJ2RhdGEueHl6JyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBleHBlY3Qoc2VydmVyLnRyYW5zZm9ybVNlcnZlclBheWxvYWQoe2RlbW86IDEsIGRhdGE6IHt4eXo6IDJ9fSkpLnRvLmRlZXAuZXF1YWwoe2RlbW86IDEsIGRhdGE6IHt4eXo6IDJ9fSlcbiAgICAgICAgZXhwZWN0KHNlcnZlci5wcmVwYXJlU2VydmVyUGF5bG9hZCh7ZGVtbzogMSwgZGF0YToge3h5ejogMn19KSkudG8uZGVlcC5lcXVhbCh7ZGVtbzogMSwgZGF0YToge3h5ejogMn19KVxuXG5cbiAgICB9KVxuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcsIGlzT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgV2ViQ29ubmVjdCBhcyBOZXRXZWJDb25uZWN0IH0gZnJvbSBcIi4uLy4uLy4uL25ldC93ZWJjb25uZWN0Lm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gXCIuLi8uLi8uLi9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qc1wiO1xuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIi4uL3NlcnZlci5tanNcIjtcblxuZXhwb3J0IHsgV2ViQ29ubmVjdCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICpcbiAqIGhpbnQ6IHRoaXMgbmFtZSBpcyB1c2VkIGluIHRoZSB0ZXN0cy4gaWYgeW91IHdhbnQgdG8gY2hhbmdlIGl0LCBwbGVhc2UgY2hhbmdlIGl0IGluIHRoZSB0ZXN0cyBhcyB3ZWxsLlxuICovXG5jb25zdCB3ZWJDb25uZWN0U3ltYm9sID0gU3ltYm9sKFwiY29ubmVjdGlvblwiKTtcblxuLyoqXG4gKiBUaGUgUmVzdEFQSSBpcyBhIGNsYXNzIHRoYXQgZW5hYmxlcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uLy4uLy4uL2V4YW1wbGUvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0Lm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4xLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgTG9jYWxTdG9yYWdlIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgYWNjZXNzIHRvIGRhdGEgb2JqZWN0cy5cbiAqL1xuY2xhc3MgV2ViQ29ubmVjdCBleHRlbmRzIFNlcnZlciB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhc291cmNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9O1xuXHRcdH1cblxuXHRcdGlmICghaXNPYmplY3Qob3B0aW9ucykpIG9wdGlvbnMgPSB7fTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0dGhpc1t3ZWJDb25uZWN0U3ltYm9sXSA9IG5ldyBOZXRXZWJDb25uZWN0KHtcblx0XHRcdHVybDogdGhpcy5nZXRPcHRpb24oXCJ1cmxcIiksXG5cdFx0XHRjb25uZWN0aW9uOiB7XG5cdFx0XHRcdHRpbWVvdXQ6IHRoaXMuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi50aW1lb3V0XCIpLFxuXHRcdFx0XHRyZWNvbm5lY3Q6IHtcblx0XHRcdFx0XHR0aW1lb3V0OiB0aGlzLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LnRpbWVvdXRcIiksXG5cdFx0XHRcdFx0YXR0ZW1wdHM6IHRoaXMuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi5yZWNvbm5lY3QuYXR0ZW1wdHNcIiksXG5cdFx0XHRcdFx0ZW5hYmxlZDogdGhpcy5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC5lbmFibGVkXCIpLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Y29ubmVjdCgpIHtcblx0XHRyZXR1cm4gdGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5jb25uZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ29ubmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLmlzQ29ubmVjdGVkKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmw9dW5kZWZpbmVkIERlZmluZXMgdGhlIHJlc291cmNlIHRoYXQgeW91IHdpc2ggdG8gZmV0Y2guXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb25uZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb25uZWN0aW9uLnRpbWVvdXQ9NTAwMCBEZWZpbmVzIHRoZSB0aW1lb3V0IGZvciB0aGUgY29ubmVjdGlvbi5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LnRpbWVvdXQgVGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB0aGUgcmVjb25uZWN0LlxuXHQgKiBAcHJvcGVydHkge051bWJlcn0gY29ubmVjdGlvbi5yZWNvbm5lY3QuYXR0ZW1wdHMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHJlY29ubmVjdHMuXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbH0gY29ubmVjdGlvbi5yZWNvbm5lY3QuZW5hYmxlZCBJZiB0aGUgcmVjb25uZWN0IGlzIGVuYWJsZWQuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZT17fSBPcHRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYmVmb3JlIHdyaXRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB3cml0ZS5tYXBwaW5nLnRyYW5zZm9ybWVyIFRyYW5zZm9ybWVyIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgZW50cmllc1xuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuRGF0YS5EYXRhc291cmNlfmV4YW1wbGVDYWxsYmFja1tdfSB3cml0ZS5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYmVmb3JlIHdyaXRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmdcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnNoZWF0aGluZy5vYmplY3QgT2JqZWN0IHRvIGJlIHdyYXBwZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLnNoZWF0aGluZy5wYXRoIFBhdGggdG8gdGhlIGRhdGFcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQ9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gcmVhZC5wYXRoIFBhdGggdG8gZGF0YVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZC5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHJlYWQubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tbXX0gcmVhZC5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHVybDogdW5kZWZpbmVkLFxuXHRcdFx0d3JpdGU6IHtcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHRyYW5zZm9ybWVyOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y2FsbGJhY2tzOiB7fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0c2hlYXRoaW5nOiB7XG5cdFx0XHRcdFx0b2JqZWN0OiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0cGF0aDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHJlYWQ6IHtcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHRyYW5zZm9ybWVyOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y2FsbGJhY2tzOiB7fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0cGF0aDogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHRcdGNvbm5lY3Rpb246IHtcblx0XHRcdFx0dGltZW91dDogNTAwMCxcblx0XHRcdFx0cmVjb25uZWN0OiB7XG5cdFx0XHRcdFx0dGltZW91dDogMTAwMCxcblx0XHRcdFx0XHRhdHRlbXB0czogMSxcblx0XHRcdFx0XHRlbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY2xvc2VzIHRoZSBjb25uZWN0aW9uLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Y2xvc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0uY2xvc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cmVhZCgpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0d2hpbGUgKHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0uZGF0YVJlY2VpdmVkKCkgPT09IHRydWUpIHtcblx0XHRcdFx0bGV0IG9iaiA9IHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0ucG9sbCgpO1xuXHRcdFx0XHRpZiAoIWlzT2JqZWN0KG9iaikpIHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiVGhlIHJlY2VpdmVkIGRhdGEgaXMgbm90IGFuIG9iamVjdC5cIikpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghKG9iaiBpbnN0YW5jZW9mIE1lc3NhZ2UpKSB7XG5cdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIlRoZSByZWNlaXZlZCBkYXRhIGlzIG5vdCBhIE1lc3NhZ2UuXCIpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRvYmogPSBvYmouZ2V0RGF0YSgpO1xuXHRcdFx0XHRvYmogPSB0aGlzLnRyYW5zZm9ybVNlcnZlclBheWxvYWQuY2FsbCh0aGlzLCBvYmopO1xuXHRcdFx0XHR0aGlzLnNldChvYmopO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXNvbHZlKHRoaXMuZ2V0KCkpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHRjb25zdCBvYmogPSB0aGlzLnByZXBhcmVTZXJ2ZXJQYXlsb2FkKHRoaXMuZ2V0KCkpO1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLnNlbmQob2JqKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtSZXN0QVBJfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBXZWJDb25uZWN0KHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdKTtcblx0fVxufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1dlYkNvbm5lY3R9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0Lm1qc1wiO1xuaW1wb3J0IHtpbml0V2ViU29ja2V0fSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbC93ZWJzb2NrZXQubWpzXCI7XG5cbmNvbnN0IHRlc3RVcmwgPSBcIndzczovL3dzLnBvc3RtYW4tZWNoby5jb20vcmF3XCJcblxuZGVzY3JpYmUoJ1dlYnNvY2tldCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBkcyA9IHVuZGVmaW5lZFxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRXZWJTb2NrZXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGlmIChkcykge1xuICAgICAgICAgICAgZHMuY2xvc2UoKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gd29ya2Fyb3VuZDogd2l0aG91dCB0aGlzLCB0aGUgbm9kZSB0ZXN0IHdpbGwgbm90IGV4aXQgXG4gICAgICAgIGZvciAoY29uc3Qgc3ltIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZHMpKSB7XG4gICAgICAgICAgICBpZiAoc3ltLnRvU3RyaW5nKCkgPT09ICdTeW1ib2woY29ubmVjdGlvbiknKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGRzW3N5bV1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN5bTIgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjb25uZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3ltMi50b1N0cmluZygpID09PSAnU3ltYm9sKGNvbm5lY3Rpb24pJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc29ja2V0ID0gY29ubmVjdGlvbltzeW0yXT8uc29ja2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvY2tldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc29ja2V0Py50ZXJtaW5hdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0Py5bJ3Rlcm1pbmF0ZSddKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkb25lKClcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2V0IGNsb25lJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3QodGVzdFVybClcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkcy5nZXRDbG9uZSgpXG4gICAgICAgIGV4cGVjdChjbG9uZSkudG8uYmUuYW4uaW5zdGFuY2VvZihXZWJDb25uZWN0KVxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtIGRhdGEnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCB3cml0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2VcbiAgICAgICAgbGV0IHJlYWRDYWxsYmFja0NhbGxlZCA9IGZhbHNlXG5cbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgICAgICB3cml0ZToge1xuICAgICAgICAgICAgICAgIG1hcHBpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IFwiY2FsbDpvbldyaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25Xcml0ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNoZWF0aGluZzoge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbW86IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeHl6OiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogXCJkYXRhLnh5elwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVhZDoge1xuICAgICAgICAgICAgICAgIG1hcHBpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IFwiY2FsbDpvblJlYWRcIixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvblJlYWQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhdGg6ICdkYXRhLnh5eicsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZHMuc2V0KHtcbiAgICAgICAgICAgICAgICBlbnZlbG9wOiB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBkcy5zZXQoe30pXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHt9KTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG5cbiAgICAgICAgICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHtlbnZlbG9wOnttZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJ9fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qod3JpdGVDYWxsYmFja0NhbGxlZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHJlYWRDYWxsYmFja0NhbGxlZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgMjAwKVxuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgY29ubmVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3Qoe1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICAgICAgcmVjb25uZWN0OiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBzZW5kIGEgbWVzc2FnZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnRpbWVvdXQoMTAwMDApXG4gICAgICAgIFxuICAgICAgICBkcyA9IG5ldyBXZWJDb25uZWN0KHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgICAgIHJlY29ubmVjdDoge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZHMuc2V0KHtcbiAgICAgICAgICAgICAgICBlbnZlbG9wOiB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBkcy5zZXQoe30pXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHt9KTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHtlbnZlbG9wOnttZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJ9fSk7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sNTAwKVxuICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcblxuXG4gICAgfSk7XG5cbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNGdW5jdGlvbiwgaXNBcnJheSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGRpZmYgfSBmcm9tIFwiLi4vLi4vZGlmZi5tanNcIjtcbmltcG9ydCB7IFNlcnZlciB9IGZyb20gXCIuLi9zZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBXcml0ZUVycm9yIH0gZnJvbSBcIi4vcmVzdGFwaS93cml0ZWVycm9yLm1qc1wiO1xuaW1wb3J0IHsgRGF0YUZldGNoRXJyb3IgfSBmcm9tIFwiLi9yZXN0YXBpL2RhdGEtZmV0Y2gtZXJyb3IubWpzXCI7XG5cbmV4cG9ydCB7IFJlc3RBUEkgfTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4xMi4wXG4gKi9cbmNvbnN0IHJhd0RhdGFTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL3Jhd2RhdGFcIixcbik7XG5cbi8qKlxuICogVGhlIFJlc3RBUEkgaXMgYSBjbGFzcyB0aGF0IGVuYWJsZXMgYSBSRVNUIEFQSSBzZXJ2ZXIuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi8uLi9leGFtcGxlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBSZXN0QVBJIGlzIGEgY2xhc3MgdGhhdCBiaW5kcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqL1xuY2xhc3MgUmVzdEFQSSBleHRlbmRzIFNlcnZlciB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhc291cmNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGU9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUuaW5pdD17fSBBbiBvcHRpb25zIG9iamVjdCBjb250YWluaW5nIGFueSBjdXN0b20gc2V0dGluZ3MgdGhhdCB5b3Ugd2FudCB0byBhcHBseSB0byB0aGUgcmVxdWVzdC4gVGhlIHBhcmFtZXRlcnMgYXJlIGlkZW50aWNhbCB0byB0aG9zZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXF1ZXN0L1JlcXVlc3R8UmVxdWVzdCBjb25zdHJ1Y3Rvcn1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLmluaXQubWV0aG9kPVBPU1Rcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLmluaXQuaGVhZGVycyBPYmplY3QgY29udGFpbmluZyBhbnkgY3VzdG9tIGhlYWRlcnMgdGhhdCB5b3Ugd2FudCB0byBhcHBseSB0byB0aGUgcmVxdWVzdC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLnJlc3BvbnNlQ2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaGFzIGJlZW4gY29tcGxldGVkLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gd3JpdGUuYWNjZXB0ZWRTdGF0dXM9WzIwMCwyMDFdXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS51cmwgVVJMXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYmVmb3JlIHdyaXRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB3cml0ZS5tYXBwaW5nLnRyYW5zZm9ybWVyIFRyYW5zZm9ybWVyIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgZW50cmllc1xuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuRGF0YS5EYXRhc291cmNlfmV4YW1wbGVDYWxsYmFja1tdfSB3cml0ZS5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYmVmb3JlIHdyaXRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5yZXBvcnRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHdyaXRlLnJlcG9ydC5wYXRoIFBhdGggdG8gdmFsaWRhdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnBhcnRpYWxcblx0ICogQHByb3BlcnR5IHtGdW5jdGlvbn0gd3JpdGUucGFydGlhbC5jYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgcmVxdWVzdCBoYXMgYmVlbiBjb21wbGV0ZWQuIChvYmosIGRpZmZSZXN1bHQpID0+IG9ialxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUuc2hlYXRoaW5nXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmcub2JqZWN0IE9iamVjdCB0byBiZSB3cmFwcGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5zaGVhdGhpbmcucGF0aCBQYXRoIHRvIHRoZSBkYXRhXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByZWFkPXt9IE9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQuaW5pdD17fSBBbiBvcHRpb25zIG9iamVjdCBjb250YWluaW5nIGFueSBjdXN0b20gc2V0dGluZ3MgdGhhdCB5b3Ugd2FudCB0byBhcHBseSB0byB0aGUgcmVxdWVzdC4gVGhlIHBhcmFtZXRlcnMgYXJlIGlkZW50aWNhbCB0byB0aG9zZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXF1ZXN0L1JlcXVlc3R8UmVxdWVzdCBjb25zdHJ1Y3Rvcn1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlYWQuaW5pdC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWFkLmFjY2VwdGVkU3RhdHVzPVsyMDBdXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWFkLnVybCBVUkxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZWFkLm1hcHBpbmcudHJhbnNmb3JtZXIgVHJhbnNmb3JtZXIgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5EYXRhLkRhdGFzb3VyY2V+ZXhhbXBsZUNhbGxiYWNrW119IHJlYWQubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR3cml0ZToge1xuXHRcdFx0XHRpbml0OiB7XG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzcG9uc2VDYWxsYmFjazogdW5kZWZpbmVkLFxuXHRcdFx0XHRhY2NlcHRlZFN0YXR1czogWzIwMCwgMjAxXSxcblx0XHRcdFx0dXJsOiBudWxsLFxuXHRcdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdFx0dHJhbnNmb3JtZXI6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjYWxsYmFja3M6IFtdLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaGVhdGhpbmc6IHtcblx0XHRcdFx0XHRvYmplY3Q6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRwYXRoOiB1bmRlZmluZWQsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlcG9ydDoge1xuXHRcdFx0XHRcdHBhdGg6IHVuZGVmaW5lZCxcblx0XHRcdFx0fSxcblxuXHRcdFx0XHRwYXJ0aWFsOiB7XG5cdFx0XHRcdFx0Y2FsbGJhY2s6IG51bGwsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0cmVhZDoge1xuXHRcdFx0XHRpbml0OiB7XG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRwYXRoOiBudWxsLFxuXHRcdFx0XHRyZXNwb25zZUNhbGxiYWNrOiB1bmRlZmluZWQsXG5cdFx0XHRcdGFjY2VwdGVkU3RhdHVzOiBbMjAwXSxcblx0XHRcdFx0dXJsOiBudWxsLFxuXHRcdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdFx0dHJhbnNmb3JtZXI6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjYWxsYmFja3M6IFtdLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGRhdGEgY2Fubm90IGJlIHJlYWRcblx0ICovXG5cdHJlYWQoKSB7XG5cdFx0bGV0IGluaXQgPSB0aGlzLmdldE9wdGlvbihcInJlYWQuaW5pdFwiKTtcblx0XHRpZiAoIWlzT2JqZWN0KGluaXQpKSBpbml0ID0ge307XG5cdFx0aWYgKCFpbml0W1wibWV0aG9kXCJdKSBpbml0W1wibWV0aG9kXCJdID0gXCJHRVRcIjtcblxuXHRcdGxldCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwicmVhZC5yZXNwb25zZUNhbGxiYWNrXCIpO1xuXHRcdGlmICghY2FsbGJhY2spIHtcblx0XHRcdGNhbGxiYWNrID0gKG9iaikgPT4ge1xuXHRcdFx0XHR0aGlzLnNldCh0aGlzLnRyYW5zZm9ybVNlcnZlclBheWxvYWQuY2FsbCh0aGlzLCBvYmopKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZldGNoRGF0YS5jYWxsKHRoaXMsIGluaXQsIFwicmVhZFwiLCBjYWxsYmFjayk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7V3JpdGVFcnJvcn0gdGhlIGRhdGEgY2Fubm90IGJlIHdyaXR0ZW5cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGxldCBpbml0ID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5pbml0XCIpO1xuXHRcdGlmICghaXNPYmplY3QoaW5pdCkpIGluaXQgPSB7fTtcblx0XHRpZiAodHlwZW9mIGluaXRbXCJoZWFkZXJzXCJdICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRpbml0W1wiaGVhZGVyc1wiXSA9IHtcblx0XHRcdFx0XCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAoIWluaXRbXCJtZXRob2RcIl0pIGluaXRbXCJtZXRob2RcIl0gPSBcIlBPU1RcIjtcblxuXHRcdGNvbnN0IG9iaiA9IHRoaXMucHJlcGFyZVNlcnZlclBheWxvYWQodGhpcy5nZXQoKSk7XG5cdFx0aW5pdFtcImJvZHlcIl0gPSBKU09OLnN0cmluZ2lmeShvYmopO1xuXG5cdFx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcIndyaXRlLnJlc3BvbnNlQ2FsbGJhY2tcIik7XG5cdFx0cmV0dXJuIGZldGNoRGF0YS5jYWxsKHRoaXMsIGluaXQsIFwid3JpdGVcIiwgY2FsbGJhY2spO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Jlc3RBUEl9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFJlc3RBUEkoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXS5yZWFkLFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ud3JpdGUsXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gaW5pdFxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGZldGNoRGF0YShpbml0LCBrZXksIGNhbGxiYWNrKSB7XG5cdGxldCByZXNwb25zZTtcblxuXHRyZXR1cm4gZmV0Y2godGhpcy5nZXRPcHRpb24oYCR7a2V5fS51cmxgKSwgaW5pdClcblx0XHQudGhlbigocmVzcCkgPT4ge1xuXHRcdFx0cmVzcG9uc2UgPSByZXNwO1xuXG5cdFx0XHRjb25zdCBhY2NlcHRlZFN0YXR1cyA9IHRoaXMuZ2V0T3B0aW9uKGAke2tleX0uYWNjZXB0ZWRTdGF0dXNgLCBbMjAwXSkubWFwKFxuXHRcdFx0XHROdW1iZXIsXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoYWNjZXB0ZWRTdGF0dXMuaW5kZXhPZihyZXNwLnN0YXR1cykgPT09IC0xKSB7XG5cdFx0XHRcdHRocm93IG5ldyBEYXRhRmV0Y2hFcnJvcihcblx0XHRcdFx0XHRgdGhlIHJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYW4gYWNjZXB0ZWQgc3RhdHVzIChhY3R1YWw6ICR7cmVzcC5zdGF0dXN9KS5gLFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzcC50ZXh0KCk7XG5cdFx0fSlcblx0XHQudGhlbigoYm9keSkgPT4ge1xuXHRcdFx0bGV0IG9iajtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0b2JqID0gSlNPTi5wYXJzZShib2R5KTtcblxuXHRcdFx0XHRyZXNwb25zZVtyYXdEYXRhU3ltYm9sXSA9IG9iajtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0aWYgKGJvZHkubGVuZ3RoID4gMTAwKSB7XG5cdFx0XHRcdFx0Ym9keSA9IGAke2JvZHkuc3Vic3RyaW5nKDAsIDk3KX0uLi5gO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhyb3cgbmV3IERhdGFGZXRjaEVycm9yKFxuXHRcdFx0XHRcdGB0aGUgcmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gKGFjdHVhbDogJHtib2R5fSkuYCxcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHRcdGNhbGxiYWNrKG9iaik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2U7XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHRocm93IGU7XG5cdFx0fSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgV3JpdGVFcnJvciB9O1xuXG4vKipcbiAqIEVycm9yIG1lc3NhZ2UgZm9yIEFQSSByZXF1ZXN0cyB3aXRoIGV4dGVuc2lvbiBvZiByZXF1ZXN0IGFuZCB2YWxpZGF0aW9uLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IHRoZSBlcnJvciBpcyB0aHJvd24gYnkgdGhlIHJlc3QgYXBpIGluIGNhc2Ugb2YgZXJyb3JcbiAqL1xuY2xhc3MgV3JpdGVFcnJvciBleHRlbmRzIEVycm9yIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7UmVzcG9uc2V9IHJlc3BvbnNlXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSB2YWxpZGF0aW9uXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlLCByZXNwb25zZSwgdmFsaWRhdGlvbikge1xuXHRcdHN1cGVyKG1lc3NhZ2UpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0cmVzcG9uc2U6IHJlc3BvbnNlLFxuXHRcdFx0dmFsaWRhdGlvbjogdmFsaWRhdGlvbixcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS93cml0ZS1lcnJvclwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UmVzcG9uc2V9XG5cdCAqL1xuXHRnZXRSZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJyZXNwb25zZVwiXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdCAqL1xuXHRnZXRWYWxpZGF0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXVtcInZhbGlkYXRpb25cIl07XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhRmV0Y2hFcnJvciB9O1xuXG4vKipcbiAqIEVycm9yIG1lc3NhZ2UgZm9yIEFQSSByZXF1ZXN0c1xuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNDMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IHRoZSBlcnJvciBpcyB0aHJvd24gYnkgdGhlIHJlc3QgYXBpIGluIGNhc2Ugb2YgZXJyb3JcbiAqL1xuY2xhc3MgRGF0YUZldGNoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuXHQgKiBAcGFyYW0ge1Jlc3BvbnNlfSByZXNwb25zZVxuXHQgKi9cblx0Y29uc3RydWN0b3IobWVzc2FnZSwgcmVzcG9uc2UpIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHJlc3BvbnNlOiByZXNwb25zZSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL2RhdGFmZXRjaGVycm9yQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UmVzcG9uc2V9XG5cdCAqL1xuXHRnZXRSZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJyZXNwb25zZVwiXTtcblx0fVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtSZXN0QVBJfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanNcIjtcbmltcG9ydCB7dmFsaWRhdGVPYmplY3R9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmRlc2NyaWJlKCdSZXN0QVBJJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGZldGNoUmVmZXJlbmNlO1xuICAgIGxldCByZXR1cm5TdGF0dXM7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICByZXR1cm5TdGF0dXMgPSAyMDA7XG4gICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsVGhpc1snZmV0Y2gnXTtcbiAgICAgICAgZ2xvYmFsVGhpc1snZmV0Y2gnXSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmV0dXJuU3RhdHVzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH07XG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBSZXN0QVBJICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBSZXN0QVBJKCdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nKSkudG8uYmUuaW5zdGFuY2VvZihSZXN0QVBJKVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3J3JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZWFkIHNob3VsZCByZXR1cm4gb2JqZWN0JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IFJlc3RBUEkoe3VybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbid9KVxuICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVPYmplY3QoZGF0YSk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3dyaXRlIHNob3VsZCAnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgUmVzdEFQSSh7XG4gICAgICAgICAgICAgICAgICAgIHJlYWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbidcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHRlZFN0YXR1czogWzk5XVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoXCJzaG91bGQgbm90IGJlIGhlcmVcIik7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgncncgd2l0aCBlcnJvcnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3JlYWQgc2hvdWxkIHRocm93IGV4Y2VwdGlvbicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm5TdGF0dXMgPSA0MDA7IC8vIGZldGNoIHJlc3BvbnNlIHdpdGggNDAwXG5cbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IFJlc3RBUEkoe3VybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbid9KVxuICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShcInNob3VsZCBub3QgcnVuLlwiKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZSgpKTsgLy8gc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBiZWNhdXNlIHJldHVyblN0YXR1cz00MDBcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3dyaXRlIHNob3VsZCAnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuU3RhdHVzID0gNDAwOyAvLyBmZXRjaCByZXNwb25zZSB3aXRoIDQwMFxuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgUmVzdEFQSSh7dXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJ30sIHt1cmw6ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nfSlcbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZU9iamVjdChkYXRhKTtcbiAgICAgICAgICAgICAgICBkb25lKFwiZXJyb3JcIik7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoKSk7IC8vIHNob3VsZCB0aHJvdyBleGNlcHRpb24gYmVjYXVzZSByZXR1cm5TdGF0dXM9NDAwXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG5cbn0pXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0RhdGFzb3VyY2V9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdEYXRhc291cmNlJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIERhdGFzb3VyY2UgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IERhdGFzb3VyY2UoKSkudG8uYmUuaW5zdGFuY2VvZihEYXRhc291cmNlKVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ09wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzZXRPcHRpb24gc2hvdWxkIGNoYW5nZSB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzb3VyY2UgPSBuZXcgRGF0YXNvdXJjZSgpO1xuICAgICAgICAgICAgZXhwZWN0KGRhdGFzb3VyY2UuZ2V0T3B0aW9uKCdkZWZhdWx0JykpLnRvLmJlLnVuZGVmaW5lZFxuICAgICAgICAgICAgZGF0YXNvdXJjZS5zZXRPcHRpb24oJ2RlZmF1bHQnLCB0cnVlKVxuICAgICAgICAgICAgZXhwZWN0KGRhdGFzb3VyY2UuZ2V0T3B0aW9uKCdkZWZhdWx0JykpLnRvLmJlLnRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3NldE9wdGlvbnMgc2hvdWxkIHNldCBhbGwgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YXNvdXJjZSA9IG5ldyBEYXRhc291cmNlKCk7XG4gICAgICAgICAgICBleHBlY3QoZGF0YXNvdXJjZS5nZXRPcHRpb24oJ2RlZmF1bHQnKSkudG8uYmUudW5kZWZpbmVkXG4gICAgICAgICAgICBkYXRhc291cmNlLnNldE9wdGlvbnMoe2RlZmF1bHQ6IHRydWV9KVxuICAgICAgICAgICAgZXhwZWN0KGRhdGFzb3VyY2UuZ2V0T3B0aW9uKCdkZWZhdWx0JykpLnRvLmJlLnRydWVcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ3J3JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkYXRhc291cmNlID0gbmV3IERhdGFzb3VyY2UoKTtcbiAgICAgICAgaXQoJ3JlYWQgc2hvdWxkIHRocm93IGV4ZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGRhdGFzb3VyY2UucmVhZCgpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3dyaXRlIHNob3VsZCB0aHJvdyBleGVwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBkYXRhc291cmNlLnJlYWQoKSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcbiAgICBcbiAgICBkZXNjcmliZSgnZ2V0L3NldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZGF0YXNvdXJjZSA9IG5ldyBEYXRhc291cmNlKCk7XG4gICAgICAgIGl0KCdnZXQgc2hvdWxkIHJldHVybiB1bmRlZmluZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoIGRhdGFzb3VyY2UuZ2V0KCkpLnRvLmJlLmVxbCh7fSk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3dyaXRlIHNob3VsZCB0aHJvdyBleGVwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCggZGF0YXNvdXJjZS5nZXQoKSkudG8uYmUuZXFsKHt9KTtcbiAgICAgICAgICAgIGV4cGVjdCggZGF0YXNvdXJjZS5zZXQoe2E6J215dmFsdWUnfSkpLnRvLmJlLmluc3RhbmNlb2YoRGF0YXNvdXJjZSk7XG4gICAgICAgICAgICBleHBlY3QoIGRhdGFzb3VyY2UuZ2V0KCkpLnRvLmJlLmVxbCh7YTonbXl2YWx1ZSd9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSkiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2J1aWxkTWFwfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvYnVpbGRtYXAubWpzXCI7XG5cblxuZGVzY3JpYmUoJ2J1aWxkTWFwJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGNvbnZlcnRNYXBSZXN1bHQgPSBmdW5jdGlvbiAocikge1xuICAgICAgICBpZiAociBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgciA9IE9iamVjdC5mcm9tRW50cmllcyhyKTtcbiAgICAgICAgICAgIGlmIChyIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgICAgICByID0gci5tYXAoKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRNYXBSZXN1bHQoZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHIgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCBvXSBvZiBPYmplY3QuZW50cmllcyhyKSkge1xuICAgICAgICAgICAgICAgICAgICByW2tdID0gY29udmVydE1hcFJlc3VsdChvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBkZXNjcmliZSgnYnVpbGQgTWFwIHdpdGggY2FsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdkZWZpbml0aW9uIHNob3VsZCByZXR1cm4gbWFwIHdpdGggc3ViIGFuZCBwYXJlbnQga2V5cycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBcImRhdGFcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiQ2Fzc2FuZHJhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAyLCBsYWJlbDogXCJYU1wiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCwgbGFiZWw6IFwiTFwiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIlllc3NleSFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LCBsYWJlbDogXCJMXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IGNhbGxiYWNrID0gZnVuY3Rpb24gKHN1YmplY3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgbSA9IG5ldyBNYXA7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtpLCBiXSBvZiBPYmplY3QuZW50cmllcyhzdWJqZWN0LmRhdGEpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGtleTEgPSBpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2osIGNdIG9mIE9iamVjdC5lbnRyaWVzKGIuZW5yaWNobWVudC52YXJpYW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkyID0gajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgZF0gb2YgT2JqZWN0LmVudHJpZXMoYy5wcmljZSkpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkzID0gaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQubmFtZSA9IGIubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmxhYmVsID0gYy5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmlkID0gW2tleTEsIGtleTIsIGtleTNdLmpvaW4oJy4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uc2V0KGQuaWQsIGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBtYXAgPSBidWlsZE1hcChvYmosIGNhbGxiYWNrLCAnJHtuYW1lfSAke2xhYmVsfScsICcke2lkfScpXG4gICAgICAgICAgICBsZXQgaSA9IGNvbnZlcnRNYXBSZXN1bHQobWFwKTtcblxuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGkpKS50by5iZS5lcXVhbCgne1wiMC4wLjBcIjpcIkNhc3NhbmRyYSBYWFNcIixcIjAuMC4xXCI6XCJDYXNzYW5kcmEgWFhTXCIsXCIwLjEuMFwiOlwiQ2Fzc2FuZHJhIFhTXCIsXCIwLjEuMVwiOlwiQ2Fzc2FuZHJhIFhTXCIsXCIwLjIuMFwiOlwiQ2Fzc2FuZHJhIFNcIixcIjAuMi4xXCI6XCJDYXNzYW5kcmEgU1wiLFwiMC4zLjBcIjpcIkNhc3NhbmRyYSBMXCIsXCIwLjMuMVwiOlwiQ2Fzc2FuZHJhIExcIixcIjEuMC4wXCI6XCJZZXNzZXkhIFhYU1wiLFwiMS4wLjFcIjpcIlllc3NleSEgWFhTXCIsXCIxLjEuMFwiOlwiWWVzc2V5ISBYU1wiLFwiMS4xLjFcIjpcIlllc3NleSEgWFNcIixcIjEuMi4wXCI6XCJZZXNzZXkhIFNcIixcIjEuMi4xXCI6XCJZZXNzZXkhIFNcIixcIjEuMy4wXCI6XCJZZXNzZXkhIExcIixcIjEuMy4xXCI6XCJZZXNzZXkhIExcIn0nKTtcblxuICAgICAgICB9KVxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYnVpbGQgc3VibWFwIHdpdGggKicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ2RlZmluaXRpb24gc2hvdWxkIHJldHVybiB7XCIxMFwiOlwiQ2Fzc2FuZHJhIDEwXCIsXCIyMFwiOlwiWWVzc2V5ISAyMFwifScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBcImRhdGFcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiQ2Fzc2FuZHJhXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIlllc3NleSFcIixcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBtYXAgPSBidWlsZE1hcChvYmosICdkYXRhLionLCAnJHtuYW1lfSAke2lkfScsICcke2lkfScpXG4gICAgICAgICAgICBsZXQgaSA9IGNvbnZlcnRNYXBSZXN1bHQobWFwKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShpKSkudG8uYmUuZXF1YWwoJ3tcIjEwXCI6XCJDYXNzYW5kcmEgMTBcIixcIjIwXCI6XCJZZXNzZXkhIDIwXCJ9Jyk7XG5cbiAgICAgICAgfSlcbiAgICB9KVxuXG5cbiAgICBkZXNjcmliZSgnYnVpbGQgc3VibWFwIHdpdGggKionLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdkZWZpbml0aW9uIHNob3VsZCByZXR1cm4gTWFwJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJDYXNzYW5kcmFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJywgaWQ6IDF9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQycsIGlkOiAyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQycsIGlkOiAzfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnLCBpZDogNH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQycsIGlkOiA1fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnLCBpZDogNn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LCBsYWJlbDogXCJMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQycsIGlkOiA3fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnLCBpZDogOH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiWWVzc2V5IVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnJpY2htZW50XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDEsIGxhYmVsOiBcIlhYU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnLCBpZDogOX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJywgaWQ6IDEwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQycsIGlkOiAxMX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJywgaWQ6IDEyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDMsIGxhYmVsOiBcIlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJywgaWQ6IDEzfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnLCBpZDogMTR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIkxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJywgaWQ6IDE1fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnLCBpZDogMTZ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQ0LjEyIFx1MjBBQycsIGlkOiAxN31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IG1hcCA9IGJ1aWxkTWFwKG9iaiwgJ2RhdGEuKi5lbnJpY2htZW50LnZhcmlhbnRzLioucHJpY2UuKicsICcke3ZrfSAke14ubGFiZWx9ICR7Xi5eLm5hbWV9JywgJyR7Xi5eLnNrdX0nKVxuICAgICAgICAgICAgbGV0IGkgPSBjb252ZXJ0TWFwUmVzdWx0KG1hcCk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoaSkpLnRvLmJlLmVxdWFsKCd7XCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4wLnByaWNlLjBcIjpcIjEyLjEyIFx1MjBBQyBYWFMgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4wLnByaWNlLjFcIjpcIjEyLjEyIFx1MjBBQyBYWFMgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4xLnByaWNlLjBcIjpcIjIyLjEyIFx1MjBBQyBYUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjEucHJpY2UuMVwiOlwiMjIuMTIgXHUyMEFDIFhTIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMi5wcmljZS4wXCI6XCIzMi4xMiBcdTIwQUMgUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjIucHJpY2UuMVwiOlwiMzIuMTIgXHUyMEFDIFMgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4zLnByaWNlLjBcIjpcIjQyLjEyIFx1MjBBQyBMIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMy5wcmljZS4xXCI6XCI0Mi4xMiBcdTIwQUMgTCBDYXNzYW5kcmFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjAucHJpY2UuMFwiOlwiMTIuMTIgXHUyMEFDIFhYUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4wLnByaWNlLjFcIjpcIjEyLjEyIFx1MjBBQyBYWFMgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMS5wcmljZS4wXCI6XCIyMi4xMiBcdTIwQUMgWFMgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMS5wcmljZS4xXCI6XCIyMi4xMiBcdTIwQUMgWFMgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMi5wcmljZS4wXCI6XCIzMi4xMiBcdTIwQUMgUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4yLnByaWNlLjFcIjpcIjMyLjEyIFx1MjBBQyBTIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjMucHJpY2UuMFwiOlwiNDIuMTIgXHUyMEFDIEwgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMy5wcmljZS4xXCI6XCI0Mi4xMiBcdTIwQUMgTCBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4zLnByaWNlLjJcIjpcIjQ0LjEyIFx1MjBBQyBMIFllc3NleSFcIn0nKTtcblxuICAgICAgICB9KVxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZXhhbXBsZWNvZGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBleGVjdXRlIGV4YW1wbGUgY29kZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBcImRhdGFcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiQ2Fzc2FuZHJhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFkZHJlc3NcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3RyZWV0XCI6IFwiNDkzLTQxMDUgVnVscHV0YXRlIFN0cmVldFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2l0eVwiOiBcIlNhdW11clwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiemlwXCI6IFwiNTI2MjhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiSG9sbHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRkcmVzc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJlZXRcIjogXCIxNzYyIEVnZXQgUmQuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaXR5XCI6IFwiU2Nod2FsYmFjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiemlwXCI6IFwiOTUyMzQwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAzMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkd1eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhZGRyZXNzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0cmVldFwiOiBcIjk1Ny0zODggU29sbGljaXR1ZGluIEF2ZW51ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2l0eVwiOiBcIlBhbmNoaVx1MDBFMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiemlwXCI6IFwiNDIwNzI5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBtYXA7XG4gICAgICAgICAgICBtYXAgPSBidWlsZE1hcChvYmosICdkYXRhLionLCAnJHtuYW1lfSAoJHthZGRyZXNzLnppcH0gJHthZGRyZXNzLmNpdHl9KScsICdpZCcpXG4gICAgICAgICAgICBleHBlY3QobWFwKS50by5iZS5pbnN0YW5jZU9mKE1hcCk7XG5cbiAgICAgICAgICAgIG1hcCA9IGJ1aWxkTWFwKG9iaiwgJ2RhdGEuKicsICcke25hbWV9ICgke2FkZHJlc3MuemlwfSAke2FkZHJlc3MuY2l0eX0pJylcbiAgICAgICAgICAgIGV4cGVjdChtYXApLnRvLmJlLmluc3RhbmNlT2YoTWFwKTtcblxuICAgICAgICAgICAgbWFwID0gYnVpbGRNYXAob2JqLCAnZGF0YS4qJywgJyR7bmFtZX0gKCR7YWRkcmVzcy56aXB9ICR7YWRkcmVzcy5jaXR5fSknLCAnaWQnLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodmFsdWVbJ2lkJ10gPj0gMjApID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZXhwZWN0KG1hcCkudG8uYmUuaW5zdGFuY2VPZihNYXApO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYnVpbGRtYXAoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgb2JqMSA9IHtcbiAgICAgICAgICAgIGRhdGFzZXQ6IHtcbiAgICAgICAgICAgICAgICBcIjEwMDgyXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDFcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDFcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIxMDA4NFwiOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAyXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAyXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gTWFwIEluc3RhbmNlLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChidWlsZE1hcCh7fSwgJycpKS50by5iZS5pbnN0YW5jZU9mKE1hcCk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW29iajEsICdkYXRhc2V0LionLCAnYWRkcmVzcycsICd7XCJkYXRhc2V0LjEwMDgyXCI6XCJIZXJlIDFcIixcImRhdGFzZXQuMTAwODRcIjpcIkhlcmUgMlwifSddLFxuICAgICAgICAgICAgW29iajEsICd4JywgdW5kZWZpbmVkLCAne30nXSxcbiAgICAgICAgICAgIFtvYmoxLCAnZGF0YXNldC4qJywgJ25hbWUnLCAne1wiZGF0YXNldC4xMDA4MlwiOlwiVGVzdCAxXCIsXCJkYXRhc2V0LjEwMDg0XCI6XCJUZXN0IDJcIn0nXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdidWlsZE1hcCgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnLCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcsJyArIEpTT04uc3RyaW5naWZ5KGMpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoZCkgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IGJ1aWxkTWFwKGEsIGIsIGMpO1xuICAgICAgICAgICAgICAgIGxldCBtID0gSlNPTi5zdHJpbmdpZnkoY29udmVydE1hcFJlc3VsdCh0KSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG0pLnRvLmJlLmVxdWFsKGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG59KTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VHJhbnNmb3JtZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS90cmFuc2Zvcm1lci5tanNcIjtcbmltcG9ydCB7Z2V0TG9jYWxlT2ZEb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHtFbWJlZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ1RyYW5zZm9ybWVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgcHJvbWlzZXMucHVzaChpbml0SlNET00oKSk7XG4gICAgICAgIGlmICghZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1RyYW5zZm9ybWVyLnJ1bigpIGxvY2FsaXplIGNvbW1hbmRzJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgY29uc3QgaXNOb2RlID0gdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgJ1tvYmplY3QgZ2xvYmFsXScgPT09IGdsb2JhbC50b1N0cmluZy5jYWxsKGdsb2JhbCk7XG5cblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2RhdGV0aW1lZm9ybWF0JywgXCIyMDIzLTAyLTA0IDA4OjAyOjAxXCIsIFwiRmViIDQsIDIwMjMsIDA4OjAyOjAxXCIsIFwiNCBGZWIgMjAyMywgMDg6MDI6MDFcIl0sXG4gICAgICAgICAgICBbJ2RhdGV0aW1lZm9ybWF0Omxvbmc6c2hvcnQnLCBcIjIwMjMtMDItMDQgMDg6MDI6MDFcIiwgXCJGZWJydWFyeSA0LCAyMDIzIGF0IDA4OjAyXCIsIFwiNCBGZWJydWFyeSAyMDIzIGF0IDA4OjAyXCJdLFxuICAgICAgICAgICAgWydkYXRldGltZWZvcm1hdDpzaG9ydDpzaG9ydCcsIFwiMjAyMy0wMi0wNCAwODowMjowMVwiLCBcIjIvNC8yMywgMDg6MDJcIiwgXCIwNC8wMi8yMDIzLCAwODowMlwiXSxcbiAgICAgICAgICAgIFsnY3VycmVuY3knLCBcIkVVUjBcIiwgXCJcdTIwQUMwLjAwXCIsIFwiXHUyMEFDMC4wMFwiXSxcbi8vICAgICAgICAgICAgWydjdXJyZW5jeToxOjInLCBcIkVVUjE0LjI1XCIsIFwiXHUyMEFDMTQuM1wiLCBcIlx1MjBBQzE0LjJcIl0sXG4gICAgICAgICAgICBbJ2N1cnJlbmN5JywgXCJFVVIxNC4yNVwiLCBcIlx1MjBBQzE0LjI1XCIsIFwiXHUyMEFDMTQuMjVcIl0sXG4gICAgICAgICAgICBbJ2RhdGV0aW1lJywgXCIyMDIzLTAyLTE0IDE0OjEyOjEwXCIsIFwiMi8xNC8yMDIzLCAxNDoxMjoxMFwiLFwiMTQvMDIvMjAyMywgMTQ6MTI6MTBcIl0sXG4gICAgICAgICAgICBbJ2RhdGV0aW1lJywgXCIyMDIzLTAyLTE0IDA4OjAyOjAxXCIsIFwiMi8xNC8yMDIzLCAwODowMjowMVwiLFwiMTQvMDIvMjAyMywgMDg6MDI6MDFcIl0sXG4gICAgICAgICAgICBbJ2RhdGUnLCBcIjIwMjMtMDItMTRcIiwgXCIwMi8xNC8yMDIzXCIsXCIxNC8wMi8yMDIzXCJdLFxuXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzEyNFxuXG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpIC8vIGNvbW1hbmRcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpIC8vIHZhbHVlXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKSAvLyBleHBlY3RlZCByZXN1bHQgbm9kZSAgICBcbiAgICAgICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpIC8vIGV4cGVjdGVkIHJlc3VsdCBicm93c2VyICAgIFxuXG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IGlzTm9kZSA/IGMgOiBkXG5cbiAgICAgICAgICAgIGl0KCdUcmFuc2Zvcm1lci5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykucnVuKCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0LnJ1bihiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZXhwZWN0ZWQpLnRvLmJlLmVxbChyLCBcIlRyYW5zZm9ybWVyLnJ1bihcIiArIEpTT04uc3RyaW5naWZ5KGEpICsgXCIpLnJ1bihcIiArIEpTT04uc3RyaW5naWZ5KGIpICsgXCIpIHNob3VsZCByZXR1cm4gXCIgKyBKU09OLnN0cmluZ2lmeShjKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ1RyYW5zZm9ybWVyLnJ1bigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnZXF1YWxzOmEnLCBcImFcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczphJywgXCJiXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCAzLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCA2LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpvbicsIHRydWUsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6dHJ1ZScsIHRydWUsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6b24nLCBmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6dHJ1ZScsIGZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpvZmYnLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpmYWxzZScsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOm9mZicsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOmZhbHNlJywgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6MycsIDMsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6MycsIDYsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOnVuZGVmaW5lZCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczp1bmRlZmluZWQnLCAzLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpudWxsJywgbnVsbCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpudWxsJywgMywgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6MycsIDYsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCB7fSwgZmFsc2VdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIHthOiA0fSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgW10sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCBcIlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgWzEsIDIsIDNdLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCBbMV0sIHRydWVdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIFtcIjFcIl0sIHRydWVdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIFt0cnVlXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2NvbnRhaW5zOngnLCBcImFzZCB3eGQgc2RmXCIsIHRydWVdLFxuICAgICAgICAgICAgWydjb250YWluczp4JywgXCJhc2Qgd2Qgc2RmXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnY29udGFpbnM6YicsIFtcImFcIiwgXCJiXCIsIFwiY1wiXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2NvbnRhaW5zOngnLCBbXCJhXCIsIFwiYlwiLCBcImNcIl0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXN1bmRlZmluZWQnLCBcImFcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc3VuZGVmaW5lZCcsIG51bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXN1bmRlZmluZWQnLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWydpc251bGwnLCBcImFcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc251bGwnLCBudWxsLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNzZXQnLCBudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzc2V0JywgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzc2V0JywgXCJcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzbnVtYmVyJywgXCJhXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNudW1iZXInLCA0LCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNudW1iZXInLCA0LjUsIHRydWVdLFxuICAgICAgICAgICAgWydpc2ludGVnZXInLCA0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNpbnRlZ2VyJywgNCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzZmxvYXQnLCA1LjYsIHRydWVdLFxuICAgICAgICAgICAgWydpc2Zsb2F0JywgNSwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc29iamVjdCcsIDQsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNvYmplY3QnLCB7fSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzYXJyYXknLCBbe31dLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNhcnJheScsIFwiYVwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ25vdCcsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnbm90JywgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgWydtYXA6YT00OmI9NTpjPTYnLCBcImFcIiwgXCI0XCJdLFxuICAgICAgICAgICAgWyd5ZWFyJywgXCIyMDIzLTAyLTE0XCIsIDIwMjNdLFxuICAgICAgICAgICAgWydtb250aCcsIFwiMjAyMy0wMi0xNFwiLCAyXSxcbiAgICAgICAgICAgIFsnZGF5JywgXCIyMDIzLTAyLTE0XCIsIDE0XSxcbiAgICAgICAgICAgIFsnd2Vla2RheScsIFwiMjAyMy0wMi0xNFwiLCAyXSxcbiAgICAgICAgICAgIFsnbWludXRlcycsIFwiMjAyMy0wMi0xNCAwNjoxMjoyMVwiLCAxMl0sXG4gICAgICAgICAgICBbJ3NlY29uZHMnLCBcIjIwMjMtMDItMTQgMDY6MTI6MjFcIiwgMjFdLFxuICAgICAgICAgICAgWydob3VycycsIFwiMjAyMy0wMi0xNCAwNjoxMjoyMVwiLCA2XSxcbiAgICAgICAgICAgIFsndGltZScsIFwiMjAyMy0wMi0xNCAwNjoxMjoyMVwiLCBcIjA2OjEyOjIxXCJdLFxuICAgICAgICAgICAgWyd0aW1lc3RhbXAnLCBcIjIwMjMtMDItMTRcIiwgMTY3NjMzMjgwMDAwMF0sXG4gICAgICAgICAgICBbJ2NvbmNhdDphLmIuYzp0ZXN0OmEuYi5kJywge2E6IHtiOiB7YzogNCwgZDogNn19fSwgXCI0dGVzdDZcIl0sXG4gICAgICAgICAgICBbJ2NvbmNhdDphLmIuYzpcXFxcIFxcXFwgOmEuYi5kJywge2E6IHtiOiB7YzogNCwgZDogNn19fSwgXCI0ICA2XCJdLFxuICAgICAgICAgICAgWydjb25jYXQ6YS5iLmM6LDphLmIuZCcsIHthOiB7Yjoge2M6IDQsIGQ6IDZ9fX0sIFwiNCw2XCJdLFxuICAgICAgICAgICAgWydjb25jYXQ6YS5iLmM6LDpcXFxcIDphLmIuZCcsIHthOiB7Yjoge2M6IDQsIGQ6IDZ9fX0sIFwiNCwgNlwiXSxcbiAgICAgICAgICAgIFsnPz86YScsIG51bGwsICdhJ10sXG4gICAgICAgICAgICBbJz8/OmEnLCB1bmRlZmluZWQsICdhJ10sXG4gICAgICAgICAgICBbJz8/OmEnLCAndHJ1ZScsICd0cnVlJ10sXG4gICAgICAgICAgICBbJz8/OmEnLCBmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgWycgaWY6YTogJywgZmFsc2UsIHVuZGVmaW5lZF0sIC8vIHdpdGhvdXQgXFxcXFxuICAgICAgICAgICAgWycgaWY6YTpcXFxcICcsIGZhbHNlLCBcIiBcIl0sXG4gICAgICAgICAgICBbJyBpZjphOlxcXFwgJywgdHJ1ZSwgXCJhXCJdLFxuICAgICAgICAgICAgWydkZWZhdWx0OnVuZGVmaW5lZDpib29sJywgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6eWVzJywgbnVsbCwgJ3llcyddLFxuICAgICAgICAgICAgWydkZWZhdWx0OnllcycsIHVuZGVmaW5lZCwgJ3llcyddLFxuICAgICAgICAgICAgWydkZWZhdWx0OjE6Ym9vbCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6b246Ym9vbCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6dHJ1ZTpib29sJywgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp5ZXM6Ym9vbCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6ZmFsc2U6Ym9vbCcsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWydkZWZhdWx0OjE6aW50JywgdW5kZWZpbmVkLCAxXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDoxOnN0cmluZycsIHVuZGVmaW5lZCwgJzEnXSxcbiAgICAgICAgICAgIFsnZmlyc3Qta2V5Jywge2E6IDEsIGM6IDMsIGI6IDJ9LCAxXSxcbiAgICAgICAgICAgIFsnbGFzdC1rZXknLCB7YTogMSwgYzogMywgYjogMn0sIDNdLFxuICAgICAgICAgICAgWydudGgtbGFzdC1rZXk6MCcsIHthOiAxLCBjOiAzLCBiOiAyfSwgM10sXG4gICAgICAgICAgICBbJ250aC1sYXN0LWtleToxJywge2E6IDEsIGM6IDMsIGI6IDJ9LCAyXSxcbiAgICAgICAgICAgIFsnbnRoLWxhc3Qta2V5OjInLCB7YTogMSwgYzogMywgYjogMn0sIDFdLFxuICAgICAgICAgICAgWydudGgta2V5OjInLCB7YTogMSwgYjogMiwgYzogM30sIDNdLFxuICAgICAgICAgICAgWydudGgta2V5OjAnLCB7YzogMywgYTogMSwgYjogMn0sIDFdLFxuICAgICAgICAgICAgWydudGgta2V5OjInLCB7YTogMSwgYzogMywgYjogMn0sIDNdLFxuICAgICAgICAgICAgWydwcmVmaXg6SGVsbG9cXFxcICcsICd0ZXN0JywgXCJIZWxsbyB0ZXN0XCJdLFxuICAgICAgICAgICAgWyd0b2pzb24nLCB7YTogNH0sIFwie1xcXCJhXFxcIjo0fVwiXSxcbiAgICAgICAgICAgIFsncHJlZml4OmFcXFxcXFxcXDogJywgJ3Rlc3QnLCBcImFcXFxcdGVzdFwiXSxcbiAgICAgICAgICAgIFsncHJlZml4OmFcXFxcICcsICd0ZXN0JywgXCJhIHRlc3RcIl0sXG4gICAgICAgICAgICBbJ3N0YXRpYzphYmM6YTpiOngnLCBcInRlc3RcIiwgXCJhYmM6YTpiOnhcIl0sXG4gICAgICAgICAgICBbJ3RvbG93ZXJjYXNlJywgXCJBOmI6Q3NlNFwiLCBcImE6Yjpjc2U0XCJdLFxuICAgICAgICAgICAgWyd0b3VwcGVyJywgXCJBOmI6Q3NlNFwiLCBcIkE6QjpDU0U0XCJdLFxuICAgICAgICAgICAgWyd0b3N0cmluZycsIDUsIFwiNVwiXSxcbiAgICAgICAgICAgIFsndG9zdHJpbmcnLCBbMSwgMiwgMywge31dLCBcIjEsMiwzLFtvYmplY3QgT2JqZWN0XVwiXSxcbiAgICAgICAgICAgIFsndG9pbnRlZ2VyJywgXCI1XCIsIDVdLFxuICAgICAgICAgICAgWyd0cmltJywgXCIgNSBcIiwgXCI1XCJdLFxuICAgICAgICAgICAgWyd0cmltJywgXCIgYVwiLCBcImFcIl0sXG4gICAgICAgICAgICBbJ3RyaW0nLCBcIiBcIiwgXCJcIl0sXG4gICAgICAgICAgICBbJ3Jhd3VybGVuY29kZScsIFwiXHUwMEZDXHUwMEY2XHUwMEU0XCIsIFwiJUMzJUJDJUMzJUI2JUMzJUE0XCJdLFxuICAgICAgICAgICAgWydjYWxsOnRlc3RjYWxsYmFjazo0OjU6NicsIFwidGVzdFwiLCBcInRlc3Q0NTZcIl0sXG4gICAgICAgICAgICBbJ3BsYWluJywgJ3Q8YnI+ZXN0JywgXCJ0ZXN0XCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCB0cnVlLCBcImFcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsICdvbicsIFwiYVwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgJ3RydWUnLCBcImFcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsICdmYWxzZScsIFwiYlwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgOSwgXCJhXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCAnJywgXCJiXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCB1bmRlZmluZWQsIFwiYlwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgZmFsc2UsIFwiYlwiXSxcbiAgICAgICAgICAgIFsndWNmaXJzdCcsICdjYXInLCBcIkNhclwiXSxcbiAgICAgICAgICAgIFsndWNmaXJzdCcsICdjQXInLCBcIkNBclwiXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp0ZXN0JywgJ2EnLCBcImFcIl0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6dGVzdCcsIHVuZGVmaW5lZCwgXCJ0ZXN0XCJdLFxuICAgICAgICAgICAgWydmcm9tanNvbicsICd7fScsIHt9XSxcbiAgICAgICAgICAgIFsnZnJvbWpzb24nLCAne1wiYVwiOjF9Jywge2E6IDF9XSxcbiAgICAgICAgICAgIFsndWN3b3JkcycsICdjQXIgcnVucycsIFwiQ0FyIFJ1bnNcIl0sXG4gICAgICAgICAgICBbJ3RvaW50ZWdlcicsICc2JywgNl0sXG4gICAgICAgICAgICBbJ2xlbmd0aCcsICd0ZXN0JywgNF0sXG4gICAgICAgICAgICBbJ3RvLWJhc2U2NCcsICdIZWxsbyBXb3JsZCEnLCBcIlNHVnNiRzhnVjI5eWJHUWhcIl0sXG4gICAgICAgICAgICBbJ2Zyb20tYmFzZTY0JywgJ1NHVnNiRzhnVjI5eWJHUWgnLCBcIkhlbGxvIFdvcmxkIVwiXSxcbiAgICAgICAgICAgIFsndG8tYmFzZTY0JywgJ3Rlc3QnLCBcImRHVnpkQT09XCJdLFxuICAgICAgICAgICAgWydmcm9tLWJhc2U2NCcsIFwiZEdWemRBPT1cIiwgJ3Rlc3QnXSxcbiAgICAgICAgICAgIFsncHJlZml4OmEnLCAndGVzdCcsIFwiYXRlc3RcIl0sXG4gICAgICAgICAgICBbJ3N1ZmZpeDphJywgJ3Rlc3QnLCBcInRlc3RhXCJdLFxuICAgICAgICAgICAgWydpbmRleDphJywge2E6IDR9LCA0XSxcbiAgICAgICAgICAgIFsnaW5kZXg6MicsIFsyLCA0LCA3XSwgN10sXG4gICAgICAgICAgICBbJ2luZGV4Ong6dGVzdCcsIFsyLCA0LCA3XSwgJ3Rlc3QnXSxcbiAgICAgICAgICAgIFsncGF0aDphLmIuYycsIHthOiB7Yjoge2M6IDR9fX0sIDRdLFxuICAgICAgICAgICAgWydwYXRoOmEuYi5kJywge2E6IHtiOiB7YzogNH19fSwgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIFsnaW5kZXg6YScsIG5ldyBNYXAoKS5zZXQoJ2EnLCA1KSwgNV0sXG4gICAgICAgICAgICBbJ3N1YnN0cmluZzoyOjQnLCAnYWJjZGVmZ2hpamtsbW5vcCcsICdjZGVmJ10sXG4gICAgICAgICAgICBbJ25vcCcsICdhYmNkZWZnaGlqa2xtbm9wJywgJ2FiY2RlZmdoaWprbG1ub3AnXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjJywgJ2EgYiBjJywgJ2EgYiddLFxuICAgICAgICAgICAgWydzZXQtdG9nZ2xlOmMnLCAnYSBiJywgJ2EgYiBjJ10sXG4gICAgICAgICAgICBbJ3NldC1zZXQ6YycsICdhIGInLCAnYSBiIGMnXSxcbiAgICAgICAgICAgIFsnc2V0LXNldDpjJywgJ2EgYiBjJywgJ2EgYiBjJ10sXG4gICAgICAgICAgICBbJ3NldC1yZW1vdmU6YycsICdhIGIgYycsICdhIGInXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjOiwnLCAnYSxiLGMnLCAnYSxiJ10sXG4gICAgICAgICAgICBbJ3NldC10b2dnbGU6YzosJywgJ2EsYicsICdhLGIsYyddLFxuICAgICAgICAgICAgWydzZXQtc2V0OmM6LCcsICdhLGInLCAnYSxiLGMnXSxcbiAgICAgICAgICAgIFsnc2V0LXNldDpjOiwnLCAnYSxiLGMnLCAnYSxiLGMnXSxcbiAgICAgICAgICAgIFsnc2V0LXJlbW92ZTpjOiwnLCAnYSxiLGMnLCAnYSxiJ10sXG4gICAgICAgICAgICBbJ3NldC10b2dnbGU6YyxkOiwnLCAnYSxiLGMnLCAnYSxiLGQnXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjLGQ6LCcsICdhLGIsYyxkJywgJ2EsYiddLFxuICAgICAgICAgICAgWydzZXQtdG9nZ2xlOmMsZDosJywgJ2EsYicsICdhLGIsYyxkJ10sXG4gICAgICAgICAgICBbJ3NldC1zZXQ6YyxkOiwnLCAnYSxiJywgJ2EsYixjLGQnXSxcbiAgICAgICAgICAgIFsnc2V0LXNldDpjLGQ6LCcsICdhLGIsYycsICdhLGIsYyxkJ10sXG4gICAgICAgICAgICBbJ3NldC1yZW1vdmU6YzosJywgJ2EsYixjJywgJ2EsYiddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ1RyYW5zZm9ybWVyLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYyksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBUcmFuc2Zvcm1lcihhKTtcblxuICAgICAgICAgICAgICAgIHQuc2V0Q2FsbGJhY2soJ3Rlc3RjYWxsYmFjaycsIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhICsgYiArIGMgKyBkO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHQucnVuKGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjKS50by5iZS5lcWwociwgXCJUcmFuc2Zvcm1lci5ydW4oXCIgKyBKU09OLnN0cmluZ2lmeShhKSArIFwiKS5ydW4oXCIgKyBKU09OLnN0cmluZ2lmeShiKSArIFwiKSBzaG91bGQgcmV0dXJuIFwiICsgSlNPTi5zdHJpbmdpZnkoYykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVHJhbnNmb3JtZXIucnVuKCkgdGhyb3dzIEVycm9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndG9sb3dlcmNhc2UnLCBbXV0sXG4gICAgICAgICAgICBbJ3RvbG93ZXJjYXNlJywge31dLFxuICAgICAgICAgICAgWyd0b2xvd2VyY2FzZScsIDQuNV0sXG4gICAgICAgICAgICBbJ3RvdXBwZXInLCB0cnVlXSxcbiAgICAgICAgICAgIFsndG91cHBlcicsIDVdLFxuICAgICAgICAgICAgWyd0b2ludGVnZXInLCBcImFcIl0sXG4gICAgICAgICAgICBbJ3RyaW0nLCA1XSxcbiAgICAgICAgICAgIFsndHJpbScsIHRydWVdLFxuICAgICAgICAgICAgWyd0cmltJywge31dLFxuICAgICAgICAgICAgWyd0cmltJywgW11dLFxuICAgICAgICAgICAgWydyYXd1cmxlbmNvZGUnLCBbXV0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsIHt9XSxcbiAgICAgICAgICAgIFsndWN3b3JkcycsIHt9XSxcbiAgICAgICAgICAgIFsndWN3b3JkcycsIGZhbHNlXSxcbiAgICAgICAgICAgIFsndWN3b3JkcycsIDRdLFxuICAgICAgICAgICAgWydwYXRoOmEuYi5jJywgXCJcIiwgNF0sXG4gICAgICAgICAgICBbJ3RvaW50ZWdlcicsIHt9XSxcbiAgICAgICAgICAgIFsnYmFzZTY0Jywge31dLFxuICAgICAgICAgICAgWydmcm9tanNvbicsICcnXSxcbiAgICAgICAgICAgIFsncHJlZml4Jywge31dLFxuICAgICAgICAgICAgWydzdWZmaXgnLCB7fV0sXG4gICAgICAgICAgICBbJ2luZGV4JywgXCJ0ZXN0XCJdLFxuICAgICAgICAgICAgWyd4eHh4eHgnLCBcInRlc3RcIl0sIC8vIHVuc3VwcG9ydGVkIGNvbW1hbmRcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnVHJhbnNmb3JtZXIucnVuKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYikgKyAnKSBzaG91bGQgdGhyb3cgRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB0LnJ1bihiKSkudG8udGhyb3coRXJyb3IpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCduZXcgVHJhbnNmb3JtZXIoKS5ydW4oXCJ1bmlxaWRcIiknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIFN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKCd1bmlxaWQnKTtcbiAgICAgICAgICAgIGV4cGVjdCh0LnJ1bihcIlwiKSkudG8uYmUuYSgnc3RyaW5nJyk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbmV3IFRyYW5zZm9ybWVyKCkucnVuKFwiZGVmYXVsdDpleUppSWpveGZRPT06b2JqZWN0XCIpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdCA9IG5ldyBUcmFuc2Zvcm1lcignZGVmYXVsdDpleUppSWpveGZRPT06b2JqZWN0Jyk7XG4gICAgICAgICAgICBleHBlY3QodC5ydW4odW5kZWZpbmVkKSkudG8uZXFsKHtiOiAxfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCduZXcgVHJhbnNmb3JtZXIoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBUcmFuc2Zvcm1lcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVHJhbnNmb3JtZXIoXCJcIikpLnRvLmluc3RhbmNlT2YoVHJhbnNmb3JtZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIFRyYW5zZm9ybWVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUcmFuc2Zvcm1lcihcInN1ZmZpeDphYmNcIikpLnRvLmluc3RhbmNlT2YoVHJhbnNmb3JtZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnZmFsc2UgYXMgYXJndW1lbnQgc2hvdWxkIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbmV3IFRyYW5zZm9ybWVyKGZhbHNlKVxuICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ29iamVjdCBhcyBhcmd1bWVudCBzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBuZXcgVHJhbnNmb3JtZXIoe30pXG4gICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2kxOG4nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGh0bWwxID0gYFxuPGRpdiBpZD1cIm1vY2stdHJhbnNsYXRpb25zXCI+PC9kaXY+XG48c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJ0cmFuc2xhdGlvbnNcIj5cbiAgICB7XG4gICAgICAgIFwidGVzdDFcIjogXCJ4eXpcIixcbiAgICAgICAgXCJ0ZXN0M1wiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwieHl6XCJcbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PiAgXG5gO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKGRvbmUpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrLXRyYW5zbGF0aW9ucycpO1xuICAgICAgICAgICAgRW1iZWQuYXNzaWduVHJhbnNsYXRpb25zVG9FbGVtZW50KGVsZW0pLnRoZW4oKG8pID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2kxOG46dGVzdDEnLCBcIlwiLCBcInh5elwiXSxcbiAgICAgICAgICAgIFsnaTE4bjonLCBcInRlc3QxXCIsIFwieHl6XCJdLCAvLyBrZXkgYnkgdmFsdWVcbiAgICAgICAgICAgIFsnaTE4bjo6JywgXCJ0ZXN0MVwiLCBcInh5elwiXSwgLy8ga2V5IGJ5IHZhbHVlIG5vIGRlZmF1bHRcbiAgICAgICAgICAgIFsnaTE4bjo6ZWVlJywgXCJ0ZXN0MlwiLCBcImVlZVwiXSwgLy8ga2V5IGJ5IHZhbHVlIHdpdGggZGVmYXVsdFxuICAgICAgICAgICAgWydpMThuOjpkZGQnLCBcInRlc3QyXCIsIFwiZGRkXCJdLCAvLyBrZXkgYnkgdmFsdWUgYW5kIGRlZmF1bHRcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHRyYW5zZm9ybSgnICsgYSArICcpLnJ1bignICsgYiArICcpIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYyksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gbmV3IFRyYW5zZm9ybWVyKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0LnJ1bihiKSkudG8uYmUuZXFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfSlcblxuXG59KTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZGlmZn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL2RpZmYubWpzXCI7XG5pbXBvcnQge1F1ZXVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3F1ZXVlLm1qc1wiO1xuXG5kZXNjcmliZSgnRGlmZicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCd0ZXN0IHRvIGRhdGFzZXRzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBvYmoxLCBvYmoyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgb2JqMSA9IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwidGVzdDJcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgb2JqMiA9IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogXCIzXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcInRlc3QyXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZGF0YXNldHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IGRpZmYob2JqMSwgb2JqMik7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoZCkpLmlzLmVxdWFsKCdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcIjFcIixcImlkXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjIsXCJ0eXBlXCI6XCJudW1iZXJcIn0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOlwiM1wiLFwidHlwZVwiOlwic3RyaW5nXCJ9fV0nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBcbiAgICB9KVxuICAgIFxuICAgIGRlc2NyaWJlKCdEaWZmIHNwZWNpYWwgY2FzZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIG9iajEsIG9iajI7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBvYmoxID0ge1xuICAgICAgICAgICAgICAgIFwiY291bnRcIjogMSxcbiAgICAgICAgICAgICAgICBcInJlYXNvblwiOiBudWxsLFxuICAgICAgICAgICAgICAgIFwiaW5mb1wiOiBcInRlc3RcIixcbiAgICAgICAgICAgICAgICBcImV4Y2hhbmdlXCI6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgb2JqMiA9IHtcbiAgICAgICAgICAgICAgICBcImNvdW50XCI6IDIsXG4gICAgICAgICAgICAgICAgXCJyZWFzb25cIjogbnVsbCxcbiAgICAgICAgICAgICAgICBcImluZm9cIjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFwiZXhjaGFuZ2VcIjogW11cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ0RpZmYgdmFsdWUgd2l0aCBudWxsICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZGlmZihvYmoxLCBvYmoyKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShkKSkuaXMuZXF1YWwoJ1t7XCJvcGVyYXRvclwiOlwidXBkYXRlXCIsXCJwYXRoXCI6W1wiY291bnRcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6MixcInR5cGVcIjpcIm51bWJlclwifX0se1wib3BlcmF0b3JcIjpcImRlbGV0ZVwiLFwicGF0aFwiOltcImluZm9cIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6XCJ0ZXN0XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn19XScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnRGlmZiBpZGVudGljYWwgdmFsdWUgd2l0aCBudWxsICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZGlmZihvYmoxLCBvYmoxKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShkKSkuaXMuZXF1YWwoJ1tdJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG4gICAgY29uc3QgZGF0ZTEgPSBuZXcgRGF0ZTtcblxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGUvcGFyc2VcbiAgICBjb25zdCBkYXRlMiA9IERhdGUucGFyc2UoJzAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVCcpO1xuICAgIGNvbnN0IGRhdGUzID0gRGF0ZS5wYXJzZSgnMDQgRGVjIDE5OTUgMDA6MTI6MDAgR01UJyk7IC8vIE51bWJlclxuICAgIGNvbnN0IGRhdGU0ID0gRGF0ZS5wYXJzZSgnMDQgRGVjIDE5OTUgMDA6MTI6MDEgR01UJyk7IC8vIE51bWJlclxuXG4gICAgY29uc3QgZGF0ZTUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKCcwNCBEZWMgMTk5NSAwMDoxMjowMSBHTVQnKSk7IC8vIERhdGVcbiAgICBjb25zdCBkYXRlNiA9IG5ldyBEYXRlKERhdGUucGFyc2UoJzA0IERlYyAxOTk1IDAwOjEyOjAyIEdNVCcpKTsgLy8gRGF0ZVxuXG4gICAgW1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG5ldyBRdWV1ZSgpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiYVwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6e1wiZGF0YVwiOltdfSxcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIlF1ZXVlXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjogMVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYzoge1xuICAgICAgICAgICAgICAgICAgICBkOiAyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGU6IDNcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGY6IHtcbiAgICAgICAgICAgICAgICAgICAgZDogMlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCIsXCJiXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCIsXCJlXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjozLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiY1wiXSxcImZpcnN0XCI6e1widmFsdWVcIjp7XCJkXCI6Mn0sXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJPYmplY3RcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJmXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjp7XCJkXCI6Mn0sXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJPYmplY3RcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTEsXG4gICAgICAgICAgICAgICAgYzogZGF0ZTRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTIsXG4gICAgICAgICAgICAgICAgYjogZGF0ZTNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJ1cGRhdGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOlwiJyArIGRhdGUxLnRvSVNPU3RyaW5nKCkgKyAnXCIsXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJEYXRlXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjowLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiY1wiXSxcImZpcnN0XCI6e1widmFsdWVcIjo4MTgwMzU5MjEwMDAsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJiXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjo4MTgwMzU5MjAwMDAsXCJ0eXBlXCI6XCJudW1iZXJcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYjogZGF0ZTZcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOlwiMTk5NS0xMi0wNFQwMDoxMjowMS4wMDBaXCIsXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJEYXRlXCJ9fSx7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiYlwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6XCIxOTk1LTEyLTA0VDAwOjEyOjAyLjAwMFpcIixcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIkRhdGVcIn19XSdcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1tdJ1xuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlM1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImFcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjgxODAzNTkyMDAwMCxcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlMlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlM1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MCxcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6ODE4MDM1OTIwMDAwLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogMlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6MixcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHg6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJ4XCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogMixcbiAgICAgICAgICAgICAgICB4OiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwidXBkYXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjoyLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wieFwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjpudWxsLFwidHlwZVwiOlwib2JqZWN0XCJ9fV0nXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW10nXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjpudWxsLFwidHlwZVwiOlwib2JqZWN0XCJ9fV0nXG4gICAgICAgIF0sIFtcbiAgICAgICAge30sXG4gICAgICAgIHthOiB1bmRlZmluZWR9LFxuICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCJdLFwic2Vjb25kXCI6e1widHlwZVwiOlwidW5kZWZpbmVkXCJ9fV0nXG4gICAgXVxuXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgaXQoJ0RpZmYgc2hvdWxkIHJlc3VsdCAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBkaWZmKGEsIGIpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGQpKS5pcy5lcXVhbChjKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG59KSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7YnVpbGRUcmVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvYnVpbGR0cmVlLm1qc1wiO1xuaW1wb3J0IHtOb2RlTGlzdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlbGlzdC5tanNcIjtcblxuXG5kZXNjcmliZSgnYnVpbGRUcmVlJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICBkZXNjcmliZSgnbGVnYWN5IG5hdmlnYXRpb24gZXhhbXBsZSAoaXNzdWUgIzIzMCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gZXhhbXBsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3Qgb2JqZWN0cyA9IEpTT04ucGFyc2UoYHtcbiAgICBcImRhdGFzZXRcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMDAwMSxcbiAgICAgICAgICAgIFwicGFyZW50X2lkXCI6IDIwMDAwMSxcbiAgICAgICAgICAgIFwidGl0bGVcIjogXCJlQmF5XCIsXG4gICAgICAgICAgICBcInVybFwiOiBcIi9cIixcbiAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEsXG4gICAgICAgICAgICBcImNzc19zdHlsZXNcIjogXCJcIixcbiAgICAgICAgICAgIFwiY3NzX2NsYXNzZXNcIjogXCJcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDIwMDAwMSxcbiAgICAgICAgICAgIFwicGFyZW50X2lkXCI6IDIwMDAwMSxcbiAgICAgICAgICAgIFwidGl0bGVcIjogXCJhbHZpbmVjb25zb2xlXCIsXG4gICAgICAgICAgICBcInVybFwiOiBcIlwiLFxuICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMSxcbiAgICAgICAgICAgIFwiY3NzX3N0eWxlc1wiOiBcIlwiLFxuICAgICAgICAgICAgXCJjc3NfY2xhc3Nlc1wiOiBcIlwiXG4gICAgICAgIH1cbiAgICBdLFxuICAgIFwic3lzXCI6IHtcbiAgICAgICAgXCJjb2RlXCI6IDIwMCxcbiAgICAgICAgXCJyZXN1bHRcIjoge30sXG4gICAgICAgIFwiYXBpX3ZlcnNpb25cIjogXCIxXCJcbiAgICB9XG59YCk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYnVpbGRUcmVlKG9iamVjdHMsICdkYXRhc2V0LionLCAnaWQnLCAncGFyZW50X2lkJyk7ICAgIFxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZXJyb3IpLnRvLmJlLmluc3RhbmNlT2YoRXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG5cbiAgICAgICAgICAgIFxuXG4gICAgICAgIH0pXG4gICAgfSkgICAgXG4gICAgXG5cbiAgICBkZXNjcmliZSgnZXhhbXBsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1biBleGFtcGxlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBvYmplY3RzID0ge1xuICAgICAgICAgICAgICAgIGRhdGFzZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgXCIxXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwidmVoaWNsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsXG5cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCIyXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiY2FyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiM1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCIzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInRydWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiNFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vdG9yY3ljbGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIxXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCI1XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIjVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU1VWXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiNlwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCI2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNwb3J0cyBjYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBidWlsZFRyZWUob2JqZWN0cywgJ2RhdGFzZXQuKicsICdpZCcsICdwYXJlbnQnKTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVzKS50by5iZS5pbnN0YW5jZU9mKE5vZGVMaXN0KTtcbiAgICAgICAgICAgIGV4cGVjdChub2Rlcy5sZW5ndGgpLnRvLmVxdWFsKDEpO1xuICAgICAgICAgICAgZXhwZWN0KG5vZGVzLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKCd7XCJpZFwiOlwiMVwiLFwibmFtZVwiOlwidmVoaWNsZVwiLFwicGFyZW50XCI6bnVsbH1cXG4gXHUyNTFDe1wiaWRcIjpcIjJcIixcIm5hbWVcIjpcImNhclwiLFwicGFyZW50XCI6XCIxXCJ9XFxuIHwgXHUyNTFDe1wiaWRcIjpcIjVcIixcIm5hbWVcIjpcIlNVVlwiLFwicGFyZW50XCI6XCIyXCJ9XFxuIHwgXHUyNTE0e1wiaWRcIjpcIjZcIixcIm5hbWVcIjpcInNwb3J0cyBjYXJcIixcInBhcmVudFwiOlwiMlwifVxcbiBcdTI1MUN7XCJpZFwiOlwiM1wiLFwibmFtZVwiOlwidHJ1Y2tcIixcInBhcmVudFwiOlwiMVwifVxcbiBcdTI1MTR7XCJpZFwiOlwiNFwiLFwibmFtZVwiOlwibW90b3JjeWNsZVwiLFwicGFyZW50XCI6XCIxXCJ9JyApO1xuXG5cbiAgICAgICAgfSlcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2J1aWxkVHJlZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBvYmoxID0ge1xuICAgICAgICAgICAgZGF0YXNldDoge1xuICAgICAgICAgICAgICAgIFwiMVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDFcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDFcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsXG5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiMlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDJcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDJcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjFcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgM1wiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgM1wiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjRcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI0XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA0XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA0XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiNVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjVcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDVcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDVcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjFcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI2XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgNlwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgNlwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiNFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIE5vZGUgSW5zdGFuY2UuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGJ1aWxkVHJlZSh7fSwgJycpKS50by5iZS5pbnN0YW5jZU9mKE5vZGVMaXN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW29iajEsICdkYXRhc2V0LionLCAne1wiaWRcIjpcIjFcIixcIm5hbWVcIjpcIlRlc3QgMVwiLFwiYWRkcmVzc1wiOlwiSGVyZSAxXCIsXCJwYXJlbnRcIjpudWxsfVxcbiBcdTI1MUN7XCJpZFwiOlwiMlwiLFwibmFtZVwiOlwiVGVzdCAyXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDJcIixcInBhcmVudFwiOlwiMVwifVxcbiB8IFx1MjUxQ3tcImlkXCI6XCIzXCIsXCJuYW1lXCI6XCJUZXN0IDNcIixcImFkZHJlc3NcIjpcIkhlcmUgM1wiLFwicGFyZW50XCI6XCIyXCJ9XFxuIHwgXHUyNTE0e1wiaWRcIjpcIjRcIixcIm5hbWVcIjpcIlRlc3QgNFwiLFwiYWRkcmVzc1wiOlwiSGVyZSA0XCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gfCB8IFx1MjUxNHtcImlkXCI6XCI2XCIsXCJuYW1lXCI6XCJUZXN0IDZcIixcImFkZHJlc3NcIjpcIkhlcmUgNlwiLFwicGFyZW50XCI6XCI0XCJ9XFxuIFx1MjUxNHtcImlkXCI6XCI1XCIsXCJuYW1lXCI6XCJUZXN0IDVcIixcImFkZHJlc3NcIjpcIkhlcmUgNVwiLFwicGFyZW50XCI6XCIxXCJ9J10sXG4gICAgICAgICAgICBbb2JqMSwgJ3gnLCAnJ10sXG4gICAgICAgICAgICBbb2JqMSwgJ2RhdGFzZXQuKicsICd7XCJpZFwiOlwiMVwiLFwibmFtZVwiOlwiVGVzdCAxXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDFcIixcInBhcmVudFwiOm51bGx9XFxuIFx1MjUxQ3tcImlkXCI6XCIyXCIsXCJuYW1lXCI6XCJUZXN0IDJcIixcImFkZHJlc3NcIjpcIkhlcmUgMlwiLFwicGFyZW50XCI6XCIxXCJ9XFxuIHwgXHUyNTFDe1wiaWRcIjpcIjNcIixcIm5hbWVcIjpcIlRlc3QgM1wiLFwiYWRkcmVzc1wiOlwiSGVyZSAzXCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gfCBcdTI1MTR7XCJpZFwiOlwiNFwiLFwibmFtZVwiOlwiVGVzdCA0XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDRcIixcInBhcmVudFwiOlwiMlwifVxcbiB8IHwgXHUyNTE0e1wiaWRcIjpcIjZcIixcIm5hbWVcIjpcIlRlc3QgNlwiLFwiYWRkcmVzc1wiOlwiSGVyZSA2XCIsXCJwYXJlbnRcIjpcIjRcIn1cXG4gXHUyNTE0e1wiaWRcIjpcIjVcIixcIm5hbWVcIjpcIlRlc3QgNVwiLFwiYWRkcmVzc1wiOlwiSGVyZSA1XCIsXCJwYXJlbnRcIjpcIjFcIn0nXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2J1aWxkVHJlZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnLCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5vZGVsaXN0ID0gYnVpbGRUcmVlKGEsIGIsICdpZCcsICdwYXJlbnQnKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qobm9kZWxpc3QudG9TdHJpbmcoKSkudG8uYmUuZXFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdidWlsZFRyZWUoKSB0ZXN0IDInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIDJcbiAgICAgICAgICogICAgMVxuICAgICAgICAgKiAgICAzXG4gICAgICAgICAqIDRcbiAgICAgICAgICogICAgNlxuICAgICAgICAgKiA1XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBsZXQgb2JqMSA9IHtcbiAgICAgICAgICAgIGRhdGFzZXQ6IHtcbiAgICAgICAgICAgICAgICBcIjFcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAxXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAxXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiMlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDJcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDJcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjBcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgM1wiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgM1wiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjRcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI0XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA0XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA0XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIwXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiNVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjVcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDVcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDVcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjBcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI2XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgNlwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgNlwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiNFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjdcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI3XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA3XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA3XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIxXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gTm9kZSBJbnN0YW5jZS4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoYnVpbGRUcmVlKHt9LCAnJykpLnRvLmJlLmluc3RhbmNlT2YoTm9kZUxpc3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbb2JqMSwgJ2RhdGFzZXQuKicsICd7XCJpZFwiOlwiMlwiLFwibmFtZVwiOlwiVGVzdCAyXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDJcIixcInBhcmVudFwiOlwiMFwifVxcbiBcdTI1MUN7XCJpZFwiOlwiMVwiLFwibmFtZVwiOlwiVGVzdCAxXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDFcIixcInBhcmVudFwiOlwiMlwifVxcbiB8IFx1MjUxNHtcImlkXCI6XCI3XCIsXCJuYW1lXCI6XCJUZXN0IDdcIixcImFkZHJlc3NcIjpcIkhlcmUgN1wiLFwicGFyZW50XCI6XCIxXCJ9XFxuIFx1MjUxNHtcImlkXCI6XCIzXCIsXCJuYW1lXCI6XCJUZXN0IDNcIixcImFkZHJlc3NcIjpcIkhlcmUgM1wiLFwicGFyZW50XCI6XCIyXCJ9XFxue1wiaWRcIjpcIjRcIixcIm5hbWVcIjpcIlRlc3QgNFwiLFwiYWRkcmVzc1wiOlwiSGVyZSA0XCIsXCJwYXJlbnRcIjpcIjBcIn1cXG4gXHUyNTE0e1wiaWRcIjpcIjZcIixcIm5hbWVcIjpcIlRlc3QgNlwiLFwiYWRkcmVzc1wiOlwiSGVyZSA2XCIsXCJwYXJlbnRcIjpcIjRcIn1cXG57XCJpZFwiOlwiNVwiLFwibmFtZVwiOlwiVGVzdCA1XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDVcIixcInBhcmVudFwiOlwiMFwifSddLFxuICAgICAgICAgICAgW29iajEsICd4JywgJyddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnYnVpbGRUcmVlKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcsJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYykgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgbm9kZWxpc3QgPSBidWlsZFRyZWUoYSwgYiwgJ2lkJywgJ3BhcmVudCcsIHtcbiAgICAgICAgICAgICAgICAgICAgcm9vdFJlZmVyZW5jZXM6IFsnMCddXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3Qobm9kZWxpc3QudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoYyk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG4gICAgXG4gICAgXG4gICAgXG5cblxufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1BhdGhmaW5kZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuXG5kZXNjcmliZSgnUGF0aGZpbmRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBjb252ZXJ0TWFwUmVzdWx0ID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICAgIHIgPSBPYmplY3QuZnJvbUVudHJpZXMocik7XG4gICAgICAgICAgICBpZiAociBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIubWFwKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0TWFwUmVzdWx0KGUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgb10gb2YgT2JqZWN0LmVudHJpZXMocikpIHtcbiAgICAgICAgICAgICAgICAgICAgcltrXSA9IGNvbnZlcnRNYXBSZXN1bHQobyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG5cbiAgICBkZXNjcmliZSgnd2l0aCBXaWxkY2FyZCBhbmQgSXRlcmF0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IHBmLCBvYmo7XG5cbiAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBvYmogPSB7XG4gICAgICAgICAgICAgICAgYTogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIjEtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiMS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZDogJyEnXG5cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogXCIyLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIjItMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6ICc/J1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGYgPSBuZXcgUGF0aGZpbmRlcihvYmopO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2EuKi5iLionLCAne1wiMFwiOntcIjBcIjp7XCJjXCI6XCIxLTFcIn0sXCIxXCI6e1wiY1wiOlwiMS0yXCJ9fSxcIjFcIjp7XCIwXCI6e1wiY1wiOlwiMi0xXCJ9LFwiMVwiOntcImNcIjpcIjItMlwifX19J10sXG4gICAgICAgICAgICBbJ2EuKi5iJywgJ3tcIjBcIjpbe1wiY1wiOlwiMS0xXCJ9LHtcImNcIjpcIjEtMlwifV0sXCIxXCI6W3tcImNcIjpcIjItMVwifSx7XCJjXCI6XCIyLTJcIn1dfSddLFxuICAgICAgICAgICAgWydhLjEuYicsICdbe1wiY1wiOlwiMi0xXCJ9LHtcImNcIjpcIjItMlwifV0nXSxcbiAgICAgICAgICAgIFsnYS4wLmInLCAnW3tcImNcIjpcIjEtMVwifSx7XCJjXCI6XCIxLTJcIn1dJ10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICBpdCgnLnNldFZpYSgnICsgYSArICcpIHNob3VsZCByZXN1bHQgaW4gJyArIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCByID0gcGYuZ2V0VmlhKGEpO1xuICAgICAgICAgICAgICAgIGxldCBpID0gY29udmVydE1hcFJlc3VsdChyKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoaSkpLmlzLmVxdWFsKGIpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdhcGkgdGVzdHMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHBhdGhmaW5kZXIsIG9iamVjdDtcblxuXG4gICAgICAgIGNsYXNzIEEge1xuICAgICAgICAgICAgZ2V0IGEoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICBvYmplY3QgPSB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgXCJ0ZXN0MVwiLCBmYWxzZSwgdW5kZWZpbmVkLCBwYXJzZUludChcImFcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGY6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiBbXCJ0ZXN0MlwiXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBqOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGs6IChuZXcgTWFwKS5zZXQoJ20nLCB7bjogM30pLFxuICAgICAgICAgICAgICAgICAgICAgICAgbDogKG5ldyBTZXQpLmFkZCh7bjogNH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGI6IG5ldyBBXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBwYXRoZmluZGVyID0gbmV3IFBhdGhmaW5kZXIob2JqZWN0KTtcblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgbmV3IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxMl0sXG4gICAgICAgICAgICAgICAgW3VuZGVmaW5lZF0sXG4gICAgICAgICAgICAgICAgW251bGxdLFxuICAgICAgICAgICAgICAgIFtcInRlc3RcIl1cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgbGFiZWwgPSB0eXBlb2YgYTtcbiAgICAgICAgICAgICAgICBpZiAoYSA9PT0gbnVsbCkgbGFiZWwgPSAnbnVsbCc7XG5cblxuICAgICAgICAgICAgICAgIGl0KGxhYmVsICsgJyBzaG91bGQgdGhyb3cgZXJyb3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQYXRoZmluZGVyKGEpXG4gICAgICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KEVycm9yKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJy5zZXRWaWEoeCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBwZiwgb2JqO1xuXG4gICAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBvYmogPSB7fVxuICAgICAgICAgICAgICAgIHBmID0gbmV3IFBhdGhmaW5kZXIob2JqKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhLmIuMC4wLmMnLCB0cnVlLCAne1wiYVwiOntcImJcIjpbW3tcImNcIjp0cnVlfV1dfX0nXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi4wLmMnLCB0cnVlLCAne1wiYVwiOntcImJcIjpbe1wiY1wiOnRydWV9XX19J10sXG4gICAgICAgICAgICAgICAgWydhLmIuMy5jJywgdHJ1ZSwgJ3tcImFcIjp7XCJiXCI6W251bGwsbnVsbCxudWxsLHtcImNcIjp0cnVlfV19fSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLmMnLCB0cnVlLCAne1wiYVwiOntcImJcIjp7XCJjXCI6dHJ1ZX19fSddXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgICAgICBpdCgnLnNldFZpYSgnICsgYSArICcsICcgKyBiICsgJykgc2hvdWxkIHJlc3VsdCBpbiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBwZi5zZXRWaWEoYSwgYilcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG9iaikpLmlzLmVxdWFsKGMpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJy5zZXRWaWEoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IGE7XG4gICAgICAgICAgICBsZXQgYjtcbiAgICAgICAgICAgIGxldCBjO1xuXG4gICAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBhID0gXCJhLnhcIjtcbiAgICAgICAgICAgICAgICBiID0gXCJ0cnVlXCI7XG4gICAgICAgICAgICAgICAgYyA9IFwiYS55LmRcIjtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCcuc2V0VmlhKCcgKyBhICsgJywgJyArIGIgKyAnKSBzaG91bGQgcmV0dXJuIFBhdGhmaW5kZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHBhdGhmaW5kZXIuc2V0VmlhKGEsIGIpKS5pcy5pbnN0YW5jZU9mKFBhdGhmaW5kZXIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCcuc2V0VmlhKCcgKyBhICsgJywgJyArIGIgKyAnKSBzaG91bGQgY2hhbmdlIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBwYXRoZmluZGVyLnNldFZpYShhLCBiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkob2JqZWN0KSkuaXMuZXF1YWwoJ3tcImFcIjp7XCJiXCI6e1wiY1wiOls0LFwidGVzdDFcIixmYWxzZSxudWxsLG51bGxdLFwiZVwiOmZhbHNlLFwiZlwiOlt7XCJnXCI6ZmFsc2UsXCJoXCI6MyxcImlcIjpbXCJ0ZXN0MlwiXX1dLFwialwiOnt9LFwia1wiOnt9LFwibFwiOnt9fSxcInhcIjpcInRydWVcIn0sXCJiXCI6e319Jyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJy5zZXRWaWEoJyArIGMgKyAnLCAnICsgYiArICcpIHNob3VsZCBjaGFuZ2Ugb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHBhdGhmaW5kZXIuc2V0VmlhKGMsIGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShvYmplY3QpKS5pcy5lcXVhbCgne1wiYVwiOntcImJcIjp7XCJjXCI6WzQsXCJ0ZXN0MVwiLGZhbHNlLG51bGwsbnVsbF0sXCJlXCI6ZmFsc2UsXCJmXCI6W3tcImdcIjpmYWxzZSxcImhcIjozLFwiaVwiOltcInRlc3QyXCJdfV0sXCJqXCI6e30sXCJrXCI6e30sXCJsXCI6e319LFwieVwiOntcImRcIjpcInRydWVcIn19LFwiYlwiOnt9fScpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgICAgICBkZXNjcmliZSgnLmV4aXN0cygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYS5iLmMuMScsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYi5hJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWydhLmIueCcsIGZhbHNlXSxcbiAgICAgICAgICAgICAgICBbJ2EueCcsIGZhbHNlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5xJywgZmFsc2VdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmMuMCcsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmQnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5mLjAuZycsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYuMC5pLjAnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5mLjAuaS4yJywgZmFsc2VdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmUnLCB0cnVlXSxcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgICAgICBpdCgnLmV4aXN0cygnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHBhdGhmaW5kZXIuZXhpc3RzKGEpKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCcuZGVsZXRlVmlhKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhLmIuZScsICd7XCJhXCI6e1wiYlwiOntcImNcIjpbNCxcInRlc3QxXCIsZmFsc2UsbnVsbCxudWxsXSxcImZcIjpbe1wiZ1wiOmZhbHNlLFwiaFwiOjMsXCJpXCI6W1widGVzdDJcIl19XSxcImpcIjp7fSxcImtcIjp7fSxcImxcIjp7fX19LFwiYlwiOnt9fSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYnLCAne1wiYVwiOntcImJcIjp7XCJjXCI6WzQsXCJ0ZXN0MVwiLGZhbHNlLG51bGwsbnVsbF0sXCJlXCI6ZmFsc2UsXCJqXCI6e30sXCJrXCI6e30sXCJsXCI6e319fSxcImJcIjp7fX0nXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5qJywgJ3tcImFcIjp7XCJiXCI6e1wiY1wiOls0LFwidGVzdDFcIixmYWxzZSxudWxsLG51bGxdLFwiZVwiOmZhbHNlLFwiZlwiOlt7XCJnXCI6ZmFsc2UsXCJoXCI6MyxcImlcIjpbXCJ0ZXN0MlwiXX1dLFwia1wiOnt9LFwibFwiOnt9fX0sXCJiXCI6e319J10sXG5cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgaXQoJy5kZWxldGVWaWEoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGhmaW5kZXIuZGVsZXRlVmlhKGEpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShvYmplY3QpKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnLmdldFZpYSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZGVzY3JpYmUoJy5nZXRWaWEoKScsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgXCJ0ZXN0MVwiLCBmYWxzZSwgdW5kZWZpbmVkLCBwYXJzZUludChcImFcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTogW1widGVzdDJcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGs6IChuZXcgTWFwKS5zZXQoJ20nLCB7bjogM30pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiAobmV3IFNldCkuYWRkKHtuOiA0fSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwOiB7cTogMSwgcjogdHJ1ZX19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6IHtxOiAyLCByOiB0cnVlfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cDoge3E6IDMsIHI6IHRydWV9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwOiB7cTogNCwgcjogdHJ1ZX19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6IHtxOiA1LCByOiB0cnVlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDoge2E6IDF9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdToge2E6IDJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjoge2E6IDN9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDoge2E6IDR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcGF0aGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKG9iamVjdCk7XG5cblxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBbJ2EuKicsICdbW1wiYlwiLHtcImNcIjpbNCxcInRlc3QxXCIsZmFsc2UsbnVsbCxudWxsXSxcImVcIjpmYWxzZSxcImZcIjpbe1wiZ1wiOmZhbHNlLFwiaFwiOjMsXCJpXCI6W1widGVzdDJcIl19XSxcImpcIjp7fSxcImtcIjp7fSxcImxcIjp7fSxcIm9cIjpbe1wicFwiOntcInFcIjoxLFwiclwiOnRydWV9fSx7XCJwXCI6e1wicVwiOjIsXCJyXCI6dHJ1ZX19LHtcInBcIjp7XCJxXCI6MyxcInJcIjp0cnVlfX0se1wicFwiOntcInFcIjo0LFwiclwiOnRydWV9fSx7XCJwXCI6e1wicVwiOjUsXCJyXCI6dHJ1ZX19XSxcInNcIjp7XCJ0XCI6e1wiYVwiOjF9LFwidVwiOntcImFcIjoyfSxcInZcIjp7XCJhXCI6M30sXCJ4XCI6e1wiYVwiOjR9fX1dXSddLFxuICAgICAgICAgICAgICAgICAgICBbJ2EuYi5zLiouYScsICdbW1widFwiLDFdLFtcInVcIiwyXSxbXCJ2XCIsM10sW1wieFwiLDRdXSddLFxuICAgICAgICAgICAgICAgICAgICBbJ2EuYi5zLionLCAnW1tcInRcIix7XCJhXCI6MX1dLFtcInVcIix7XCJhXCI6Mn1dLFtcInZcIix7XCJhXCI6M31dLFtcInhcIix7XCJhXCI6NH1dXSddLFxuICAgICAgICAgICAgICAgICAgICBbJ2EuYi5vLioucC5xJywgJ1tbXCIwXCIsMV0sW1wiMVwiLDJdLFtcIjJcIiwzXSxbXCIzXCIsNF0sW1wiNFwiLDVdXSddLFxuICAgICAgICAgICAgICAgICAgICBbJ2EuYi5vLioucC5yJywgJ1tbXCIwXCIsdHJ1ZV0sW1wiMVwiLHRydWVdLFtcIjJcIix0cnVlXSxbXCIzXCIsdHJ1ZV0sW1wiNFwiLHRydWVdXSddLFxuICAgICAgICAgICAgICAgICAgICBbJ2EuYi5vLioucCcsICdbW1wiMFwiLHtcInFcIjoxLFwiclwiOnRydWV9XSxbXCIxXCIse1wicVwiOjIsXCJyXCI6dHJ1ZX1dLFtcIjJcIix7XCJxXCI6MyxcInJcIjp0cnVlfV0sW1wiM1wiLHtcInFcIjo0LFwiclwiOnRydWV9XSxbXCI0XCIse1wicVwiOjUsXCJyXCI6dHJ1ZX1dXSddXG4gICAgICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgICAgICBpdCgnLmdldFZpYSgnICsgYSArICcpIHNob3VsZCByZXN1bHQgJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByID0gcGF0aGZpbmRlci5nZXRWaWEoYSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHIpKSkuaXMuZXF1YWwoYik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCcuZ2V0VmlhKCkgc2hvdWxkIHJlc3VsdCAnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgcCA9IG5ldyBQYXRoZmluZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjOiAxfSwge2M6IDJ9XG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2M6IDEsIGQ6IGZhbHNlfSwge2M6IDJ9XG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbGV0IHIgPSBwLmdldFZpYShcIioueC4qLmNcIilcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1hcFRvT2JqKG1hcCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0ge31cbiAgICAgICAgICAgICAgICAgICAgbWFwLmZvckVhY2goZnVuY3Rpb24gKHYsIGspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tdID0gbWFwVG9PYmoodilcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tdID0gdlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkobWFwVG9PYmoocikpKS5pcy5lcXVhbCgne1wiYVwiOntcIjBcIjoxLFwiMVwiOjJ9LFwiYlwiOntcIjBcIjoxLFwiMVwiOjJ9fScpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCcuZ2V0VmlhKGEuYi5sLjAubikgd2l0aCBtYXAgc2hvdWxkIHJldHVybiA0ICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QocGF0aGZpbmRlci5nZXRWaWEoJ2EuYi5sLjAubicpKS5pcy5lcXVhbCg0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhLmIuay5tLm4nLCAzXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5sLjAubicsIDRdLFxuICAgICAgICAgICAgICAgIFsnYS54JywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5xJywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5jLjEnLCBcInRlc3QxXCJdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmMuMCcsIDRdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmQnLCB1bmRlZmluZWRdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYuMC5nJywgZmFsc2VdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYuMC5pLjAnLCBcInRlc3QyXCJdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmUnLCBmYWxzZV0sXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICAgICAgaXQoJy5nZXRWaWEoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChwYXRoZmluZGVyLmdldFZpYShhKSkuaXMuZXF1YWwoYik7XG4gICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2EuYi5kLmUnXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5kLngnXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5sLmUubiddLFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgaXQoJy5nZXRWaWEoJyArIGEgKyAnKSBzaG91bGQgdGhyb3cgRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gcGF0aGZpbmRlci5nZXRWaWEoYSkpLnRvLnRocm93KEVycm9yKVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7UGlwZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL3BpcGUubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge0VtYmVkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdQaXBlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgaWYgKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncnVuIGRpZmZlcmVudCBwaXBlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgW1xuICAgICAgICAgICAgWydwYXRoOmIgfCBpZjp4OlxcXFwgJywge2E6IHRydWV9LCAnICddLCAgIC8vICdcXFxcICcubGVuZ3RoIFx1MjFBNiAyXG4gICAgICAgICAgICBbJ3BhdGg6YSB8IGlmOng6XFxcXCAnLCB7YTogdHJ1ZX0sICd4J10sXG4gICAgICAgICAgICBbJ25vcCcsICdhYmNkZWZnaGlqa2xtbm9wJywgJ2FiY2RlZmdoaWprbG1ub3AnXSxcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnUGlwZS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykucnVuKCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgUGlwZShhKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0LnJ1bihiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QocikudG8uYmUuZXFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ25ldyBQaXBlIHNob3VsZCBjcmVhdGUgbmV3IEluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIEluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBQaXBlKCcnKSkudG8uYmUuaW5zdGFuY2VPZihQaXBlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gSW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFBpcGUoJ2luZGV4OmF8dG91cHBlciB8cHJlZml4OmEnKS5ydW4oe2E6IFwidGVzdFwifSkpLnRvLmJlLmVxdWFsKCdhVEVTVCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2luZGV4OmF8dG91cHBlciB8cHJlZml4OmEnLCB7YTogXCJ0ZXN0XCJ9LCAnYVRFU1QnXSxcbiAgICAgICAgICAgIFsncGF0aDphLmIuYy5kIHwgdG91cHBlciB8IHByZWZpeDpIZWxsb1xcXFwgJywge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IFwid29ybGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgJ0hlbGxvIFdPUkxEJ10sXG4gICAgICAgICAgICBbJ3BhdGg6YS5iLmN8aW5kZXg6ZHx0b3VwcGVyIHxzdWZmaXg6eCcsIHthOiB7Yjoge2M6IHtkOiBcInRlc3RcIn19fX0sICdURVNUeCddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnbmV3IFBpcGUoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykucnVuKCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgUGlwZShhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodC5ydW4oYikpLnRvLmJlLmVxdWFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCduZXcgUGlwZSBhbmQgbG9jYWxlJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgbGV0IGh0bWwxID0gYFxuPGRpdiBpZD1cIm1vY2stdHJhbnNsYXRpb25zXCI+PC9kaXY+XG48c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJ0cmFuc2xhdGlvbnNcIj5cbiAgICB7XG4gICAgICAgIFwiNTFcIjogXCJ4eXpcIixcbiAgICAgICAgXCI1MlwiOiBcImFiY1wiLFxuICAgICAgICBcIjUzXCI6IFwiZGVmXCJcbiAgICB9XG48L3NjcmlwdD4gIFxuYDtcblxuICAgICAgICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9jay10cmFuc2xhdGlvbnMnKTtcbiAgICAgICAgICAgIEVtYmVkLmFzc2lnblRyYW5zbGF0aW9uc1RvRWxlbWVudChlbGVtKS50aGVuKChvKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3BhdGg6c3RhdHVzIHwgdG9zdHJpbmcgfCBpMThuJywge3N0YXR1czogNTF9LCBcInh5elwiXVxuXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBwaXBlID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgb2JqID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZXhwZWN0ZWQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCB0cmFuc2Zvcm0oJyArIHBpcGUgKyAnKS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KG9iaikgKyAnKSByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gbmV3IFBpcGUocGlwZSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQucnVuKG9iaikpLnRvLmJlLmVxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG5cbn0pO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4dGVuZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cblxuY2xhc3MgTW9ja0ZvckV4dGVuZHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgIH1cbn1cblxuXG5kZXNjcmliZSgnZXh0ZW5kJywgZnVuY3Rpb24gKCkge1xuXG4gICAgW1xuICAgICAgICBbXG4gICAgICAgICAgICd7XCJ0aGVrZXlcIjp7fX0nLHt9LHt0aGVrZXk6bmV3IE1vY2tGb3JFeHRlbmRzfSBcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3tcImFcIjp7XCJiXCI6W119fScsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIzXCJcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sICAgICAgICBbXG4gICAgICAgICAgICAne1wiYVwiOntcImJcIjoxLFwiZFwiOjF9fScsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiAxXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGQ6IDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgICd7XCJhXCI6e1wiYlwiOjEsXCJkXCI6e1wieFwiOltcImNhclwiXSxcImZcIjp0cnVlLFwiZ1wiOltdfX19JyxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjogMSxcbiAgICAgICAgICAgICAgICAgICAgZDoge3g6IFtcImNhclwiXX1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGc6IFtdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICBdXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYSA9IGRhdGFcblxuICAgICAgICBpdCgnLmV4dGVuZCgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgcmVzdWx0IGluICcgKyBkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgeCA9IGV4dGVuZC5hcHBseSh0aGlzLCBhKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeSh4KSkuaXMuZXF1YWwoZCk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgW1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiAxLFxuICAgICAgICAgICAgICAgICAgICBkOiBbXCJjYXJcIl1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGc6IFtdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge31cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhXG5cbiAgICAgICAgaXQoJy5leHRlbmQoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkIHRocm93IEVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBleHRlbmQuYXBwbHkodGhpcywgYSkpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG59KVxuXG5cblxuZGVzY3JpYmUoJ2V4dGVuZCBmdW5jdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGV4dGVuZCBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGZyb20gYW5vdGhlciBvYmplY3QnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHsgYTogMSB9O1xuICAgICAgICBjb25zdCBzb3VyY2UgPSB7IGI6IDIgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0ZW5kKHRhcmdldCwgc291cmNlKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7IGE6IDEsIGI6IDIgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBub24tb2JqZWN0IHRhcmdldCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgY29uc3Qgc291cmNlID0geyBiOiAyIH07XG4gICAgICAgIGV4cGVjdCgoKSA9PiBleHRlbmQodGFyZ2V0LCBzb3VyY2UpKS50by50aHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3Igbm9uLW9iamVjdCBzb3VyY2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHsgYTogMSB9O1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBcIm5vdCBhbiBvYmplY3RcIjtcbiAgICAgICAgZXhwZWN0KCgpID0+IGV4dGVuZCh0YXJnZXQsIHNvdXJjZSkpLnRvLnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBkZWVwIG9iamVjdCBleHRlbnNpb24nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHsgYTogeyBiOiAxIH0gfTtcbiAgICAgICAgY29uc3Qgc291cmNlID0geyBhOiB7IGM6IDIgfSwgZDogMyB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBleHRlbmQodGFyZ2V0LCBzb3VyY2UpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHsgYTogeyBiOiAxLCBjOiAyIH0sIGQ6IDMgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBhcnJheSBleHRlbnNpb24nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHsgYTogWzEsIDJdIH07XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHsgYTogWzMsIDRdIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dGVuZCh0YXJnZXQsIHNvdXJjZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoeyBhOiBbMywgNF0gfSk7XG4gICAgfSk7XG59KTtcblxuXG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEFic3RyYWN0Q29uc3RyYWludCB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBUaGUgYWJzdHJhY3QgY29uc3RyYWludCBkZWZpbmVzIHRoZSBhcGkgZm9yIGFsbCBjb25zdHJhaW50cy4gbWFpbmx5IHRoZSBtZXRob2QgaXNWYWxpZCgpIGlzIGRlZmluZWQuXG4gKlxuICogRGVyaXZlZCBjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSBtZXRob2QgaXNWYWxpZCgpLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIGFic3RyYWN0IGNvbnN0cmFpbnRcbiAqL1xuY2xhc3MgQWJzdHJhY3RDb25zdHJhaW50IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCBtdXN0IHJldHVybiBhIHByb21pc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdCh2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL2Fic3RyYWN0LWNvbnN0cmFpbnRcIik7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBYnN0cmFjdENvbnN0cmFpbnQgfSBmcm9tIFwiLi9hYnN0cmFjdC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IEludmFsaWQgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIGludmFsaWQgY29uc3RyYWludCBhbGxvd3MgYW4gYWx3YXlzIGludmFsaWQgcXVlcnkgdG8gYmUgcGVyZm9ybWVkLiB0aGlzIGNvbnN0cmFpbnQgaXMgbWFpbmx5IGludGVuZGVkIGZvciB0ZXN0aW5nLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvY29uc3RyYWludHMvaW52YWxpZC8gQSBzaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25zdHJhaW50IHRoYXQgYWx3YXlzIGludmFsaWRcbiAqL1xuY2xhc3MgSW52YWxpZCBleHRlbmRzIEFic3RyYWN0Q29uc3RyYWludCB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXR1cm5zIGEgcmVqZWN0ZWQgcHJvbWlzZVxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvaW52YWxpZFwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7SW52YWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pbnZhbGlkLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ0ludmFsaWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGlzdmFsaWQgPSBuZXcgSW52YWxpZCgpXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXNvbHZlIHByb21pc2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgaXN2YWxpZC5pc1ZhbGlkKCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGUpLnRvLmJlLnVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge0Fic3RyYWN0T3BlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvYWJzdHJhY3RvcGVyYXRvci5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmNsYXNzIEFic3RyYWN0Q29uc3RyYWludE1vY2sgZXh0ZW5kcyBCYXNlIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGlzVmFsaWQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcbiAgICB9XG59XG5cblxuZGVzY3JpYmUoJ0Fic3RyYWN0T3BlcmF0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIHRoZSBjb25zdHJhaW50IGlzIG5vdCBjYWxsIHdpdGggcGFyYW1ldGVyJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBBYnN0cmFjdE9wZXJhdG9yKClcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IG5vdCBhbiBlcnJvciB3aGVuIHRoZSBjb25zdHJhaW50IGlzIG5vdCBjYWxsIHdpdGggcGFyYW1ldGVyJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyBBYnN0cmFjdE9wZXJhdG9yKG5ldyBBYnN0cmFjdENvbnN0cmFpbnRNb2NrKCksIG5ldyBBYnN0cmFjdENvbnN0cmFpbnRNb2NrKCkpICAgIFxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgXG5cbiAgICB9KTtcbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH0gZnJvbSBcIi4vYWJzdHJhY3QubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBBYnN0cmFjdE9wZXJhdG9yIH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIE9wZXJhdG9ycyBhbGxvdyB5b3UgdG8gbGluayBjb25zdHJhaW50cyB0b2dldGhlci4gZm9yIGV4YW1wbGUsIHlvdSBjYW4gY2hlY2sgd2hldGhlciBhIHZhbHVlIGlzXG4gKiBhbiBvYmplY3Qgb3IgYW4gYXJyYXkuIGVhY2ggb3BlcmF0b3IgaGFzIHR3byBvcGVyYW5kcyB0aGF0IGFyZSBsaW5rZWQgdG9nZXRoZXIuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgYWJzdHJhY3Qgb3BlcmF0b3IgY29uc3RyYWludFxuICovXG5jbGFzcyBBYnN0cmFjdE9wZXJhdG9yIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJhaW50IHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7QWJzdHJhY3RDb25zdHJhaW50fSBvcGVyYW50QVxuXHQgKiBAcGFyYW0ge0Fic3RyYWN0Q29uc3RyYWludH0gb3BlcmFudEJcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSBcInBhcmFtZXRlcnMgbXVzdCBiZSBmcm9tIHR5cGUgQWJzdHJhY3RDb25zdHJhaW50XCJcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wZXJhbnRBLCBvcGVyYW50Qikge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoXG5cdFx0XHQhKFxuXHRcdFx0XHRvcGVyYW50QSBpbnN0YW5jZW9mIEFic3RyYWN0Q29uc3RyYWludCAmJlxuXHRcdFx0XHRvcGVyYW50QiBpbnN0YW5jZW9mIEFic3RyYWN0Q29uc3RyYWludFxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInBhcmFtZXRlcnMgbXVzdCBiZSBmcm9tIHR5cGUgQWJzdHJhY3RDb25zdHJhaW50XCIpO1xuXHRcdH1cblxuXHRcdHRoaXMub3BlcmFudEEgPSBvcGVyYW50QTtcblx0XHR0aGlzLm9wZXJhbnRCID0gb3BlcmFudEI7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL2Fic3RyYWN0LW9wZXJhdG9yXCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH0gZnJvbSBcIi4vYWJzdHJhY3QubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBWYWxpZCB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBUaGUgdmFsaWQgY29uc3RyYWludCBhbGxvd3MgYW4gYWx3YXlzIHZhbGlkIHF1ZXJ5IHRvIGJlIHBlcmZvcm1lZC4gdGhpcyBjb25zdHJhaW50IGlzIG1haW5seSBpbnRlbmRlZCBmb3IgdGVzdGluZy5cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3ZhbGlkLyBBIHNpbXBsZSBleGFtcGxlXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGNvbnN0cmFpbnQgdGhhdCBhbHdheXMgdmFsaWRcbiAqL1xuY2xhc3MgVmFsaWQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cmFpbnQge1xuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmV0dXJuIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL3ZhbGlkXCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQWJzdHJhY3RPcGVyYXRvciB9IGZyb20gXCIuL2Fic3RyYWN0b3BlcmF0b3IubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBPck9wZXJhdG9yIH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIFRoZSBPck9wZXJhdG9yIGlzIHVzZWQgdG8gbGluayBzZXZlcmFsIGNvbnN0cmFpbnRzLiBUaGUgY29uc3RyYWludCBpcyBmdWxmaWxsZWQgaWYgb25lIG9mIHRoZSBjb25zdHJhaW50cyBpcyBmdWxmaWxsZWQuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9jb25zdHJhaW50cy9vcm9wZXJhdG9yLyBBIHNpbXBsZSBleGFtcGxlXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIG9yIG9wZXJhdG9yXG4gKi9cbmNsYXNzIE9yT3BlcmF0b3IgZXh0ZW5kcyBBYnN0cmFjdE9wZXJhdG9yIHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJldHVybnMgYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGlzVmFsaWQodmFsdWUpIHtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0bGV0IGE7XG5cdFx0XHRsZXQgYjtcblxuXHRcdFx0c2VsZi5vcGVyYW50QVxuXHRcdFx0XHQuaXNWYWxpZCh2YWx1ZSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRhID0gZmFsc2U7XG5cdFx0XHRcdFx0LyoqIGIgaGFzIGFscmVhZHkgYmVlbiBldmFsdWF0ZWQgYW5kIHdhcyBub3QgdHJ1ZSAqL1xuXHRcdFx0XHRcdGlmIChiID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0c2VsZi5vcGVyYW50QlxuXHRcdFx0XHQuaXNWYWxpZCh2YWx1ZSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRiID0gZmFsc2U7XG5cdFx0XHRcdFx0LyoqIGIgaGFzIGFscmVhZHkgYmVlbiBldmFsdWF0ZWQgYW5kIHdhcyBub3QgdHJ1ZSAqL1xuXHRcdFx0XHRcdGlmIChhID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvb3Itb3BlcmF0b3JcIik7XG5cdH1cbn1cbiIsICJpbXBvcnQge1ZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qc1wiO1xuaW1wb3J0IHtJbnZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2ludmFsaWQubWpzXCI7XG5pbXBvcnQge09yT3BlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvb3JvcGVyYXRvci5tanNcIjtcblxuZGVzY3JpYmUoJ09yT3BlcmF0b3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbbmV3IFZhbGlkKCksIG5ldyBWYWxpZCgpLCB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgVmFsaWQoKSwgbmV3IEludmFsaWQoKSwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IEludmFsaWQoKSwgbmV3IFZhbGlkKCksIHRydWVdLFxuICAgICAgICAgICAgW25ldyBJbnZhbGlkKCksIG5ldyBJbnZhbGlkKCksIGZhbHNlXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnY29uc3RyYWludC5pc1ZhbGlkKCkgc2hvdWxkIHJldHVybiAnICsgYywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IE9yT3BlcmF0b3IoYSwgYik7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludC5pc1ZhbGlkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMgPT09IHRydWUgPyBkb25lKCkgOiBkb25lKG5ldyBFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMgPT09IHRydWUgPyBkb25lKG5ldyBFcnJvcigpKSA6IGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFic3RyYWN0Q29uc3RyYWludCB9IGZyb20gXCIuL2Fic3RyYWN0Lm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgSXNPYmplY3QgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9jb25zdHJhaW50cy9pc29iamVjdC8gQSBzaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25zdHJhaW50IHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYW4gb2JqZWN0XG4gKi9cbmNsYXNzIElzT2JqZWN0IGV4dGVuZHMgQWJzdHJhY3RDb25zdHJhaW50IHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJldHVybnMgYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGlzVmFsaWQodmFsdWUpIHtcblx0XHRpZiAoaXNPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50L2lzLW9iamVjdFwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7SXNPYmplY3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaXNvYmplY3QubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnSXNPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBuZXcgSXNPYmplY3QoKVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmVzb2x2ZSBwcm9taXNlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnQuaXNWYWxpZCh7fSkudGhlbihyID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QocikuaXMuYSgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbm90IHJlYWNoZWQ6IFwiICsgZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBYnN0cmFjdE9wZXJhdG9yIH0gZnJvbSBcIi4vYWJzdHJhY3RvcGVyYXRvci5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IEFuZE9wZXJhdG9yIH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIFRoZSBBbmRPcGVyYXRvciBpcyB1c2VkIHRvIGxpbmsgc2V2ZXJhbCBjb25zdHJhaW50cy4gVGhlIGNvbnN0cmFpbnQgaXMgZnVsZmlsbGVkIGlmIGFsbCBjb25zdHJhaW50cyBvZiB0aGUgb3BlcmF0b3JzIGFyZSBmdWxmaWxsZWQuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9jb25zdHJhaW50cy9hbmRvcGVyYXRvci8gQSBzaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBhbmQgb3BlcmF0b3IgY29uc3RyYWludFxuICovXG5jbGFzcyBBbmRPcGVyYXRvciBleHRlbmRzIEFic3RyYWN0T3BlcmF0b3Ige1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHByb21pc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChbXG5cdFx0XHR0aGlzLm9wZXJhbnRBLmlzVmFsaWQodmFsdWUpLFxuXHRcdFx0dGhpcy5vcGVyYW50Qi5pc1ZhbGlkKHZhbHVlKSxcblx0XHRdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvYW5kLW9wZXJhdG9yXCIpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtWYWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy92YWxpZC5tanNcIjtcbmltcG9ydCB7SW52YWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pbnZhbGlkLm1qc1wiO1xuaW1wb3J0IHtBbmRPcGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hbmRvcGVyYXRvci5tanNcIjtcblxuZGVzY3JpYmUoJ0FuZE9wZXJhdG9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5pc1ZhbGlkKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW25ldyBWYWxpZCgpLCBuZXcgVmFsaWQoKSwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IFZhbGlkKCksIG5ldyBJbnZhbGlkKCksIGZhbHNlXSxcbiAgICAgICAgICAgIFtuZXcgSW52YWxpZCgpLCBuZXcgVmFsaWQoKSwgZmFsc2VdLFxuICAgICAgICAgICAgW25ldyBJbnZhbGlkKCksIG5ldyBJbnZhbGlkKCksIGZhbHNlXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnY29uc3RyYWludC5pc1ZhbGlkKCkgc2hvdWxkIHJldHVybiAnICsgYywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IEFuZE9wZXJhdG9yKGEsIGIpO1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQuaXNWYWxpZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjID09PSB0cnVlID8gZG9uZSgpIDogZG9uZShuZXcgRXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjID09PSB0cnVlID8gZG9uZShuZXcgRXJyb3IoKSkgOiBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFic3RyYWN0Q29uc3RyYWludCB9IGZyb20gXCIuL2Fic3RyYWN0Lm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgSXNBcnJheSB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL2NvbnN0cmFpbnRzL2lzYXJyYXkvIEEgc2ltcGxlIGV4YW1wbGVcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgY29uc3RyYWludCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGFuIGFycmF5XG4gKi9cbmNsYXNzIElzQXJyYXkgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cmFpbnQge1xuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmV0dXJucyBhIHByb21pc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludC9pcy1hcnJheVwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7SXNBcnJheX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pc2FycmF5Lm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ0lzQXJyYXknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBuZXcgSXNBcnJheSgpXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXNvbHZlIHByb21pc2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3RyYWludC5pc1ZhbGlkKFsxLDIsM10pLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHIpLmlzLmEoJ2FycmF5Jyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbm90IHJlYWNoZWQ6IFwiICsgZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge1ZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ1ZhbGlkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5pc1ZhbGlkKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IFZhbGlkKClcblxuICAgICAgICBpdCgnc2hvdWxkIHJlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50LmlzVmFsaWQoe30pLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbm90IHJlYWNoZWQ6IFwiICsgZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge05vZGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7Tm9kZUxpc3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzXCI7XG5cbmRlc2NyaWJlKCdOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnI2NvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhbiBlbXB0eSBOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdCgpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3Quc2l6ZSkudG8uZXF1YWwoMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgTm9kZUxpc3QgZnJvbSBhbiBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdChbXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JylcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3Quc2l6ZSkudG8uZXF1YWwoMyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgTm9kZUxpc3QgZnJvbSBhIE5vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KFtcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKVxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGxldCBub2RlTGlzdDIgPSBuZXcgTm9kZUxpc3Qobm9kZUxpc3QpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3QyLnNpemUpLnRvLmVxdWFsKDMpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgfSk7XG4gICAgXG4gICAgIFxuICAgIGl0KCdjcmVhdGUgTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKSkuaXMuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdhZGQgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmFkZChuZXcgTm9kZSgpKSkudG8uYmUuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdyZW1vdmUgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLnJlbW92ZShuZXcgTm9kZSgpKSkudG8uYmUuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdoYXMgdW5rbm93biBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuaGFzKG5ldyBOb2RlKSkudG8uYmUuZmFsc2U7XG4gICAgfSlcblxuICAgIGl0KCdoYXMgYWRkZWQgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbiA9IG5ldyBOb2RlO1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuYWRkKG4pLmhhcyhuKSkudG8uYmUudHJ1ZTtcbiAgICB9KVxuICAgIFxuICAgIGl0KCd0b1N0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbiA9IG5ldyBOb2RlO1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuYWRkKG5ldyBOb2RlKCdhJykuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJ2InKSkpLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKCdhXFxuIFx1MjUxNGInKTtcbiAgICB9KVxuXG4gICAgaXQoJ3Rocm93IGV4Y2VwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBOb2RlTGlzdCgpLmFkZCgxKSkudG8udGhyb3coRXJyb3IpO1xuICAgIH0pXG5cblxufSk7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge2luc3RhbmNlU3ltYm9sfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0YW50cy5tanNcIjtcblxuXG5cbmNsYXNzIEJhc2VEaWZmZXJlbnRSZWFsbSBleHRlbmRzIE9iamVjdCB7XG4gICAgXG5cbiAgICBzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG4gICAgICAgIHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9iYXNlXCIpO1xuICAgIH1cblxuXG59XG5cbmNsYXNzIFN1YmNsYXNzIGV4dGVuZHMgQmFzZURpZmZlcmVudFJlYWxtIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuICAgICAgICByZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvc3ViY2xhc3NcIik7XG4gICAgfVxufVxuXG5kZXNjcmliZSgnQmFzZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgQmFzZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgQmFzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZSkudG8uYmUuaW5zdGFuY2VPZihCYXNlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2lzIGluc3RhbmNlIG9mIE9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZSkudG8uYmUuaW5zdGFuY2VPZihPYmplY3QpO1xuICAgICAgICB9KTtcblxuICAgIH0pXG4gICAgXG4gICAgZGVzY3JpYmUoJ2luc3RhbmNvZicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgQmFzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZSkudG8uYmUuaW5zdGFuY2VPZihCYXNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc3ViY2xhc3MgaW5zdGFuY2VvZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKG5ldyBTdWJjbGFzcyBpbnN0YW5jZW9mIEJhc2UpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QodHJ1ZSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSAge1xuICAgICAgICAgICAgICAgIGV4cGVjdChmYWxzZSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbn0pIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TWVkaWFUeXBlLCBwYXJzZU1lZGlhVHlwZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9tZWRpYXR5cGUubWpzXCI7XG5cbmRlc2NyaWJlKCdEYXRhdXJsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgW1xuICAgICAgICBbXCIqLypcIixcIipcIiwnKiddLFxuICAgICAgICBbXCJ0ZXh0LypcIixcInRleHRcIiwnKiddLFxuICAgICAgICBbXCIqL3Rlc3RcIixcIipcIiwndGVzdCddLFxuICAgICAgICBbXCJpbWFnZS9wbmdcIiwgXCJpbWFnZVwiLCBcInBuZ1wiXSxcbiAgICAgICAgW1wiYXVkaW8vbXAzXCIsIFwiYXVkaW9cIiwgXCJtcDNcIl0sXG4gICAgICAgIFtcInZpZGVvL21wZWdcIiwgXCJ2aWRlb1wiLCBcIm1wZWdcIl0sXG4gICAgICAgIFtcInRleHQvcGxhaW5cIiwgXCJ0ZXh0XCIsIFwicGxhaW5cIl0sXG4gICAgICAgIFtcInRleHQvaHRtbFwiLCBcInRleHRcIiwgXCJodG1sXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldD1VUy1BU0NJSVwiLCBcInRleHRcIiwgXCJodG1sXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldD1cXFwiVVMtQVNDSUlcXFwiXCIsIFwidGV4dFwiLCBcImh0bWxcIl0sXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgaXQoJ3BhcnNlTWVkaWFUeXBlKCcgKyBhICsgJyknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGQgPSBwYXJzZU1lZGlhVHlwZShhKTtcblxuICAgICAgICAgICAgZXhwZWN0KGQpLmlzLmluc3RhbmNlb2YoTWVkaWFUeXBlKTtcbiAgICAgICAgICAgIGV4cGVjdChkLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGQudHlwZSkudG8uYmUuZXF1YWwoYik7XG4gICAgICAgICAgICBleHBlY3QoZC5zdWJ0eXBlKS50by5iZS5lcXVhbChjKTtcbiAgICAgICAgICAgIGV4cGVjdChkLnBhcmFtZXRlcikuaXMuaW5zdGFuY2VvZihNYXApXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuICAgIFtcbiAgICAgICAgW1widmlkZW8vXCJdLFxuICAgICAgICBbXCJ0ZXh0XCJdLFxuICAgICAgICBbXCIvbXAzXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldFVTLUFTQ0lJXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldFxcXCJVUy1BU0NJSVxcXCJcIl0sXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgIGl0KCcnICsgYSArICcgc2hvdWxkIHRocm93IGV4Y2VwdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cGFyc2VNZWRpYVR5cGUoYSl9KS50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VG9rZW5MaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3Rva2VubGlzdC5tanNcIjtcblxuXG5kZXNjcmliZSgnVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy50b1N0cmluZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgdG9rZW5MaXN0ID0gbmV3IFRva2VuTGlzdCgpXG4gICAgICAgIGxldCByZXN1bHQgPSB0b2tlbkxpc3QudG9TdHJpbmcoKTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmJlLmEoJ3N0cmluZycpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2V0IGFuZCByZW1vdmUgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uYmUuYSgnc3RyaW5nJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2luaXQgd2l0aCBzdHJpbmcgaXRlcmFibGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoJyArIHR5cGVvZiBhICsgJykgdGhyb3cgVHlwZUVycm9yICcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IHRva2VucyA9IFtcImFiY1wiLCBcImRlZlwiLCBcImdoaVwiXVxuICAgICAgICAgICAgbGV0IGxpc3QgPSBuZXcgVG9rZW5MaXN0KHRva2Vucyk7XG4gICAgICAgICAgICBleHBlY3QobGlzdC50b1N0cmluZygpKS5pcy5lcXVhbChcImFiYyBkZWYgZ2hpXCIpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2luaXQgd2l0aCBpdGVyYWJsZSB3aXRob3V0IHN0cmluZyB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoJyArIHR5cGVvZiBhICsgJykgdGhyb3cgVHlwZUVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0b2tlbnMgPSBbXCJhYmNcIiwgNCwgXCJnaGlcIl1cbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgVG9rZW5MaXN0KHRva2VucykpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnaW5pdCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgLy8gY3VycmVudCwgZXhwZWN0ZWQsIHR5cGVycm9yXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0MVwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ3Rlc3QxIHRlc3QyJywgXCJ0ZXN0MSB0ZXN0MlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBcIlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIHVuZGVmaW5lZCwgdHJ1ZV0sIC8vIE5hTlxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbMiwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWzQuNSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFt7fSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtbXCIxXCIsIFwiMlwiLCBcIjNcIl0sICcxIDIgMycsIGZhbHNlXSwgLy8gaXRlcmFibGUgc3RyaW5nc1xuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpdCgnbmV3IFRva2VuTGlzdCgnICsgdHlwZW9mIGEgKyAnKSB0aHJvdyBUeXBlRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFRva2VuTGlzdChhKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QobmV3IFRva2VuTGlzdChhKS50b1N0cmluZygpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdpdGVyYXRvciBwcm90b2NvbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbGlzdDtcbiAgICAgICAgaXQoJy5hZGQoJyArIFwic2Vjb25kXCIgKyAnKSBzaG91bGQgcmV0dXJuIFRva2VuTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5nZXRJdGVyYXRvcigpKS50by5iZS5hbignb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuYWRkKCcgKyBcInNlY29uZFwiICsgJykgc2hvdWxkIHJldHVybiBUb2tlbkxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChbLi4ubGlzdF0pLnRvLmJlLmFuKCdhcnJheScpO1xuICAgICAgICAgICAgZXhwZWN0KFsuLi5saXN0XSkudG8uYmUuYW4oJ2FycmF5JykudG8uaW5jbHVkZSgnc3RhcnQnKS50by5pbmNsdWRlKCdlbmQnKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5lbnRyaWVzKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGxpc3Q7XG4gICAgICAgIGl0KCcuZW50cmllcygpIHNob3VsZCByZXR1cm4gQXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuZW50cmllcygpKS50by5iZS5hbignYXJyYXknKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5lbnRyaWVzKCkgc2hvdWxkIHJldHVybiBBcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgZW5kXCIpLmVudHJpZXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0KS50by5iZS5hbignYXJyYXknKS50by5pbmNsdWRlKCdzdGFydCcpLnRvLmluY2x1ZGUoJ2VuZCcpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmZvckVhY2goKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbGlzdDtcbiAgICAgICAgaXQoJy5mb3JFYWNoKCkgc2hvdWxkIGl0ZXJhdGUgb3ZlciB0b2tlbmxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcImFhYSBiYmIgY2NjIGRkZCBlZWUgZmZmXCIpO1xuXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIlxuICAgICAgICAgICAgbGlzdC5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IFwiIVwiICsgYSArIFwiIVwiO1xuICAgICAgICAgICAgICAgIGV4cGVjdChhKS50by5iZS5hbignc3RyaW5nJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLmlzLmVxdWFsKFwiIWFhYSEhYmJiISFjY2MhIWRkZCEhZWVlISFmZmYhXCIpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuZW50cmllcygpIHNob3VsZCByZXR1cm4gQXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IGVuZFwiKS5lbnRyaWVzKCk7XG4gICAgICAgICAgICBleHBlY3QobGlzdCkudG8uYmUuYW4oJ2FycmF5JykudG8uaW5jbHVkZSgnc3RhcnQnKS50by5pbmNsdWRlKCdlbmQnKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NvbnRhaW5zIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGxpc3RcbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQsIG1pZGRsZSBlbmQpIHNob3VsZCBjb250YWluIG1pZGRsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgbWlkZGxlIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKCdzdGFydCcpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoJ21pZGRsZScpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoJ2VuZCcpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoWydlbmQnLCAnc3RhcnQnLCAnbWlkZGxlJ10pKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChzdGFydCwgbWlkZGxlIGVuZCkgc2hvdWxkIG5vdCBjb250YWluIHh5eicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgbWlkZGxlIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKCd4eXonKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucyhbJ2VuZCcsICdzdGFydCcsICdtaWRkbGUnLCAneHl6J10pKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQsIG1pZGRsZSBlbmQpIHNob3VsZCBub3QgY29udGFpbiB1bmRlZmluZWQgbnVsbCBOYU4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IG1pZGRsZSBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucyh1bmRlZmluZWQpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKHBhcnNlSW50KFwiYVwiKSkpLnRvLmJlLmZhbHNlOyAvLyBOYU5cbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKG51bGwpKS50by5iZS5mYWxzZTsgLy8gTmFOXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgndG9nZ2xlIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGxpc3RcbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQgbWlkZGxlIGVuZCkudG9nZ2xlKG5ldy12YWx1ZSkgc2hvdWxkIGNvbnRhaW4gbmV3LXZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBtaWRkbGUgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9nZ2xlKCduZXctdmFsdWUnKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IG1pZGRsZSBlbmQgbmV3LXZhbHVlXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChzdGFydCBtaWRkbGUgZW5kKS50b2dnbGUobWlkZGxlKSBzaG91bGQgbm90IGNvbnRhaW4gbWlkZGxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBtaWRkbGUgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9nZ2xlKCdtaWRkbGUnKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IGVuZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoKS50b2dnbGUoKSBzaG91bGQgLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUb2tlbkxpc3QoXCJhYmMgZGVmIGdoaVwiKS50b2dnbGUoXCJkZWYgeHl6XCIpLnRvU3RyaW5nKCkpLnRvLmVxdWFsKFwiYWJjIGdoaSB4eXpcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KCkudG9nZ2xlKCkgc2hvdWxkIC4uLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVG9rZW5MaXN0KFwiYWJjIGRlZiBnaGlcIikudG9nZ2xlKFtcImFiY1wiLCBcInh5elwiXSkudG9TdHJpbmcoKSkudG8uZXF1YWwoXCJkZWYgZ2hpIHh5elwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoKS50b2dnbGUoKSBzaG91bGQgLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUb2tlbkxpc3QoXCJhYmMgZGVmIGdoaVwiKS50b2dnbGUodW5kZWZpbmVkKS50b1N0cmluZygpKS50by5lcXVhbChcImFiYyBkZWYgZ2hpXCIpO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbWFuaXB1bGF0ZSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGxpc3RcblxuICAgICAgICBpdCgncmVzdWx0IFRva2VuTGlzdChcIicgKyBcInN0YXJ0XCIgKyAnXCIpIHNob3VsZCBiZSBcIicgKyBcInN0YXJ0XCIgKyAnXCInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydFwiKVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmFkZCgnICsgXCJzZWNvbmRcIiArICcpIHNob3VsZCByZXR1cm4gVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmFkZChcInNlY29uZFwiKSkudG8uYmUuYW4uaW5zdGFuY2VvZihUb2tlbkxpc3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmFkZCgnICsgXCJzZWNvbmRcIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IHNlY29uZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoXCJzZWNvbmRcIikudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBzZWNvbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuYWRkKCcgKyBcInNlY29uZCB0aGlyZFwiICsgJykudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgc2Vjb25kIHRoaXJkXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmFkZChcInNlY29uZCB0aGlyZFwiKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IHNlY29uZCB0aGlyZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5hZGQoJyArIFwiW3NlY29uZCx0aGlyZF1cIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IHNlY29uZCB0aGlyZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoW1wic2Vjb25kXCIsIFwidGhpcmRcIl0pLnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgc2Vjb25kIHRoaXJkXCIpO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGl0KCcuY2xlYXIoKS50b1N0cmluZygpIHNob3VsZCBcIlwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoW1wic2Vjb25kXCIsIFwidGhpcmRcIl0pLmNsZWFyKCkudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJcIik7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpLnJlbW92ZSgnICsgXCJzZWNvbmRcIiArICcpIHNob3VsZCByZXR1cm4gVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QucmVtb3ZlKFwic2Vjb25kXCIpKS50by5iZS5hbi5pbnN0YW5jZW9mKFRva2VuTGlzdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZW1vdmUoJyArIFwic2Vjb25kXCIgKyAnKS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCB0aGlyZCBlbmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5yZW1vdmUoXCJzZWNvbmRcIikudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCB0aGlyZCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZW1vdmUoJyArIFwic2Vjb25kIHRoaXJkXCIgKyAnKS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCBlbmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5yZW1vdmUoXCJzZWNvbmQgdGhpcmRcIikudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZW1vdmUoJyArIFwiW3NlY29uZCx0aGlyZF1cIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IGVuZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnJlbW92ZShbXCJzZWNvbmRcIiwgXCJ0aGlyZFwiXSkudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZXBsYWNlKHNlY29uZCwgeHl6KS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCB4eXogdGhpcmQgZW5kXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QucmVwbGFjZShcInNlY29uZFwiLCBcInh5elwiKSkudG8uYmUuaW5zdGFuY2VPZihUb2tlbkxpc3QpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCB4eXogdGhpcmQgZW5kXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIikucmVwbGFjZShlbmQsIHh5eikudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgc2Vjb25kIHRoaXJkIHh5elwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnJlcGxhY2UoXCJlbmRcIiwgXCJ4eXpcIikpLnRvLmJlLmluc3RhbmNlT2YoVG9rZW5MaXN0KTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgc2Vjb25kIHRoaXJkIHh5elwiKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHtpc09iamVjdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5cbmltcG9ydCB7UHJveHlPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuXG5kZXNjcmliZSgnUHJveHlPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pO1xuICAgICAgICAgICAgZXh0ZW5kKG8uZ2V0U3ViamVjdCgpLCB7YTogNH0pO1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHthOiA0fSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3NldFN1YmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcnVuIG9ic2VydmVyJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe2E6IDF9KTtcbiAgICAgICAgICAgIGV4cGVjdChvLmdldFJlYWxTdWJqZWN0KCkpLmlzLmVxbCh7YTogMX0pO1xuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgby5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdCh0aGlzKSAmJiB0aGlzIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgb25lIGNoYW5nZSBhcyBub3RpZnkgcnVucyBsYXRlclxuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoXCJjYWxsZWQgZm9yIGVycm9yXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJ0aGlzIGlzIG5vdCBQcm94eU9ic2VydmVyXCIpKVxuICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgIG8uZ2V0U3ViamVjdCgpLmMgPSA0O1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHthOiAxLCBjOiA0fSk7XG5cbiAgICAgICAgICAgIG8uc2V0U3ViamVjdCh7YjogMn0pO1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHtiOiAyfSk7XG5cbiAgICAgICAgICAgIG8uZ2V0U3ViamVjdCgpLmQgPSA1O1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHtiOiAyLCBkOiA1fSk7XG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pO1xuICAgICAgICAgICAgZXhwZWN0KG8pLmlzLmluc3RhbmNlT2YoUHJveHlPYnNlcnZlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Byb3h5IG9iamVjdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdQcm94eSBvYmplY3RzIHNob3VsZCBub3QgYmUgcmVjb21taXR0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG5ldyBQcm94eU9ic2VydmVyKHthOiB7YjogdHJ1ZX19KTtcbiAgICAgICAgICAgIG8uZ2V0U3ViamVjdCgpLmEuYiA9IG8uZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgby5nZXRTdWJqZWN0KCkuYS5iLmEuYiA9IGZhbHNlO1xuICAgICAgICAgICAgLy9leHBlY3Qoby5nZXRTdWJqZWN0KCk9PT1wLmdldFN1YmplY3QoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbm90aWZ5IG9ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGluZm9ybSBvYnNlcnZlcicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICAvLyB0aGUgbWV0aG9kIGlzIGNhbGxlZCB0d2ljZSwgb25jZSBmb3IgZGVmaW5lUHJvcGVydHkgYW5kIGZvciBzZXQgdHJhcFxuICAgICAgICAgICAgbGV0IG8gPSBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QodGhpcykgJiYgdGhpcyBpbnN0YW5jZW9mIFByb3h5T2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcInRoaXMgaXMgbm90IFByb3h5T2JzZXJ2ZXJcIikpXG4gICAgICAgICAgICB9LCB0cnVlKVxuXG4gICAgICAgICAgICBsZXQgcmVhbFN1YmplY3QgPSB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6IDVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBwID0gbmV3IFByb3h5T2JzZXJ2ZXIocmVhbFN1YmplY3QpO1xuICAgICAgICAgICAgZXhwZWN0KHApLmlzLmluc3RhbmNlT2YoUHJveHlPYnNlcnZlcik7XG4gICAgICAgICAgICBleHBlY3QocC5hdHRhY2hPYnNlcnZlcihvKSkuaXMuaW5zdGFuY2VPZihQcm94eU9ic2VydmVyKTtcblxuICAgICAgICAgICAgbGV0IHMgPSBwLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgIGxldCByID0gcC5nZXRSZWFsU3ViamVjdCgpO1xuXG4gICAgICAgICAgICBzLmEuZCA9IGZhbHNlO1xuICAgICAgICAgICAgcy5hLmIuZCA9IDI7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzQzXG4gICAgICovXG4gICAgZGVzY3JpYmUoJ1JlZmxlY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2NoZWNrIFJlZmxlY3Quc2V0KCkgd2l0aCBTdWJqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHI7XG5cbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IChuZXcgUHJveHlPYnNlcnZlcih7fSkpLmdldFN1YmplY3QoKTtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwieWVzIVwiLFxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBcIm5vXCJcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYmpbJ2RhdGEnXSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgfSkudG8ubm90LnRocm93KCk7XG4gICAgICAgICAgICAgICAgLy9yID0gUmVmbGVjdC5zZXQob2JqLCAnZGF0YScsIHZhbHVlKVxuICAgICAgICAgICAgICAgIC8vZXhwZWN0KHIpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG5cblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3RoYXQnLCB7dGhhdDogJ2NoZWNrZWQxJ31dLFxuICAgICAgICAgICAgWyd0aGF0JywgbmV3IFByb3h5KHt0aGF0OiAnY2hlY2tlZDInfSwge30pXSxcbiAgICAgICAgICAgIFsndGhhdCcsIChuZXcgUHJveHlPYnNlcnZlcih7dGhhdDogJ2NoZWNrZWQzJ30pKS5nZXRSZWFsU3ViamVjdCgpXSxcbiAgICAgICAgICAgIFsndGhhdCcsIChuZXcgUHJveHlPYnNlcnZlcih7dGhhdDogJ2NoZWNrZWQ0J30pKS5nZXRTdWJqZWN0KCldXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQga2V5ID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdjaGVjayBSZWZsZWN0LnNldCgnICsga2V5ICsgJywnICsgSlNPTi5zdHJpbmdpZnkodGFyZ2V0KSArICcpIHNob3VsZCB3cml0YWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWU7XG5cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFwiMVwiLFxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBrZXkpWyd3cml0YWJsZSddLCAnd3JpdGFibGUgZm9yICcgKyB2YWx1ZSArICcgc2hvdWxkIHJldHVybiB0cnVlJykudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIHZhbHVlKSwgJ3NldCBmb3IgJyArIHZhbHVlICsgJyBzaG91bGQgcmV0dXJuIHRydWUnKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwga2V5KVsnd3JpdGFibGUnXSwgJ3dyaXRhYmxlIGZvciAnICsgdmFsdWUgKyAnIHNob3VsZCByZXR1cm4gdHJ1ZScpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25vdGlmeSBvYnNlcnZlciB3aXRoIGNoYW5nZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG9yaWdpbmFsLCBvYnNlcnZlciwgcHJveHk7XG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsID0ge307XG4gICAgICAgICAgICBwcm94eSA9IG5ldyBQcm94eU9ic2VydmVyKG9yaWdpbmFsKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2EnLCA0LCBKU09OLnN0cmluZ2lmeSh7YTogNH0pXSxcbiAgICAgICAgICAgIFsnYicsIDksIEpTT04uc3RyaW5naWZ5KHthOiA0LCBiOiA5fSldXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzZXQga2V5ICcgKyBhICsgJyB2YWx1ZSAnICsgYiArICcgZXhwZWN0ICcgKyBjLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyID0gbmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRSZWFsU3ViamVjdCgpKSkuaXMuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFjaE9ic2VydmVyKG9ic2VydmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBwcm94eS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcilcbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHByb3h5LmdldFN1YmplY3QoKVxuXG4gICAgICAgICAgICAgICAgc3ViamVjdFthXSA9IGI7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25vdGlmeSBvYnNlcnZlciAnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gcHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBwcm94eSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcHJveHkuYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpXG4gICAgICAgICAgICBleHBlY3QocHJveHkubm90aWZ5T2JzZXJ2ZXJzKCkpLmlzLmluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG59KVxuXG4iLCAiaW1wb3J0IHtcbiAgICBWZXJzaW9uXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvdmVyc2lvbi5tanNcIlxuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnVmVyc2lvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuY29tcGFyZVRvKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycxLjIuMycsICcxLjIuMycsIDBdLFxuICAgICAgICAgICAgWycxLjIuMicsICcxLjIuMycsIC0xXSxcbiAgICAgICAgICAgIFsnMicsICcyLjAuMCcsIDBdLFxuICAgICAgICAgICAgWycxLjIuNCcsICcxLjIuMycsIDFdXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuICcgKyBjICsgJyB3aGVuIHRoZSB2YWx1ZSAnICsgYSArICcgaXMgJyArIGIgKyAnJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgVmVyc2lvbihhKS5jb21wYXJlVG8oYikpLnRvLmJlLmVxdWFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnRvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycxLjEuMScsICcyLjMnLCAzLCAnMS4yLjMnXSxcbiAgICAgICAgICAgIFsnMS4yLjQnLCAnMS4yLjMnLCA1LCAnMS4xLjUnXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIGQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IFZlcnNpb24oYSwgYiwgYykudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSlcblxufSk7XG5cbiIsICJpbXBvcnQge2dldEdsb2JhbCwgZ2V0R2xvYmFsT2JqZWN0LCBnZXRHbG9iYWxGdW5jdGlvbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnR2xvYmFsJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCdnZXRHbG9iYWwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZ2xvYmFsIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gdHlwZW9mIGdldEdsb2JhbCgpO1xuICAgICAgICAgICAgZXhwZWN0KHQpLnRvLmJlLmVxdWFsKCdvYmplY3QnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdnZXRHbG9iYWxGdW5jdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBnbG9iYWwgZnVuY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdCA9IHR5cGVvZiBnZXRHbG9iYWxGdW5jdGlvbigncGFyc2VJbnQnKTtcbiAgICAgICAgICAgIGV4cGVjdCh0KS50by5iZS5lcXVhbCgnZnVuY3Rpb24nKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdnZXRHbG9iYWxPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZ2xvYmFsIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gdHlwZW9mIGdldEdsb2JhbE9iamVjdCgnSlNPTicpO1xuICAgICAgICAgICAgZXhwZWN0KHQpLnRvLmJlLmVxdWFsKCdvYmplY3QnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG5cbiIsICJpbXBvcnQge09ic2VydmVyTGlzdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlcmxpc3QubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ09ic2VydmVyTGlzdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuYXR0YWNoKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBPYnNlcnZlckxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gb2JzZXJ2ZXJMaXN0LmF0dGFjaChuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5iZS5pbnN0YW5jZU9mKE9ic2VydmVyTGlzdClcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5kZXRhY2goKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIE9ic2VydmVyTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBvYnNlcnZlckxpc3QuZGV0YWNoKG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmJlLmluc3RhbmNlT2YoT2JzZXJ2ZXJMaXN0KVxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLm5vdGlmeSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdFZhbHVlID0gXCJZZXMhXCI7XG4gICAgICAgIGxldCBvO1xuICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0O1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbyA9IG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFZhbHVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG4gICAgICAgICAgICBvYnNlcnZlckxpc3QuYXR0YWNoKG8pXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZW9mIFByb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0Lm5vdGlmeSh7fSkpLnRvLmJlLmluc3RhbmNlT2YoUHJvbWlzZSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIHJlc3VsdFZhbHVlLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge31cblxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0Lm5vdGlmeShvYmopLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHIpLnRvLmJlLmFuKCdhcnJheScpLnRoYXQuaW5jbHVkZXMocmVzdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmNvbnRhaW5zKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG8xID0gbmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBvMiA9IG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbm90IGNvbnRhaW4gbzEgYW5kIG8yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuXG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8xKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8yKSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29udGFpbiBvMiBhbmQgbm90IG8xJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0LmF0dGFjaChvMilcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzEpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzIpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW4gbzEgYW5kIG5vdCBvMicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcbiAgICAgICAgICAgIG9ic2VydmVyTGlzdC5hdHRhY2gobzEpXG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8xKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzIpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cblxuICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW4gbzIgYW5kIG8xJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0LmF0dGFjaChvMikuYXR0YWNoKG8xKVxuICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyTGlzdC5jb250YWlucyhvMSkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8yKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2VxdWlwV2l0aEludGVybmFsfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2ludGVybmFsLm1qc1wiO1xuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcblxuY2xhc3MgU29tZVJhbmRvbUNsYXNzMSBleHRlbmRzIE9iamVjdCB7XG5cbiAgICBkb2l0KCkge1xuICAgICAgICByZXR1cm4gXCJkb25lXCI7XG4gICAgfVxufVxuXG5jbGFzcyBTb21lUmFuZG9tQ2xhc3MyIGV4dGVuZHMgT2JqZWN0IHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBlcXVpcFdpdGhJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGdldCBkZWZhdWx0SW50ZXJuYWwoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXN0OiBcInRlc3RcIlxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmRlc2NyaWJlKCdCYXNlIGluamVjdCB3aXRoIG9wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnbmV3IFNvbWVSYW5kb21DbGFzcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgU29tZVJhbmRvbUNsYXNzMScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgU29tZVJhbmRvbUNsYXNzMikubm90LnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMSk7XG4gICAgICAgICAgICBleHBlY3QobmV3IFNvbWVSYW5kb21DbGFzczIpLnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBTb21lUmFuZG9tQ2xhc3MyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBTb21lUmFuZG9tQ2xhc3MxKS50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczEpO1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBTb21lUmFuZG9tQ2xhc3MxKS5ub3QudG8uYmUuaW5zdGFuY2VPZihTb21lUmFuZG9tQ2xhc3MyKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0V4dGVuZHMgU29tZVJhbmRvbUNsYXNzIHdpdGggaW50ZXJuYWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdhdHRhY2ggYW5kIG5vdGlmeSBpbnRlcm5hbCBvYnNlcnZlcicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG4gICAgICAgICAgICBjLmF0dGFjaEludGVybmFsT2JzZXJ2ZXIobmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIGMuc2V0SW50ZXJuYWwoXCJ0ZXN0XCIsIFwidGVzdFwiKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYXR0YWNoIGFuZCByZW1vdmUgaW50ZXJuYWwgb2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG5cblxuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZXhwZWN0KGMuY29udGFpbnNJbnRlcm5hbE9ic2VydmVyKG9ic2VydmVyKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBjLmF0dGFjaEludGVybmFsT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuY29udGFpbnNJbnRlcm5hbE9ic2VydmVyKG9ic2VydmVyKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGMuZGV0YWNoSW50ZXJuYWxPYnNlcnZlcihvYnNlcnZlcik7XG4gICAgICAgICAgICBleHBlY3QoYy5jb250YWluc0ludGVybmFsT2JzZXJ2ZXIob2JzZXJ2ZXIpKS50by5iZS5mYWxzZTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdChcImdldEludGVybmFsIGFuZCBzZXRJbnRlcm5hbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG4gICAgICAgICAgICBleHBlY3QoYy5zZXRJbnRlcm5hbChcInRlc3RcIiwgXCJ5ZWFoXCIpKS50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInllYWhcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwiZGVhbCB3aXRoIGRlZmF1bHQgdmFsdWVzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RDbGFzcyA9IGNsYXNzIGV4dGVuZHMgT2JqZWN0IHtcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgZXF1aXBXaXRoSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgaW50ZXJuYWxEZWZhdWx0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6IFwieHl6XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IHRlc3RDbGFzcztcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdFwiKSkudG8uYmUuZXF1YWwoXCJ4eXpcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QyXCIsIFwiYWJjXCIpKS50by5iZS5lcXVhbChcImFiY1wiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJkZWFsIHdpdGggZGVmYXVsdHMgZnJvbSBkZWZhdWx0c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0Q2xhc3MgPSBjbGFzcyBleHRlbmRzIE9iamVjdCB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZ2V0IGludGVybmFsRGVmYXVsdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0OiBcInh5elwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRlc3RDbGFzczIgPSBjbGFzcyBleHRlbmRzIHRlc3RDbGFzcyB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZ2V0IGludGVybmFsRGVmYXVsdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5pbnRlcm5hbERlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0MjogXCJhYmNcIlxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyB0ZXN0Q2xhc3MyO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInh5elwiKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdDJcIikpLnRvLmJlLmVxdWFsKFwiYWJjXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KFwic2V0IG11bHRpcGxlIHZhbHVlc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG4gICAgICAgICAgICBleHBlY3QoYy5zZXRJbnRlcm5hbHMoe1xuICAgICAgICAgICAgICAgIHRlc3Q6IFwieWVhaFwiLFxuICAgICAgICAgICAgICAgIHRlc3QyOiBcInllYWgyXCJcbiAgICAgICAgICAgIH0pKS50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInllYWhcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QyXCIpKS50by5iZS5lcXVhbChcInllYWgyXCIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjLnNldEludGVybmFscyh7XG4gICAgICAgICAgICAgICAgdGVzdDI6IFwieWVhaDItbmV3XCIsXG4gICAgICAgICAgICAgICAgdGVzdDM6IFwieWVhaDNcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdFwiKSkudG8uYmUuZXF1YWwoXCJ5ZWFoXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0MlwiKSkudG8uYmUuZXF1YWwoXCJ5ZWFoMi1uZXdcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QzXCIpKS50by5iZS5lcXVhbChcInllYWgzXCIpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge09ic2VydmFibGVRdWV1ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZhYmxlcXVldWUubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuXG5kZXNjcmliZSgnT2JzZXJ2YWJsZVF1ZXVlJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCdPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIG5vdGlmeScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgcXVldWUgPSBuZXcgT2JzZXJ2YWJsZVF1ZXVlO1xuICAgICAgICAgICAgbGV0IG8gPSBuZXcgT2JzZXJ2ZXIoKHEpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcXVldWUuYXR0YWNoT2JzZXJ2ZXIobyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoT2JzZXJ2YWJsZVF1ZXVlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge3BhcnNlRGF0YVVSTH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuXG5kZXNjcmliZSgnRGF0YXVybCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIFtcbiAgICAgICAgW1wiIGRhdGE6dGV4dC9odG1sLCUzQ2gxJTNFSGVsbG8lMkMlMjBXb3JsZCElM0MlMkZoMSUzRVwiXSxcbiAgICAgICAgW1wiZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD1VUy1BU0NJSSwlM0NoMSUzRUhlbGxvISUzQyUyRmgxJTNFXCJdLFxuICAgICAgICBbXCJkYXRhOixBJTIwYnJpZWYlMjBub3RlXCIsICdkYXRhOnRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSSxBJTIwYnJpZWYlMjBub3RlJ10sXG4gICAgICAgIFtcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUFRTUFBQUFsUFcwaUFBQUFCbEJNVkVVQUFBRC8vLytsMlovZEFBQUFNMGxFUVZSNG5HUDQvNS9oLzErRy81OFpEckF6M0QvTWNIOHl3ODNORERlTkdlNFVnOUM5end6M2dWTE1EQS9BNlA5L0FGR0dGeWpPWFp0UUFBQUFBRWxGVGtTdVFtQ0NcIl0sXG4gICAgICAgIFtcIiBkYXRhOixIZWxsbyUyQyUyMFdvcmxkIVwiLCAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUksSGVsbG8lMkMlMjBXb3JsZCEnXSxcbiAgICAgICAgW1wiICAgZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBZ0FBQUFJQkFNQUFBQTJJYU80QUFBQUZWQk1WRVhrNU9UbjUrZnQ3ZTMxOWZYMjl2YjUrZm4vLy8rK0dVbVZBQUFBTFVsRVFWUUlIV05JQ25ZTFpuQUxUZ3BtTUdZSUZXWUlaVEEyWkZBelRURmxTREZWTXdWeVFobUF3c1lNQUtEYUJ5MGF4WC9pQUFBQUFFbEZUa1N1UW1DQyAgIFwiXSxcbiAgICAgICAgW1wiIGRhdGE6LEhlbGxvIFdvcmxkIVwiLCAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUksSGVsbG8lMjBXb3JsZCEnXSxcbiAgICAgICAgW1wiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBZ0FBQUFJQkFNQUFBQTJJYU80QUFBQUZWQk1WRVhrNU9UbjUrZnQ3ZTMxOWZYMjl2YjUrZm4vLy8rK0dVbVZBQUFBTFVsRVFWUUlIV05JQ25ZTFpuQUxUZ3BtTUdZSUZXWUlaVEEyWkZBelRURmxTREZWTXdWeVFobUF3c1lNQUtEYUJ5MGF4WC9pQUFBQUFFbEZUa1N1UW1DQ1wiXSxcbiAgICAgICAgW1wiIGRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsU0dWc2JHOHNJRmR2Y214a0lRJTNEJTNEXCJdXG5cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaWYgKGIgPT09IHVuZGVmaW5lZCkgYiA9IGEudHJpbSgpO1xuXG5cbiAgICAgICAgaXQoJ3BhcnNlRGF0YVVSTCgnICsgYSArICcpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBleHBlY3QocGFyc2VEYXRhVVJMKGEpLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICB9KVxuXG4gICAgfSk7XG5cbiAgICBbXG4gICAgICAgIFtcImRhdGF4YmFzZTY0XCJdLFxuICAgICAgICBbXCJkYXRhOkhlbGxvV29ybGRcIl0sXG4gICAgICAgIFtcImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9LCUzQ2gxJTNFSGVsbG8hJTNDJTJGaDElM0VcIl0sXG4gICAgICAgIFtcImRhdGE6dGV4dC9odG1sO2NoYXJzZXQsJTNDaDElM0VIZWxsbyElM0MlMkZoMSUzRVwiLCBcImRhdGE6YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQVFNQUFBQWxQVzBpQUFBQUJsQk1WRVVBQUFELy8vK2wyWi9kQUFBQU0wbEVRVlI0bkdQNC81L2gvMStHLzU4WkRyQXozRC9NY0g4eXc4M05ERGVOR2U0VWc5Qzl6d3ozZ1ZMTURBL0E2UDkvQUZHR0Z5ak9YWnRRQUFBQUFFbEZUa1N1UW1DQ1wiXSxcbiAgICAgICAgW1wiXCJdLFxuICAgICAgICBbXCJodHRwOi8vd2lraXBlZGlhLm9yZ1wiXSxcbiAgICAgICAgW1wiYmFzZTY0XCJdLFxuICAgICAgICBbXCJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUFRTUFBQUFsUFcwaUFBQUFCbEJNVkVVQUFBRC8vLytsMlovZEFBQUFNMGxFUVZSNG5HUDQvNS9oLzErRy81OFpEckF6M0QvTWNIOHl3ODNORERlTkdlNFVnOUM5end6M2dWTE1EQS9BNlA5L0FGR0dGeWpPWFp0UUFBQUFBRWxGVGtTdVFtQ0NcIl1cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBwYXJzZURhdGFVUkwoJyArIGEgKyAnKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHBhcnNlRGF0YVVSTChhKSkudGhyb3coVHlwZUVycm9yKVxuICAgICAgICB9KVxuXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IHRvQmluYXJ5LCBmcm9tQmluYXJ5IH07XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLnRvQmluYXJ5KClgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBiaW5hcnlcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE4LjBcbiAqL1xuZnVuY3Rpb24gdG9CaW5hcnkoc3RyaW5nKSB7XG5cdGNvbnN0IGNvZGVVbml0cyA9IG5ldyBVaW50MTZBcnJheSh2YWxpZGF0ZVN0cmluZyhzdHJpbmcpLmxlbmd0aCk7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY29kZVVuaXRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29kZVVuaXRzW2ldID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XG5cdH1cblxuXHRjb25zdCBjaGFyQ29kZXMgPSBuZXcgVWludDhBcnJheShjb2RlVW5pdHMuYnVmZmVyKTtcblx0bGV0IHJlc3VsdCA9IFwiXCI7XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGFyQ29kZXMuYnl0ZUxlbmd0aDsgaSsrKSB7XG5cdFx0cmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGVzW2ldKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLmZyb21CaW5hcnkoKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGJpbmFyeVxuICogQHJldHVybiB7U3RyaW5nfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTguMFxuICovXG5mdW5jdGlvbiBmcm9tQmluYXJ5KGJpbmFyeSkge1xuXHRjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHZhbGlkYXRlU3RyaW5nKGJpbmFyeSkubGVuZ3RoKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdGJ5dGVzW2ldID0gYmluYXJ5LmNoYXJDb2RlQXQoaSk7XG5cdH1cblx0Y29uc3QgY2hhckNvZGVzID0gbmV3IFVpbnQxNkFycmF5KGJ5dGVzLmJ1ZmZlcik7XG5cdGxldCByZXN1bHQgPSBcIlwiO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJDb2Rlcy5sZW5ndGg7IGkrKykge1xuXHRcdHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2Rlc1tpXSk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2Zyb21CaW5hcnksIHRvQmluYXJ5fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2JpbmFyeS5tanNcIjtcblxuZGVzY3JpYmUoJ0JpbmFyeScsIGZ1bmN0aW9uICgpIHtcblxuICAgIFtcbiAgICAgICAgWydhJywgJ2FcXHUwMDAwJ10sXG4gICAgICAgIFsnXHUyNjM5JywgJzkmJ10sXG4gICAgICAgIFsnSVx1MDBGMXRcdTAwRUJyblx1MDBFMnRpXHUwMEY0blx1MDBFMGxpelx1MDBFNnRpXHUwMEY4bicsICdJXFx1MDAwMFx1MDBGMVxcdTAwMDB0XFx1MDAwMFx1MDBFQlxcdTAwMDByXFx1MDAwMG5cXHUwMDAwXHUwMEUyXFx1MDAwMHRcXHUwMDAwaVxcdTAwMDBcdTAwRjRcXHUwMDAwblxcdTAwMDBcdTAwRTBcXHUwMDAwbFxcdTAwMDBpXFx1MDAwMHpcXHUwMDAwXHUwMEU2XFx1MDAwMHRcXHUwMDAwaVxcdTAwMDBcdTAwRjhcXHUwMDAwblxcdTAwMDAnXVxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICBpdCgnZnJvbUJpbmFyeSh0b0JpbmFyeSgnICsgYSArICcpKSBzaG91bGQgd29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCByID0gdG9CaW5hcnkoYSk7XG4gICAgICAgICAgICBleHBlY3QocikudG8uYmUuZXF1YWwoYik7XG4gICAgICAgICAgICBleHBlY3QoZnJvbUJpbmFyeShyKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcblxuXG5kZXNjcmliZSgnT2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgfTtcblxuICAgIGxldCBvYnNlcnZlciA9IG5ldyBPYnNlcnZlcihjYWxsYmFjaylcblxuICAgIGRlc2NyaWJlKCcuYWRkVGFnKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MSddLFxuICAgICAgICAgICAgWyd0ZXN0MiddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2FkZFRhZygnICsgYSArICcpIHNob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXIuYWRkVGFnKGEpKS5pcy5pbnN0YW5jZU9mKE9ic2VydmVyKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnJlbW92ZVRhZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnXSxcbiAgICAgICAgICAgIFsndGVzdDInXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdyZW1vdmVUYWcoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgT2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyLnJlbW92ZVRhZyhhKSkuaXMuaW5zdGFuY2VPZihPYnNlcnZlcilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5oYXNUYWcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3Rlc3QyJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3Rlc3QzJywgZmFsc2VdLFxuICAgICAgICAgICAgWyd0ZXN0NCcsIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCB0ZW1wT2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoY2FsbGJhY2spXG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnb2JzZXJ2ZXIuaGFzdFRhZygnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGlmIChiID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBPYnNlcnZlci5hZGRUYWcoYSlcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHRlbXBPYnNlcnZlci5oYXNUYWcoYSkpLmlzLmJlLnRydWVcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodGVtcE9ic2VydmVyLmhhc1RhZyhhKSkuaXMuYmUuZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudXBkYXRlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG9iaiA9IHt9XG4gICAgICAgIGl0KCdvYnNlcnZlci51cGRhdGUoJyArIG9iaiArICcpIGlzICcgKyAxICsgMyArIDYsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCB0ZW1wT2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYSArIGIgKyBjXG4gICAgICAgICAgICB9LCAxLCAzLCA2KVxuXG5cbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKS50aGVuKGEgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChhKS5pcy5lcXVhbCgxICsgMyArIDYpXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncnVuIGZ1bmN0aW9uIC51cGRhdGUoKSBzZXZlcmFsIHRpbWVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBvYmogPSB7fVxuICAgICAgICBpdCgnb2JzZXJ2ZXIudXBkYXRlKCcgKyBvYmogKyAnKSBpcyAnICsgMSArIDMgKyA2LCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICBsZXQgdGVtcE9ic2VydmVyID0gbmV3IE9ic2VydmVyKGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopO1xuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopO1xuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopO1xuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopO1xuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopLnRoZW4oXyA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5nZXRUYWdzKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW1sndGVzdDEnLCAndGVzdDInLCAndGVzdDMnLCAndGVzdDQnXSwgNF0sXG4gICAgICAgICAgICBbWyd0ZXN0MScsICd0ZXN0MScsICd0ZXN0MycsICd0ZXN0NCddLCAzXSwgLy8gZG91YmxlIHRlc3QxIChzZXQgaXMgdW5pcXVldWUpXG4gICAgICAgICAgICBbWyd0ZXN0MScsICd0ZXN0MScsICd0ZXN0MScsICd0ZXN0NCddLCAyXSwgLy8gbXVsdGlwbGUgdGVzdDEgKHNldCBpcyB1bmlxdWV1ZSlcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCB0ZW1wT2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoY2FsbGJhY2spXG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbWF4ID0gYS5sZW5ndGg7IGkgPCBtYXg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRlbXBPYnNlcnZlci5hZGRUYWcoYVtpXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0KCdvYnNlcnZlci5nZXRUYWdzKCcgKyBhICsgJykgaXMgYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHRlbXBPYnNlcnZlci5nZXRUYWdzKCkpLnRvLmJlLmFuKCdhcnJheScpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ29ic2VydmVyLmdldFRhZ3MoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiICsgXCIgdGFnc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHRlbXBPYnNlcnZlci5nZXRUYWdzKCkubGVuZ3RoKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGVzY2FwZVN0cmluZyB9O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcHJlZml4ZXMgYWxsIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IG1heSBhcHBlYXIgaW4gYSByZWdleCB3aXRoIGEgc2xhc2guXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcodmFsdWUpIHtcblx0cmV0dXJuIHZhbGlkYXRlU3RyaW5nKHZhbHVlKVxuXHRcdC5yZXBsYWNlKC9bfFxcXFx7fSgpW1xcXV4kKyo/Ll0vZywgXCJcXFxcJCZcIilcblx0XHQucmVwbGFjZSgvLS9nLCBcIlxcXFx4MmRcIik7XG59XG4iLCAiXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtlc2NhcGVTdHJpbmd9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvcmVnZXgubWpzXCJcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuXG5kZXNjcmliZSgnZXNjYXBlU3RyaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgcHJvbWlzZXMucHVzaChpbml0SlNET00oKSk7XG4gICAgICAgIGlmKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbiAgICBcbiAgICBbXG4gICAgICAgIFsndGVzdDEnLCAndGVzdDEnXSxcbiAgICAgICAgWyckeycsICdcXFxcJFxcXFx7J10sXG4gICAgICAgIFsnaTE4bnsnLCAnaTE4blxcXFx7J10sXG4gICAgICAgIFsnLy8nLCAnLy8nXSxcbiAgICAgICAgWydcXFxcJywgJ1xcXFxcXFxcJ10sXG4gICAgICAgXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICBpdCgnZXNjYXBlU3RyaW5nKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGVzY2FwZVN0cmluZyhhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7XG5cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnUmFuZG9tSUQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBjbGFzcyBSYW5kb21JRCB7fVxuICAgIFxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIGlmKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvcmFuZG9taWQubWpzXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICBSYW5kb21JRCA9IG0uUmFuZG9tSUQ7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkpXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcudG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGlkID0gbmV3IFJhbmRvbUlEKClcbiAgICAgICAgbGV0IHJlc3VsdCA9IGlkLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS5pcy5hKCdzdHJpbmcnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnSUQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcudG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGlkID0gbmV3IElEKClcbiAgICAgICAgbGV0IHJlc3VsdCA9IGlkLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS5pcy5hKCdzdHJpbmcnKVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBJRCgndGV4dDE0MjVpZCcpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKCd0ZXh0MTQyNWlkMScpXG4gICAgICAgICAgICBleHBlY3QobmV3IElEKCd0ZXh0MTQyNWlkJykudG9TdHJpbmcoKSkuaXMuZXF1YWwoJ3RleHQxNDI1aWQyJylcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSUQoJ3RleHQxNDI1aWQnKS50b1N0cmluZygpKS5pcy5lcXVhbCgndGV4dDE0MjVpZDMnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdVVUlEJywgZnVuY3Rpb24gKCkge1xuXG4gICAgY2xhc3MgVVVJRCB7fVxuICAgIFxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIFxuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3V1aWQubWpzXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICBVVUlEID0gbS5VVUlEO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKVxuICAgICAgICBcbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcudG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdXVpZCA9IG5ldyBVVUlEKClcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB1dWlkLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLmlzLmEoJ3N0cmluZycpXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0Lmxlbmd0aCkuaXMuZXF1YWwoMzYpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd0ZXN0IGZvcm1hdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgdXVpZCA9IG5ldyBVVUlEKClcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB1dWlkLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4RXhwID0gL15bQS1GXFxkXXs4fS1bQS1GXFxkXXs0fS00W0EtRlxcZF17M30tWzg5QUJdW0EtRlxcZF17M30tW0EtRlxcZF17MTJ9JC9pO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDA7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSBuZXcgVVVJRCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHJlZ2V4RXhwLnRlc3QodSk7XG5cbiAgICAgICAgICAgICAgICBpZiAociAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKCdubyB1dWlkICcgKyB1ICsgJyA9PiAnICsgcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7XG4gICAgaXNQcmltaXRpdmUsXG4gICAgaXNCb29sZWFuLFxuICAgIGlzU3RyaW5nLFxuICAgIGlzT2JqZWN0LFxuICAgIGlzQXJyYXksXG4gICAgaXNJbnN0YW5jZSxcbiAgICBpc0Z1bmN0aW9uLFxuICAgIGlzSXRlcmFibGUsXG4gICAgaXNJbnRlZ2VyLFxuICAgIGlzU3ltYm9sXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaXMubWpzXCI7XG5cblxuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIlxuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnSXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcuaXNQcmltaXRpdmUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtudWxsLCB0cnVlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdHJ1ZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNC41LCB0cnVlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzUHJpbWl0aXZlKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNQcmltaXRpdmUoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuICAgIGRlc2NyaWJlKCcuaXNTeW1ib2woKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNTeW1ib2woJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc1N5bWJvbChhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmlzSW50ZWdlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCB0cnVlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc0ludGVnZXIoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0ludGVnZXIoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc0l0ZXJhYmxlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNJdGVyYWJsZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzSXRlcmFibGUoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc0Jvb2xlYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc0Jvb2xlYW4oJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0Jvb2xlYW4oYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc1N0cmluZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCB0cnVlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc1N0cmluZygnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzU3RyaW5nKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNJbnN0YW5jZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtuZXcgSUQoKSwgSUQsICB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgSUQoKSwgKCk9Pnt9LCAgZmFsc2VdLFxuICAgICAgICAgICAgWyd0ZXN0MScsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNJbnN0YW5jZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgcmV0dXJuICcgKyB0eXBlb2YgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0luc3RhbmNlKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcuaXNPYmplY3QoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCB0cnVlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNPYmplY3QoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc09iamVjdChhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCcuaXNBcnJheSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIHRydWVdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc0FycmF5KCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNBcnJheShhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNGdW5jdGlvbigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIHRydWVdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc0Z1bmN0aW9uKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNGdW5jdGlvbihhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge1xuICAgIHZhbGlkYXRlUHJpbWl0aXZlLFxuICAgIHZhbGlkYXRlQm9vbGVhbixcbiAgICB2YWxpZGF0ZVN0cmluZyxcbiAgICB2YWxpZGF0ZU9iamVjdCxcbiAgICB2YWxpZGF0ZUFycmF5LFxuICAgIHZhbGlkYXRlRnVuY3Rpb24sXG4gICAgdmFsaWRhdGVJbnRlZ2VyLFxuICAgIHZhbGlkYXRlSW5zdGFuY2UsXG4gICAgdmFsaWRhdGVJdGVyYWJsZSxcbiAgICB2YWxpZGF0ZVN5bWJvbFxufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qc1wiXG5cbmltcG9ydCB7QmFzZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9iYXNlLm1qc1wiXG5pbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qc1wiXG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCd2YWxpZGF0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVQcmltaXRpdmUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtudWxsLCB0cnVlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdHJ1ZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgW3RydWUsIHRydWVdLFxuICAgICAgICAgICAgWzQuNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIHRydWVdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZVByaW1pdGl2ZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gdmFsaWRhdGVQcmltaXRpdmUoYSkpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZVByaW1pdGl2ZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlUHJpbWl0aXZlKGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlSW50ZWdlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUludGVnZXIoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHZhbGlkYXRlSW50ZWdlcihhKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlSW50ZWdlcignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlSW50ZWdlcihhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVTeW1ib2woKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVTeW1ib2woJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHZhbGlkYXRlU3ltYm9sKGEpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVTeW1ib2woJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZVN5bWJvbChhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUl0ZXJhYmxlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJdGVyYWJsZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVJdGVyYWJsZShhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUl0ZXJhYmxlKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVJdGVyYWJsZShhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUJvb2xlYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUJvb2xlYW4oJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQm9vbGVhbihhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVCb29sZWFuKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVCb29sZWFuKGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVTdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVTdHJpbmcoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RyaW5nKGEpXG4gICAgICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlU3RyaW5nKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVTdHJpbmcoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVPYmplY3QoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCB0cnVlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVPYmplY3QoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlT2JqZWN0KGEpXG4gICAgICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlT2JqZWN0KCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVPYmplY3QoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVJbnN0YW5jZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBPYmplY3RdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgT2JqZWN0XSxcbiAgICAgICAgICAgIFtudWxsLCBPYmplY3RdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIE9iamVjdF0sXG4gICAgICAgICAgICBbMiwgT2JqZWN0XSxcbiAgICAgICAgICAgIFtmYWxzZSwgT2JqZWN0XSxcbiAgICAgICAgICAgIFt0cnVlLCBPYmplY3RdLFxuICAgICAgICAgICAgWzQuNSwgT2JqZWN0XSxcbiAgICAgICAgICAgIFt7fSwgQmFzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBPYmplY3RdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgT2JqZWN0XSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJbnN0YW5jZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlSW5zdGFuY2UoYSwgYilcbiAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVJbnN0YW5jZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFt7fSwgT2JqZWN0LCB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgQmFzZSwgQmFzZSwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUluc3RhbmNlKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZUluc3RhbmNlKGEsIGIpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUFycmF5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlQXJyYXkoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQXJyYXkoYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVBcnJheSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlQXJyYXkoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlRnVuY3Rpb24oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCB0cnVlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVGdW5jdGlvbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVGdW5jdGlvbihhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUZ1bmN0aW9uKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVGdW5jdGlvbihhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge1N0YWNrfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3N0YWNrLm1qc1wiO1xuaW1wb3J0IHtcbiAgICB0eXBlT2Zcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy90eXBlb2YubWpzXCJcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ3R5cGVPZicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcudHlwZU9mKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW3RydWUsICdib29sZWFuJ10sXG4gICAgICAgICAgICBbbnVsbCwgJ251bGwnXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsICd1bmRlZmluZWQnXSxcbiAgICAgICAgICAgIFtQcm9taXNlLnJlc29sdmUoKSwgJ3Byb21pc2UnXSxcbiAgICAgICAgICAgIFtuZXcgV2Vha01hcCgpLCAnd2Vha21hcCddLFxuICAgICAgICAgICAgW25ldyBNYXAoKSwgJ21hcCddLFxuICAgICAgICAgICAgW05hTiwgJ251bWJlciddLFxuICAgICAgICAgICAgW2Z1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB9LCAnZ2VuZXJhdG9yZnVuY3Rpb24nXSxcbiAgICAgICAgICAgIFs1LCAnbnVtYmVyJ10sXG4gICAgICAgICAgICBbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgfSwgJ2Z1bmN0aW9uJ10sXG4gICAgICAgICAgICBbL2EvLCAncmVnZXhwJ10sXG4gICAgICAgICAgICBbbmV3IERhdGUoKSwgJ2RhdGUnXSxcbiAgICAgICAgICAgIFt7fSwgJ29iamVjdCddLFxuICAgICAgICAgICAgW1tdLCAnYXJyYXknXSxcbiAgICAgICAgICAgIFsnJywgJ3N0cmluZyddLFxuICAgICAgICAgICAgW25ldyBFcnJvciwgJ2Vycm9yJ10sXG4gICAgICAgICAgICBbbmV3IFN0YWNrLCAnc3RhY2snXVxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIGIgKyAnIHdoZW4gdGhlIHZhbHVlICcgKyB0eXBlT2YoYSksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QodHlwZU9mKGEpKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VW5pcXVlUXVldWV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvdW5pcXVlcXVldWUubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1VuaXF1ZVF1ZXVlJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBxdWV1ZTtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgcXVldWUgPSBuZXcgVW5pcXVlUXVldWU7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdpc0VtcHR5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZpcnN0IGl0IHNob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdhZGQgc2VxdWVuY2UgcGVlayBhbmQgcG9sbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVzdWx0IGEsYSxhLGInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKHthOiAxfSkpLnRvLmJlLmluc3RhbmNlT2YoVW5pcXVlUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKHthOiAyfSkpLnRvLmJlLmluc3RhbmNlT2YoVW5pcXVlUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCh7YTogM30pKS50by5iZS5pbnN0YW5jZU9mKFVuaXF1ZVF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmRlZXAuZXF1YWwoe2E6MX0pO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uZGVlcC5lcXVhbCh7YToxfSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucG9sbCgpKS50by5kZWVwLmVxdWFsKHthOjF9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wb2xsKCkpLnRvLmRlZXAuZXF1YWwoe2E6Mn0pO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucGVlaygpKS50by5kZWVwLmVxdWFsKHthOjN9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wb2xsKCkpLnRvLmRlZXAuZXF1YWwoe2E6M30pO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBhbmQgY2xlYXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKHthOiAxfSkpLnRvLmJlLmluc3RhbmNlT2YoVW5pcXVlUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuY2xlYXIoKSkudG8uYmUuaW5zdGFuY2VPZihVbmlxdWVRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG4gICAgXG4gICAgZGVzY3JpYmUoJ2FkZCBubyBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCk9PntxdWV1ZS5hZGQoW10pfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKDEpfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKHRydWUpfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKCl9KS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgICAgICBleHBlY3QoKCk9PntxdWV1ZS5hZGQoU3ltYm9sKFwiMVwiKSl9KS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgICAgICBleHBlY3QoKCk9PntxdWV1ZS5hZGQoZnVuY3Rpb24oKXt9KX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgfSk7XG5cbiAgICB9KVxufSkiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7U3RhY2t9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvc3RhY2subWpzXCI7XG5cblxuZGVzY3JpYmUoJ1N0YWNrJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBzdGFjaztcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdpc0VtcHR5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZpcnN0IGl0IHNob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdhZGQgc2VxdWVuY2UgcGVlayBhbmQgcHVsbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVzdWx0IGEsYSxhLGInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucHVzaCgnYScpKS50by5iZS5pbnN0YW5jZU9mKFN0YWNrKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnB1c2goJ2InKSkudG8uYmUuaW5zdGFuY2VPZihTdGFjayk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucHVzaCgnYycpKS50by5iZS5pbnN0YW5jZU9mKFN0YWNrKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wZWVrKCkpLnRvLmJlLmVxdWFsKCdjJyk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucGVlaygpKS50by5iZS5lcXVhbCgnYycpO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnBvcCgpKS50by5iZS5lcXVhbCgnYycpO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2InKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIGFuZCBjbGVhcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wdXNoKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoU3RhY2spO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suY2xlYXIoKSkudG8uYmUuaW5zdGFuY2VPZihTdGFjayk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG59KSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7QmFzZVdpdGhPcHRpb25zfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcblxuXG5kZXNjcmliZSgnQmFzZVdpdGhPcHRpb25zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ25ldyBCYXNlV2l0aE9wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2lzIGluc3RhbmNlIG9mIEJhc2VXaXRoT3B0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZVdpdGhPcHRpb25zKS50by5iZS5pbnN0YW5jZU9mKEJhc2VXaXRoT3B0aW9ucyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEJhc2VXaXRoT3B0aW9ucykudG8uYmUuaW5zdGFuY2VPZihPYmplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnZ2V0IG9wdGlvbiBpcyB0cnVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBCYXNlV2l0aE9wdGlvbnMoe2E6IHRydWV9KS5nZXRPcHRpb24oJ2EnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge05vZGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7Tm9kZUxpc3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQge05vZGVSZWN1cnNpdmVJdGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzXCI7XG5cbmRlc2NyaWJlKCdOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnI2NvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhbiBlbXB0eSBOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdCgpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3Quc2l6ZSkudG8uZXF1YWwoMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgTm9kZUxpc3QgZnJvbSBhbiBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdChbXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JylcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3Quc2l6ZSkudG8uZXF1YWwoMyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgTm9kZUxpc3QgZnJvbSBhIE5vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KFtcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKVxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGxldCBub2RlTGlzdDIgPSBuZXcgTm9kZUxpc3Qobm9kZUxpc3QpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3QyLnNpemUpLnRvLmVxdWFsKDMpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdjcmVhdGUgTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKSkuaXMuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdhZGQgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmFkZChuZXcgTm9kZSgpKSkudG8uYmUuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdyZW1vdmUgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLnJlbW92ZShuZXcgTm9kZSgpKSkudG8uYmUuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdoYXMgdW5rbm93biBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuaGFzKG5ldyBOb2RlKSkudG8uYmUuZmFsc2U7XG4gICAgfSlcblxuICAgIGl0KCdoYXMgYWRkZWQgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbiA9IG5ldyBOb2RlO1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuYWRkKG4pLmhhcyhuKSkudG8uYmUudHJ1ZTtcbiAgICB9KVxuXG4gICAgaXQoJ3Rocm93IGV4Y2VwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBOb2RlTGlzdCgpLmFkZCgxKSkudG8udGhyb3coRXJyb3IpO1xuICAgIH0pXG5cbiAgICBpdCgnY2hlY2sgbGV2ZWwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBOb2RlKCdyb290Jyk7XG5cbiAgICAgICAgY29uc3QgbjEgPSBuZXcgTm9kZSgnbjEnKTtcbiAgICAgICAgY29uc3QgbjIgPSBuZXcgTm9kZSgnbjInKTtcbiAgICAgICAgY29uc3QgbjMgPSBuZXcgTm9kZSgnbjMnKTtcbiAgICAgICAgY29uc3QgbjQgPSBuZXcgTm9kZSgnbjQnKTtcblxuICAgICAgICBjb25zdCBuMTEgPSBuZXcgTm9kZSgnbjExJyk7XG4gICAgICAgIGNvbnN0IG4xMiA9IG5ldyBOb2RlKCduMTInKTtcbiAgICAgICAgY29uc3QgbjEzID0gbmV3IE5vZGUoJ24xMycpO1xuXG4gICAgICAgIGNvbnN0IG4yMSA9IG5ldyBOb2RlKCduMjEnKTtcbiAgICAgICAgY29uc3QgbjIyID0gbmV3IE5vZGUoJ24yMicpO1xuICAgICAgICBjb25zdCBuMjMgPSBuZXcgTm9kZSgnbjIzJyk7XG5cbiAgICAgICAgY29uc3QgbjQxID0gbmV3IE5vZGUoJ240MScpO1xuICAgICAgICBjb25zdCBuNDIgPSBuZXcgTm9kZSgnbjQyJyk7XG5cbiAgICAgICAgY29uc3QgbjQxMSA9IG5ldyBOb2RlKCduNDExJyk7XG4gICAgICAgIGNvbnN0IG40MTIgPSBuZXcgTm9kZSgnbjQxMicpO1xuICAgICAgICBjb25zdCBuNDEzID0gbmV3IE5vZGUoJ240MTMnKTtcblxuICAgICAgICBjb25zdCBuNDEyMSA9IG5ldyBOb2RlKCduNDEyMScpO1xuXG4gICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQobjEpLmFwcGVuZENoaWxkKG4yKS5hcHBlbmRDaGlsZChuMykuYXBwZW5kQ2hpbGQobjQpO1xuICAgICAgICBuMS5hcHBlbmRDaGlsZChuMTEpLmFwcGVuZENoaWxkKG4xMikuYXBwZW5kQ2hpbGQobjEzKTtcbiAgICAgICAgbjIuYXBwZW5kQ2hpbGQobjIxKS5hcHBlbmRDaGlsZChuMjIpLmFwcGVuZENoaWxkKG4yMyk7XG4gICAgICAgIG40LmFwcGVuZENoaWxkKG40MSkuYXBwZW5kQ2hpbGQobjQyKTtcbiAgICAgICAgbjQxLmFwcGVuZENoaWxkKG40MTEpLmFwcGVuZENoaWxkKG40MTIpLmFwcGVuZENoaWxkKG40MTMpO1xuICAgICAgICBuNDEyLmFwcGVuZENoaWxkKG40MTIxKTtcblxuICAgICAgICBsZXQgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKHJvb3QpO1xuXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUgKyBcIjpcIiArIG4ubGV2ZWwpO1xuICAgICAgICB9XG5cblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFtcbiAgICAgICAgICAgICdyb290OjAnLFxuICAgICAgICAgICAgJ24xOjEnLFxuICAgICAgICAgICAgJ24xMToyJyxcbiAgICAgICAgICAgICduMTI6MicsXG4gICAgICAgICAgICAnbjEzOjInLFxuICAgICAgICAgICAgJ24yOjEnLFxuICAgICAgICAgICAgJ24yMToyJyxcbiAgICAgICAgICAgICduMjI6MicsXG4gICAgICAgICAgICAnbjIzOjInLFxuICAgICAgICAgICAgJ24zOjEnLFxuICAgICAgICAgICAgJ240OjEnLFxuICAgICAgICAgICAgJ240MToyJyxcbiAgICAgICAgICAgICduNDExOjMnLFxuICAgICAgICAgICAgJ240MTI6MycsXG4gICAgICAgICAgICAnbjQxMjE6NCcsXG4gICAgICAgICAgICAnbjQxMzozJyxcbiAgICAgICAgICAgICduNDI6MidcblxuICAgICAgICBdKTtcblxuICAgICAgICBuNDEyMS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnbjQxMjExJykpO1xuXG4gICAgICAgIGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihyb290KTtcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlICsgXCI6XCIgKyBuLmxldmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoW1xuICAgICAgICAgICAgJ3Jvb3Q6MCcsXG4gICAgICAgICAgICAnbjE6MScsXG4gICAgICAgICAgICAnbjExOjInLFxuICAgICAgICAgICAgJ24xMjoyJyxcbiAgICAgICAgICAgICduMTM6MicsXG4gICAgICAgICAgICAnbjI6MScsXG4gICAgICAgICAgICAnbjIxOjInLFxuICAgICAgICAgICAgJ24yMjoyJyxcbiAgICAgICAgICAgICduMjM6MicsXG4gICAgICAgICAgICAnbjM6MScsXG4gICAgICAgICAgICAnbjQ6MScsXG4gICAgICAgICAgICAnbjQxOjInLFxuICAgICAgICAgICAgJ240MTE6MycsXG4gICAgICAgICAgICAnbjQxMjozJyxcbiAgICAgICAgICAgICduNDEyMTo0JyxcbiAgICAgICAgICAgICduNDEyMTE6NScsXG4gICAgICAgICAgICAnbjQxMzozJyxcbiAgICAgICAgICAgICduNDI6MidcblxuICAgICAgICBdKTtcblxuXG4gICAgICAgIGNvbnN0IGJiID0gbmV3IE5vZGUoJ2JiJykgLy8gYmlnIGJhbmdcblxuICAgICAgICBiYi5hcHBlbmRDaGlsZChyb290KTtcbiAgICAgICAgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKGJiKTtcblxuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUgKyBcIjpcIiArIG4ubGV2ZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbXG4gICAgICAgICAgICAnYmI6MCcsXG4gICAgICAgICAgICAncm9vdDoxJyxcbiAgICAgICAgICAgICduMToyJyxcbiAgICAgICAgICAgICduMTE6MycsXG4gICAgICAgICAgICAnbjEyOjMnLFxuICAgICAgICAgICAgJ24xMzozJyxcbiAgICAgICAgICAgICduMjoyJyxcbiAgICAgICAgICAgICduMjE6MycsXG4gICAgICAgICAgICAnbjIyOjMnLFxuICAgICAgICAgICAgJ24yMzozJyxcbiAgICAgICAgICAgICduMzoyJyxcbiAgICAgICAgICAgICduNDoyJyxcbiAgICAgICAgICAgICduNDE6MycsXG4gICAgICAgICAgICAnbjQxMTo0JyxcbiAgICAgICAgICAgICduNDEyOjQnLFxuICAgICAgICAgICAgJ240MTIxOjUnLFxuICAgICAgICAgICAgJ240MTIxMTo2JyxcbiAgICAgICAgICAgICduNDEzOjQnLFxuICAgICAgICAgICAgJ240MjozJ1xuXG4gICAgICAgIF0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdMZXZlbHMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ24yIHNob3VsZCBsZXZlbCAyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBuMCA9IG5ldyBOb2RlKCdhYmMnKTtcblxuICAgICAgICAgICAgY29uc3QgbjEgPSBuZXcgTm9kZSgnZGVmJyk7XG4gICAgICAgICAgICBuMC5hcHBlbmRDaGlsZChuMSlcblxuICAgICAgICAgICAgY29uc3QgbjIgPSBuZXcgTm9kZSgnZ2hpJyk7XG4gICAgICAgICAgICBuMS5hcHBlbmRDaGlsZChuMik7XG5cbiAgICAgICAgICAgIGNvbnN0IG4zID0gbmV3IE5vZGUoJ2prbCcpO1xuICAgICAgICAgICAgbjIuYXBwZW5kQ2hpbGQobjMpO1xuXG4gICAgICAgICAgICBleHBlY3QobjAubGV2ZWwpLnRvLmJlLmVxdWFsKDApO1xuICAgICAgICAgICAgZXhwZWN0KG4xLmxldmVsKS50by5iZS5lcXVhbCgxKTtcbiAgICAgICAgICAgIGV4cGVjdChuMi5sZXZlbCkudG8uYmUuZXF1YWwoMik7XG4gICAgICAgICAgICBleHBlY3QobjMubGV2ZWwpLnRvLmJlLmVxdWFsKDMpO1xuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgndG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIG91dHB1dCBlbXB0eSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbmV3IE5vZGUoKTtcbiAgICAgICAgICAgIGV4cGVjdChub2RlLnRvU3RyaW5nKCkpLmlzLmVxdWFsKCcnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBvdXRwdXQgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgbjAgPSBuZXcgTm9kZSgnYWJjJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG4xID0gbmV3IE5vZGUoJ2RlZicpO1xuICAgICAgICAgICAgbjAuYXBwZW5kQ2hpbGQobjEpXG5cbiAgICAgICAgICAgIGNvbnN0IG4xMSA9IG5ldyBOb2RlKCdnaGknKTtcbiAgICAgICAgICAgIG4wLmFwcGVuZENoaWxkKG4xMSlcblxuICAgICAgICAgICAgY29uc3QgbjIgPSBuZXcgTm9kZSgnamtsJyk7XG4gICAgICAgICAgICBuMS5hcHBlbmRDaGlsZChuMik7XG5cbiAgICAgICAgICAgIGNvbnN0IG4zID0gbmV3IE5vZGUoJ21ubycpO1xuICAgICAgICAgICAgbjEuYXBwZW5kQ2hpbGQobjMpO1xuXG4gICAgICAgICAgICBjb25zdCBuNCA9IG5ldyBOb2RlKCdwcXInKTtcbiAgICAgICAgICAgIG4yLmFwcGVuZENoaWxkKG40KTtcblxuICAgICAgICAgICAgZXhwZWN0KG4yLmxldmVsKS50by5iZS5lcXVhbCgyKVxuXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKG4wLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgLy8gZXhwZWN0KG4wLnRvU3RyaW5nKCkpLmlzLmVxdWFsKCcnKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1F1ZXVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3F1ZXVlLm1qc1wiO1xuXG5kZXNjcmliZSgnUXVldWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHF1ZXVlO1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBxdWV1ZSA9IG5ldyBRdWV1ZTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2lzRW1wdHkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZmlyc3QgaXQgc2hvdWxkIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBzZXF1ZW5jZSBwZWVrIGFuZCBwb2xsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZXN1bHQgYSxhLGEsYicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoJ2EnKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoJ2InKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdjJykpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2EnKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmJlLmVxdWFsKCdhJyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucG9sbCgpKS50by5iZS5lcXVhbCgnYScpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2InKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIGFuZCBjbGVhcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoJ2EnKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5jbGVhcigpKS50by5iZS5pbnN0YW5jZU9mKFF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuXG4gICAgXG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge05vZGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7Tm9kZUxpc3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQge05vZGVSZWN1cnNpdmVJdGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzXCI7XG5cbmRlc2NyaWJlKCdOb2RlUmVjdXJzaXZlSXRlcmF0b3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGV4ZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QoKCkgPT4gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcigpKS50by50aHJvdyhFcnJvcilcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGJlIGEgZnVuY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChOb2RlUmVjdXJzaXZlSXRlcmF0b3IpLnRvLmJlLmEoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGEgY29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKG5ldyBOb2RlKSkudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlUmVjdXJzaXZlSXRlcmF0b3IpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMveWllbGRcbiAgICAgKi9cbiAgICBpdCgndW5kZWZpbmVkIHNob3VsZCBub3QgcmVzdWx0IGluIHVuZGVmaW5lZCBub2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3IobmV3IE5vZGUpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGV4cGVjdChuKS50by5iZS5hbi5pbnN0YW5jZW9mKE5vZGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobi52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFt1bmRlZmluZWRdKTtcblxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpdGVyYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBub2RlID1cbiAgICAgICAgICAgIG5ldyBOb2RlKCcxJylcbiAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgIChuZXcgTm9kZSgnMicpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4xJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjInKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMycpKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzMnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQnKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNC4xJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0LjInKSkpO1xuXG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbJzEnLCAnMicsICcyLjEnLCAnMi4yJywgJzIuMycsICczJywgJzQnLCAnNC4xJywgJzQuMiddKTtcblxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpdGVyYXRlIG5vZGVsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdCgpO1xuXG4gICAgICAgIG5vZGVMaXN0LmFkZChcbiAgICAgICAgICAgIChuZXcgTm9kZSgnMicpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4xJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjInKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMycpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMycpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNCcpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0LjEnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQuMicpKSkpO1xuXG4gICAgICAgIG5vZGVMaXN0LmFkZChuZXcgTm9kZSgneCcpKTtcblxuICAgICAgICBjb25zdCBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3Iobm9kZUxpc3QpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGV4cGVjdChuKS50by5iZS5hbi5pbnN0YW5jZW9mKE5vZGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobi52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoWycyJywgJzIuMScsICcyLjInLCAnMi4zJywgJzMnLCAnNCcsICc0LjEnLCAnNC4yJywgJ3gnXSk7XG5cbiAgICB9KTtcblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sLCBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5cbmltcG9ydCB7IEZvcm1hdHRlciBhcyBUZXh0Rm9ybWF0dGVyIH0gZnJvbSBcIi4uL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmV4cG9ydCB7IEZvcm1hdHRlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbFRyYW5zbGF0aW9uU3ltYm9sID0gU3ltYm9sKFwiaW50ZXJuYWxUcmFuc2xhdGlvblwiKTtcblxuLyoqXG4gKiBUaGUgRm9ybWF0dGVyIGV4dGVuZHMgdGhlIFRleHQuRm9ybWF0dGVyIHdpdGggdGhlIHBvc3NpYmlsaXR5IHRvIHJlcGxhY2UgdGhlIGtleSBieSBhIHRyYW5zbGF0aW9uLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgRm9ybWF0dGVyIGV4dGVuZHMgVGV4dEZvcm1hdHRlciB7XG5cdC8qKlxuXHQgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG1hcmtlcnMgYXJlIGAke2AgYW5kIGB9YFxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvYmplY3QsIHRyYW5zbGF0aW9uLCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob2JqZWN0LCBvcHRpb25zKTtcblx0XHR0aGlzW2ludGVybmFsVHJhbnNsYXRpb25TeW1ib2xdID0gdmFsaWRhdGVJbnN0YW5jZShcblx0XHRcdHRyYW5zbGF0aW9uLFxuXHRcdFx0VHJhbnNsYXRpb25zLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL2Zvcm1hdHRlckBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IG1hcmtlclxuXHQgKiBAcHJvcGVydHkge2FycmF5fSBtYXJrZXIub3Blbj1bXCJpMThue1wiLFwiJHtcIl1cblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLmNsb3NlPVtcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwYXJhbWV0ZXJcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBhcmFtZXRlci5kZWxpbWl0ZXI9XCI6OlwiXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuYXNzaWdubWVudD1cIj1cIlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gY2FsbGJhY2tzXG5cdCAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGNhbGxiYWNrcy5pMThuPSgpPT57fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRjYWxsYmFja3M6IHtcblx0XHRcdFx0aTE4bjogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxUcmFuc2xhdGlvblN5bWJvbF0uZ2V0VGV4dCh2YWxpZGF0ZVN0cmluZyh2YWx1ZSkpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdG1hcmtlcjoge1xuXHRcdFx0XHRvcGVuOiBbXCJpMThue1wiLCBcIiR7XCJdLFxuXHRcdFx0XHRjbG9zZTogW1wifVwiXSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHRcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdG9vIGRlZXAgbmVzdGluZ1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0ga2V5IG5vdCBmb3VuZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGNsb3NpbmcgbWFya2VyIGlzIG1pc3Npbmdcblx0ICovXG5cdGZvcm1hdCh0ZXh0KSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcodGV4dCk7XG5cblx0XHRjb25zdCBvcGVuTWFya2VyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdPy5bMF07XG5cdFx0Y29uc3QgY2xvc2VNYXJrZXIgPSB0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcImNsb3NlXCJdPy5bMF07XG5cblx0XHRpZiAodGV4dC5pbmRleE9mKG9wZW5NYXJrZXIpID09PSAwKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcob3Blbk1hcmtlci5sZW5ndGgpO1xuXG5cdFx0XHRpZiAodGV4dC5pbmRleE9mKGNsb3NlTWFya2VyKSA9PT0gdGV4dC5sZW5ndGggLSBjbG9zZU1hcmtlci5sZW5ndGgpIHtcblx0XHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIHRleHQubGVuZ3RoIC0gY2xvc2VNYXJrZXIubGVuZ3RoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBjbG9zaW5nIG1hcmtlciBpcyBtaXNzaW5nXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IHBhcnRzID0gdmFsaWRhdGVTdHJpbmcodGV4dCkuc3BsaXQoXCI6OlwiKTtcblx0XHRjb25zdCB0cmFuc2xhdGlvbktleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpOyAvLyBrZXkgdmFsdWUgZGVsaW1pdGVyXG5cdFx0Y29uc3QgcGFyYW1ldGVyID0gcGFydHMuam9pbihcIjo6XCIpLnRyaW0oKTtcblxuXHRcdGxldCBhc3NlbWJsZWRUZXh0ID0gYCR7b3Blbk1hcmtlcn1zdGF0aWM6JHt0cmFuc2xhdGlvbktleX0gfCBjYWxsOmkxOG5gO1xuXHRcdGlmIChwYXJhbWV0ZXIubGVuZ3RoID4gMCkge1xuXHRcdFx0YXNzZW1ibGVkVGV4dCArPSBgOjoke3BhcmFtZXRlcn1gO1xuXHRcdH1cblx0XHRhc3NlbWJsZWRUZXh0ICs9IGNsb3NlTWFya2VyO1xuXHRcdHJldHVybiBzdXBlci5mb3JtYXQoYXNzZW1ibGVkVGV4dCk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtGb3JtYXR0ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9mb3JtYXR0ZXIubWpzXCI7XG5pbXBvcnQge1RyYW5zbGF0aW9uc30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuXG5kZXNjcmliZSgnRm9ybWF0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2V4YW1wbGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gd2l0aCBtYXJrZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IG5ldyBUcmFuc2xhdGlvbnMoJ2VuJylcbiAgICAgICAgICAgICAgICAuYXNzaWduVHJhbnNsYXRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgdGhla2V5OiBcIiR7YW5pbWFsfSBoYXMgZWF0ZW4gdGhlICR7Zm9vZH0hXCJcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgZiA9IG5ldyBGb3JtYXR0ZXIoe30sIHRyYW5zbGF0aW9ucyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGV4cGVjdChmLmZvcm1hdChcImkxOG57dGhla2V5OjphbmltYWw9ZG9nOjpmb29kPWNha2V9XCIpKS50by5iZS5lcXVhbCgnZG9nIGhhcyBlYXRlbiB0aGUgY2FrZSEnKTtcbiAgICAgICAgICAgIC8vIFx1MjFBNiBkb2cgaGFzIGVhdGVuIHRoZSBjYWtlISAgICAgICAgICAgICAgICBcblxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIHdpdGhvdXQgbWFya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBuZXcgVHJhbnNsYXRpb25zKCdlbicpXG4gICAgICAgICAgICAgICAgLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHRoZWtleTogXCIke2FuaW1hbH0gaGFzIGVhdGVuIHRoZSAke2Zvb2R9IVwiXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIG1pc3NpbmcgbWFya2VyXG4gICAgICAgICAgICBleHBlY3QobmV3IEZvcm1hdHRlcih7fSwgdHJhbnNsYXRpb25zKS5mb3JtYXQoXCJ0aGVrZXk6OmFuaW1hbD1kb2c6OmZvb2Q9Y2FrZVwiKSkudG8uYmUuZXF1YWwoJ2RvZyBoYXMgZWF0ZW4gdGhlIGNha2UhJyk7XG4gICAgICAgICAgICAvLyBcdTIxQTYgZG9nIGhhcyBlYXRlbiB0aGUgY2FrZSEgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWydpMThue3RyYW5zbGF0aW9ua2V5OjphPTM6OmI9NX0nLCAndGVzdCBpcyAzIGFuZCA1J10sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnZm9ybWF0ICcgKyBhICsgJyBzaG91bGQgJyArIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IG5ldyBUcmFuc2xhdGlvbnMoJ2RlJykuYXNzaWduVHJhbnNsYXRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25rZXk6IFwidGVzdCBpcyAke2F9IGFuZCAke2J9XCJcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KFxuICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybWF0dGVyKHt9LCB0cmFuc2xhdGlvbnMpLmZvcm1hdChhKVxuICAgICAgICAgICAgICAgICkudG8uZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuXG59KVxuOyIsICJcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7cGFyc2VMb2NhbGUsIExvY2FsZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL2xvY2FsZS5tanNcIjtcblxuXG5kZXNjcmliZSgnTG9jYWxlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ25ldyBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICAvLyBsYW5ndWFnZSwgcmVnaW9uLCBzY3JpcHQsIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTY0Ni5odG1sXG4gICAgICAgICAgICBbJ3poJywgdW5kZWZpbmVkLCAnSGFudCcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW50J10sIC8vIHpoLUhhbnQgKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgVHJhZGl0aW9uYWwgQ2hpbmVzZSBzY3JpcHQpXG4gICAgICAgICAgICBbJ2RlJywgJ0NIJywgdW5kZWZpbmVkLCAnMTkwMScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnZGUtQ0gtMTkwMSddLCAgLy8gZGUtQ0gtMTkwMSAoR2VybWFuIGFzIHVzZWQgaW4gU3dpdHplcmxhbmQgdXNpbmcgdGhlIDE5MDEgdmFyaWFudCBbb3J0aG9ncmFwaHldKVxuICAgICAgICAgICAgWydzbCcsICdJVCcsIHVuZGVmaW5lZCwgJ25lZGlzJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdzbC1JVC1uZWRpcyddLCAgLy8gc2wtSVQtbmVkaXMgKFNsb3ZlbmlhbiBhcyB1c2VkIGluIEl0YWx5LCBOYWRpemEgZGlhbGVjdClcbiAgICAgICAgICAgIFsnaHknLCAnSVQnLCAnTGF0bicsICdhcmV2ZWxhJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdoeS1MYXRuLUlULWFyZXZlbGEnXSwgLy8gaHktTGF0bi1JVC1hcmV2ZWxhIChFYXN0ZXJuIEFybWVuaWFuIHdyaXR0ZW4gaW4gTGF0aW4gc2NyaXB0LCBhcyB1c2VkIGluIEl0YWx5KVxuICAgICAgICAgICAgWyd6aCcsICdDTicsICdIYW5zJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ3poLUhhbnMtQ04nXSwgLy8gemgtSGFucy1DTiAoQ2hpbmVzZSB3cml0dGVuIHVzaW5nIHRoZSBTaW1wbGlmaWVkIHNjcmlwdCBhcyB1c2VkIGluICBtYWlubGFuZCBDaGluYSlcbiAgICAgICAgICAgIFsnc3InLCAnUlMnLCAnTGF0bicsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdzci1MYXRuLVJTJ10sIC8vIHNyLUxhdG4tUlMgKFNlcmJpYW4gd3JpdHRlbiB1c2luZyB0aGUgTGF0aW4gc2NyaXB0IGFzIHVzZWQgaW4gU2VyYmlhKVxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGUgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBmID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnbmV3IExvY2FsZSgnICsgYSArICcsJyArIGIgKyAnLCcgKyBjICsgJywnICsgZCArICcsJyArIGUgKyAnLCcgKyBmICsgJykgc2hvdWxkIHJldHVybiAnICsgZywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2NhbGUoYSwgYiwgYywgZCwgZSwgZikudG9TdHJpbmcoKSkuaXMuZXF1YWwoZylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3BhcnNlTG9jYWxlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuXG4gICAgICAgICAgICAvLyBsYW5ndWFnZSwgcmVnaW9uLCBzY3JpcHQsIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTY0Ni5odG1sXG4gICAgICAgICAgICBbJ3poJywgdW5kZWZpbmVkLCAnSGFudCcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW50J10sIC8vIHpoLUhhbnQgKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgVHJhZGl0aW9uYWwgQ2hpbmVzZSBzY3JpcHQpXG4gICAgICAgICAgICBbJ2RlJywgJ0NIJywgdW5kZWZpbmVkLCAnMTkwMScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnZGUtQ0gtMTkwMSddLCAgLy8gZGUtQ0gtMTkwMSAoR2VybWFuIGFzIHVzZWQgaW4gU3dpdHplcmxhbmQgdXNpbmcgdGhlIDE5MDEgdmFyaWFudCBbb3J0aG9ncmFwaHldKVxuICAgICAgICAgICAgWydzbCcsICdJVCcsIHVuZGVmaW5lZCwgJ25lZGlzJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdzbC1JVC1uZWRpcyddLCAgLy8gc2wtSVQtbmVkaXMgKFNsb3ZlbmlhbiBhcyB1c2VkIGluIEl0YWx5LCBOYWRpemEgZGlhbGVjdClcbiAgICAgICAgICAgIFsnaHknLCAnSVQnLCAnTGF0bicsICdhcmV2ZWxhJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdoeS1MYXRuLUlULWFyZXZlbGEnXSwgLy8gaHktTGF0bi1JVC1hcmV2ZWxhIChFYXN0ZXJuIEFybWVuaWFuIHdyaXR0ZW4gaW4gTGF0aW4gc2NyaXB0LCBhcyB1c2VkIGluIEl0YWx5KVxuICAgICAgICAgICAgWyd6aCcsICdDTicsICdIYW5zJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ3poLUhhbnMtQ04nXSwgLy8gemgtSGFucy1DTiAoQ2hpbmVzZSB3cml0dGVuIHVzaW5nIHRoZSBTaW1wbGlmaWVkIHNjcmlwdCBhcyB1c2VkIGluICBtYWlubGFuZCBDaGluYSlcbiAgICAgICAgICAgIFsnc3InLCAnUlMnLCAnTGF0bicsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdzci1MYXRuLVJTJ10sIC8vIHNyLUxhdG4tUlMgKFNlcmJpYW4gd3JpdHRlbiB1c2luZyB0aGUgTGF0aW4gc2NyaXB0IGFzIHVzZWQgaW4gU2VyYmlhKVxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGUgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBmID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnbmV3IExvY2FsZSgnICsgYSArICcsJyArIGIgKyAnLCcgKyBjICsgJywnICsgZCArICcsJyArIGUgKyAnLCcgKyBmICsgJykgc2hvdWxkIHJldHVybiAnICsgZywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxlID0gcGFyc2VMb2NhbGUoZylcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLmxvY2FsZVN0cmluZykudG8uYmUuZXF1YWwoZyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5sYW5ndWFnZSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5yZWdpb24pLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUuc2NyaXB0KS50by5iZS5lcXVhbChjKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLnZhcmlhbnRzKS50by5iZS5lcXVhbChkKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLmV4dGxhbmcpLnRvLmJlLmVxdWFsKGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUucHJpdmF0ZVVzZSkudG8uYmUuZXF1YWwoZik7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IExvY2FsZShhLCBiLCBjLCBkLCBlLCBmKS50b1N0cmluZygpKS5pcy5lcXVhbChnKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0FUVFJJQlVURV9PQkpFQ1RMSU5LfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge2dldExpbmtlZE9iamVjdHN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1Byb3ZpZGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXIubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2dldERvY3VtZW50VHJhbnNsYXRpb25zLCBUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmRlc2NyaWJlKCdQcm92aWRlcicsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgbGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cblxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1Byb3ZpZGVyIGFuZCBEb20nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zTGlua1N5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2kxOG4vdHJhbnNsYXRpb25zQEBsaW5rXCIpO1xuXG4gICAgICAgIGl0KCdhc3NpZ25Ub0VsZW1lbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgY29uc3QgcCA9IG5ldyBQcm92aWRlcigpO1xuICAgICAgICAgICAgY29uc3QgciA9IHAuYXNzaWduVG9FbGVtZW50KHVuZGVmaW5lZCwgZWxlbWVudCk7XG5cbiAgICAgICAgICAgIHIudGhlbigoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfT0JKRUNUTElOSyk7XG4gICAgICAgICAgICAgICAgaWYgKHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJBdHRyaWJ1dGUgbm90IHNldFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpID0gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sKVxuICAgICAgICAgICAgICAgIGlmIChpID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwiTm8gbGlua2VkIG9iamVjdCBmb3VuZFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdiBvZiBpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY291bnRlciAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcIk5vIGxpbmtlZCBvYmplY3QgZm91bmRcIikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZG9jVHJhbnMgPSBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyhlbGVtZW50KVxuICAgICAgICAgICAgICAgIGV4cGVjdChkb2NUcmFucykuaXMuaW5zdGFuY2VvZihUcmFuc2xhdGlvbnMpO1xuXG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gXCIuLi8uLi90ZXh0L2Zvcm1hdHRlci5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGlzSW5zdGFuY2UsIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgcGFyc2VMb2NhbGUgfSBmcm9tIFwiLi4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwiLi4vcHJvdmlkZXIubWpzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5leHBvcnQgeyBGZXRjaCB9O1xuXG4vKipcbiAqIFRoZSBmZXRjaCBwcm92aWRlciByZXRyaWV2ZXMgYSBKU09OIGZpbGUgZnJvbSB0aGUgZ2l2ZW4gVVJMIGFuZCByZXR1cm5zIGEgdHJhbnNsYXRpb24gb2JqZWN0LlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9pMThuL3Byb3ZpZGVycy9mZXRjaC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzA2Nn1cbiAqIEB0dXRvcmlhbCBpMThuLWxvY2FsZS1hbmQtZm9ybWF0dGVyXG4gKi9cbmNsYXNzIEZldGNoIGV4dGVuZHMgUHJvdmlkZXIge1xuXHQvKipcblx0ICogQXMgb3B0aW9ucyB0aGUga2V5IGBmZXRjaGAgY2FuIGJlIHBhc3NlZC4gVGhpcyBjb25maWcgb2JqZWN0IGlzIHBhc3NlZCB0byB0aGUgZmV0Y2ggbWV0aG9kIGFzIGluaXQuXG5cdCAqXG5cdCAqIFRoZSB1cmwgbWF5IGNvbnRhaW4gcGxhY2Vob2xkZXJzIChsYW5ndWFnZSwgc2NyaXB0LCByZWdpb24sIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlKSwgc28geW91IGNhbiBzcGVjaWZ5IG9uZSB1cmwgZm9yIGFsbCB0cmFuc2xhdGlvbnMuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBuZXcgRmV0Y2goJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tL2Fzc2V0cy8ke2xhbmd1YWdlfS5qc29uJylcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIHNlZSB7QGxpbmsgTW9uc3Rlci5JMThuLlByb3ZpZGVycy5GZXRjaCNkZWZhdWx0c31cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL2ZldGNofVxuXHQgKi9cblx0Y29uc3RydWN0b3IodXJsLCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cblx0XHRpZiAoaXNJbnN0YW5jZSh1cmwsIFVSTCkpIHtcblx0XHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbnMgPSB7fTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZVN0cmluZyh1cmwpO1xuXG5cdFx0LyoqXG5cdFx0ICogQHByb3BlcnR5IHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0dGhpcy51cmwgPSB1cmw7XG5cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBvcHRpb25zXG5cdFx0ICovXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBleHRlbmQoXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0dGhpcy5kZWZhdWx0cyxcblx0XHRcdHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVmYXVsdHNcblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPWNvcnNcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLmNhY2hlPW5vLWNhY2hlXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1vbWl0XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1mb2xsb3dcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZmVycmVyUG9saWN5PW5vLXJlZmVycmVyXG5cdCAqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEl9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZChcblx0XHRcdHtcblx0XHRcdFx0ZmV0Y2g6IHtcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsIC8vICpHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBldGMuXG5cdFx0XHRcdFx0bW9kZTogXCJjb3JzXCIsIC8vIG5vLWNvcnMsICpjb3JzLCBzYW1lLW9yaWdpblxuXHRcdFx0XHRcdGNhY2hlOiBcIm5vLWNhY2hlXCIsIC8vICpkZWZhdWx0LCBuby1jYWNoZSwgcmVsb2FkLCBmb3JjZS1jYWNoZSwgb25seS1pZi1jYWNoZWRcblx0XHRcdFx0XHRjcmVkZW50aWFsczogXCJvbWl0XCIsIC8vIGluY2x1ZGUsICpzYW1lLW9yaWdpbiwgb21pdFxuXHRcdFx0XHRcdHJlZGlyZWN0OiBcImZvbGxvd1wiLCAvLyBtYW51YWwsICpmb2xsb3csIGVycm9yXG5cdFx0XHRcdFx0cmVmZXJyZXJQb2xpY3k6IFwibm8tcmVmZXJyZXJcIiwgLy8gbm8tcmVmZXJyZXIsICpuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZSwgb3JpZ2luLCBvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4sIHNhbWUtb3JpZ2luLCBzdHJpY3Qtb3JpZ2luLCBzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luLCB1bnNhZmUtdXJsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Z2V0VHJhbnNsYXRpb25zKGxvY2FsZSkge1xuXHRcdGlmIChpc1N0cmluZyhsb2NhbGUpKSB7XG5cdFx0XHRsb2NhbGUgPSBwYXJzZUxvY2FsZShsb2NhbGUpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIobG9jYWxlLmdldE1hcCgpKTtcblxuXHRcdHJldHVybiBnZXRHbG9iYWxGdW5jdGlvbihcImZldGNoXCIpKFxuXHRcdFx0Zm9ybWF0dGVyLmZvcm1hdCh0aGlzLnVybCksXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImZldGNoXCIsIHt9KSxcblx0XHQpXG5cdFx0XHQudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSlcblx0XHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRcdHJldHVybiBuZXcgVHJhbnNsYXRpb25zKGxvY2FsZSkuYXNzaWduVHJhbnNsYXRpb25zKGRhdGEpO1xuXHRcdFx0fSk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5cbmltcG9ydCB7RmV0Y2h9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZmV0Y2gubWpzXCI7XG5pbXBvcnQge1RyYW5zbGF0aW9uc30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbmxldCBmZXRjaFJlZmVyZW5jZTtcblxuXG5kZXNjcmliZSgnVHJhbnNsYXRpb24gUHJvdmlkZXIgRmV0Y2gnLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG4gICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIGpzb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9O1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdmZXRjaCBtb2NrIGRhdGEgYW5kIGNyZWF0ZSB0cmFuc2xhdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZmV0Y2gnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgcCA9IChuZXcgRmV0Y2gobmV3IFVSTCgnaHR0cDovL2V4YW1wbGUuY29tJykpKS5nZXRUcmFuc2xhdGlvbnMoJ2VuJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChwKS5pcy5pbnN0YW5jZW9mKFByb21pc2UpO1xuXG4gICAgICAgICAgICBwLnRoZW4ociA9PiB7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QocikuaXMuaW5zdGFuY2VvZihUcmFuc2xhdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5cbmltcG9ydCB7RW1iZWR9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5pbXBvcnQge1RyYW5zbGF0aW9uc30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuY29uc3QgaHRtbDEgPSBgXG48c2NyaXB0IGlkPVwidGVtcGxvY2FsZVwiIHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCI+XG57XG4gICAgICAgIFwia2V5XCI6IFwidHJhbnNsYXRpb25cIlxufVxuPC9zY3JpcHQ+XG5gO1xuXG5kZXNjcmliZSgnVHJhbnNsYXRpb24gUHJvdmlkZXIgRW1iZWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZ2V0IG1vY2sgZGF0YSBhbmQgY3JlYXRlIHRyYW5zbGF0aW9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdlbWJlZCcsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGUgPSBuZXcgRW1iZWQoJ3RlbXBsb2NhbGUnKTtcbiAgICAgICAgICAgIGxldCBwID0gZS5nZXRUcmFuc2xhdGlvbnMoJ2VuJyk7XG4gICAgICAgICAgICBleHBlY3QocCkuaXMuaW5zdGFuY2VvZihQcm9taXNlKTtcblxuICAgICAgICAgICAgcC50aGVuKHIgPT4ge1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHIpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiBcbiAgICAgICAgICAgICAgICAgICAgbGV0IHQgPSByLmdldFRleHQoJ2tleScpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0KS5pcy5lcXVhbCgndHJhbnNsYXRpb24nKTtcblxuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge3BhcnNlTG9jYWxlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHtFbWJlZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanNcIjtcbmltcG9ydCB7XG4gICAgVHJhbnNsYXRpb25zLFxuICAgIGdldERvY3VtZW50VHJhbnNsYXRpb25zXG4gICAgXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdUcmFuc2xhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnSW5zdGFuY2UgYW5kIEluaXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHRyYW5zbGF0aW9uO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgdHJhbnNsYXRpb24gPSBuZXcgVHJhbnNsYXRpb25zKHBhcnNlTG9jYWxlKCdlbi1HQicpKTtcblxuICAgICAgICAgICAgdHJhbnNsYXRpb24uYXNzaWduVHJhbnNsYXRpb25zKHtcbiAgICAgICAgICAgICAgICB0ZXN0MTogXCJhYmNcIixcbiAgICAgICAgICAgICAgICB0ZXN0MjogeydvdGhlcic6ICd4eXonfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2NyZWF0ZSBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVHJhbnNsYXRpb25zKHBhcnNlTG9jYWxlKCdlbi1HQicpKSkuaXMuaW5zdGFuY2VvZihUcmFuc2xhdGlvbnMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnaW5pdCB0cmFuc2xhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QodHJhbnNsYXRpb24uYXNzaWduVHJhbnNsYXRpb25zKHtcbiAgICAgICAgICAgICAgICB0ZXN0MTogXCJhYmNcIixcbiAgICAgICAgICAgICAgICB0ZXN0MjogeydvdGhlcic6ICd4eXonfVxuICAgICAgICAgICAgfSkpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRUZXh0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB0cmFuc2xhdGlvbjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gbmV3IFRyYW5zbGF0aW9ucyhwYXJzZUxvY2FsZSgnZW4tR0InKSk7XG5cbiAgICAgICAgICAgIHRyYW5zbGF0aW9uLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgdGVzdDE6IFwiYWJjXCIsXG4gICAgICAgICAgICAgICAgdGVzdDI6IHsnb3RoZXInOiAneHl6J31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjcmVhdGUsIHNldCBhbmQgZ2V0IGVuLUdCJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyYW5zbGF0aW9uLmdldFRleHQoJ3Rlc3QxJykpLmlzLmVxdWFsKCdhYmMnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2NyZWF0ZSwgc2V0IGFuZCBnZXQgIGVuLUdCIHdpdGggcGx1cmFscnVsZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QodHJhbnNsYXRpb24uZ2V0VGV4dCgndGVzdDInKSkuaXMuZXF1YWwoJ3h5eicpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBpbml0RG9jdW1lbnRUcmFuc2xhdGlvblxuICAgICAqL1xuXG4gICAgZGVzY3JpYmUoXCJ0ZXN0IGluaXREb2N1bWVudFRyYW5zbGF0aW9uIFwiLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgICAgICBsZXQgaHRtbDEgPSBgPGRpdiBpZD1cIm1vY2stdHJhbnNsYXRpb25zXCI+PC9kaXY+XG4gICAgXG48c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJ0cmFuc2xhdGlvbnNcIj5cbiAgICB7XG4gICAgICAgIFwidGVzdDFcIjogXCJhYmNcIixcbiAgICAgICAgXCJ0ZXN0MlwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwieHl6XCJcbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PlxuXG48c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJ0cmFuc2xhdGlvbnNcIj5cbiAgICB7XG4gICAgICAgIFwidGVzdDFcIjogXCJ4eXpcIixcbiAgICAgICAgXCJ0ZXN0M1wiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwieHl6XCJcbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PiAgICBcbiAgICBcbmA7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJ0luaXQgdHJhbnNsYXRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9jay10cmFuc2xhdGlvbnMnKTtcbiAgICAgICAgICAgIEVtYmVkLmFzc2lnblRyYW5zbGF0aW9uc1RvRWxlbWVudChlbGVtKS50aGVuKChvKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBubyBleGNlcHRpb24gYmVjYXVzZSBvZiBkZWZhdWx0XG4gICAgICAgICAgICAgICAgZXhwZWN0KGdldERvY3VtZW50VHJhbnNsYXRpb25zKGVsZW0pLmdldFRleHQoJ25vLWtleScsJ3dpdGgtZGVmYXVsdCcpKVxuICAgICAgICAgICAgICAgICAgICAuaXMuZXF1YWwoJ3dpdGgtZGVmYXVsdCcpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRyYW5zbGF0aW9ucyhlbGVtKS5nZXRUZXh0KCd0ZXN0MScpKVxuICAgICAgICAgICAgICAgICAgICAuaXMuZXF1YWwoJ3h5eicpO1xuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cblxufSk7Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5Q0EsV0FBUyxXQUFXLE9BQU87QUFDMUIsUUFBSSxVQUFVLE9BQVcsUUFBTztBQUNoQyxRQUFJLFVBQVUsS0FBTSxRQUFPO0FBQzNCLFdBQU8sT0FBTyxRQUFRLE9BQU8sUUFBUSxNQUFNO0FBQUEsRUFDNUM7QUFjQSxXQUFTLFlBQVksT0FBTztBQUMzQixRQUFJQTtBQUVKLFFBQUksVUFBVSxVQUFhLFVBQVUsTUFBTTtBQUMxQyxhQUFPO0FBQUEsSUFDUjtBQUVBLElBQUFBLFFBQU8sT0FBTztBQUVkLFFBQ0NBLFVBQVMsWUFDVEEsVUFBUyxZQUNUQSxVQUFTLGFBQ1RBLFVBQVMsVUFDUjtBQUNELGFBQU87QUFBQSxJQUNSO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFjQSxXQUFTLFNBQVMsT0FBTztBQUN4QixXQUFP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LEtBQUs7QUFDbEMsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFNBQVMsSUFBSSxFQUFFLEdBQUcsR0FBRyxHQUFHLE9BQU87QUFBQSxFQUNoRTtBQUNBLFNBQU8sYUFBYSxTQUFTLEtBQUssS0FBSztBQUNyQyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sWUFBWSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxPQUFPO0FBQUEsRUFDdkU7QUFDQSxTQUFPLFdBQVcsU0FBUyxLQUFLLEtBQUs7QUFDbkMsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFVBQVUsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLFFBQVE7QUFBQSxFQUNqRTtBQUNBLFNBQU8sY0FBYyxTQUFTLEtBQUssS0FBSztBQUN0QyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sYUFBYSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxRQUFRO0FBQUEsRUFDeEU7QUFDQSxTQUFPLFdBQVcsU0FBUyxLQUFLLEtBQUs7QUFDbkMsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFVBQVUsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLFFBQVE7QUFBQSxFQUNqRTtBQUNBLFNBQU8sY0FBYyxTQUFTLEtBQUssS0FBSztBQUN0QyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sYUFBYSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxRQUFRO0FBQUEsRUFDeEU7QUFDQSxTQUFPLFlBQVksU0FBUyxLQUFLLEtBQUs7QUFDcEMsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFdBQVcsSUFBSSxFQUFFLEdBQUc7QUFBQSxFQUNyRDtBQUNBLFNBQU8sZUFBZSxTQUFTLEtBQUssS0FBSztBQUN2QyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sY0FBYyxJQUFJLEVBQUUsR0FBRyxJQUFJO0FBQUEsRUFDNUQ7QUFDQSxTQUFPLFdBQVcsU0FBUyxLQUFLLEtBQUs7QUFDbkMsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFVBQVUsSUFBSSxFQUFFLEdB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QUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFFQTtBQUFBLFFBQ0k7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUFBLE1BRUE7QUFBQSxRQUNJO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUVBO0FBQUEsUUFDSTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFFQTtBQUFBLFFBQ0k7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFVBQ0gsR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUFBLE1BQ0E7QUFBQSxRQUNJO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0EsQ0FBQztBQUFBLFFBQ0Q7QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLFFBQ0k7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUFBLE1BQ0E7QUFBQSxRQUNJLENBQUM7QUFBQSxRQUNEO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFBRztBQUFBLFFBQ0gsQ0FBQztBQUFBLFFBQ0QsRUFBQyxHQUFHLE9BQVM7QUFBQSxRQUNiO0FBQUEsTUFDSjtBQUFBLElBR0EsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixVQUFJSSxLQUFJLEtBQUssTUFBTTtBQUNuQixVQUFJLElBQUksS0FBSyxNQUFNO0FBQ25CLFVBQUksSUFBSSxLQUFLLE1BQU07QUFH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QUdELFNBQUcscUJBQXFCLFNBQVUsTUFBTTtBQUVwQyxZQUFJLE9BQU8sU0FBUyxlQUFlLG1CQUFtQjtBQUN0RCxjQUFNLDRCQUE0QixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU07QUFFaEQsY0FBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBRzNDLGlCQUFPLHdCQUF3QixJQUFJLEVBQUUsUUFBUSxVQUFTLGNBQWMsQ0FBQyxFQUNoRSxHQUFHLE1BQU0sY0FBYztBQUU1QixpQkFBTyx3QkFBd0IsSUFBSSxFQUFFLFFBQVEsT0FBTyxDQUFDLEVBQ2hELEdBQUcsTUFBTSxLQUFLO0FBRW5CLGVBQUs7QUFBQSxRQUVULENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTTtBQUNkLGVBQUssQ0FBQztBQUFBLFFBQ1IsQ0FBQztBQUFBLE1BR0wsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBR0wsQ0FBQzsiLAogICJuYW1lcyI6IFsidHlwZSIsICJ0eXBlIiwgImEiLCAiU3RvcmFnZSIsICJzZWxmIiwgIm5vZGUiLCAiYWRkZWROb2RlcyIsICJfYSIsICJnZXQiLCAiYSIsICJvcHRpb25zIiwgIkJ1ZmZlclNvdXJjZUNvbnZlcnRlciIsICJ0eXBlIiwgImEiLCAic2l6ZSIsICJvZmZzZXQiLCAiQ29udmVydCIsICJjb21iaW5lIiwgInJldEJ1ZiIsICJyZXRWaWV3IiwgIkJvb2xlYW4iLCAiU2V0IiwgIl9hIiwgIm1heCIsICJyZXRWaWV3IiwgInNpemUiLCAidGVtcEJ1ZmZlclZpZXciLCAib2Zmc2V0IiwgImZsYWciLCAiaGV4IiwgIkFzblR5cGVUeXBlcyIsICJBc25Qcm9wVHlwZXMiLCAiaW1wb3J0X3B2dHN1dGlscyIsICJ0eXBlIiwgIkJvb2xlYW4iLCAiX2EiLCAiU2V0IiwgIm9wdGlvbnMiLCAiZGVmYXVsdENvbnZlcnRlciIsICJfYSIsICJTZXQiLCAiU2V0IiwgImltcG9ydF9wdnRzdXRpbHMiLCAidHlwZSIsICJpc0NvbnZlcnRpYmxlIiwgInNjaGVtYVN0b3JhZ2UiLCAiaW5pdF9pbmRleF9lcyIsICJKc29uUHJvcFR5cGVzIiwgIm1pbiIsICJtYXgiLCAib3B0aW9ucyIsICJpbXBvcnRfcHZ0c3V0aWxzIiwgIk9iamVjdElkZW50aWZpZXIiLCAiaW5pdF9pbmRleF9lcyIsICJvZmZzZXQiLCAib3B0aW9ucyIsICJmb3JtYXQiLCAiX2EiLCAidHlwZSIsICJFY1B1YmxpY0tleSIsICJzaXplIiwgIkVkUHJpdmF0ZUtleSIsICJFZFB1YmxpY0tleSIsICJDdXJ2ZVByaXZhdGVLZXkiLCAibGVuIiwgImkiLCAic3RhcnQiLCAiZW5kIiwgImxlbjIiLCAib2Zmc2V0IiwgIkJ1ZmZlciIsICJpc0luc3RhbmNlIiwgInNpemUiLCAiYSIsICJjb25jYXQiLCAic3RhcnQiLCAiZW5kIiwgInRvU3RyaW5nIiwgImluc3BlY3QiLCAibWF4IiwgInJlYWQiLCAiaSIsICJvZmZzZXQiLCAid3JpdGUiLCAiYnl0ZUxlbmd0aCIsICJtaW4iLCAidHlwZSIsICJDcnlwdG8iLCAiQnVmZmVyJDEiLCAiYSIsICJjcnlwdG8iLCAic3RhcnQiLCAiZW5kIiwgInByb2Nlc3MiLCAiaW1wb3J0X3B2dHN1dGlscyIsICJDcnlwdG9LZXkiLCAiQWVzQ2JjUHJvdmlkZXIiLCAiQWVzQ21hY1Byb3ZpZGVyIiwgIkFlc0N0clByb3ZpZGVyIiwgIkFlc0djbVByb3ZpZGVyIiwgIkFlc0t3UHJvdmlkZXIiLCAiQWVzRWNiUHJvdmlkZXIiLCAiUnNhUHJpdmF0ZUtleSIsICJSc2FQdWJsaWNLZXkiLCAiUnNhU3NhUHJvdmlkZXIiLCAiUnNhUHNzUHJvdmlkZXIiLCAiUnNhT2FlcFByb3ZpZGVyIiwgIkVjUHJpdmF0ZUtleSIsICJFY1B1YmxpY0tleSIsICJFY2RzYVByb3ZpZGVyIiwgIkVjZGhQcm92aWRlciIsICJFZFByaXZhdGVLZXkiLCAiRWRQdWJsaWNLZXkiLCAiRWREc2FQcm92aWRlciIsICJFY2RoRXNQcm92aWRlciIsICJFZDI1NTE5UHJvdmlkZXIiLCAiWDI1NTE5UHJvdmlkZXIiLCAiUGJrZGYyUHJvdmlkZXIiLCAiSG1hY1Byb3ZpZGVyIiwgIkhrZGZQcm92aWRlciIsICJTaGFrZTEyOFByb3ZpZGVyIiwgIlNoYWtlMjU2UHJvdmlkZXIiLCAiU3VidGxlQ3J5cHRvIiwgImluaXRfaW5kZXhfZXMiLCAiZm9ybWF0IiwgIm9wdGlvbnMiLCAiaGFzaCIsICJ0eXBlIiwgIl9hIiwgImluaXRfZW51bXMiLCAibmFtZSIsICJzdHlsZSIsICJnZXRDb21wdXRlZFN0eWxlIiwgImdldENvbXB1dGVkU3R5bGUiLCAid2luZG93IiwgIm1pbiIsICJtYXgiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm1pbiIsICJtYXgiLCAib2Zmc2V0IiwgImVmZmVjdCIsICJpbml0X2VudW1zIiwgInRvUGFkZGluZ09iamVjdCIsICJwb3BwZXIiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJvcHRpb25zIiwgImluaXRfZW51bXMiLCAiZWZmZWN0IiwgIm9wdGlvbnMiLCAid2luZG93IiwgImhhc2giLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJnZXRDb21wdXRlZFN0eWxlIiwgImNsaXBwaW5nUGFyZW50cyIsICJnZXRDb21wdXRlZFN0eWxlIiwgImluaXRfZW51bXMiLCAicmVmZXJlbmNlIiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm9mZnNldCIsICJpbml0X2VudW1zIiwgIm9wdGlvbnMiLCAicGxhY2VtZW50cyIsICJwbGFjZW1lbnQiLCAiYSIsICJpbml0X2VudW1zIiwgIm9wdGlvbnMiLCAicGxhY2VtZW50cyIsICJwbGFjZW1lbnQiLCAiX2xvb3AiLCAiX2kiLCAiY2hlY2tzIiwgImluaXRfZW51bXMiLCAiaGlkZSIsICJpbml0X2VudW1zIiwgIm9mZnNldCIsICJvcHRpb25zIiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm9mZnNldCIsICJtaW4iLCAibWF4IiwgImluaXRfZW51bXMiLCAiaW5pdF9lbnVtcyIsICJmbiIsICJtZXJnZWQiLCAiZGVmYXVsdE1vZGlmaWVycyIsICJjcmVhdGVQb3BwZXIiLCAicmVmZXJlbmNlIiwgInBvcHBlciIsICJvcHRpb25zIiwgImZuIiwgInN0YXRlIiwgImVmZmVjdCIsICJub29wRm4iLCAiaW5pdF9lbnVtcyIsICJzeW1ib2wiLCAiaW5pdCIsICJhIiwgImluaXRfY29uc3RhbnRzIiwgInN5bWJvbCIsICJpbml0X2NvbnN0YW50cyIsICJkb2N1bWVudCIsICJnZXRXaW5kb3ciLCAid2luZG93IiwgImRvY3VtZW50IiwgImluaXRfbG9jYWxlIiwgIm5hdmlnYXRvciIsICJvcHRpb25zIiwgImluaXRfbG9jYWxlIiwgImluaXRfY29uc3RhbnRzIiwgImNvbnNvbGUiLCAiY29uY2F0IiwgInN0YXJ0IiwgImVuZCIsICJvcHRpb25zIiwgInNldCIsICJ0b2dnbGUiLCAiaW5pdF9sb2NhbGUiLCAiREVMSU1JVEVSIiwgIm9wdGlvbnMiLCAidHlwZSIsICJhIiwgImludGVybmFsIiwgInNlbGYiLCAiZG9jdW1lbnQiLCAiaW5pdF9jb25zdGFudHMiLCAiZG9jdW1lbnQiLCAiSFRNTFRlbXBsYXRlRWxlbWVudCIsICJEb2N1bWVudEZyYWdtZW50IiwgIkRvY3VtZW50IiwgImluaXRfY29uc3RhbnRzIiwgImEiLCAidHlwZSIsICJkaWZmIiwgImdldE9wZXJhdG9yIiwgInR5cGUiLCAiZG9jdW1lbnQiLCAib3B0aW9ucyIsICJ2YWx1ZSIsICJ0eXBlIiwgImUiLCAiaSIsICJzeW1ib2wiLCAiY29uZmlnIiwgImluaXRfY29uc3RhbnRzIiwgImdldFdpbmRvdyIsICJvcHRpb25zIiwgIm9wdGlvbnMiLCAic2VsZiIsICJmbGFnIiwgIm9wdGlvbnMiLCAiY3VzdG9tRWxlbWVudHMiLCAiaW5pdF9jb25zdGFudHMiLCAibWluIiwgIm1heCIsICJnbG9iYWxSZWZlcmVuY2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJ0IiwgImluaXRfdGhlbWUiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJpbml0X3BvcHBlciIsICJ0eXBlIiwgInNlbGYiLCAib3B0aW9ucyIsICJzaG93IiwgInJlZmVyZW5jZSIsICJpbml0X3RhYnMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF90aGVtZSIsICJpbml0X3BvcHBlciIsICJkb2N1bWVudCIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJjb250cm9sRWxlbWVudFN5bWJvbCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X21lc3NhZ2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfbm90aWZ5IiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfbWVzc2FnZSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJzZWxmIiwgIm1pbiIsICJtYXgiLCAiYXBwbHkiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9zcGxpdF9wYW5lbCIsICJpbml0X25vdGlmeSIsICJpbml0X2NvbnN0YW50cyIsICJhdHRhY2hSZXNpemVPYnNlcnZlciIsICJyZXNpemVPYnNlcnZlclN5bWJvbCIsICJ0aW1lckNhbGxiYWNrU3ltYm9sIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJpbml0RXZlbnRIYW5kbGVyIiwgImdldFRlbXBsYXRlIiwgImluaXRfcGFuZWwiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJzZWxmIiwgInR5cGUiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfYnV0dG9uIiwgImluaXRfY29uc3RhbnRzIiwgIm9wdGlvbnMiLCAic3RhcnQiLCAiZW5kIiwgIm1heCIsICJtaW4iLCAiZ2V0T3Bwb3NpdGVQbGFjZW1lbnQiLCAicmVjdFRvQ2xpZW50UmVjdCIsICJwbGFjZW1lbnRzIiwgInJvdW5kIiwgInJlZmVyZW5jZSIsICJkZXRlY3RPdmVyZmxvdyIsICJvcHRpb25zIiwgInBsYXRmb3JtIiwgInJlY3RUb0NsaWVudFJlY3QiLCAiYXJyb3ciLCAiZmxpcCIsICJvZmZzZXQiLCAiY29uZmlnIiwgImZuIiwgIm1pbiIsICJtYXgiLCAicGxhY2VtZW50cyIsICJhbGlnbm1lbnQiLCAiYSIsICJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsICJzaWRlcyIsICJzaWRlIiwgInBsYWNlbWVudCIsICJvdmVyZmxvdyIsICJ4IiwgInkiLCAiYXBwbHkiLCAiZ2V0Tm9kZU5hbWUiLCAiaXNOb2RlIiwgImdldFdpbmRvdyIsICJnZXREb2N1bWVudEVsZW1lbnQiLCAiaXNFbGVtZW50IiwgImlzSFRNTEVsZW1lbnQiLCAiaXNTaGFkb3dSb290IiwgImdldENvbXB1dGVkU3R5bGUiLCAiaXNUYWJsZUVsZW1lbnQiLCAiZ2V0Q29udGFpbmluZ0Jsb2NrIiwgImdldFBhcmVudE5vZGUiLCAiZ2V0Tm9kZVNjcm9sbCIsICJnZXRDb21wdXRlZFN0eWxlIiwgImlzSFRNTEVsZW1lbnQiLCAicm91bmQiLCAiaXNFbGVtZW50IiwgImdldFdpbmRvdyIsICJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCAibGVmdCIsICJ0b3AiLCAicmVjdFRvQ2xpZW50UmVjdCIsICJnZXRXaW5kb3dTY3JvbGxCYXJYIiwgImdldE5vZGVTY3JvbGwiLCAiZ2V0RG9jdW1lbnRFbGVtZW50IiwgImdldE5vZGVOYW1lIiwgImdldERvY3VtZW50UmVjdCIsICJtYXgiLCAiZ2V0Vmlld3BvcnRSZWN0IiwgImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwgImdldFBhcmVudE5vZGUiLCAiZ2V0Q2xpcHBpbmdSZWN0IiwgIm1pbiIsICJnZXRUcnVlT2Zmc2V0UGFyZW50IiwgImdldE9mZnNldFBhcmVudCIsICJpc1RhYmxlRWxlbWVudCIsICJnZXRDb250YWluaW5nQmxvY2siLCAib3B0aW9ucyIsICJyZWZlcmVuY2UiLCAiZGV0ZWN0T3ZlcmZsb3ciLCAib2Zmc2V0IiwgImF1dG9QbGFjZW1lbnQiLCAic2hpZnQiLCAiZmxpcCIsICJzaXplIiwgImFycm93IiwgImNvbXB1dGVQb3NpdGlvbiIsICJvcHRpb25zIiwgImNvbmZpZyIsICJmbiIsICJmbGlwIiwgInNoaWZ0IiwgImxpbmUiLCAiYXV0b1BsYWNlbWVudCIsICJkZXRlY3RPdmVyZmxvdyIsICJhcnJvdyIsICJzaXplIiwgIm9mZnNldCIsICJjb21wdXRlUG9zaXRpb24iLCAieCIsICJ5IiwgImluaXRPcHRpb25zRnJvbUFyZ3VtZW50cyIsICJvcHRpb25zIiwgIm9ic2VydmVyIiwgImxvYWRDb250ZW50IiwgImdldFRlbXBsYXRlIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfY29uc3RhbnRzIiwgImludGVybmFsU3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfc3RhdGVfYnV0dG9uIiwgImluaXRfYnV0dG9uIiwgInN0eWxlcyIsICJhIiwgImluaXRfY29uc3RhbnRzIiwgInBvcHBlckVsZW1lbnRTeW1ib2wiLCAic2VsZiIsICJ1cGRhdGVQb3BwZXIiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAiYXR0YWNoUmVzaXplT2JzZXJ2ZXIiLCAicmVzaXplT2JzZXJ2ZXJTeW1ib2wiLCAidGltZXJDYWxsYmFja1N5bWJvbCIsICJkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIiLCAib2JzZXJ2ZXIiLCAicnVuIiwgInRvZ2dsZSIsICJzaG93IiwgImhpZGUiLCAiaW5pdE9wdGlvbk9ic2VydmVyIiwgIm1heCIsICJzdHlsZXMiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiZm9jdXNGaWx0ZXIiLCAidHlwZSIsICJhIiwgImdsb2JhbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgImNsb3NlRXZlbnRIYW5kbGVyIiwgImVsZW1lbnQiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImNvbnRhaW5lckVsZW1lbnRTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9zZWxlY3QiLCAiaW5pdF9jb25zdGFudHMiLCAiZG9jdW1lbnQiLCAiZmxhZyIsICJpbml0X3BvcHBlciIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyIiwgImNsb3NlRXZlbnRIYW5kbGVyIiwgImhpZGUiLCAiYnV0dG9uRWxlbWVudFN5bWJvbCIsICJhdHRhY2hSZXNpemVPYnNlcnZlciIsICJyZXNpemVPYnNlcnZlclN5bWJvbCIsICJ0aW1lckNhbGxiYWNrU3ltYm9sIiwgInVwZGF0ZVBvcHBlciIsICJkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIiLCAic2VsZiIsICJwb3BwZXJFbGVtZW50U3ltYm9sIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgInNob3ciLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfcG9wcGVyIiwgImluaXRfY29uc3RhbnRzIiwgImRvY3VtZW50IiwgInR5cGUiLCAiUG9wcGVyIiwgImluaXRfcG9wcGVyIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRFdmVudEhhbmRsZXIiLCAiY2xvc2VFdmVudEhhbmRsZXIiLCAiYXR0YWNoUmVzaXplT2JzZXJ2ZXIiLCAicmVzaXplT2JzZXJ2ZXJTeW1ib2wiLCAidGltZXJDYWxsYmFja1N5bWJvbCIsICJ1cGRhdGVQb3BwZXIiLCAiZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyIiwgInBvcHBlckVsZW1lbnRTeW1ib2wiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiYXJyb3dFbGVtZW50U3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfcG9wcGVyX2J1dHRvbiIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3BvcHBlciIsICJpbml0X2J1dHRvbiIsICJQb3BwZXIiLCAic3R5bGVzIiwgImRvY3VtZW50IiwgInR5cGUiLCAib3B0aW9ucyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyQnlNb2RlIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfbWVzc2FnZV9zdGF0ZV9idXR0b24iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9wb3BwZXIiLCAiaW5pdF9zdGF0ZV9idXR0b24iLCAiUG9wcGVyIiwgInN0eWxlcyIsICJvcHRpb25zIiwgInR5cGUiLCAic2VsZiIsICJpbml0RXZlbnRoYW5kbGVyIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2NvbmZpcm1fYnV0dG9uIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfYnV0dG9uIiwgImluaXRfcG9wcGVyX2J1dHRvbiIsICJpbml0X21lc3NhZ2Vfc3RhdGVfYnV0dG9uIiwgInN0eWxlcyIsICJwYXJzZU9wdGlvbnNKU09OIiwgIm9wdGlvbnMiLCAiaW5pdF9jb25zdGFudHMiLCAiRGF0YXNvdXJjZSIsICJpbml0X2RhdGFzb3VyY2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF91dGlsIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRFdmVudEhhbmRsZXIiLCAib3B0aW9ucyIsICJjb25maWciLCAib2JzZXJ2ZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9kYXRhc2V0IiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfZGF0YXNvdXJjZSIsICJpbml0X3V0aWwiLCAiRGF0YXNvdXJjZSIsICJGb3JtU3R5bGVTaGVldCIsICJpbml0X2Zvcm0iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJlIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2Zvcm0iLCAiaW5pdF9kYXRhc2V0IiwgImluaXRfdXRpbCIsICJGb3JtU3R5bGVTaGVldCIsICJOb2RlTGlzdCIsICJOb2RlIiwgInNlbGYiLCAiTm9kZSIsICJOb2RlTGlzdCIsICJvcHRpb25zIiwgIk5vZGUiLCAiTm9kZUxpc3QiLCAiTm9kZUxpc3QiLCAiTm9kZSIsICJpbml0X2NvbnN0YW50cyIsICJoYW5kbGVPcHRpb25LZXlib2FyZEV2ZW50cyIsICJOb2RlIiwgImluaXRFdmVudEhhbmRsZXIiLCAiYSIsICJrZXlFdmVudEhhbmRsZXIiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF90cmVlX3NlbGVjdCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3NlbGVjdCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAic3dpdGNoRWxlbWVudFN5bWJvbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgInNlbGYiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF90b2dnbGVfc3dpdGNoIiwgImluaXRfY29uc3RhbnRzIiwgIlRlbXBsYXRlIiwgImluaXRPcHRpb25zRnJvbUFyZ3VtZW50cyIsICJvcHRpb25zIiwgImluaXRJbnRlcnNlY3Rpb25PYnNlcnZlciIsICJpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkIiwgIm9ic2VydmVyIiwgImxvYWRDb250ZW50IiwgImdldFRlbXBsYXRlIiwgImluaXRfdGVtcGxhdGUiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJkb2N1bWVudCIsICJ3aW5kb3ciLCAiZ2V0V2luZG93IiwgIm9wdGlvbnMiLCAib3B0aW9ucyIsICJwYXJzZU9wdGlvbnNKU09OIiwgIktFWV9ET0NVTUVOVCIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgInNlbGYiLCAiZG9jdW1lbnQiLCAiS0VZX0RPQ1VNRU5UIiwgImFwcGVuZFRvRG9jdW1lbnQiLCAiaW5pdF9jb25zdGFudHMiLCAic2VsZiIsICJjcmVhdGVFbGVtZW50IiwgImRvY3VtZW50IiwgIktFWV9ET0NVTUVOVCIsICJpbml0X2NvbnN0YW50cyIsICJjcmVhdGVFbGVtZW50IiwgImRvY3VtZW50IiwgIktFWV9ET0NVTUVOVCIsICJpbml0X2NvbnN0YW50cyIsICJ0eXBlIiwgIm9wdGlvbnMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAid2luZG93IiwgImdldFdpbmRvdyIsICJ2ZXJzaW9uIiwgImV2ZW50IiwgImdldFRlbXBsYXRlIiwgImluaXRfY29uZmlnX21hbmFnZXIiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImluaXRFdmVudEhhbmRsZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9ob3N0IiwgImluaXRfbm90aWZ5IiwgImluaXRfbG9jYWxlIiwgImluaXRfY29uZmlnX21hbmFnZXIiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgIm92ZXJsYXlFbGVtZW50U3ltYm9sIiwgImluaXRFdmVudEhhbmRsZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9vdmVybGF5IiwgImluaXRfbm90aWZ5IiwgImluaXRfY29uc3RhbnRzIiwgImdldFdpbmRvdyIsICJpbml0X3V0aWwiLCAiaW5pdF9jb25zdGFudHMiLCAiQVRUUklCVVRFX0JVVFRPTl9MQUJFTCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJ1cGRhdGVSZXNpemVPYnNlcnZlck9ic2VydmF0aW9uIiwgInJlc2l6ZU9ic2VydmVyU3ltYm9sIiwgImluaXRFdmVudEhhbmRsZXIiLCAiaW5pdFNsb3RDaGFuZ2VkSGFuZGxlciIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiZG9jdW1lbnQiLCAidGltZXJDYWxsYmFja1N5bWJvbCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2NvbGxhcHNlIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfaG9zdCIsICJpbml0X3V0aWwiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJBVFRSSUJVVEVfQlVUVE9OX0xBQkVMIiwgImdldFRlbXBsYXRlIiwgImluaXRfZGV0YWlscyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3V0aWwiLCAiaW5pdF9jb2xsYXBzZSIsICJEZXRhaWxzIiwgImluaXRfZGV0YWlscyIsICJpbnRlcm5hbENvdW50ZXIiLCAiX19kZWZQcm9wIiwgIl9fZ2V0T3duUHJvcE5hbWVzIiwgIl9fY29tbW9uSlMiLCAiX19yZXF1aXJlIiwgIl9fZXhwb3J0IiwgImlzTmFOMiIsICJvcHRpb25zIiwgImVuZCIsICJzaXplIiwgImlzTmFOIiwgImVzY2FwZSIsICJpc1ByaW1pdGl2ZSIsICJmbiIsICJhIiwgImlzT2JqZWN0IiwgInN0YXJ0IiwgImNvbnRhaW5zIiwgImZsYWciLCAiaXNIVE1MRWxlbWVudCIsICJjb250YWlucyIsICJvcHRpb25zIiwgIndpbmRvdyIsICJTdG9yYWdlIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiVGFicyIsICJDcnlwdG8iLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJDcnlwdG8iLCAiU3BsaXRTY3JlZW4iLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJTcGxpdFNjcmVlbiIsICJDcnlwdG8iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9idXR0b24iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiZ2V0V2luZG93IiwgInRpbWVyQ2FsbGJhY2tTeW1ib2wiLCAicmVzaXplT2JzZXJ2ZXJTeW1ib2wiLCAiZGltZW5zaW9uc1N5bWJvbCIsICJjb250cm9sRWxlbWVudFN5bWJvbCIsICJwb3BwZXJFbGVtZW50U3ltYm9sIiwgImNsb3NlRXZlbnRIYW5kbGVyIiwgInBvcHBlclN3aXRjaEV2ZW50SGFuZGxlciIsICJwb3BwZXJOYXZFbGVtZW50U3ltYm9sIiwgInN3aXRjaEVsZW1lbnRTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImluaXRFdmVudEhhbmRsZXIiLCAiaW5pdFBvcHBlclN3aXRjaCIsICJkb2N1bWVudCIsICJ0eXBlIiwgImRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlciIsICJoaWRlIiwgInNob3ciLCAic2VsZiIsICJjaGVja0FuZFJlYXJyYW5nZUJ1dHRvbnMiLCAicmVhcnJhbmdlQnV0dG9ucyIsICJjYWxjQm94V2lkdGgiLCAiZWRpdG9yRWxlbWVudFN5bWJvbCIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJnZXRUZW1wbGF0ZSIsICJjb21wdXRlUG9zaXRpb24iLCAiZmxpcCIsICJvZmZzZXQiLCAic2VsZiIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImdsb2JhbCIsICJvcHRpb25zIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiUmVsb2FkIiwgInZpZXdwb3J0IiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJTdGF0ZUJ1dHRvbiIsICJvcHRpb25zIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAiU2VsZWN0IiwgIm9wdGlvbnMiLCAiZSIsICJhIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAiQ29uZmlybUJ1dHRvbiIsICJzZWxmIiwgImV4cGVjdCIsICJodG1sMSIsICJodG1sMiIsICJmb3JtIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAiVHJlZVNlbGVjdCIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgImUiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJodG1sMiIsICJCdXR0b24iLCAib3B0aW9ucyIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImh0bWwyIiwgIlRvZ2dsZVN3aXRjaCIsICJleHBlY3QiLCAiZ2xvYmFsIiwgIm1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlciIsICJodG1sMSIsICJUZW1wbGF0ZSIsICJ2aWV3cG9ydCIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgImV4cGVjdCIsICJNZXNzYWdlIiwgImV4cGVjdCIsICJOb3RpZnkiLCAiTm90aWZ5IiwgImV4cGVjdCIsICJtdXRhdGlvbm9ic2VydmVyIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJpbml0X3V0aWwiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJhIiwgIm9wdGlvbnMiLCAic3RhcnQiLCAiZW5kIiwgIm9wdGlvbnMiLCAicmFuZG9tIiwgImEiLCAibWF4IiwgImEiLCAiZGlmZiIsICJhIiwgImEiLCAiYSIsICJjb25zb2xlIiwgImEiLCAiYSIsICJoYW5kbGVyIiwgIk1lc3NhZ2UiLCAic2VsZiIsICJNZXNzYWdlIiwgIm9wdGlvbnMiLCAiaXNOb2RlIiwgIk1lc3NhZ2UiLCAiTWVzc2FnZSIsICJ2ZXJzaW9uIiwgImEiLCAibW9uc3RlclZlcnNpb24iLCAiZ2V0V2luZG93IiwgImluaXQiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJleHBlY3QiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJleHBlY3QiLCAiZmV0Y2hSZWZlcmVuY2UiLCAibXV0YXRpb25vYnNlcnZlciIsICJhZGRlZE5vZGVzIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImUiLCAib3B0aW9ucyIsICJpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzIiwgImdsb2JhbCIsICJhIiwgImV4cGVjdCIsICJodG1sMSIsICJodG1sMiIsICJVcGRhdGVyIiwgIm9wdGlvbnMiLCAidiIsICJhIiwgImluaXRfbG9jYWxlIiwgImEiLCAiZXhwZWN0IiwgImh0bWwxIiwgImh0bWwyIiwgIkN1c3RvbUVsZW1lbnQiLCAicmVnaXN0ZXJDdXN0b21FbGVtZW50IiwgImRvY3VtZW50IiwgImFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50IiwgIm9wdGlvbnMiLCAiYSIsICJzZXQiLCAidiIsICJ3aW5kb3dSZWFkeSIsICJkb21SZWFkeSIsICJnZXRXaW5kb3ciLCAiYSIsICJleHBlY3QiLCAiQ3VzdG9tRWxlbWVudCIsICJyZWdpc3RlckN1c3RvbUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiY29udHJvbCIsICJodG1sMSIsICJodG1sMiIsICJodG1sMyIsICJzeW1ib2wiLCAiYSIsICJSZXNvdXJjZSIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgImV4cGVjdCIsICJodG1sMSIsICJDdXN0b21Db250cm9sIiwgInJlZ2lzdGVyQ3VzdG9tRWxlbWVudCIsICJkb2N1bWVudCIsICJtIiwgImluaXRfY29uc3RhbnRzIiwgImEiLCAib3B0aW9ucyIsICJkb0RpZmYiLCAidHlwZSIsICJXZWJDb25uZWN0IiwgIm9wdGlvbnMiLCAiTWVzc2FnZSIsICJ0ZXN0VXJsIiwgIldlYkNvbm5lY3QiLCAiY2xvbmUiLCAib3B0aW9ucyIsICJpbml0IiwgImZldGNoRGF0YSIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImkiLCAiYSIsICJpbml0X2xvY2FsZSIsICJpc05vZGUiLCAiYSIsICJiIiwgImMiLCAiaHRtbDEiLCAiYSIsICJOb2RlTGlzdCIsICJhIiwgImEiLCAiYSIsICJodG1sMSIsICJhIiwgInNlbGYiLCAiYSIsICJhIiwgImEiLCAiTm9kZUxpc3QiLCAiTm9kZSIsICJhIiwgImEiLCAiYSIsICJhIiwgImEiLCAiYSIsICJhIiwgIm1heCIsICJhIiwgIlJhbmRvbUlEIiwgIlVVSUQiLCAiYSIsICJhIiwgImEiLCAiTm9kZUxpc3QiLCAiTm9kZSIsICJOb2RlIiwgIk5vZGVMaXN0IiwgIkZvcm1hdHRlciIsICJvcHRpb25zIiwgIkZvcm1hdHRlciIsICJhIiwgImEiLCAiaW5pdF9jb25zdGFudHMiLCAiaHRtbDEiLCAidHJhbnNsYXRpb25zTGlua1N5bWJvbCIsICJvcHRpb25zIiwgImdsb2JhbCIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgImdsb2JhbCIsICJodG1sMSIsICJlIiwgImh0bWwxIl0KfQo=
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc291cmNlL3R5cGVzL2lzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy90eXBlb2YubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2V4dGVuZC5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RvbS1zdG9yYWdlQDIuMS4wL25vZGVfbW9kdWxlcy9kb20tc3RvcmFnZS9saWIvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2VsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsQDEuMy4xMi9ub2RlX21vZHVsZXMvZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGwvZGlzdC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHZ0c3V0aWxzQDEuMy42L25vZGVfbW9kdWxlcy9wdnRzdXRpbHMvYnVpbGQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3B2dXRpbHNAMS4xLjMvbm9kZV9tb2R1bGVzL3B2dXRpbHMvYnVpbGQvdXRpbHMuZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FzbjFqc0AzLjAuNS9ub2RlX21vZHVsZXMvYXNuMWpzL2J1aWxkL2luZGV4LmVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2VudW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL2JpdF9zdHJpbmcuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvdHlwZXMvb2N0ZXRfc3RyaW5nLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2NvbnZlcnRlcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvaGVscGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3NjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xMy9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9zdG9yYWdlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2RlY29yYXRvcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvZXJyb3JzL3NjaGVtYV92YWxpZGF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2Vycm9ycy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xMy9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9wYXJzZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvc2VyaWFsaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xMy9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9vYmplY3RzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2NvbnZlcnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuOC4xL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIranNvbi1zY2hlbWFAMS4xLjEyL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvanNvbi1zY2hlbWEvYnVpbGQvaW5kZXguZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3dlYmNyeXB0by1jb3JlQDEuOC4xL25vZGVfbW9kdWxlcy93ZWJjcnlwdG8tY29yZS9idWlsZC93ZWJjcnlwdG8tY29yZS5lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2llZWU3NTRAMS4yLjEvbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2J1ZmZlckA1LjcuMS9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrd2ViY3J5cHRvQDEuNS4wL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvd2ViY3J5cHRvL2J1aWxkL3dlYmNyeXB0by5lcy5qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RhbnRzLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFZpZXdwb3J0UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9pbmRleC5qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvYmFzZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3N0YWNrLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9wYXRoZmluZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdG9rZW5saXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL2Nsb25lLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9sb2NhbGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vbG9jYWxlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL3RyYW5zZm9ybWVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9waXBlLm1qcyIsICIuLi8uLi9zb3VyY2UvdGV4dC9mb3JtYXR0ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9tZWRpYXR5cGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcXVldWUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy91bmlxdWVxdWV1ZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXJsaXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcHJveHlvYnNlcnZlci5tanMiLCAiLi4vLi4vc291cmNlL2RvbS90aGVtZS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS90ZW1wbGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGlmZi5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvdHJpbXNwYWNlcy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9ldmVudHMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdXBkYXRlci5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9zbG90dGVkLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwvZXh0cmFjdC1rZXlzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwvaW5pdC1vcHRpb25zLWZyb20tYXR0cmlidXRlcy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS91dGlsL3NldC1vcHRpb24tZnJvbS1hdHRyaWJ1dGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vY3VzdG9tZWxlbWVudC5tanMiLCAiLi4vLi4vc291cmNlL21hdGgvcmFuZG9tLm1qcyIsICIuLi8uLi9zb3VyY2UvdXRpbC9kZWFkbWFuc3N3aXRjaC5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvcHJvY2Vzc2luZy9jYWxsYmFjay5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvcHJvY2Vzc2luZy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25zdGFudHMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L3RhYnMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdXRpbC9mZXRjaC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvc3R5bGVzaGVldC90aGVtZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS91dGlsL3BvcHBlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9zdHlsZXNoZWV0L21lc3NhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvc3R5bGVzaGVldC9ub3RpZnkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L3NwbGl0LXBhbmVsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3BsaXQtcGFuZWwubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L3BhbmVsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvcGFuZWwubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcmVsb2FkLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWNvbnRyb2wubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL3N0eWxlc2hlZXQvcmlwcGxlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL2J1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90eXBlcy9zdGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2J1aWxkbWFwLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGZsb2F0aW5nLXVpK3V0aWxzQDAuMi44L25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aStjb3JlQDEuNi44L25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvY29yZS9kaXN0L2Zsb2F0aW5nLXVpLmNvcmUubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmxvYXRpbmctdWkrdXRpbHNAMC4yLjgvbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS91dGlscy9kaXN0L2Zsb2F0aW5nLXVpLnV0aWxzLmRvbS5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aStkb21AMS42LjEyL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvZG9tL2Rpc3QvZmxvYXRpbmctdWkuZG9tLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3V0aWwvZmxvYXRpbmctdWkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9zZWxlY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc2VsZWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcG9wcGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvcG9wcGVyLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9wb3BwZXItYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvY29uZmlybS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZGF0YXRhYmxlL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGFzb3VyY2UubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2RhdGF0YWJsZS9zdHlsZXNoZWV0L2RhdGFzZXQubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2RhdGF0YWJsZS91dGlsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9zdHlsZXNoZWV0L2Zvcm0ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhc2V0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvZm9ybS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9mb3JtLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9ub2RlLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9idWlsZHRyZWUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC90cmVlLXNlbGVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3RvZ2dsZS1zd2l0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdG9nZ2xlLXN3aXRjaC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9zdHlsZXNoZWV0L2hvc3QubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZWFkeS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9mb2N1c21hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9pbnRlcm5hbC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9kYXRhLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2xpbmsubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvbGluay9zdHlsZXNoZWV0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL3NjcmlwdC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZW1hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvc3R5bGVzaGVldC9jb25maWctbWFuYWdlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9jb25maWctbWFuYWdlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9ob3N0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3N0eWxlc2hlZXQvb3ZlcmxheS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9vdmVybGF5Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L2RldGFpbHMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvY29uc3RhbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC9jb2xsYXBzZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L2NvbGxhcHNlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlscy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9kZXRhaWxzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcmFuZG9taWQubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy91dWlkLm1qcyIsICJwcmVwYXJlLmpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDUuMS4yL25vZGVfbW9kdWxlcy9jaGFpL2NoYWkuanMiLCAiLi4vdXRpbC9jaGFpLWRvbS5tanMiLCAiLi4vdXRpbC9qc2RvbS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9sYXlvdXQvc2xpdC1wYW5lbC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9sYXlvdXQvcGFuZWwubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9yZWxvYWQubWpzIiwgIi4uL3V0aWwvaW50ZXJzZWN0aW9uLW1vY2subWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24ubWpzIiwgIi4uL3V0aWwvcmVzaXplLW9ic2VydmVyLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vc2VsZWN0Lm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vY29uZmlybS1idXR0b24ubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL2J1dHRvbi5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2gubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5Lm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2hvc3QvaG9zdC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ob3N0L292ZXJsYXkubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvaG9zdC91dGlsLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2hvc3QvZGV0YWlscy5tanMiLCAiLi4vY2FzZXMvdGV4dC9mb3JtYXR0ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90ZXh0L2dlbmVyYXRlLXJhbmdlLWNvbXBhcmlzb24tZXhwcmVzc2lvbi5tanMiLCAiLi4vY2FzZXMvdGV4dC91dGlsLm1qcyIsICIuLi8uLi9zb3VyY2UvdGV4dC9icmFja2V0ZWQta2V5LXZhbHVlLWhhc2gubWpzIiwgIi4uL2Nhc2VzL3RleHQvYnJhY2tldGVkLWtleS12YWx1ZS1oYXNoLm1qcyIsICIuLi9jYXNlcy9tYXRoL3JhbmRvbS5tanMiLCAiLi4vY2FzZXMvdXRpbC90cmltc3BhY2VzLm1qcyIsICIuLi9jYXNlcy91dGlsL3Byb2Nlc3NpbmcubWpzIiwgIi4uL2Nhc2VzL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL2NvbXBhcmF0b3IubWpzIiwgIi4uL2Nhc2VzL3V0aWwvY29tcGFyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvZnJlZXplLm1qcyIsICIuLi9jYXNlcy91dGlsL2ZyZWV6ZS5tanMiLCAiLi4vY2FzZXMvdXRpbC9jbG9uZS5tanMiLCAiLi4vLi4vc291cmNlL2xvZ2dpbmcvaGFuZGxlci9jb25zb2xlLm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dlbnRyeS5tanMiLCAiLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZ2VyLm1qcyIsICIuLi9jYXNlcy9sb2dnaW5nL2hhbmRsZXIvY29uc29sZS5tanMiLCAiLi4vY2FzZXMvbG9nZ2luZy9sb2dnZXIubWpzIiwgIi4uL2Nhc2VzL2xvZ2dpbmcvaGFuZGxlci5tanMiLCAiLi4vY2FzZXMvbG9nZ2luZy9sb2dlbnRyeS5tanMiLCAiLi4vLi4vc291cmNlL25ldC93ZWJjb25uZWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2YWJsZXF1ZXVlLm1qcyIsICIuLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QvbWVzc2FnZS5tanMiLCAiLi4vY2FzZXMvbmV0L3dlYmNvbm5lY3QubWpzIiwgIi4uL3V0aWwvd2Vic29ja2V0Lm1qcyIsICIuLi9jYXNlcy9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdmVyc2lvbi5tanMiLCAiLi4vY2FzZXMvbW9uc3Rlci5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9kaW1lbnNpb24ubWpzIiwgIi4uL2Nhc2VzL2RvbS9kaW1lbnNpb24ubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3J1bnRpbWUubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9saW5rL3N0eWxlc2hlZXQubWpzIiwgIi4uL3V0aWwvY2xlYW51cGRvbS5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL2xpbmsubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9zY3JpcHQubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9kYXRhLm1qcyIsICIuLi9jYXNlcy9kb20vdXRpbC9pbml0LW9wdGlvbnMtZnJvbS1hdHRyaWJ1dGVzLm1qcyIsICIuLi9jYXNlcy9kb20vdXRpbC9leHRyYWN0LWtleXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vd29ya2VyL2ZhY3RvcnkubWpzIiwgIi4uL2Nhc2VzL2RvbS93b3JrZXIvZmFjdG9yeS5tanMiLCAiLi4vY2FzZXMvZG9tL3VwZGF0ZXIubWpzIiwgIi4uL2Nhc2VzL2RvbS9sb2NhbGUubWpzIiwgIi4uL2Nhc2VzL2RvbS90aGVtZS5tanMiLCAiLi4vY2FzZXMvZG9tL2N1c3RvbWVsZW1lbnQubWpzIiwgIi4uL2Nhc2VzL2RvbS9mb2N1c21hbmFnZXIubWpzIiwgIi4uL2Nhc2VzL2RvbS9maW5kLm1qcyIsICIuLi9jYXNlcy9kb20vcmVhZHkubWpzIiwgIi4uL2Nhc2VzL2RvbS91dGlsLm1qcyIsICIuLi9jYXNlcy9kb20vY3VzdG9tZWxlbWVudC1pbml0ZnJvbXNjcmlwdGhvc3QubWpzIiwgIi4uL2Nhc2VzL2RvbS9zbG90dGVkLW5vZGVzLm1qcyIsICIuLi9jYXNlcy9kb20vYXR0cmlidXRlcy5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlLm1qcyIsICIuLi9jYXNlcy9kb20vcmVzb3VyY2VtYW5hZ2VyLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2Fzc2VtYmxlci5tanMiLCAiLi4vY2FzZXMvZG9tL2Fzc2VtYmxlci5tanMiLCAiLi4vY2FzZXMvZG9tL2N1c3RvbWNvbnRyb2wubWpzIiwgIi4uL2Nhc2VzL2RvbS90ZW1wbGF0ZS5tanMiLCAiLi4vY2FzZXMvZG9tL2V2ZW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9kb20ubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9kb20ubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzIiwgIi4uL3V0aWwvbG9jYWxzdG9yYWdlLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0Lm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3dlYnNvY2tldC5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS93cml0ZWVycm9yLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL2RhdGEtZmV0Y2gtZXJyb3IubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlLm1qcyIsICIuLi9jYXNlcy9kYXRhL2J1aWxkbWFwLm1qcyIsICIuLi9jYXNlcy9kYXRhL3RyYW5zZm9ybWVyLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RpZmYubWpzIiwgIi4uL2Nhc2VzL2RhdGEvYnVpbGR0cmVlLm1qcyIsICIuLi9jYXNlcy9kYXRhL3BhdGhmaW5kZXIubWpzIiwgIi4uL2Nhc2VzL2RhdGEvcGlwZS5tanMiLCAiLi4vY2FzZXMvZGF0YS9leHRlbmQubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hYnN0cmFjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2ludmFsaWQubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvaW52YWxpZC5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9hYnN0cmFjdG9wZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvYWJzdHJhY3RvcGVyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvb3JvcGVyYXRvci5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9vcm9wZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaXNvYmplY3QubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvaXNvYmplY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hbmRvcGVyYXRvci5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9hbmRvcGVyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2lzYXJyYXkubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvaXNhcnJheS5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC92YWxpZC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvbm9kZWxpc3QubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2Jhc2UubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL21lZGlhdHlwZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdG9rZW5saXN0Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9wcm94eW9ic2VydmVyLm1qcyIsICIuLi9jYXNlcy90eXBlcy92ZXJzaW9uLm1qcyIsICIuLi9jYXNlcy90eXBlcy9nbG9iYWwubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL29ic2VydmVybGlzdC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvaW50ZXJuYWwubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL29ic2VydmFibGVxdWV1ZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvZGF0YXVybC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL2JpbmFyeS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvYmluYXJ5Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9vYnNlcnZlci5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3JlZ2V4Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9yZWdleC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvcmFuZG9taWQubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2lkLm1qcyIsICIuLi9jYXNlcy90eXBlcy91dWlkLm1qcyIsICIuLi9jYXNlcy90eXBlcy9pcy5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdmFsaWRhdGUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3R5cGVvZi5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdW5pcXVlcXVldWUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3N0YWNrLm1qcyIsICIuLi9jYXNlcy90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL25vZGUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3F1ZXVlLm1qcyIsICIuLi9jYXNlcy90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL2Zvcm1hdHRlci5tanMiLCAiLi4vY2FzZXMvaTE4bi9mb3JtYXR0ZXIubWpzIiwgIi4uL2Nhc2VzL2kxOG4vbG9jYWxlLm1qcyIsICIuLi9jYXNlcy9pMThuL3Byb3ZpZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZmV0Y2gubWpzIiwgIi4uL2Nhc2VzL2kxOG4vcHJvdmlkZXJzL2ZldGNoLm1qcyIsICIuLi9jYXNlcy9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanMiLCAiLi4vY2FzZXMvaTE4bi90cmFuc2xhdGlvbnMubWpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQge1xuXHRpc0l0ZXJhYmxlLFxuXHRpc1ByaW1pdGl2ZSxcblx0aXNTeW1ib2wsXG5cdGlzQm9vbGVhbixcblx0aXNTdHJpbmcsXG5cdGlzT2JqZWN0LFxuXHRpc0luc3RhbmNlLFxuXHRpc0FycmF5LFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0ludGVnZXIsXG59O1xuXG4vKipcbiAqIFdpdGggdGhpcyBmdW5jdGlvbiB5b3UgY2FuIGNoZWNrIGlmIGEgdmFsdWUgaXMgaXRlcmFibGUuXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5pc1ByaW1pdGl2ZSgpYC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtMS5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNJdGVyYWJsZSh2YWx1ZSkge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZT8uW1N5bWJvbC5pdGVyYXRvcl0gPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgcHJpbWl0aXZlIChzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgTmFOLCB1bmRlZmluZWQsIG51bGwgb3Igc3ltYm9sKVxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy0yLm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHR2YXIgdHlwZTtcblxuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRpZiAoXG5cdFx0dHlwZSA9PT0gXCJzdHJpbmdcIiB8fFxuXHRcdHR5cGUgPT09IFwibnVtYmVyXCIgfHxcblx0XHR0eXBlID09PSBcImJvb2xlYW5cIiB8fFxuXHRcdHR5cGUgPT09IFwic3ltYm9sXCJcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIHN5bWJvbFxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy0zLm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRyZXR1cm4gXCJzeW1ib2xcIiA9PT0gdHlwZW9mIHZhbHVlID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBib29sZWFuLlxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy00Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcblx0aWYgKHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBzdHJpbmdcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtNS5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBvYmplY3RcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtNi5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcblx0aWYgKGlzQXJyYXkodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblxuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIG9iamVjdCBhbmQgaW5zdGFuY2Ugb2YgaW5zdGFuY2UuXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTcubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0geyp9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGlzSW5zdGFuY2UodmFsdWUsIGluc3RhbmNlKSB7XG5cdGlmICghaXNPYmplY3QodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghaXNGdW5jdGlvbihpbnN0YW5jZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCFpbnN0YW5jZS5oYXNPd25Qcm9wZXJ0eShcInByb3RvdHlwZVwiKSkgcmV0dXJuIGZhbHNlO1xuXHRpZih2YWx1ZSBpbnN0YW5jZW9mIGluc3RhbmNlKSByZXR1cm4gdHJ1ZTtcblxuXHRsZXQgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuXHR3aGlsZSAocHJvdG8gIT0gbnVsbCkge1xuXHRcdGlmIChwcm90byA9PT0gaW5zdGFuY2UucHJvdG90eXBlKSByZXR1cm4gdHJ1ZTtcblx0XHRwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG5cdH1cblx0XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgYXJyYXlcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtOC5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZGUvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvaXNBcnJheVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbHVlKSB7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgZnVuY3Rpb25cbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtOS5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuXHRpZiAoaXNBcnJheSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKGlzUHJpbWl0aXZlKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG5cdGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYW4gaW50ZWdlci5cbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtMTAubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuXHRyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0aXNBcnJheSxcblx0aXNCb29sZWFuLFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0luc3RhbmNlLFxuXHRpc0ludGVnZXIsXG5cdGlzSXRlcmFibGUsXG5cdGlzT2JqZWN0LFxuXHRpc1ByaW1pdGl2ZSxcblx0aXNTdHJpbmcsXG5cdGlzU3ltYm9sLFxufSBmcm9tIFwiLi9pcy5tanNcIjtcblxuZXhwb3J0IHtcblx0dmFsaWRhdGVJdGVyYWJsZSxcblx0dmFsaWRhdGVQcmltaXRpdmUsXG5cdHZhbGlkYXRlQm9vbGVhbixcblx0dmFsaWRhdGVTdHJpbmcsXG5cdHZhbGlkYXRlT2JqZWN0LFxuXHR2YWxpZGF0ZUluc3RhbmNlLFxuXHR2YWxpZGF0ZUFycmF5LFxuXHR2YWxpZGF0ZVN5bWJvbCxcblx0dmFsaWRhdGVGdW5jdGlvbixcblx0dmFsaWRhdGVJbnRlZ2VyLFxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgcHJpbWl0aXZlIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzUHJpbWl0aXZlKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlSXRlcmFibGV9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUl0ZXJhYmxlKCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUl0ZXJhYmxlKFtdKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHByaW1pdGl2ZVxuICogQHNlZSB7QGxpbmsgaXNQcmltaXRpdmV9XG4gKiBAc2VlIHtAbGluayBNb25zdGVyLlR5cGVzLmlzUHJpbWl0aXZlfVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5UeXBlcyNpc1ByaW1pdGl2ZX1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJdGVyYWJsZSh2YWx1ZSkge1xuXHRpZiAoIWlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBpdGVyYWJsZVwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIHByaW1pdGl2ZSB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc1ByaW1pdGl2ZSgpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZVByaW1pdGl2ZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlUHJpbWl0aXZlKCcyJykpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlUHJpbWl0aXZlKFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBwcmltaXRpdmVcbiAqIEBzZWUge0BsaW5rIGlzUHJpbWl0aXZlfVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5UeXBlcy5pc1ByaW1pdGl2ZX1cbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuVHlwZXMjaXNQcmltaXRpdmV9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUHJpbWl0aXZlKHZhbHVlKSB7XG5cdGlmICghaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhIHByaW1pdGl2ZVwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGJvb2xlYW4gdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNCb29sZWFuKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlQm9vbGVhbn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQm9vbGVhbihmYWxzZSkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQm9vbGVhbignMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVCb29sZWFuKFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9ICB2YWx1ZSBpcyBub3QgcHJpbWl0aXZlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQm9vbGVhbih2YWx1ZSkge1xuXHRpZiAoIWlzQm9vbGVhbih2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgYm9vbGVhblwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIHN0cmluZyB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc1N0cmluZygpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZVN0cmluZ30gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlU3RyaW5nKCcyJykpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlU3RyaW5nKFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdHJpbmcodmFsdWUpIHtcblx0aWYgKCFpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgc3RyaW5nXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgb2JqZWN0IHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzT2JqZWN0KCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlT2JqZWN0fSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVPYmplY3Qoe30pKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZU9iamVjdCgnMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVPYmplY3QoW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU9iamVjdCh2YWx1ZSkge1xuXHRpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBvYmplY3RcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBvYmplY3QgaW5zdGFuY2UuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVJbnN0YW5jZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW5zdGFuY2Uoe30sIE9iamVjdCkpIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVJbnN0YW5jZSgnMicsIE9iamVjdCkpIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW5zdGFuY2UoW10sIE9iamVjdCkpIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2ZcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJbnN0YW5jZSh2YWx1ZSwgaW5zdGFuY2UpIHtcblx0aWYgKCFpc0luc3RhbmNlKHZhbHVlLCBpbnN0YW5jZSkpIHtcblx0XHRsZXQgbiA9IFwiXCI7XG5cdFx0aWYgKGlzT2JqZWN0KGluc3RhbmNlKSB8fCBpc0Z1bmN0aW9uKGluc3RhbmNlKSkge1xuXHRcdFx0biA9IGluc3RhbmNlPy5bXCJuYW1lXCJdO1xuXHRcdH1cblxuXHRcdGlmIChuKSB7XG5cdFx0XHRuID0gYCAke259YDtcblx0XHR9XG5cblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Yke259YCk7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBhcnJheSB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc0FycmF5KCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlQXJyYXl9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUFycmF5KCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUFycmF5KFtdKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBhcnJheVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5KHZhbHVlKSB7XG5cdGlmICghaXNBcnJheSh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGFuIGFycmF5XCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgc3ltYm9sIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzU3ltYm9sKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlU3ltYm9sfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVTeW1ib2woJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlU3ltYm9sKCkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gc3ltYm9sXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3ltYm9sKHZhbHVlKSB7XG5cdGlmICghaXNTeW1ib2wodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhbiBzeW1ib2xcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBmdW5jdGlvbiB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc0Z1bmN0aW9uKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlRnVuY3Rpb259IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUZ1bmN0aW9uKCgpPT57fSkpIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVGdW5jdGlvbignMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVGdW5jdGlvbihbXSkpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbih2YWx1ZSkge1xuXHRpZiAoIWlzRnVuY3Rpb24odmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgaXMgYW4gaW50ZWdlci4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNJbnRlZ2VyKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlRnVuY3Rpb259IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUludGVnZXIodHJ1ZSkpIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW50ZWdlcignMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVJbnRlZ2VyKDIpKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJbnRlZ2VyKHZhbHVlKSB7XG5cdGlmICghaXNJbnRlZ2VyKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0dmFsaWRhdGVGdW5jdGlvbixcblx0dmFsaWRhdGVPYmplY3QsXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgZ2V0R2xvYmFsLCBnZXRHbG9iYWxPYmplY3QsIGdldEdsb2JhbEZ1bmN0aW9uIH07XG5cbi8qKlxuICogQHR5cGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cbmxldCBnbG9iYWxSZWZlcmVuY2U7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBlbnZpcm9ubWVudC5cbiAqL1xuKGZ1bmN0aW9uICgpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gZ2xvYmFsVGhpcztcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRnbG9iYWxSZWZlcmVuY2UgPSBzZWxmO1xuXHRcdHJldHVybjtcblx0fSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gd2luZG93O1xuXHRcdHJldHVybjtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCBcIl9fbW9uc3Rlcl9fXCIsIHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHR9KTtcblxuXHRpZiAodHlwZW9mIF9fbW9uc3Rlcl9fID09PSBcIm9iamVjdFwiKSB7XG5cdFx0X19tb25zdGVyX18uZ2xvYmFsVGhpcyA9IF9fbW9uc3Rlcl9fO1xuXHRcdGRlbGV0ZSBPYmplY3QucHJvdG90eXBlLl9fbW9uc3Rlcl9fO1xuXG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gZ2xvYmFsVGhpcztcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0cnkge1xuXHRcdGdsb2JhbFJlZmVyZW5jZSA9IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcblx0fSBjYXRjaCAoZSkge31cblxuXHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBlbnZpcm9ubWVudC5cIik7XG59KSgpO1xuXG4vKipcbiAqIFJldHVybiBnbG9iYWxUaGlzXG4gKlxuICogSWYgZ2xvYmFsVGhpcyBpcyBub3QgYXZhaWxhYmxlLCBpdCB3aWxsIGJlIHBvbHlmaWxsZWRcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQHJldHVybiB7b2JqZWN0fSBnbG9iYWxUaGlzXG4gKi9cbmZ1bmN0aW9uIGdldEdsb2JhbCgpIHtcblx0cmV0dXJuIGdsb2JhbFJlZmVyZW5jZTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gZ2xvYmFsIG9iamVjdCBvciB0aHJvdyBFcnJvclxuICpcbiAqIFlvdSBjYW4gY2FsbCB0aGUgbWV0aG9kIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYE1vbnN0ZXIuVHlwZXMuZ2V0R2xvYmFsT2JqZWN0KClgLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge01vbnN0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL21vbnN0ZXIubWpzJztcbiAqIE1vbnN0ZXIuVHlwZXMuZ2V0R2xvYmFsT2JqZWN0KCdkb2N1bWVudCcpXG4gKiAvLyBcdTIxQTYgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWxzbyBpbnRlZ3JhdGUgdGhpcyBmdW5jdGlvbiBpbmRpdmlkdWFsbHkuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7Z2V0R2xvYmFsT2JqZWN0fSBmcm9tICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BzY2h1a2FpL21vbnN0ZXJAMS4zMC4wL2Rpc3QvbW9kdWxlcy90eXBlcy9nbG9iYWwubWpzJztcbiAqIGdldEdsb2JhbE9iamVjdCgnZG9jdW1lbnQnKVxuICogLy8gXHUyMUE2IHsgfVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb2JqZWN0IGlzIG5vdCBkZWZpbmVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsT2JqZWN0KG5hbWUpIHtcblx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdGNvbnN0IG8gPSBnbG9iYWxSZWZlcmVuY2U/LltuYW1lXTtcblx0aWYgKHR5cGVvZiBvID09PSBcInVuZGVmaW5lZFwiKVxuXHRcdHRocm93IG5ldyBFcnJvcihgdGhlIG9iamVjdCAke25hbWV9IGlzIG5vdCBkZWZpbmVkYCk7XG5cdHZhbGlkYXRlT2JqZWN0KG8pO1xuXHRyZXR1cm4gbztcbn1cblxuLyoqXG4gKiBSZXR1cm4gZ2xvYmFsIGZ1bmN0aW9uIG9yIHRocm93IEVycm9yXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5nZXRHbG9iYWxGdW5jdGlvbigpYC5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtNb25zdGVyfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9tb25zdGVyLm1qcyc7XG4gKiBjb25zb2xlLmxvZyhNb25zdGVyLlR5cGVzLmdldEdsb2JhbEZ1bmN0aW9uKCdwYXJzZUludCcpKSAvLyBcdTIxQTYgZiBwYXJzZUludCgpIHsgfVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFsc28gaW50ZWdyYXRlIHRoaXMgZnVuY3Rpb24gaW5kaXZpZHVhbGx5LlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge2dldEdsb2JhbEZ1bmN0aW9ufSBmcm9tICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BzY2h1a2FpL21vbnN0ZXJAMS4zMC4wL2Rpc3QvbW9kdWxlcy90eXBlcy9nbG9iYWwubWpzJztcbiAqIGNvbnNvbGUubG9nKGdldEdsb2JhbEZ1bmN0aW9uKCdwYXJzZUludCcpKSAvLyBcdTIxQTYgZiBwYXJzZUludCgpIHsgfVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZnVuY3Rpb24gaXMgbm90IGRlZmluZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldEdsb2JhbEZ1bmN0aW9uKG5hbWUpIHtcblx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdGNvbnN0IGYgPSBnbG9iYWxSZWZlcmVuY2U/LltuYW1lXTtcblx0aWYgKHR5cGVvZiBmID09PSBcInVuZGVmaW5lZFwiKVxuXHRcdHRocm93IG5ldyBFcnJvcihgdGhlIGZ1bmN0aW9uICR7bmFtZX0gaXMgbm90IGRlZmluZWRgKTtcblx0dmFsaWRhdGVGdW5jdGlvbihmKTtcblx0cmV0dXJuIGY7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuZXhwb3J0IHsgdHlwZU9mIH07XG5cbi8qKlxuICogVGhlIGJ1aWx0LWluIHR5cGVvZiBtZXRob2QgaXMga25vd24gdG8gaGF2ZSBzb21lIGhpc3RvcmljYWwgd2Vha25lc3Nlcy4gVGhpcyBmdW5jdGlvbiB0cmllcyB0byBwcm92aWRlIGEgYmV0dGVyIGFuZCBtb3JlIGFjY3VyYXRlIHJlc3VsdC5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgcHJpbWl0aXZlXG4gKi9cbmZ1bmN0aW9uIHR5cGVPZih2YWx1ZSkge1xuXHRsZXQgdHlwZSA9IHt9LnRvU3RyaW5nLmNhbGwodmFsdWUpLm1hdGNoKC9cXHMoW2EtekEtWl0rKS8pWzFdO1xuXHRpZiAoXCJPYmplY3RcIiA9PT0gdHlwZSkge1xuXHRcdGNvbnN0IG5hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuXHRcdGlmIChuYW1lKSB7XG5cdFx0XHRyZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3VsdHMgPSAvXihjbGFzc3xmdW5jdGlvbilcXHMrKFxcdyspLy5leGVjKFxuXHRcdFx0dmFsdWUuY29uc3RydWN0b3IudG9TdHJpbmcoKSxcblx0XHQpO1xuXHRcdHR5cGUgPSByZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMiA/IHJlc3VsdHNbMl0gOiBcIlwiO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUudG9Mb3dlckNhc2UoKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHR5cGVPZiB9IGZyb20gXCIuLi90eXBlcy90eXBlb2YubWpzXCI7XG5cbmV4cG9ydCB7IGV4dGVuZCB9O1xuXG4vKipcbiAqIEV4dGVuZCBjb3BpZXMgYWxsIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3JcbiAqIG1vcmUgc291cmNlIG9iamVjdHMgdG8gYSB0YXJnZXQgb2JqZWN0LiBJdCByZXR1cm5zIHRoZSBtb2RpZmllZCB0YXJnZXQgb2JqZWN0LlxuICpcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhcmd1bWVudFxuICogQHRocm93cyB7RXJyb3J9IHR5cGUgbWlzbWF0Y2hcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhcmd1bWVudFxuICogQHBhcmFtIGFyZ3NcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKC4uLmFyZ3MpIHtcblx0bGV0IG87XG5cdGxldCBpO1xuXG5cdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBhcmd1bWVudCAke0pTT04uc3RyaW5naWZ5KGFyZ3NbMF0pfWApO1xuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBhID0gYXJnc1tpXTtcblxuXHRcdGlmICghKGlzT2JqZWN0KGEpIHx8IGlzQXJyYXkoYSkpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGFyZ3VtZW50ICR7SlNPTi5zdHJpbmdpZnkoYSl9YCk7XG5cdFx0fVxuXG5cdFx0aWYgKG8gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0byA9IGE7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGsgaW4gYSkge1xuXHRcdFx0Y29uc3QgdiA9IGE/LltrXTtcblxuXHRcdFx0aWYgKHYgPT09IG8/LltrXSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKChpc09iamVjdCh2KSAmJiB0eXBlT2YodikgPT09IFwib2JqZWN0XCIpIHx8IGlzQXJyYXkodikpIHtcblx0XHRcdFx0aWYgKG9ba10gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChpc0FycmF5KHYpKSB7XG5cdFx0XHRcdFx0XHRvW2tdID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9ba10gPSB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVPZihvW2tdKSAhPT0gdHlwZU9mKHYpKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRcdGB0eXBlIG1pc21hdGNoOiAke0pTT04uc3RyaW5naWZ5KG9ba10pfSgke3R5cGVPZihcblx0XHRcdFx0XHRcdFx0XHRvW2tdLFxuXHRcdFx0XHRcdFx0XHQpfSkgIT0gJHtKU09OLnN0cmluZ2lmeSh2KX0oJHt0eXBlT2Yodil9KWAsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc0FycmF5KG9ba10pKSB7XG5cdFx0XHRcdFx0b1trXSA9IFtdO1xuXHRcdFx0XHRcdG9ba10ucHVzaCguLi52KTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG9ba10gPSBleHRlbmQob1trXSwgdik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoaXNBcnJheShvKSkge1xuXHRcdFx0XHRcdG8ucHVzaCh2KTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvW2tdID0gdjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbztcbn1cbiIsICIvLyBodHRwOi8vd3d3LnJhamRlZXBkLmNvbS9hcnRpY2xlcy9jaHJvbWUvbG9jYWxzdHJnL0xvY2FsU3RvcmFnZVNhbXBsZS5odG1cblxuLy8gTk9URTpcbi8vIHRoaXMgdmFyaWVzIGZyb20gYWN0dWFsIGxvY2FsU3RvcmFnZSBpbiBzb21lIHN1YnRsZSB3YXlzXG5cbi8vIGFsc28sIHRoZXJlIGlzIG5vIHBlcnNpc3RlbmNlXG4vLyBUT0RPIHBlcnNpc3RcbihmdW5jdGlvbiAoKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5cbiAgZnVuY3Rpb24gU3RvcmFnZShwYXRoLCBvcHRzKSB7XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgdmFyIGRiO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfX19wcml2X2JrX19fJywge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgcGF0aDogcGF0aFxuICAgICAgfVxuICAgICwgd3JpdGFibGU6IGZhbHNlXG4gICAgLCBlbnVtZXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfX19wcml2X3N0cmljdF9fXycsIHtcbiAgICAgIHZhbHVlOiAhIW9wdHMuc3RyaWN0XG4gICAgLCB3cml0YWJsZTogZmFsc2VcbiAgICAsIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19fX3ByaXZfd3NfX18nLCB7XG4gICAgICB2YWx1ZTogb3B0cy53cyB8fCAnICAnXG4gICAgLCB3cml0YWJsZTogZmFsc2VcbiAgICAsIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgZGIgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoKSk7XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBkYiA9IHt9O1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKGRiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHRoaXNba2V5XSA9IGRiW2tleV07XG4gICAgfSwgdGhpcyk7XG4gIH1cblxuICBTdG9yYWdlLnByb3RvdHlwZS5nZXRJdGVtID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGlmICh0aGlzLl9fX3ByaXZfc3RyaWN0X19fKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcodGhpc1trZXldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIFN0b3JhZ2UucHJvdG90eXBlLnNldEl0ZW0gPSBmdW5jdGlvbiAoa2V5LCB2YWwpIHtcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXNba2V5XSA9IG51bGw7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9fX3ByaXZfc3RyaWN0X19fKSB7XG4gICAgICB0aGlzW2tleV0gPSBTdHJpbmcodmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trZXldID0gdmFsO1xuICAgIH1cbiAgICB0aGlzLl9fX3NhdmVfX18oKTtcbiAgfTtcblxuICBTdG9yYWdlLnByb3RvdHlwZS5yZW1vdmVJdGVtID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgdGhpcy5fX19zYXZlX19fKCk7XG4gIH07XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIC8vIGZpbHRlcnMgb3V0IHByb3RvdHlwZSBrZXlzXG4gICAgT2JqZWN0LmtleXMoc2VsZikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBzZWxmW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICBkZWxldGUgc2VsZltrZXldO1xuICAgIH0pO1xuICB9O1xuXG4gIFN0b3JhZ2UucHJvdG90eXBlLmtleSA9IGZ1bmN0aW9uIChpKSB7XG4gICAgaSA9IGkgfHwgMDtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcylbaV07XG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0b3JhZ2UucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcykubGVuZ3RoO1xuICAgIH1cbiAgfSk7XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUuX19fc2F2ZV9fXyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBpZiAoIXRoaXMuX19fcHJpdl9ia19fXy5wYXRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX19fcHJpdl9ia19fXy5sb2NrKSB7XG4gICAgICB0aGlzLl9fX3ByaXZfYmtfX18ud2FpdCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fX19wcml2X2JrX19fLmxvY2sgPSB0cnVlO1xuICAgIGZzLndyaXRlRmlsZShcbiAgICAgIHRoaXMuX19fcHJpdl9ia19fXy5wYXRoXG4gICAgLCBKU09OLnN0cmluZ2lmeSh0aGlzLCBudWxsLCB0aGlzLl9fX3ByaXZfd3NfX18pXG4gICAgLCAndXRmOCdcbiAgICAsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBzZWxmLl9fX3ByaXZfYmtfX18ubG9jayA9IGZhbHNlO1xuICAgICAgaWYgKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHdyaXRlIHRvIGRhdGFiYXNlJywgc2VsZi5fX19wcml2X2JrX19fLnBhdGgpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc2VsZi5fX19wcml2X2JrX19fLndhaXQpIHtcbiAgICAgICAgc2VsZi5fX19wcml2X2JrX19fLndhaXQgPSBmYWxzZTtcbiAgICAgICAgc2VsZi5fX19zYXZlX19fKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0b3JhZ2UsICdjcmVhdGUnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIChwYXRoLCBvcHRzKSB7XG4gICAgICByZXR1cm4gbmV3IFN0b3JhZ2UocGF0aCwgb3B0cyk7XG4gICAgfVxuICAsIHdyaXRhYmxlOiBmYWxzZVxuICAsIGVudW1lcmFibGU6IGZhbHNlXG4gIH0pO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gU3RvcmFnZTtcbn0oKSk7XG4iLCAiKGZ1bmN0aW9uIChleHBvcnRzKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgY29uc3QgcmVmTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB2YWxpZGl0eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgaGlkZGVuSW5wdXRNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IGludGVybmFsc01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2VNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IGZvcm1zTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBzaGFkb3dIb3N0c01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgZm9ybUVsZW1lbnRzTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCByZWZWYWx1ZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdXBncmFkZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3Qgc2hhZG93Um9vdE1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdmFsaWRhdGlvbkFuY2hvck1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgZG9jdW1lbnRGcmFnbWVudE1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgY29ubmVjdGVkQ2FsbGJhY2tNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHZhbGlkaXR5VXBncmFkZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICBjb25zdCBhb20gPSB7XG4gICAgICAgIGFyaWFBdG9taWM6ICdhcmlhLWF0b21pYycsXG4gICAgICAgIGFyaWFBdXRvQ29tcGxldGU6ICdhcmlhLWF1dG9jb21wbGV0ZScsXG4gICAgICAgIGFyaWFCdXN5OiAnYXJpYS1idXN5JyxcbiAgICAgICAgYXJpYUNoZWNrZWQ6ICdhcmlhLWNoZWNrZWQnLFxuICAgICAgICBhcmlhQ29sQ291bnQ6ICdhcmlhLWNvbGNvdW50JyxcbiAgICAgICAgYXJpYUNvbEluZGV4OiAnYXJpYS1jb2xpbmRleCcsXG4gICAgICAgIGFyaWFDb2xJbmRleFRleHQ6ICdhcmlhLWNvbGluZGV4dGV4dCcsXG4gICAgICAgIGFyaWFDb2xTcGFuOiAnYXJpYS1jb2xzcGFuJyxcbiAgICAgICAgYXJpYUN1cnJlbnQ6ICdhcmlhLWN1cnJlbnQnLFxuICAgICAgICBhcmlhRGVzY3JpcHRpb246ICdhcmlhLWRlc2NyaXB0aW9uJyxcbiAgICAgICAgYXJpYURpc2FibGVkOiAnYXJpYS1kaXNhYmxlZCcsXG4gICAgICAgIGFyaWFFeHBhbmRlZDogJ2FyaWEtZXhwYW5kZWQnLFxuICAgICAgICBhcmlhSGFzUG9wdXA6ICdhcmlhLWhhc3BvcHVwJyxcbiAgICAgICAgYXJpYUhpZGRlbjogJ2FyaWEtaGlkZGVuJyxcbiAgICAgICAgYXJpYUludmFsaWQ6ICdhcmlhLWludmFsaWQnLFxuICAgICAgICBhcmlhS2V5U2hvcnRjdXRzOiAnYXJpYS1rZXlzaG9ydGN1dHMnLFxuICAgICAgICBhcmlhTGFiZWw6ICdhcmlhLWxhYmVsJyxcbiAgICAgICAgYXJpYUxldmVsOiAnYXJpYS1sZXZlbCcsXG4gICAgICAgIGFyaWFMaXZlOiAnYXJpYS1saXZlJyxcbiAgICAgICAgYXJpYU1vZGFsOiAnYXJpYS1tb2RhbCcsXG4gICAgICAgIGFyaWFNdWx0aUxpbmU6ICdhcmlhLW11bHRpbGluZScsXG4gICAgICAgIGFyaWFNdWx0aVNlbGVjdGFibGU6ICdhcmlhLW11bHRpc2VsZWN0YWJsZScsXG4gICAgICAgIGFyaWFPcmllbnRhdGlvbjogJ2FyaWEtb3JpZW50YXRpb24nLFxuICAgICAgICBhcmlhUGxhY2Vob2xkZXI6ICdhcmlhLXBsYWNlaG9sZGVyJyxcbiAgICAgICAgYXJpYVBvc0luU2V0OiAnYXJpYS1wb3NpbnNldCcsXG4gICAgICAgIGFyaWFQcmVzc2VkOiAnYXJpYS1wcmVzc2VkJyxcbiAgICAgICAgYXJpYVJlYWRPbmx5OiAnYXJpYS1yZWFkb25seScsXG4gICAgICAgIGFyaWFSZWxldmFudDogJ2FyaWEtcmVsZXZhbnQnLFxuICAgICAgICBhcmlhUmVxdWlyZWQ6ICdhcmlhLXJlcXVpcmVkJyxcbiAgICAgICAgYXJpYVJvbGVEZXNjcmlwdGlvbjogJ2FyaWEtcm9sZWRlc2NyaXB0aW9uJyxcbiAgICAgICAgYXJpYVJvd0NvdW50OiAnYXJpYS1yb3djb3VudCcsXG4gICAgICAgIGFyaWFSb3dJbmRleDogJ2FyaWEtcm93aW5kZXgnLFxuICAgICAgICBhcmlhUm93SW5kZXhUZXh0OiAnYXJpYS1yb3dpbmRleHRleHQnLFxuICAgICAgICBhcmlhUm93U3BhbjogJ2FyaWEtcm93c3BhbicsXG4gICAgICAgIGFyaWFTZWxlY3RlZDogJ2FyaWEtc2VsZWN0ZWQnLFxuICAgICAgICBhcmlhU2V0U2l6ZTogJ2FyaWEtc2V0c2l6ZScsXG4gICAgICAgIGFyaWFTb3J0OiAnYXJpYS1zb3J0JyxcbiAgICAgICAgYXJpYVZhbHVlTWF4OiAnYXJpYS12YWx1ZW1heCcsXG4gICAgICAgIGFyaWFWYWx1ZU1pbjogJ2FyaWEtdmFsdWVtaW4nLFxuICAgICAgICBhcmlhVmFsdWVOb3c6ICdhcmlhLXZhbHVlbm93JyxcbiAgICAgICAgYXJpYVZhbHVlVGV4dDogJ2FyaWEtdmFsdWV0ZXh0JyxcbiAgICAgICAgcm9sZTogJ3JvbGUnXG4gICAgfTtcbiAgICBjb25zdCBpbml0QW9tID0gKHJlZiwgaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiBhb20pIHtcbiAgICAgICAgICAgIGludGVybmFsc1trZXldID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBjbG9zdXJlVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IGFvbVtrZXldO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGludGVybmFscywga2V5LCB7XG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvc3VyZVZhbHVlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb3N1cmVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVNYXAuc2V0KHJlZiwgaW50ZXJuYWxzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGluaXROb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChub2RlKTtcbiAgICAgICAgY29uc3QgeyBmb3JtIH0gPSBpbnRlcm5hbHM7XG4gICAgICAgIGluaXRGb3JtKG5vZGUsIGZvcm0sIGludGVybmFscyk7XG4gICAgICAgIGluaXRMYWJlbHMobm9kZSwgaW50ZXJuYWxzLmxhYmVscyk7XG4gICAgfVxuICAgIGNvbnN0IHdhbGtGaWVsZHNldCA9IChub2RlLCBmaXJzdFJlbmRlciA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobm9kZSwgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIHtcbiAgICAgICAgICAgIGFjY2VwdE5vZGUobm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbHNNYXAuaGFzKG5vZGUpID9cbiAgICAgICAgICAgICAgICAgICAgTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUIDogTm9kZUZpbHRlci5GSUxURVJfU0tJUDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgIGNvbnN0IGlzQ2FsbE5lY2Vzc2FyeSA9ICghZmlyc3RSZW5kZXIgfHwgbm9kZS5kaXNhYmxlZCk7XG4gICAgICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudC5mb3JtRGlzYWJsZWRDYWxsYmFjayAmJiBpc0NhbGxOZWNlc3NhcnkpIHtcbiAgICAgICAgICAgICAgICBzZXREaXNhYmxlZChjdXJyZW50LCBub2RlLmRpc2FibGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSB3YWxrZXIubmV4dE5vZGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGlzYWJsZWRPck5hbWVPYnNlcnZlckNvbmZpZyA9IHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbJ2Rpc2FibGVkJywgJ25hbWUnXSB9O1xuICAgIGNvbnN0IGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXIgPSBtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkgPyBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zTGlzdCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG11dGF0aW9uLnRhcmdldDtcbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBzZXREaXNhYmxlZCh0YXJnZXQsIHRhcmdldC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXJnZXQubG9jYWxOYW1lID09PSAnZmllbGRzZXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhbGtGaWVsZHNldCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnbmFtZScpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZWZWYWx1ZU1hcC5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxzLnNldEZvcm1WYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkgOiB7fTtcbiAgICBmdW5jdGlvbiBvYnNlcnZlckNhbGxiYWNrKG11dGF0aW9uTGlzdCkge1xuICAgICAgICBtdXRhdGlvbkxpc3QuZm9yRWFjaChtdXRhdGlvblJlY29yZCA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGFkZGVkTm9kZXMsIHJlbW92ZWROb2RlcyB9ID0gbXV0YXRpb25SZWNvcmQ7XG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IEFycmF5LmZyb20oYWRkZWROb2Rlcyk7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkID0gQXJyYXkuZnJvbShyZW1vdmVkTm9kZXMpO1xuICAgICAgICAgICAgYWRkZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaWYgKGludGVybmFsc01hcC5oYXMobm9kZSkgJiYgbm9kZS5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBpbml0Tm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVwZ3JhZGVNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IHVwZ3JhZGVNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhb21LZXlzID0gT2JqZWN0LmtleXMoYW9tKTtcbiAgICAgICAgICAgICAgICAgICAgYW9tS2V5c1xuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihrZXkgPT4gaW50ZXJuYWxzW2tleV0gIT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYW9tW2tleV0sIGludGVybmFsc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVNYXAuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFsaWRpdHlVcGdyYWRlTWFwLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSB2YWxpZGl0eVVwZ3JhZGVNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnaW50ZXJuYWxzLXZhbGlkJywgaW50ZXJuYWxzLnZhbGlkaXR5LnZhbGlkLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnaW50ZXJuYWxzLWludmFsaWQnLCAoIWludGVybmFscy52YWxpZGl0eS52YWxpZCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdhcmlhLWludmFsaWQnLCAoIWludGVybmFscy52YWxpZGl0eS52YWxpZCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkaXR5VXBncmFkZU1hcC5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChub2RlLmxvY2FsTmFtZSA9PT0gJ2Zvcm0nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1FbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobm9kZSwgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdE5vZGUobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW50ZXJuYWxzTWFwLmhhcyhub2RlKSAmJiBub2RlLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddICYmICEoZm9ybUVsZW1lbnRzICYmIGZvcm1FbGVtZW50cy5oYXMobm9kZSkpKSA/IE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVCA6IE5vZGVGaWx0ZXIuRklMVEVSX1NLSVA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IHdhbGtlci5uZXh0Tm9kZSgpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE5vZGUoY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWxOYW1lID09PSAnZmllbGRzZXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXIub2JzZXJ2ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoZGlzYWJsZWRPck5hbWVPYnNlcnZlciwgbm9kZSwgZGlzYWJsZWRPck5hbWVPYnNlcnZlckNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIHdhbGtGaWVsZHNldChub2RlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlbW92ZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBpbnRlcm5hbHNNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHMgJiYgaGlkZGVuSW5wdXRNYXAuZ2V0KGludGVybmFscykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSGlkZGVuSW5wdXRzKGludGVybmFscyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzaGFkb3dIb3N0c01hcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBzaGFkb3dIb3N0c01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZyYWdtZW50T2JzZXJ2ZXJDYWxsYmFjayhtdXRhdGlvbkxpc3QpIHtcbiAgICAgICAgbXV0YXRpb25MaXN0LmZvckVhY2gobXV0YXRpb24gPT4ge1xuICAgICAgICAgICAgY29uc3QgeyByZW1vdmVkTm9kZXMgfSA9IG11dGF0aW9uO1xuICAgICAgICAgICAgcmVtb3ZlZE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBkb2N1bWVudEZyYWdtZW50TWFwLmdldChtdXRhdGlvbi50YXJnZXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHNNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVJbnRlcm5hbHMobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZGVmZXJVcGdyYWRlID0gKGZyYWdtZW50KSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnJhZ21lbnRPYnNlcnZlckNhbGxiYWNrKTtcbiAgICAgICAgaWYgKCgoX2EgPSB3aW5kb3cgPT09IG51bGwgfHwgd2luZG93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW5kb3cuU2hhZHlET00pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pblVzZSkgJiZcbiAgICAgICAgICAgIGZyYWdtZW50Lm1vZGUgJiZcbiAgICAgICAgICAgIGZyYWdtZW50Lmhvc3QpIHtcbiAgICAgICAgICAgIGZyYWdtZW50ID0gZnJhZ21lbnQuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICAoX2IgPSBvYnNlcnZlci5vYnNlcnZlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChvYnNlcnZlciwgZnJhZ21lbnQsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgICAgICBkb2N1bWVudEZyYWdtZW50TWFwLnNldChmcmFnbWVudCwgb2JzZXJ2ZXIpO1xuICAgIH07XG4gICAgbXV0YXRpb25PYnNlcnZlckV4aXN0cygpID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIob2JzZXJ2ZXJDYWxsYmFjaykgOiB7fTtcbiAgICBjb25zdCBvYnNlcnZlckNvbmZpZyA9IHtcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0IHNldERpc2FibGVkID0gKHJlZiwgZGlzYWJsZWQpID0+IHtcbiAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZSgnaW50ZXJuYWxzLWRpc2FibGVkJywgZGlzYWJsZWQpO1xuICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVmLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWYuZm9ybURpc2FibGVkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJlZi5mb3JtRGlzYWJsZWRDYWxsYmFjay5hcHBseShyZWYsIFtkaXNhYmxlZF0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVIaWRkZW5JbnB1dHMgPSAoaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGNvbnN0IGhpZGRlbklucHV0cyA9IGhpZGRlbklucHV0TWFwLmdldChpbnRlcm5hbHMpO1xuICAgICAgICBoaWRkZW5JbnB1dHMuZm9yRWFjaChoaWRkZW5JbnB1dCA9PiB7XG4gICAgICAgICAgICBoaWRkZW5JbnB1dC5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGhpZGRlbklucHV0TWFwLnNldChpbnRlcm5hbHMsIFtdKTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUhpZGRlbklucHV0ID0gKHJlZiwgaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgaW5wdXQudHlwZSA9ICdoaWRkZW4nO1xuICAgICAgICBpbnB1dC5uYW1lID0gcmVmLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xuICAgICAgICByZWYuYWZ0ZXIoaW5wdXQpO1xuICAgICAgICBoaWRkZW5JbnB1dE1hcC5nZXQoaW50ZXJuYWxzKS5wdXNoKGlucHV0KTtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH07XG4gICAgY29uc3QgaW5pdFJlZiA9IChyZWYsIGludGVybmFscykgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGhpZGRlbklucHV0TWFwLnNldChpbnRlcm5hbHMsIFtdKTtcbiAgICAgICAgKF9hID0gZGlzYWJsZWRPck5hbWVPYnNlcnZlci5vYnNlcnZlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChkaXNhYmxlZE9yTmFtZU9ic2VydmVyLCByZWYsIGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXJDb25maWcpO1xuICAgIH07XG4gICAgY29uc3QgaW5pdExhYmVscyA9IChyZWYsIGxhYmVscykgPT4ge1xuICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgQXJyYXkuZnJvbShsYWJlbHMpLmZvckVhY2gobGFiZWwgPT4gbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZWYuY2xpY2suYmluZChyZWYpKSk7XG4gICAgICAgICAgICBsZXQgZmlyc3RMYWJlbElkID0gbGFiZWxzWzBdLmlkO1xuICAgICAgICAgICAgaWYgKCFsYWJlbHNbMF0uaWQpIHtcbiAgICAgICAgICAgICAgICBmaXJzdExhYmVsSWQgPSBgJHtsYWJlbHNbMF0uaHRtbEZvcn1fTGFiZWxgO1xuICAgICAgICAgICAgICAgIGxhYmVsc1swXS5pZCA9IGZpcnN0TGFiZWxJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGZpcnN0TGFiZWxJZCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldEZvcm1WYWxpZGl0eSA9IChmb3JtKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUNvbnRyb2xWYWxpZGl0eSA9IEFycmF5LmZyb20oZm9ybS5lbGVtZW50cylcbiAgICAgICAgICAgIC5maWx0ZXIoKGVsZW1lbnQpID0+ICFlbGVtZW50LnRhZ05hbWUuaW5jbHVkZXMoJy0nKSAmJiBlbGVtZW50LnZhbGlkaXR5KVxuICAgICAgICAgICAgLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWxpZGl0eS52YWxpZCk7XG4gICAgICAgIGNvbnN0IHBvbHlmaWxsZWRFbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZm9ybSkgfHwgW107XG4gICAgICAgIGNvbnN0IHBvbHlmaWxsZWRWYWxpZGl0eSA9IEFycmF5LmZyb20ocG9seWZpbGxlZEVsZW1lbnRzKVxuICAgICAgICAgICAgLmZpbHRlcihjb250cm9sID0+IGNvbnRyb2wuaXNDb25uZWN0ZWQpXG4gICAgICAgICAgICAubWFwKChjb250cm9sKSA9PiBpbnRlcm5hbHNNYXAuZ2V0KGNvbnRyb2wpLnZhbGlkaXR5LnZhbGlkKTtcbiAgICAgICAgY29uc3QgaGFzSW52YWxpZCA9IFsuLi5uYXRpdmVDb250cm9sVmFsaWRpdHksIC4uLnBvbHlmaWxsZWRWYWxpZGl0eV0uaW5jbHVkZXMoZmFsc2UpO1xuICAgICAgICBmb3JtLnRvZ2dsZUF0dHJpYnV0ZSgnaW50ZXJuYWxzLWludmFsaWQnLCBoYXNJbnZhbGlkKTtcbiAgICAgICAgZm9ybS50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy12YWxpZCcsICFoYXNJbnZhbGlkKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1JbnB1dENhbGxiYWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHNldEZvcm1WYWxpZGl0eShmaW5kUGFyZW50Rm9ybShldmVudC50YXJnZXQpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1DaGFuZ2VDYWxsYmFjayA9IChldmVudCkgPT4ge1xuICAgICAgICBzZXRGb3JtVmFsaWRpdHkoZmluZFBhcmVudEZvcm0oZXZlbnQudGFyZ2V0KSk7XG4gICAgfTtcbiAgICBjb25zdCB3aXJlU3VibWl0TG9naWMgPSAoZm9ybSkgPT4ge1xuICAgICAgICBjb25zdCBzdWJtaXRCdXR0b25TZWxlY3RvciA9IFsnYnV0dG9uW3R5cGU9c3VibWl0XScsICdpbnB1dFt0eXBlPXN1Ym1pdF0nLCAnYnV0dG9uOm5vdChbdHlwZV0pJ11cbiAgICAgICAgICAgIC5tYXAoc2VsID0+IGAke3NlbH06bm90KFtkaXNhYmxlZF0pYClcbiAgICAgICAgICAgIC5tYXAoc2VsID0+IGAke3NlbH06bm90KFtmb3JtXSkke2Zvcm0uaWQgPyBgLCR7c2VsfVtmb3JtPScke2Zvcm0uaWR9J11gIDogJyd9YClcbiAgICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICBpZiAodGFyZ2V0LmNsb3Nlc3Qoc3VibWl0QnV0dG9uU2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBmb3JtRWxlbWVudHNNYXAuZ2V0KGZvcm0pO1xuICAgICAgICAgICAgICAgIGlmIChmb3JtLm5vVmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20oZWxlbWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGl0eUxpc3QgPSBub2Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxzLnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRpdHlMaXN0LmluY2x1ZGVzKGZhbHNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmb3JtUmVzZXRDYWxsYmFjayA9IChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLnNpemUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY29uc3RydWN0b3IuZm9ybUFzc29jaWF0ZWQgJiYgZWxlbWVudC5mb3JtUmVzZXRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZvcm1SZXNldENhbGxiYWNrLmFwcGx5KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbml0Rm9ybSA9IChyZWYsIGZvcm0sIGludGVybmFscykgPT4ge1xuICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgY29uc3QgZm9ybUVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChmb3JtKTtcbiAgICAgICAgICAgIGlmIChmb3JtRWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBmb3JtRWxlbWVudHMuYWRkKHJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbml0U2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIGluaXRTZXQuYWRkKHJlZik7XG4gICAgICAgICAgICAgICAgZm9ybUVsZW1lbnRzTWFwLnNldChmb3JtLCBpbml0U2V0KTtcbiAgICAgICAgICAgICAgICB3aXJlU3VibWl0TG9naWMoZm9ybSk7XG4gICAgICAgICAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdyZXNldCcsIGZvcm1SZXNldENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZm9ybUlucHV0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZm9ybUNoYW5nZUNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcm1zTWFwLnNldChmb3JtLCB7IHJlZiwgaW50ZXJuYWxzIH0pO1xuICAgICAgICAgICAgaWYgKHJlZi5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSAmJiByZWYuZm9ybUFzc29jaWF0ZWRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWYuZm9ybUFzc29jaWF0ZWRDYWxsYmFjay5hcHBseShyZWYsIFtmb3JtXSk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRGb3JtVmFsaWRpdHkoZm9ybSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXJlbnRGb3JtID0gKGVsZW0pID0+IHtcbiAgICAgICAgbGV0IHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQudGFnTmFtZSAhPT0gJ0ZPUk0nKSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBmaW5kUGFyZW50Rm9ybShwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfTtcbiAgICBjb25zdCB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQgPSAocmVmLCBtZXNzYWdlLCBFcnJvclR5cGUgPSBET01FeGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKCFyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvclR5cGUobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG92ZXJyaWRlRm9ybU1ldGhvZCA9IChmb3JtLCByZXR1cm5WYWx1ZSwgbWV0aG9kKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChmb3JtKTtcbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLnNpemUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IGludGVybmFsc1ttZXRob2RdKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZ3JhZGVJbnRlcm5hbHMgPSAocmVmKSA9PiB7XG4gICAgICAgIGlmIChyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQocmVmKTtcbiAgICAgICAgICAgIGNvbnN0IHsgbGFiZWxzLCBmb3JtIH0gPSBpbnRlcm5hbHM7XG4gICAgICAgICAgICBpbml0TGFiZWxzKHJlZiwgbGFiZWxzKTtcbiAgICAgICAgICAgIGluaXRGb3JtKHJlZiwgZm9ybSwgaW50ZXJuYWxzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gbXV0YXRpb25PYnNlcnZlckV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcbiAgICB9XG5cbiAgICBjbGFzcyBWYWxpZGl0eVN0YXRlIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLmJhZElucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnBhdHRlcm5NaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yYW5nZU92ZXJmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJhbmdlVW5kZXJmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnN0ZXBNaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b29Mb25nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRvb1Nob3J0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnR5cGVNaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlTWlzc2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgT2JqZWN0LnNlYWwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc2V0VmFsaWQgPSAodmFsaWRpdHlPYmplY3QpID0+IHtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QuYmFkSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QuY3VzdG9tRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QucGF0dGVybk1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnJhbmdlT3ZlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QucmFuZ2VVbmRlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3Quc3RlcE1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnRvb0xvbmcgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudG9vU2hvcnQgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudHlwZU1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudmFsdWVNaXNzaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB2YWxpZGl0eU9iamVjdDtcbiAgICB9O1xuICAgIGNvbnN0IHJlY29uY2lsZVZhbGlkaXR5ID0gKHZhbGlkaXR5T2JqZWN0LCBuZXdTdGF0ZSwgZm9ybSkgPT4ge1xuICAgICAgICB2YWxpZGl0eU9iamVjdC52YWxpZCA9IGlzVmFsaWQobmV3U3RhdGUpO1xuICAgICAgICBPYmplY3Qua2V5cyhuZXdTdGF0ZSkuZm9yRWFjaChrZXkgPT4gdmFsaWRpdHlPYmplY3Rba2V5XSA9IG5ld1N0YXRlW2tleV0pO1xuICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgc2V0Rm9ybVZhbGlkaXR5KGZvcm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZGl0eU9iamVjdDtcbiAgICB9O1xuICAgIGNvbnN0IGlzVmFsaWQgPSAodmFsaWRpdHlTdGF0ZSkgPT4ge1xuICAgICAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdmFsaWRpdHlTdGF0ZSkge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3ZhbGlkJyAmJiB2YWxpZGl0eVN0YXRlW2tleV0gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGN1c3RvbVN0YXRlTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBmdW5jdGlvbiBhZGRTdGF0ZShyZWYsIHN0YXRlTmFtZSkge1xuICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKHN0YXRlTmFtZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZWYucGFydCkge1xuICAgICAgICAgICAgcmVmLnBhcnQuYWRkKHN0YXRlTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xhc3MgQ3VzdG9tU3RhdGVTZXQgZXh0ZW5kcyBTZXQge1xuICAgICAgICBzdGF0aWMgZ2V0IGlzUG9seWZpbGxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKHJlZikge1xuICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgIGlmICghcmVmIHx8ICFyZWYudGFnTmFtZSB8fCByZWYudGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBjb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VzdG9tU3RhdGVNYXAuc2V0KHRoaXMsIHJlZik7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKHN0YXRlKSB7XG4gICAgICAgICAgICBpZiAoIS9eLS0vLnRlc3Qoc3RhdGUpIHx8IHR5cGVvZiBzdGF0ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGBGYWlsZWQgdG8gZXhlY3V0ZSAnYWRkJyBvbiAnQ3VzdG9tU3RhdGVTZXQnOiBUaGUgc3BlY2lmaWVkIHZhbHVlICR7c3RhdGV9IG11c3Qgc3RhcnQgd2l0aCAnLS0nLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VwZXIuYWRkKHN0YXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IGN1c3RvbVN0YXRlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlTmFtZSA9IGBzdGF0ZSR7c3RhdGV9YDtcbiAgICAgICAgICAgIGlmIChyZWYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBhZGRTdGF0ZShyZWYsIHN0YXRlTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUocmVmLCBzdGF0ZU5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBjbGVhcigpIHtcbiAgICAgICAgICAgIGZvciAobGV0IFtlbnRyeV0gb2YgdGhpcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZShlbnRyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdXBlci5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZShzdGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VwZXIuZGVsZXRlKHN0YXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IGN1c3RvbVN0YXRlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGlmIChyZWYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKGBzdGF0ZSR7c3RhdGV9YCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChyZWYucGFydCkge1xuICAgICAgICAgICAgICAgICAgICByZWYucGFydC5yZW1vdmUoYHN0YXRlJHtzdGF0ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZShgc3RhdGUke3N0YXRlfWAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5wYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYucGFydC5yZW1vdmUoYHN0YXRlJHtzdGF0ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICAgICAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICAgICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cztcbiAgICBjbGFzcyBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbiB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBfSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25fZWxlbWVudHMuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cywgZWxlbWVudHMsIFwiZlwiKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnbmFtZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ25hbWUnKV0gPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cywgXCJmXCIpLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBbKF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cyA9IG5ldyBXZWFrTWFwKCksIFN5bWJvbC5pdGVyYXRvcildKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uX2VsZW1lbnRzLCBcImZcIilbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0oaSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbaV0gPT0gbnVsbCA/IG51bGwgOiB0aGlzW2ldO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVkSXRlbShuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tuYW1lXSA9PSBudWxsID8gbnVsbCA6IHRoaXNbbmFtZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXRjaEZvcm1Qcm90b3R5cGUoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrVmFsaWRpdHkgPSBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLmNoZWNrVmFsaWRpdHk7XG4gICAgICAgIEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuY2hlY2tWYWxpZGl0eSA9IGNoZWNrVmFsaWRpdHlPdmVycmlkZTtcbiAgICAgICAgY29uc3QgcmVwb3J0VmFsaWRpdHkgPSBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnJlcG9ydFZhbGlkaXR5O1xuICAgICAgICBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnJlcG9ydFZhbGlkaXR5ID0gcmVwb3J0VmFsaWRpdHlPdmVycmlkZTtcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tWYWxpZGl0eU92ZXJyaWRlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IGNoZWNrVmFsaWRpdHkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVGb3JtTWV0aG9kKHRoaXMsIHJldHVyblZhbHVlLCAnY2hlY2tWYWxpZGl0eScpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlcG9ydFZhbGlkaXR5T3ZlcnJpZGUoLi4uYXJncykge1xuICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gcmVwb3J0VmFsaWRpdHkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVGb3JtTWV0aG9kKHRoaXMsIHJldHVyblZhbHVlLCAncmVwb3J0VmFsaWRpdHknKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGdldCB9ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLCAnZWxlbWVudHMnKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUsICdlbGVtZW50cycsIHtcbiAgICAgICAgICAgIGdldCguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBnZXQuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2x5ZmlsbGVkRWxlbWVudHMgPSBBcnJheS5mcm9tKGZvcm1FbGVtZW50c01hcC5nZXQodGhpcykgfHwgW10pO1xuICAgICAgICAgICAgICAgIGlmIChwb2x5ZmlsbGVkRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JkZXJlZEVsZW1lbnRzID0gQXJyYXkuZnJvbShlbGVtZW50cykuY29uY2F0KHBvbHlmaWxsZWRFbGVtZW50cykuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiAyID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24ob3JkZXJlZEVsZW1lbnRzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIEVsZW1lbnRJbnRlcm5hbHMge1xuICAgICAgICBzdGF0aWMgZ2V0IGlzUG9seWZpbGxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKHJlZikge1xuICAgICAgICAgICAgaWYgKCFyZWYgfHwgIXJlZi50YWdOYW1lIHx8IHJlZi50YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IHJlZi5nZXRSb290Tm9kZSgpO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHkgPSBuZXcgVmFsaWRpdHlTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZXMgPSBuZXcgQ3VzdG9tU3RhdGVTZXQocmVmKTtcbiAgICAgICAgICAgIHJlZk1hcC5zZXQodGhpcywgcmVmKTtcbiAgICAgICAgICAgIHZhbGlkaXR5TWFwLnNldCh0aGlzLCB2YWxpZGl0eSk7XG4gICAgICAgICAgICBpbnRlcm5hbHNNYXAuc2V0KHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBpbml0QW9tKHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBpbml0UmVmKHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBPYmplY3Quc2VhbCh0aGlzKTtcbiAgICAgICAgICAgIGlmIChyb290Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICBkZWZlclVwZ3JhZGUocm9vdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNoZWNrVmFsaWRpdHkoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdjaGVja1ZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMud2lsbFZhbGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eSA9IHZhbGlkaXR5TWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGlmICghdmFsaWRpdHkudmFsaWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGl0eUV2ZW50ID0gbmV3IEV2ZW50KCdpbnZhbGlkJywge1xuICAgICAgICAgICAgICAgICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVmLmRpc3BhdGNoRXZlbnQodmFsaWRpdHlFdmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRpdHkudmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGZvcm0oKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAnZm9ybScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBsZXQgZm9ybTtcbiAgICAgICAgICAgIGlmIChyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBmb3JtID0gZmluZFBhcmVudEZvcm0ocmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbHMoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAnbGFiZWxzJyBwcm9wZXJ0eSBmcm9tICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gcmVmLmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgICAgIGNvbnN0IGhvc3RSb290ID0gcmVmLmdldFJvb3ROb2RlKCk7XG4gICAgICAgICAgICBpZiAoaG9zdFJvb3QgJiYgaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG9zdFJvb3QucXVlcnlTZWxlY3RvckFsbChgW2Zvcj1cIiR7aWR9XCJdYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmVwb3J0VmFsaWRpdHkoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdyZXBvcnRWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgaWYgKCF0aGlzLndpbGxWYWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSB0aGlzLmNoZWNrVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IHZhbGlkYXRpb25BbmNob3JNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgaWYgKGFuY2hvciAmJiAhcmVmLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlcG9ydFZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXZhbGlkICYmIGFuY2hvcikge1xuICAgICAgICAgICAgICAgIHJlZi5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGFuY2hvci5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIHNldEZvcm1WYWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0Rm9ybVZhbHVlJyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICByZW1vdmVIaWRkZW5JbnB1dHModGhpcyk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZi5nZXRBdHRyaWJ1dGUoJ25hbWUnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWRkZW5JbnB1dCA9IGNyZWF0ZUhpZGRlbklucHV0KHJlZiwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbklucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh2YWx1ZSkucmV2ZXJzZSgpLmZvckVhY2goKFtmb3JtRGF0YUtleSwgZm9ybURhdGFWYWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtRGF0YVZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlkZGVuSW5wdXQgPSBjcmVhdGVIaWRkZW5JbnB1dChyZWYsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuSW5wdXQubmFtZSA9IGZvcm1EYXRhS2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuSW5wdXQudmFsdWUgPSBmb3JtRGF0YVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWZWYWx1ZU1hcC5zZXQocmVmLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VmFsaWRpdHkodmFsaWRpdHlDaGFuZ2VzLCB2YWxpZGF0aW9uTWVzc2FnZSwgYW5jaG9yKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdzZXRWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgaWYgKCF2YWxpZGl0eUNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gZXhlY3V0ZSBcXCdzZXRWYWxpZGl0eVxcJyBvbiBcXCdFbGVtZW50SW50ZXJuYWxzXFwnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAwIHByZXNlbnQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWxpZGF0aW9uQW5jaG9yTWFwLnNldCh0aGlzLCBhbmNob3IpO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHkgPSB2YWxpZGl0eU1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eUNoYW5nZXNPYmogPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbGlkaXR5Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHZhbGlkaXR5Q2hhbmdlc09ialtrZXldID0gdmFsaWRpdHlDaGFuZ2VzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXModmFsaWRpdHlDaGFuZ2VzT2JqKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZCh2YWxpZGl0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjaGVjayA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdmFsaWRpdHkpLCB2YWxpZGl0eUNoYW5nZXNPYmopO1xuICAgICAgICAgICAgZGVsZXRlIGNoZWNrLnZhbGlkO1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCB9ID0gcmVjb25jaWxlVmFsaWRpdHkodmFsaWRpdHksIGNoZWNrLCB0aGlzLmZvcm0pO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCAmJiAhdmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGBGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0VmFsaWRpdHknIG9uICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHNlY29uZCBhcmd1bWVudCBzaG91bGQgbm90IGJlIGVtcHR5IGlmIG9uZSBvciBtb3JlIGZsYWdzIGluIHRoZSBmaXJzdCBhcmd1bWVudCBhcmUgdHJ1ZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbGlkYXRpb25NZXNzYWdlTWFwLnNldCh0aGlzLCB2YWxpZCA/ICcnIDogdmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKHJlZi5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIHJlZi50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy1pbnZhbGlkJywgIXZhbGlkKTtcbiAgICAgICAgICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKCdpbnRlcm5hbHMtdmFsaWQnLCB2YWxpZCk7XG4gICAgICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgYCR7IXZhbGlkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsaWRpdHlVcGdyYWRlTWFwLnNldChyZWYsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldCBzaGFkb3dSb290KCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290TWFwLmdldChyZWYpO1xuICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICd2YWxpZGF0aW9uTWVzc2FnZScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGdldCB2YWxpZGl0eSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICd2YWxpZGl0eScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eSA9IHZhbGlkaXR5TWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGl0eTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgd2lsbFZhbGlkYXRlKCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gcmVhZCB0aGUgJ3dpbGxWYWxpZGF0ZScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBpZiAoKHJlZi5kaXNhYmxlZCB8fCByZWYuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB8fFxuICAgICAgICAgICAgICAgIHJlZi5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc0VsZW1lbnRJbnRlcm5hbHNTdXBwb3J0ZWQoKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhd2luZG93LkVsZW1lbnRJbnRlcm5hbHMgfHwgIUhUTUxFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hJbnRlcm5hbHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjbGFzcyBFbGVtZW50SW50ZXJuYWxzRmVhdHVyZURldGVjdGlvbiBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbHMgPSB0aGlzLmF0dGFjaEludGVybmFscygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhbmRvbU5hbWUgPSBgZWxlbWVudC1pbnRlcm5hbHMtZmVhdHVyZS1kZXRlY3Rpb24tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csICcnKX1gO1xuICAgICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUocmFuZG9tTmFtZSwgRWxlbWVudEludGVybmFsc0ZlYXR1cmVEZXRlY3Rpb24pO1xuICAgICAgICBjb25zdCBmZWF0dXJlRGV0ZWN0aW9uRWxlbWVudCA9IG5ldyBFbGVtZW50SW50ZXJuYWxzRmVhdHVyZURldGVjdGlvbigpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3NoYWRvd1Jvb3QnLFxuICAgICAgICAgICAgJ2Zvcm0nLFxuICAgICAgICAgICAgJ3dpbGxWYWxpZGF0ZScsXG4gICAgICAgICAgICAndmFsaWRpdHknLFxuICAgICAgICAgICAgJ3ZhbGlkYXRpb25NZXNzYWdlJyxcbiAgICAgICAgICAgICdsYWJlbHMnLFxuICAgICAgICAgICAgJ3NldEZvcm1WYWx1ZScsXG4gICAgICAgICAgICAnc2V0VmFsaWRpdHknLFxuICAgICAgICAgICAgJ2NoZWNrVmFsaWRpdHknLFxuICAgICAgICAgICAgJ3JlcG9ydFZhbGlkaXR5J1xuICAgICAgICBdLmV2ZXJ5KHByb3AgPT4gcHJvcCBpbiBmZWF0dXJlRGV0ZWN0aW9uRWxlbWVudC5pbnRlcm5hbHMpO1xuICAgIH1cbiAgICBsZXQgaGFzRWxlbWVudEludGVybmFsc1BvbHlmaWxsQmVlbkFwcGxpZWQgPSBmYWxzZTtcbiAgICBsZXQgaGFzQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbEJlZW5BcHBsaWVkID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZm9yY2VDdXN0b21TdGF0ZVNldFBvbHlmaWxsKGF0dGFjaEludGVybmFscykge1xuICAgICAgICBpZiAoaGFzQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbEJlZW5BcHBsaWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaGFzQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbEJlZW5BcHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgd2luZG93LkN1c3RvbVN0YXRlU2V0ID0gQ3VzdG9tU3RhdGVTZXQ7XG4gICAgICAgIGlmIChhdHRhY2hJbnRlcm5hbHMpIHtcbiAgICAgICAgICAgIEhUTUxFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hJbnRlcm5hbHMgPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGF0dGFjaEludGVybmFscy5jYWxsKHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIGludGVybmFscy5zdGF0ZXMgPSBuZXcgQ3VzdG9tU3RhdGVTZXQodGhpcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFscztcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZm9yY2VFbGVtZW50SW50ZXJuYWxzUG9seWZpbGwoZm9yY2VDdXN0b21TdGF0ZVNldCA9IHRydWUpIHtcbiAgICAgICAgaWYgKGhhc0VsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbEJlZW5BcHBsaWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaGFzRWxlbWVudEludGVybmFsc1BvbHlmaWxsQmVlbkFwcGxpZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHdpbmRvdy5FbGVtZW50SW50ZXJuYWxzID0gRWxlbWVudEludGVybmFscztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluZSA9IEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuZGVmaW5lO1xuICAgICAgICAgICAgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5kZWZpbmUgPSBmdW5jdGlvbiAobmFtZSwgY29uc3RydWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29uc3RydWN0b3IuZm9ybUFzc29jaWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdGVkQ2FsbGJhY2sgPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29ubmVjdGVkQ2FsbGJhY2tNYXAuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2tNYXAuc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXREaXNhYmxlZCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGVkQ2FsbGJhY2sgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZENhbGxiYWNrLmFwcGx5KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZUludGVybmFscyh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmaW5lLmNhbGwodGhpcywgbmFtZSwgY29uc3RydWN0b3IsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaEludGVybmFscyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGFnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgJ2F0dGFjaEludGVybmFscycgb24gJ0hUTUxFbGVtZW50JzogVW5hYmxlIHRvIGF0dGFjaCBFbGVtZW50SW50ZXJuYWxzIHRvIG5vbi1jdXN0b20gZWxlbWVudHMuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHNNYXAuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oYERPTUV4Y2VwdGlvbjogRmFpbGVkIHRvIGV4ZWN1dGUgJ2F0dGFjaEludGVybmFscycgb24gJ0hUTUxFbGVtZW50JzogRWxlbWVudEludGVybmFscyBmb3IgdGhlIHNwZWNpZmllZCBlbGVtZW50IHdhcyBhbHJlYWR5IGF0dGFjaGVkLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnRJbnRlcm5hbHModGhpcyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGF0dGFjaFNoYWRvd09ic2VydmVyKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gYXR0YWNoU2hhZG93LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIHNoYWRvd1Jvb3RNYXAuc2V0KHRoaXMsIHNoYWRvd1Jvb3QpO1xuICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlckNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5TaGFkeURPTSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCBvYnNlcnZlckNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHNoYWRvd1Jvb3QsIG9ic2VydmVyQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dIb3N0c01hcC5zZXQodGhpcywgb2JzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaFNoYWRvdyA9IEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdztcbiAgICAgICAgICAgIEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdyA9IGF0dGFjaFNoYWRvd09ic2VydmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG9ic2VydmVyQ2FsbGJhY2spO1xuICAgICAgICAgICAgZG9jdW1lbnRPYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgb2JzZXJ2ZXJDb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgSFRNTEZvcm1FbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcGF0Y2hGb3JtUHJvdG90eXBlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcmNlQ3VzdG9tU3RhdGVTZXQgfHxcbiAgICAgICAgICAgICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmICF3aW5kb3cuQ3VzdG9tU3RhdGVTZXQpKSB7XG4gICAgICAgICAgICBmb3JjZUN1c3RvbVN0YXRlU2V0UG9seWZpbGwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlzQ2VQb2x5ZmlsbCA9ICEhY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjaztcbiAgICBpZiAoIWlzQ2VQb2x5ZmlsbCkge1xuICAgICAgICBpZiAoIWlzRWxlbWVudEludGVybmFsc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgICAgICBmb3JjZUVsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhd2luZG93LkN1c3RvbVN0YXRlU2V0KSB7XG4gICAgICAgICAgICBmb3JjZUN1c3RvbVN0YXRlU2V0UG9seWZpbGwoSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaEludGVybmFscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnRzLmZvcmNlQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbCA9IGZvcmNlQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbDtcbiAgICBleHBvcnRzLmZvcmNlRWxlbWVudEludGVybmFsc1BvbHlmaWxsID0gZm9yY2VFbGVtZW50SW50ZXJuYWxzUG9seWZpbGw7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4gICAgcmV0dXJuIGV4cG9ydHM7XG5cbn0pKHt9KTtcbiIsICIvKiFcbiAqIE1JVCBMaWNlbnNlXG4gKiBcbiAqIENvcHlyaWdodCAoYykgMjAxNy0yMDI0IFBlY3VsaWFyIFZlbnR1cmVzLCBMTENcbiAqIFxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICogXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKiBcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBBUlJBWV9CVUZGRVJfTkFNRSA9IFwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIjtcbmNsYXNzIEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB7XG4gICAgc3RhdGljIGlzQXJyYXlCdWZmZXIoZGF0YSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpID09PSBBUlJBWV9CVUZGRVJfTkFNRTtcbiAgICB9XG4gICAgc3RhdGljIHRvQXJyYXlCdWZmZXIoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5ieXRlTGVuZ3RoID09PSBkYXRhLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuYnl0ZU9mZnNldCA9PT0gMCAmJiBkYXRhLmJ5dGVMZW5ndGggPT09IGRhdGEuYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50b1VpbnQ4QXJyYXkoZGF0YS5idWZmZXIpXG4gICAgICAgICAgICAuc2xpY2UoZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVPZmZzZXQgKyBkYXRhLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICAuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgdG9VaW50OEFycmF5KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9WaWV3KGRhdGEsIFVpbnQ4QXJyYXkpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9WaWV3KGRhdGEsIHR5cGUpIHtcbiAgICAgICAgaWYgKGRhdGEuY29uc3RydWN0b3IgPT09IHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgdHlwZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB0eXBlKGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBwcm92aWRlZCB2YWx1ZSBpcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNCdWZmZXJTb3VyY2UoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKVxuICAgICAgICAgICAgfHwgdGhpcy5pc0FycmF5QnVmZmVyKGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkge1xuICAgICAgICByZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpXG4gICAgICAgICAgICB8fCAoZGF0YSAmJiB0aGlzLmlzQXJyYXlCdWZmZXIoZGF0YS5idWZmZXIpKTtcbiAgICB9XG4gICAgc3RhdGljIGlzRXF1YWwoYSwgYikge1xuICAgICAgICBjb25zdCBhVmlldyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYSk7XG4gICAgICAgIGNvbnN0IGJWaWV3ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShiKTtcbiAgICAgICAgaWYgKGFWaWV3Lmxlbmd0aCAhPT0gYlZpZXcuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYVZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhVmlld1tpXSAhPT0gYlZpZXdbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHN0YXRpYyBjb25jYXQoLi4uYXJncykge1xuICAgICAgICBsZXQgYnVmZmVycztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnc1swXSkgJiYgIShhcmdzWzFdIGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICBidWZmZXJzID0gYXJnc1swXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZ3NbMF0pICYmIGFyZ3NbMV0gaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgYnVmZmVycyA9IGFyZ3NbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoYXJnc1thcmdzLmxlbmd0aCAtIDFdIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzID0gYXJncy5zbGljZSgwLCBhcmdzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnVmZmVycyA9IGFyZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNpemUgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7XG4gICAgICAgICAgICBzaXplICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuICAgICAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgICAgICByZXMuc2V0KHZpZXcsIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gdmlldy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b1ZpZXcocmVzLCBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXMuYnVmZmVyO1xuICAgIH1cbn1cblxuY29uc3QgU1RSSU5HX1RZUEUgPSBcInN0cmluZ1wiO1xuY29uc3QgSEVYX1JFR0VYID0gL15bMC05YS1mXFxzXSskL2k7XG5jb25zdCBCQVNFNjRfUkVHRVggPSAvXig/OltBLVphLXowLTkrL117NH0pKig/OltBLVphLXowLTkrL117Mn09PXxbQS1aYS16MC05Ky9dezN9PSk/JC87XG5jb25zdCBCQVNFNjRVUkxfUkVHRVggPSAvXlthLXpBLVowLTktX10rJC87XG5jbGFzcyBVdGY4Q29udmVydGVyIHtcbiAgICBzdGF0aWMgZnJvbVN0cmluZyh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IHMgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodGV4dCkpO1xuICAgICAgICBjb25zdCB1aW50QXJyYXkgPSBuZXcgVWludDhBcnJheShzLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdWludEFycmF5W2ldID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1aW50QXJyYXkuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgdG9TdHJpbmcoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgbGV0IGVuY29kZWRTdHJpbmcgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZW5jb2RlZFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVjb2RlZFN0cmluZyA9IGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZW5jb2RlZFN0cmluZykpO1xuICAgICAgICByZXR1cm4gZGVjb2RlZFN0cmluZztcbiAgICB9XG59XG5jbGFzcyBVdGYxNkNvbnZlcnRlciB7XG4gICAgc3RhdGljIHRvU3RyaW5nKGJ1ZmZlciwgbGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihidWZmZXIpO1xuICAgICAgICBjb25zdCBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhhcnJheUJ1ZmZlcik7XG4gICAgICAgIGxldCByZXMgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5QnVmZmVyLmJ5dGVMZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgY29kZSA9IGRhdGFWaWV3LmdldFVpbnQxNihpLCBsaXR0bGVFbmRpYW4pO1xuICAgICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGZyb21TdHJpbmcodGV4dCwgbGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IEFycmF5QnVmZmVyKHRleHQubGVuZ3RoICogMik7XG4gICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHJlcyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZGF0YVZpZXcuc2V0VWludDE2KGkgKiAyLCB0ZXh0LmNoYXJDb2RlQXQoaSksIGxpdHRsZUVuZGlhbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5jbGFzcyBDb252ZXJ0IHtcbiAgICBzdGF0aWMgaXNIZXgoZGF0YSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFNUUklOR19UWVBFXG4gICAgICAgICAgICAmJiBIRVhfUkVHRVgudGVzdChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQmFzZTY0KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSBTVFJJTkdfVFlQRVxuICAgICAgICAgICAgJiYgQkFTRTY0X1JFR0VYLnRlc3QoZGF0YSk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0Jhc2U2NFVybChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gU1RSSU5HX1RZUEVcbiAgICAgICAgICAgICYmIEJBU0U2NFVSTF9SRUdFWC50ZXN0KGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgVG9TdHJpbmcoYnVmZmVyLCBlbmMgPSBcInV0ZjhcIikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIHN3aXRjaCAoZW5jLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGY4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9VdGY4U3RyaW5nKGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9CaW5hcnkoYnVmKTtcbiAgICAgICAgICAgIGNhc2UgXCJoZXhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub0hleChidWYpO1xuICAgICAgICAgICAgY2FzZSBcImJhc2U2NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvQmFzZTY0KGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwiYmFzZTY0dXJsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9CYXNlNjRVcmwoYnVmKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1ZiwgdHJ1ZSk7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmJlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1Zik7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIGVuY29kaW5nICcke2VuY30nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIEZyb21TdHJpbmcoc3RyLCBlbmMgPSBcInV0ZjhcIikge1xuICAgICAgICBpZiAoIXN0cikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGVuYy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21VdGY4U3RyaW5nKHN0cik7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJpbmFyeShzdHIpO1xuICAgICAgICAgICAgY2FzZSBcImhleFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21IZXgoc3RyKTtcbiAgICAgICAgICAgIGNhc2UgXCJiYXNlNjRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmFzZTY0KHN0cik7XG4gICAgICAgICAgICBjYXNlIFwiYmFzZTY0dXJsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJhc2U2NFVybChzdHIpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2bGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIuZnJvbVN0cmluZyhzdHIsIHRydWUpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2XCI6XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci5mcm9tU3RyaW5nKHN0cik7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIGVuY29kaW5nICcke2VuY30nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIFRvQmFzZTY0KGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGlmICh0eXBlb2YgYnRvYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgY29uc3QgYmluYXJ5ID0gdGhpcy5Ub1N0cmluZyhidWYsIFwiYmluYXJ5XCIpO1xuICAgICAgICAgICAgcmV0dXJuIGJ0b2EoYmluYXJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShidWYpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tQmFzZTY0KGJhc2U2NCkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFN0cmluZyhiYXNlNjQpO1xuICAgICAgICBpZiAoIWZvcm1hdHRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUNvbnZlcnQuaXNCYXNlNjQoZm9ybWF0dGVkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50ICdiYXNlNjRUZXh0JyBpcyBub3QgQmFzZTY0IGVuY29kZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhdG9iICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmluYXJ5KGF0b2IoZm9ybWF0dGVkKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oZm9ybWF0dGVkLCBcImJhc2U2NFwiKSkuYnVmZmVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tQmFzZTY0VXJsKGJhc2U2NHVybCkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFN0cmluZyhiYXNlNjR1cmwpO1xuICAgICAgICBpZiAoIWZvcm1hdHRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUNvbnZlcnQuaXNCYXNlNjRVcmwoZm9ybWF0dGVkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50ICdiYXNlNjR1cmwnIGlzIG5vdCBCYXNlNjRVcmwgZW5jb2RlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmFzZTY0KHRoaXMuQmFzZTY0UGFkZGluZyhmb3JtYXR0ZWQucmVwbGFjZSgvXFwtL2csIFwiK1wiKS5yZXBsYWNlKC9cXF8vZywgXCIvXCIpKSk7XG4gICAgfVxuICAgIHN0YXRpYyBUb0Jhc2U2NFVybChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLlRvQmFzZTY0KGRhdGEpLnJlcGxhY2UoL1xcKy9nLCBcIi1cIikucmVwbGFjZSgvXFwvL2csIFwiX1wiKS5yZXBsYWNlKC9cXD0vZywgXCJcIik7XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tVXRmOFN0cmluZyh0ZXh0LCBlbmNvZGluZyA9IENvbnZlcnQuREVGQVVMVF9VVEY4X0VOQ09ESU5HKSB7XG4gICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhc2NpaVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21CaW5hcnkodGV4dCk7XG4gICAgICAgICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGY4Q29udmVydGVyLmZyb21TdHJpbmcodGV4dCk7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmJlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcodGV4dCk7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZsZVwiOlxuICAgICAgICAgICAgY2FzZSBcInVzYzJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIuZnJvbVN0cmluZyh0ZXh0LCB0cnVlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2YgZW5jb2RpbmcgJyR7ZW5jb2Rpbmd9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBUb1V0ZjhTdHJpbmcoYnVmZmVyLCBlbmNvZGluZyA9IENvbnZlcnQuREVGQVVMVF9VVEY4X0VOQ09ESU5HKSB7XG4gICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhc2NpaVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvQmluYXJ5KGJ1ZmZlcik7XG4gICAgICAgICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGY4Q29udmVydGVyLnRvU3RyaW5nKGJ1ZmZlcik7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmJlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1ZmZlcik7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZsZVwiOlxuICAgICAgICAgICAgY2FzZSBcInVzYzJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIudG9TdHJpbmcoYnVmZmVyLCB0cnVlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2YgZW5jb2RpbmcgJyR7ZW5jb2Rpbmd9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tQmluYXJ5KHRleHQpIHtcbiAgICAgICAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gdGV4dC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlc3VsdFZpZXcgPSBuZXcgVWludDhBcnJheShzdHJpbmdMZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHRWaWV3W2ldID0gdGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRWaWV3LmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIFRvQmluYXJ5KGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGxldCByZXMgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgVG9IZXgoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGxlbiA9IGJ1Zi5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBidWZbaV07XG4gICAgICAgICAgICBpZiAoYnl0ZSA8IDE2KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IFwiMFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ICs9IGJ5dGUudG9TdHJpbmcoMTYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tSGV4KGhleFN0cmluZykge1xuICAgICAgICBsZXQgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTdHJpbmcoaGV4U3RyaW5nKTtcbiAgICAgICAgaWYgKCFmb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFDb252ZXJ0LmlzSGV4KGZvcm1hdHRlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnaGV4U3RyaW5nJyBpcyBub3QgSEVYIGVuY29kZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggJSAyKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWQgPSBgMCR7Zm9ybWF0dGVkfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZm9ybWF0dGVkLmxlbmd0aCAvIDIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvcm1hdHRlZC5sZW5ndGg7IGkgPSBpICsgMikge1xuICAgICAgICAgICAgY29uc3QgYyA9IGZvcm1hdHRlZC5zbGljZShpLCBpICsgMik7XG4gICAgICAgICAgICByZXNbaSAvIDJdID0gcGFyc2VJbnQoYywgMTYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXMuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgVG9VdGYxNlN0cmluZyhidWZmZXIsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWZmZXIsIGxpdHRsZUVuZGlhbik7XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tVXRmMTZTdHJpbmcodGV4dCwgbGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcodGV4dCwgbGl0dGxlRW5kaWFuKTtcbiAgICB9XG4gICAgc3RhdGljIEJhc2U2NFBhZGRpbmcoYmFzZTY0KSB7XG4gICAgICAgIGNvbnN0IHBhZENvdW50ID0gNCAtIChiYXNlNjQubGVuZ3RoICUgNCk7XG4gICAgICAgIGlmIChwYWRDb3VudCA8IDQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFkQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGJhc2U2NCArPSBcIj1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmFzZTY0O1xuICAgIH1cbiAgICBzdGF0aWMgZm9ybWF0U3RyaW5nKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIChkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRhdGEucmVwbGFjZSgvW1xcblxcclxcdCBdL2csIFwiXCIpKSB8fCBcIlwiO1xuICAgIH1cbn1cbkNvbnZlcnQuREVGQVVMVF9VVEY4X0VOQ09ESU5HID0gXCJ1dGY4XCI7XG5cbmZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICBjb25zdCByZXMgPSBhcmd1bWVudHNbMF07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb2JqID0gYXJndW1lbnRzW2ldO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICByZXNbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGNvbWJpbmUoLi4uYnVmKSB7XG4gICAgY29uc3QgdG90YWxCeXRlTGVuZ3RoID0gYnVmLm1hcCgoaXRlbSkgPT4gaXRlbS5ieXRlTGVuZ3RoKS5yZWR1Y2UoKHByZXYsIGN1cikgPT4gcHJldiArIGN1cik7XG4gICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkodG90YWxCeXRlTGVuZ3RoKTtcbiAgICBsZXQgY3VycmVudFBvcyA9IDA7XG4gICAgYnVmLm1hcCgoaXRlbSkgPT4gbmV3IFVpbnQ4QXJyYXkoaXRlbSkpLmZvckVhY2goKGFycikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0yIG9mIGFycikge1xuICAgICAgICAgICAgcmVzW2N1cnJlbnRQb3MrK10gPSBpdGVtMjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXMuYnVmZmVyO1xufVxuZnVuY3Rpb24gaXNFcXVhbChieXRlczEsIGJ5dGVzMikge1xuICAgIGlmICghKGJ5dGVzMSAmJiBieXRlczIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGJ5dGVzMS5ieXRlTGVuZ3RoICE9PSBieXRlczIuYnl0ZUxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGIxID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMxKTtcbiAgICBjb25zdCBiMiA9IG5ldyBVaW50OEFycmF5KGJ5dGVzMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlczEuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChiMVtpXSAhPT0gYjJbaV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0cy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXI7XG5leHBvcnRzLkNvbnZlcnQgPSBDb252ZXJ0O1xuZXhwb3J0cy5hc3NpZ24gPSBhc3NpZ247XG5leHBvcnRzLmNvbWJpbmUgPSBjb21iaW5lO1xuZXhwb3J0cy5pc0VxdWFsID0gaXNFcXVhbDtcbiIsICIvKiFcbiBDb3B5cmlnaHQgKGMpIFBlY3VsaWFyIFZlbnR1cmVzLCBMTENcbiovXG5cbmZ1bmN0aW9uIGdldFVUQ0RhdGUoZGF0ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpICsgKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKSk7XHJcbn1cclxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyc1ZhbHVlKHBhcmFtZXRlcnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgdmFyIF9hO1xyXG4gICAgaWYgKChwYXJhbWV0ZXJzIGluc3RhbmNlb2YgT2JqZWN0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChfYSA9IHBhcmFtZXRlcnNbbmFtZV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRlZmF1bHRWYWx1ZTtcclxufVxyXG5mdW5jdGlvbiBidWZmZXJUb0hleENvZGVzKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCA9IDAsIGlucHV0TGVuZ3RoID0gKGlucHV0QnVmZmVyLmJ5dGVMZW5ndGggLSBpbnB1dE9mZnNldCksIGluc2VydFNwYWNlID0gZmFsc2UpIHtcclxuICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIChuZXcgVWludDhBcnJheShpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkpIHtcclxuICAgICAgICBjb25zdCBzdHIgPSBpdGVtLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIGlmIChzdHIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBcIjBcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0ICs9IHN0cjtcclxuICAgICAgICBpZiAoaW5zZXJ0U3BhY2UpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IFwiIFwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQudHJpbSgpO1xyXG59XHJcbmZ1bmN0aW9uIGNoZWNrQnVmZmVyUGFyYW1zKGJhc2VCbG9jaywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgaWYgKCEoaW5wdXRCdWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRCdWZmZXIgbXVzdCBiZSBcXFwiQXJyYXlCdWZmZXJcXFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0QnVmZmVyIGhhcyB6ZXJvIGxlbmd0aFwiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dE9mZnNldCA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRPZmZzZXQgbGVzcyB0aGFuIHplcm9cIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRMZW5ndGggPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0TGVuZ3RoIGxlc3MgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKChpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoIC0gaW5wdXRPZmZzZXQgLSBpbnB1dExlbmd0aCkgPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZCAoaW5jb25zaXN0ZW50IG9mZnNldCBhbmQgbGVuZ3RoIHZhbHVlcylcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiB1dGlsRnJvbUJhc2UoaW5wdXRCdWZmZXIsIGlucHV0QmFzZSkge1xyXG4gICAgbGV0IHJlc3VsdCA9IDA7XHJcbiAgICBpZiAoaW5wdXRCdWZmZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0QnVmZmVyWzBdO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IChpbnB1dEJ1ZmZlci5sZW5ndGggLSAxKTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICByZXN1bHQgKz0gaW5wdXRCdWZmZXJbKGlucHV0QnVmZmVyLmxlbmd0aCAtIDEpIC0gaV0gKiBNYXRoLnBvdygyLCBpbnB1dEJhc2UgKiBpKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuZnVuY3Rpb24gdXRpbFRvQmFzZSh2YWx1ZSwgYmFzZSwgcmVzZXJ2ZWQgPSAoLTEpKSB7XHJcbiAgICBjb25zdCBpbnRlcm5hbFJlc2VydmVkID0gcmVzZXJ2ZWQ7XHJcbiAgICBsZXQgaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xyXG4gICAgbGV0IHJlc3VsdCA9IDA7XHJcbiAgICBsZXQgYmlnZ2VzdCA9IE1hdGgucG93KDIsIGJhc2UpO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICBpZiAodmFsdWUgPCBiaWdnZXN0KSB7XHJcbiAgICAgICAgICAgIGxldCByZXRCdWY7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcm5hbFJlc2VydmVkIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKGkpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbFJlc2VydmVkIDwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAobmV3IEFycmF5QnVmZmVyKDApKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihpbnRlcm5hbFJlc2VydmVkKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGludGVybmFsUmVzZXJ2ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAoaSAtIDEpOyBqID49IDA7IGotLSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYmFzaXMgPSBNYXRoLnBvdygyLCBqICogYmFzZSk7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W3Jlc3VsdCAtIGogLSAxXSA9IE1hdGguZmxvb3IoaW50ZXJuYWxWYWx1ZSAvIGJhc2lzKTtcclxuICAgICAgICAgICAgICAgIGludGVybmFsVmFsdWUgLT0gKHJldFZpZXdbcmVzdWx0IC0gaiAtIDFdKSAqIGJhc2lzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJpZ2dlc3QgKj0gTWF0aC5wb3coMiwgYmFzZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxDb25jYXRCdWYoLi4uYnVmZmVycykge1xyXG4gICAgbGV0IG91dHB1dExlbmd0aCA9IDA7XHJcbiAgICBsZXQgcHJldkxlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7XHJcbiAgICAgICAgb3V0cHV0TGVuZ3RoICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKG91dHB1dExlbmd0aCk7XHJcbiAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcclxuICAgICAgICByZXRWaWV3LnNldChuZXcgVWludDhBcnJheShidWZmZXIpLCBwcmV2TGVuZ3RoKTtcclxuICAgICAgICBwcmV2TGVuZ3RoICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldEJ1ZjtcclxufVxyXG5mdW5jdGlvbiB1dGlsQ29uY2F0VmlldyguLi52aWV3cykge1xyXG4gICAgbGV0IG91dHB1dExlbmd0aCA9IDA7XHJcbiAgICBsZXQgcHJldkxlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IHZpZXcgb2Ygdmlld3MpIHtcclxuICAgICAgICBvdXRwdXRMZW5ndGggKz0gdmlldy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIob3V0cHV0TGVuZ3RoKTtcclxuICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgZm9yIChjb25zdCB2aWV3IG9mIHZpZXdzKSB7XHJcbiAgICAgICAgcmV0Vmlldy5zZXQodmlldywgcHJldkxlbmd0aCk7XHJcbiAgICAgICAgcHJldkxlbmd0aCArPSB2aWV3Lmxlbmd0aDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXRWaWV3O1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxEZWNvZGVUQygpIHtcclxuICAgIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWVIZXgpO1xyXG4gICAgaWYgKHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aCA+PSAyKSB7XHJcbiAgICAgICAgY29uc3QgY29uZGl0aW9uMSA9IChidWZbMF0gPT09IDB4RkYpICYmIChidWZbMV0gJiAweDgwKTtcclxuICAgICAgICBjb25zdCBjb25kaXRpb24yID0gKGJ1ZlswXSA9PT0gMHgwMCkgJiYgKChidWZbMV0gJiAweDgwKSA9PT0gMHgwMCk7XHJcbiAgICAgICAgaWYgKGNvbmRpdGlvbjEgfHwgY29uZGl0aW9uMikge1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOZWVkbGVzc2x5IGxvbmcgZm9ybWF0XCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGJpZ0ludEJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4LmJ5dGVMZW5ndGgpO1xyXG4gICAgY29uc3QgYmlnSW50VmlldyA9IG5ldyBVaW50OEFycmF5KGJpZ0ludEJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYmlnSW50Vmlld1tpXSA9IDA7XHJcbiAgICB9XHJcbiAgICBiaWdJbnRWaWV3WzBdID0gKGJ1ZlswXSAmIDB4ODApO1xyXG4gICAgY29uc3QgYmlnSW50ID0gdXRpbEZyb21CYXNlKGJpZ0ludFZpZXcsIDgpO1xyXG4gICAgY29uc3Qgc21hbGxJbnRCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleC5ieXRlTGVuZ3RoKTtcclxuICAgIGNvbnN0IHNtYWxsSW50VmlldyA9IG5ldyBVaW50OEFycmF5KHNtYWxsSW50QnVmZmVyKTtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy52YWx1ZUhleC5ieXRlTGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBzbWFsbEludFZpZXdbal0gPSBidWZbal07XHJcbiAgICB9XHJcbiAgICBzbWFsbEludFZpZXdbMF0gJj0gMHg3RjtcclxuICAgIGNvbnN0IHNtYWxsSW50ID0gdXRpbEZyb21CYXNlKHNtYWxsSW50VmlldywgOCk7XHJcbiAgICByZXR1cm4gKHNtYWxsSW50IC0gYmlnSW50KTtcclxufVxyXG5mdW5jdGlvbiB1dGlsRW5jb2RlVEModmFsdWUpIHtcclxuICAgIGNvbnN0IG1vZFZhbHVlID0gKHZhbHVlIDwgMCkgPyAodmFsdWUgKiAoLTEpKSA6IHZhbHVlO1xyXG4gICAgbGV0IGJpZ0ludCA9IDEyODtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgaWYgKG1vZFZhbHVlIDw9IGJpZ0ludCkge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzbWFsbEludCA9IGJpZ0ludCAtIG1vZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0QnVmID0gdXRpbFRvQmFzZShzbWFsbEludCwgOCwgaSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbMF0gfD0gMHg4MDtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHJldEJ1ZiA9IHV0aWxUb0Jhc2UobW9kVmFsdWUsIDgsIGkpO1xyXG4gICAgICAgICAgICBsZXQgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIGlmIChyZXRWaWV3WzBdICYgMHg4MCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcEJ1ZiA9IHJldEJ1Zi5zbGljZSgwKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGVtcEJ1Zik7XHJcbiAgICAgICAgICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIocmV0QnVmLmJ5dGVMZW5ndGggKyAxKTtcclxuICAgICAgICAgICAgICAgIHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB0ZW1wQnVmLmJ5dGVMZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldFZpZXdbayArIDFdID0gdGVtcFZpZXdba107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3WzBdID0gMHgwMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICBiaWdJbnQgKj0gTWF0aC5wb3coMiwgOCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKG5ldyBBcnJheUJ1ZmZlcigwKSk7XHJcbn1cclxuZnVuY3Rpb24gaXNFcXVhbEJ1ZmZlcihpbnB1dEJ1ZmZlcjEsIGlucHV0QnVmZmVyMikge1xyXG4gICAgaWYgKGlucHV0QnVmZmVyMS5ieXRlTGVuZ3RoICE9PSBpbnB1dEJ1ZmZlcjIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZpZXcxID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIxKTtcclxuICAgIGNvbnN0IHZpZXcyID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIyKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmlldzEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAodmlldzFbaV0gIT09IHZpZXcyW2ldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiBwYWROdW1iZXIoaW5wdXROdW1iZXIsIGZ1bGxMZW5ndGgpIHtcclxuICAgIGNvbnN0IHN0ciA9IGlucHV0TnVtYmVyLnRvU3RyaW5nKDEwKTtcclxuICAgIGlmIChmdWxsTGVuZ3RoIDwgc3RyLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGlmID0gZnVsbExlbmd0aCAtIHN0ci5sZW5ndGg7XHJcbiAgICBjb25zdCBwYWRkaW5nID0gbmV3IEFycmF5KGRpZik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpZjsgaSsrKSB7XHJcbiAgICAgICAgcGFkZGluZ1tpXSA9IFwiMFwiO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGFkZGluZ1N0cmluZyA9IHBhZGRpbmcuam9pbihcIlwiKTtcclxuICAgIHJldHVybiBwYWRkaW5nU3RyaW5nLmNvbmNhdChzdHIpO1xyXG59XHJcbmNvbnN0IGJhc2U2NFRlbXBsYXRlID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwiO1xyXG5jb25zdCBiYXNlNjRVcmxUZW1wbGF0ZSA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXz1cIjtcclxuZnVuY3Rpb24gdG9CYXNlNjQoaW5wdXQsIHVzZVVybFRlbXBsYXRlID0gZmFsc2UsIHNraXBQYWRkaW5nID0gZmFsc2UsIHNraXBMZWFkaW5nWmVyb3MgPSBmYWxzZSkge1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgbGV0IGZsYWcxID0gMDtcclxuICAgIGxldCBmbGFnMiA9IDA7XHJcbiAgICBsZXQgb3V0cHV0ID0gXCJcIjtcclxuICAgIGNvbnN0IHRlbXBsYXRlID0gKHVzZVVybFRlbXBsYXRlKSA/IGJhc2U2NFVybFRlbXBsYXRlIDogYmFzZTY0VGVtcGxhdGU7XHJcbiAgICBpZiAoc2tpcExlYWRpbmdaZXJvcykge1xyXG4gICAgICAgIGxldCBub25aZXJvUG9zaXRpb24gPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoaSkgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIG5vblplcm9Qb3NpdGlvbiA9IGk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKG5vblplcm9Qb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoaSA8IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGNocjEgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7XHJcbiAgICAgICAgaWYgKGkgPj0gaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZsYWcxID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2hyMiA9IGlucHV0LmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICBpZiAoaSA+PSBpbnB1dC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZmxhZzIgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjaHIzID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgIGNvbnN0IGVuYzEgPSBjaHIxID4+IDI7XHJcbiAgICAgICAgY29uc3QgZW5jMiA9ICgoY2hyMSAmIDB4MDMpIDw8IDQpIHwgKGNocjIgPj4gNCk7XHJcbiAgICAgICAgbGV0IGVuYzMgPSAoKGNocjIgJiAweDBGKSA8PCAyKSB8IChjaHIzID4+IDYpO1xyXG4gICAgICAgIGxldCBlbmM0ID0gY2hyMyAmIDB4M0Y7XHJcbiAgICAgICAgaWYgKGZsYWcxID09PSAxKSB7XHJcbiAgICAgICAgICAgIGVuYzMgPSBlbmM0ID0gNjQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZmxhZzIgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIGVuYzQgPSA2NDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2tpcFBhZGRpbmcpIHtcclxuICAgICAgICAgICAgaWYgKGVuYzMgPT09IDY0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gYCR7dGVtcGxhdGUuY2hhckF0KGVuYzEpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzIpfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZW5jNCA9PT0gNjQpIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gYCR7dGVtcGxhdGUuY2hhckF0KGVuYzEpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzIpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzMpfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gYCR7dGVtcGxhdGUuY2hhckF0KGVuYzEpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzIpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzMpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzQpfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG91dHB1dCArPSBgJHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMSl9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMil9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMyl9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jNCl9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG59XHJcbmZ1bmN0aW9uIGZyb21CYXNlNjQoaW5wdXQsIHVzZVVybFRlbXBsYXRlID0gZmFsc2UsIGN1dFRhaWxaZXJvcyA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZSA9ICh1c2VVcmxUZW1wbGF0ZSkgPyBiYXNlNjRVcmxUZW1wbGF0ZSA6IGJhc2U2NFRlbXBsYXRlO1xyXG4gICAgZnVuY3Rpb24gaW5kZXhPZih0b1NlYXJjaCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjQ7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGVtcGxhdGUuY2hhckF0KGkpID09PSB0b1NlYXJjaClcclxuICAgICAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gNjQ7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB0ZXN0KGluY29taW5nKSB7XHJcbiAgICAgICAgcmV0dXJuICgoaW5jb21pbmcgPT09IDY0KSA/IDB4MDAgOiBpbmNvbWluZyk7XHJcbiAgICB9XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBsZXQgb3V0cHV0ID0gXCJcIjtcclxuICAgIHdoaWxlIChpIDwgaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgZW5jMSA9IGluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xyXG4gICAgICAgIGNvbnN0IGVuYzIgPSAoaSA+PSBpbnB1dC5sZW5ndGgpID8gMHgwMCA6IGluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xyXG4gICAgICAgIGNvbnN0IGVuYzMgPSAoaSA+PSBpbnB1dC5sZW5ndGgpID8gMHgwMCA6IGluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xyXG4gICAgICAgIGNvbnN0IGVuYzQgPSAoaSA+PSBpbnB1dC5sZW5ndGgpID8gMHgwMCA6IGluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xyXG4gICAgICAgIGNvbnN0IGNocjEgPSAodGVzdChlbmMxKSA8PCAyKSB8ICh0ZXN0KGVuYzIpID4+IDQpO1xyXG4gICAgICAgIGNvbnN0IGNocjIgPSAoKHRlc3QoZW5jMikgJiAweDBGKSA8PCA0KSB8ICh0ZXN0KGVuYzMpID4+IDIpO1xyXG4gICAgICAgIGNvbnN0IGNocjMgPSAoKHRlc3QoZW5jMykgJiAweDAzKSA8PCA2KSB8IHRlc3QoZW5jNCk7XHJcbiAgICAgICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMSk7XHJcbiAgICAgICAgaWYgKGVuYzMgIT09IDY0KSB7XHJcbiAgICAgICAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5jNCAhPT0gNjQpIHtcclxuICAgICAgICAgICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGN1dFRhaWxaZXJvcykge1xyXG4gICAgICAgIGNvbnN0IG91dHB1dExlbmd0aCA9IG91dHB1dC5sZW5ndGg7XHJcbiAgICAgICAgbGV0IG5vblplcm9TdGFydCA9ICgtMSk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IChvdXRwdXRMZW5ndGggLSAxKTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgaWYgKG91dHB1dC5jaGFyQ29kZUF0KGkpICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBub25aZXJvU3RhcnQgPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vblplcm9TdGFydCAhPT0gKC0xKSkge1xyXG4gICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc2xpY2UoMCwgbm9uWmVyb1N0YXJ0ICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvdXRwdXQgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvdXRwdXQ7XHJcbn1cclxuZnVuY3Rpb24gYXJyYXlCdWZmZXJUb1N0cmluZyhidWZmZXIpIHtcclxuICAgIGxldCByZXN1bHRTdHJpbmcgPSBcIlwiO1xyXG4gICAgY29uc3QgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygdmlldykge1xyXG4gICAgICAgIHJlc3VsdFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdFN0cmluZztcclxufVxyXG5mdW5jdGlvbiBzdHJpbmdUb0FycmF5QnVmZmVyKHN0cikge1xyXG4gICAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gc3RyLmxlbmd0aDtcclxuICAgIGNvbnN0IHJlc3VsdEJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzdHJpbmdMZW5ndGgpO1xyXG4gICAgY29uc3QgcmVzdWx0VmlldyA9IG5ldyBVaW50OEFycmF5KHJlc3VsdEJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcmVzdWx0Vmlld1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdEJ1ZmZlcjtcclxufVxyXG5jb25zdCBsb2cyID0gTWF0aC5sb2coMik7XHJcbmZ1bmN0aW9uIG5lYXJlc3RQb3dlck9mMihsZW5ndGgpIHtcclxuICAgIGNvbnN0IGJhc2UgPSAoTWF0aC5sb2cobGVuZ3RoKSAvIGxvZzIpO1xyXG4gICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGJhc2UpO1xyXG4gICAgY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kKGJhc2UpO1xyXG4gICAgcmV0dXJuICgoZmxvb3IgPT09IHJvdW5kKSA/IGZsb29yIDogcm91bmQpO1xyXG59XHJcbmZ1bmN0aW9uIGNsZWFyUHJvcHMob2JqZWN0LCBwcm9wc0FycmF5KSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHNBcnJheSkge1xyXG4gICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcF07XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgYXJyYXlCdWZmZXJUb1N0cmluZywgYnVmZmVyVG9IZXhDb2RlcywgY2hlY2tCdWZmZXJQYXJhbXMsIGNsZWFyUHJvcHMsIGZyb21CYXNlNjQsIGdldFBhcmFtZXRlcnNWYWx1ZSwgZ2V0VVRDRGF0ZSwgaXNFcXVhbEJ1ZmZlciwgbmVhcmVzdFBvd2VyT2YyLCBwYWROdW1iZXIsIHN0cmluZ1RvQXJyYXlCdWZmZXIsIHRvQmFzZTY0LCB1dGlsQ29uY2F0QnVmLCB1dGlsQ29uY2F0VmlldywgdXRpbERlY29kZVRDLCB1dGlsRW5jb2RlVEMsIHV0aWxGcm9tQmFzZSwgdXRpbFRvQmFzZSB9O1xuIiwgIi8qIVxuICogQ29weXJpZ2h0IChjKSAyMDE0LCBHTU8gR2xvYmFsU2lnblxuICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBlY3VsaWFyIFZlbnR1cmVzXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogXG4gKiBBdXRob3IgMjAxNC0yMDE5LCBZdXJ5IFN0cm96aGV2c2t5XG4gKiBcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG4gKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKiBcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqIFxuICogKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gKiAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKiBcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG4gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG4gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqIFxuICovXG5cbmltcG9ydCAqIGFzIHB2dHN1dGlscyBmcm9tICdwdnRzdXRpbHMnO1xuaW1wb3J0ICogYXMgcHZ1dGlscyBmcm9tICdwdnV0aWxzJztcblxuZnVuY3Rpb24gYXNzZXJ0QmlnSW50KCkge1xyXG4gICAgaWYgKHR5cGVvZiBCaWdJbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCaWdJbnQgaXMgbm90IGRlZmluZWQuIFlvdXIgZW52aXJvbm1lbnQgZG9lc24ndCBpbXBsZW1lbnQgQmlnSW50LlwiKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjb25jYXQoYnVmZmVycykge1xyXG4gICAgbGV0IG91dHB1dExlbmd0aCA9IDA7XHJcbiAgICBsZXQgcHJldkxlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBidWZmZXIgPSBidWZmZXJzW2ldO1xyXG4gICAgICAgIG91dHB1dExlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShvdXRwdXRMZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyID0gYnVmZmVyc1tpXTtcclxuICAgICAgICByZXRWaWV3LnNldChuZXcgVWludDhBcnJheShidWZmZXIpLCBwcmV2TGVuZ3RoKTtcclxuICAgICAgICBwcmV2TGVuZ3RoICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG59XHJcbmZ1bmN0aW9uIGNoZWNrQnVmZmVyUGFyYW1zKGJhc2VCbG9jaywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgaWYgKCEoaW5wdXRCdWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dEJ1ZmZlciBtdXN0IGJlICdVaW50OEFycmF5J1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dEJ1ZmZlciBoYXMgemVybyBsZW5ndGhcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRPZmZzZXQgPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0T2Zmc2V0IGxlc3MgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0TGVuZ3RoIDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dExlbmd0aCBsZXNzIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICgoaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCAtIGlucHV0T2Zmc2V0IC0gaW5wdXRMZW5ndGgpIDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWQgKGluY29uc2lzdGVudCBvZmZzZXQgYW5kIGxlbmd0aCB2YWx1ZXMpXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cblxuY2xhc3MgVmlld1dyaXRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICB9XHJcbiAgICB3cml0ZShidWYpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLnB1c2goYnVmKTtcclxuICAgIH1cclxuICAgIGZpbmFsKCkge1xyXG4gICAgICAgIHJldHVybiBjb25jYXQodGhpcy5pdGVtcyk7XHJcbiAgICB9XHJcbn1cblxuY29uc3QgcG93ZXJzMiA9IFtuZXcgVWludDhBcnJheShbMV0pXTtcclxuY29uc3QgZGlnaXRzU3RyaW5nID0gXCIwMTIzNDU2Nzg5XCI7XHJcbmNvbnN0IE5BTUUgPSBcIm5hbWVcIjtcclxuY29uc3QgVkFMVUVfSEVYX1ZJRVcgPSBcInZhbHVlSGV4Vmlld1wiO1xyXG5jb25zdCBJU19IRVhfT05MWSA9IFwiaXNIZXhPbmx5XCI7XHJcbmNvbnN0IElEX0JMT0NLID0gXCJpZEJsb2NrXCI7XHJcbmNvbnN0IFRBR19DTEFTUyA9IFwidGFnQ2xhc3NcIjtcclxuY29uc3QgVEFHX05VTUJFUiA9IFwidGFnTnVtYmVyXCI7XHJcbmNvbnN0IElTX0NPTlNUUlVDVEVEID0gXCJpc0NvbnN0cnVjdGVkXCI7XHJcbmNvbnN0IEZST01fQkVSID0gXCJmcm9tQkVSXCI7XHJcbmNvbnN0IFRPX0JFUiA9IFwidG9CRVJcIjtcclxuY29uc3QgTE9DQUwgPSBcImxvY2FsXCI7XHJcbmNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XHJcbmNvbnN0IEVNUFRZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcclxuY29uc3QgRU1QVFlfVklFVyA9IG5ldyBVaW50OEFycmF5KDApO1xyXG5jb25zdCBFTkRfT0ZfQ09OVEVOVF9OQU1FID0gXCJFbmRPZkNvbnRlbnRcIjtcclxuY29uc3QgT0NURVRfU1RSSU5HX05BTUUgPSBcIk9DVEVUIFNUUklOR1wiO1xyXG5jb25zdCBCSVRfU1RSSU5HX05BTUUgPSBcIkJJVCBTVFJJTkdcIjtcblxuZnVuY3Rpb24gSGV4QmxvY2soQmFzZUNsYXNzKSB7XHJcbiAgICB2YXIgX2E7XHJcbiAgICByZXR1cm4gX2EgPSBjbGFzcyBTb21lIGV4dGVuZHMgQmFzZUNsYXNzIHtcclxuICAgICAgICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICAgICAgc3VwZXIoLi4uYXJncyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBhcmdzWzBdIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSAoX2EgPSBwYXJhbXMuaXNIZXhPbmx5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gcGFyYW1zLnZhbHVlSGV4ID8gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocGFyYW1zLnZhbHVlSGV4KSA6IEVNUFRZX1ZJRVc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ2V0IHZhbHVlSGV4KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldCB2YWx1ZUhleCh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3ID0gaW5wdXRCdWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyKSA6IGlucHV0QnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCB2aWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kTGVuZ3RoID0gaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgZW5kTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiWmVybyBidWZmZXIgbGVuZ3RoXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBpbnB1dExlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmRMZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdG9CRVIoc2l6ZU9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSGV4T25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkZsYWcgJ2lzSGV4T25seScgaXMgbm90IHNldCwgYWJvcnRcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCA9PT0gdGhpcy52YWx1ZUhleFZpZXcuYnVmZmVyLmJ5dGVMZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnZhbHVlSGV4Vmlldy5idWZmZXJcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRvSlNPTigpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgICAgICAgICAgaXNIZXhPbmx5OiB0aGlzLmlzSGV4T25seSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUhleDogcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUhleFZpZXcpLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgX2EuTkFNRSA9IFwiaGV4QmxvY2tcIixcclxuICAgICAgICBfYTtcclxufVxuXG5jbGFzcyBMb2NhbEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGJsb2NrTGVuZ3RoID0gMCwgZXJyb3IgPSBFTVBUWV9TVFJJTkcsIHdhcm5pbmdzID0gW10sIHZhbHVlQmVmb3JlRGVjb2RlID0gRU1QVFlfVklFVywgfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgICAgICB0aGlzLndhcm5pbmdzID0gd2FybmluZ3M7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheSh2YWx1ZUJlZm9yZURlY29kZSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgYmxvY2tOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLk5BTUU7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsdWVCZWZvcmVEZWNvZGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgc2V0IHZhbHVlQmVmb3JlRGVjb2RlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSBuZXcgVWludDhBcnJheSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYmxvY2tOYW1lOiB0aGlzLmNvbnN0cnVjdG9yLk5BTUUsXHJcbiAgICAgICAgICAgIGJsb2NrTGVuZ3RoOiB0aGlzLmJsb2NrTGVuZ3RoLFxyXG4gICAgICAgICAgICBlcnJvcjogdGhpcy5lcnJvcixcclxuICAgICAgICAgICAgd2FybmluZ3M6IHRoaXMud2FybmluZ3MsXHJcbiAgICAgICAgICAgIHZhbHVlQmVmb3JlRGVjb2RlOiBwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlQmVmb3JlRGVjb2RlVmlldyksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbEJhc2VCbG9jay5OQU1FID0gXCJiYXNlQmxvY2tcIjtcblxuY2xhc3MgVmFsdWVCbG9jayBleHRlbmRzIExvY2FsQmFzZUJsb2NrIHtcclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcIlVzZXIgbmVlZCB0byBtYWtlIGEgc3BlY2lmaWMgZnVuY3Rpb24gaW4gYSBjbGFzcyB3aGljaCBleHRlbmRzICdWYWx1ZUJsb2NrJ1wiKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJVc2VyIG5lZWQgdG8gbWFrZSBhIHNwZWNpZmljIGZ1bmN0aW9uIGluIGEgY2xhc3Mgd2hpY2ggZXh0ZW5kcyAnVmFsdWVCbG9jaydcIik7XHJcbiAgICB9XHJcbn1cclxuVmFsdWVCbG9jay5OQU1FID0gXCJ2YWx1ZUJsb2NrXCI7XG5cbmNsYXNzIExvY2FsSWRlbnRpZmljYXRpb25CbG9jayBleHRlbmRzIEhleEJsb2NrKExvY2FsQmFzZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGlkQmxvY2sgPSB7fSwgfSA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgaWYgKGlkQmxvY2spIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSAoX2EgPSBpZEJsb2NrLmlzSGV4T25seSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gaWRCbG9jay52YWx1ZUhleCA/IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlkQmxvY2sudmFsdWVIZXgpIDogRU1QVFlfVklFVztcclxuICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9IChfYiA9IGlkQmxvY2sudGFnQ2xhc3MpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IC0xO1xyXG4gICAgICAgICAgICB0aGlzLnRhZ051bWJlciA9IChfYyA9IGlkQmxvY2sudGFnTnVtYmVyKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAtMTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gKF9kID0gaWRCbG9jay5pc0NvbnN0cnVjdGVkKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAtMTtcclxuICAgICAgICAgICAgdGhpcy50YWdOdW1iZXIgPSAtMTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCBmaXJzdE9jdGV0ID0gMDtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMudGFnQ2xhc3MpIHtcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweDAwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHg0MDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICBmaXJzdE9jdGV0IHw9IDB4ODA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweEMwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJVbmtub3duIHRhZyBjbGFzc1wiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25zdHJ1Y3RlZClcclxuICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweDIwO1xyXG4gICAgICAgIGlmICh0aGlzLnRhZ051bWJlciA8IDMxICYmICF0aGlzLmlzSGV4T25seSkge1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoMSk7XHJcbiAgICAgICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBudW1iZXIgPSB0aGlzLnRhZ051bWJlcjtcclxuICAgICAgICAgICAgICAgIG51bWJlciAmPSAweDFGO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3WzBdID0gZmlyc3RPY3RldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZEJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZSh0aGlzLnRhZ051bWJlciwgNyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zik7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSBlbmNvZGVkQnVmLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShzaXplICsgMSk7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMF0gPSAoZmlyc3RPY3RldCB8IDB4MUYpO1xyXG4gICAgICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChzaXplIC0gMSk7IGkrKylcclxuICAgICAgICAgICAgICAgICAgICByZXRWaWV3W2kgKyAxXSA9IGVuY29kZWRWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbc2l6ZV0gPSBlbmNvZGVkVmlld1tzaXplIC0gMV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCArIDEpO1xyXG4gICAgICAgIHJldFZpZXdbMF0gPSAoZmlyc3RPY3RldCB8IDB4MUYpO1xyXG4gICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VyVmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChjdXJWaWV3Lmxlbmd0aCAtIDEpOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2kgKyAxXSA9IGN1clZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICByZXRWaWV3W3RoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGhdID0gY3VyVmlld1tjdXJWaWV3Lmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSBpbnB1dFZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChpbnRCdWZmZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlplcm8gYnVmZmVyIGxlbmd0aFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRhZ0NsYXNzTWFzayA9IGludEJ1ZmZlclswXSAmIDB4QzA7XHJcbiAgICAgICAgc3dpdGNoICh0YWdDbGFzc01hc2spIHtcclxuICAgICAgICAgICAgY2FzZSAweDAwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9ICgxKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDB4NDA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gKDIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMHg4MDpcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoMyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAweEMwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9ICg0KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVW5rbm93biB0YWcgY2xhc3NcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gKGludEJ1ZmZlclswXSAmIDB4MjApID09PSAweDIwO1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgdGFnTnVtYmVyTWFzayA9IGludEJ1ZmZlclswXSAmIDB4MUY7XHJcbiAgICAgICAgaWYgKHRhZ051bWJlck1hc2sgIT09IDB4MUYpIHtcclxuICAgICAgICAgICAgdGhpcy50YWdOdW1iZXIgPSAodGFnTnVtYmVyTWFzayk7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGNvdW50ID0gMTtcclxuICAgICAgICAgICAgbGV0IGludFRhZ051bWJlckJ1ZmZlciA9IHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoMjU1KTtcclxuICAgICAgICAgICAgbGV0IHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCA9IDI1NTtcclxuICAgICAgICAgICAgd2hpbGUgKGludEJ1ZmZlcltjb3VudF0gJiAweDgwKSB7XHJcbiAgICAgICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXJbY291bnQgLSAxXSA9IGludEJ1ZmZlcltjb3VudF0gJiAweDdGO1xyXG4gICAgICAgICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgICAgICAgIGlmIChjb3VudCA+PSBpbnRCdWZmZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPT09IHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCArPSAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVtcEJ1ZmZlclZpZXcgPSBuZXcgVWludDhBcnJheSh0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW50VGFnTnVtYmVyQnVmZmVyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQnVmZmVyVmlld1tpXSA9IGludFRhZ051bWJlckJ1ZmZlcltpXTtcclxuICAgICAgICAgICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXIgPSB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IChjb3VudCArIDEpO1xyXG4gICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXJbY291bnQgLSAxXSA9IGludEJ1ZmZlcltjb3VudF0gJiAweDdGO1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wQnVmZmVyVmlldyA9IG5ldyBVaW50OEFycmF5KGNvdW50KTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgdGVtcEJ1ZmZlclZpZXdbaV0gPSBpbnRUYWdOdW1iZXJCdWZmZXJbaV07XHJcbiAgICAgICAgICAgIGludFRhZ051bWJlckJ1ZmZlciA9IHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoY291bnQpO1xyXG4gICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXIuc2V0KHRlbXBCdWZmZXJWaWV3KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYmxvY2tMZW5ndGggPD0gOSlcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnTnVtYmVyID0gcHZ1dGlscy51dGlsRnJvbUJhc2UoaW50VGFnTnVtYmVyQnVmZmVyLCA3KTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJUYWcgdG9vIGxvbmcsIHJlcHJlc2VudGVkIGFzIGhleC1jb2RlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKCh0aGlzLnRhZ0NsYXNzID09PSAxKSkgJiZcclxuICAgICAgICAgICAgKHRoaXMuaXNDb25zdHJ1Y3RlZCkpIHtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnRhZ051bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgICAgICAgICAgY2FzZSA5OlxyXG4gICAgICAgICAgICAgICAgY2FzZSAxMzpcclxuICAgICAgICAgICAgICAgIGNhc2UgMTQ6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIzOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAyNDpcclxuICAgICAgICAgICAgICAgIGNhc2UgMzE6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMyOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAzMzpcclxuICAgICAgICAgICAgICAgIGNhc2UgMzQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiQ29uc3RydWN0ZWQgZW5jb2RpbmcgdXNlZCBmb3IgcHJpbWl0aXZlIHR5cGVcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB0YWdDbGFzczogdGhpcy50YWdDbGFzcyxcclxuICAgICAgICAgICAgdGFnTnVtYmVyOiB0aGlzLnRhZ051bWJlcixcclxuICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogdGhpcy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxJZGVudGlmaWNhdGlvbkJsb2NrLk5BTUUgPSBcImlkZW50aWZpY2F0aW9uQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxMZW5ndGhCbG9jayBleHRlbmRzIExvY2FsQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgbGVuQmxvY2sgPSB7fSwgfSA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmlzSW5kZWZpbml0ZUZvcm0gPSAoX2EgPSBsZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLmxvbmdGb3JtVXNlZCA9IChfYiA9IGxlbkJsb2NrLmxvbmdGb3JtVXNlZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSAoX2MgPSBsZW5CbG9jay5sZW5ndGgpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDA7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCB2aWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgdmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludEJ1ZmZlciA9IHZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChpbnRCdWZmZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlplcm8gYnVmZmVyIGxlbmd0aFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbnRCdWZmZXJbMF0gPT09IDB4RkYpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiTGVuZ3RoIGJsb2NrIDB4RkYgaXMgcmVzZXJ2ZWQgYnkgc3RhbmRhcmRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzSW5kZWZpbml0ZUZvcm0gPSBpbnRCdWZmZXJbMF0gPT09IDB4ODA7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvbmdGb3JtVXNlZCA9ICEhKGludEJ1ZmZlclswXSAmIDB4ODApO1xyXG4gICAgICAgIGlmICh0aGlzLmxvbmdGb3JtVXNlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAoaW50QnVmZmVyWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IDE7XHJcbiAgICAgICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY291bnQgPSBpbnRCdWZmZXJbMF0gJiAweDdGO1xyXG4gICAgICAgIGlmIChjb3VudCA+IDgpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVG9vIGJpZyBpbnRlZ2VyXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChjb3VudCArIDEpID4gaW50QnVmZmVyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGxlbk9mZnNldCA9IGlucHV0T2Zmc2V0ICsgMTtcclxuICAgICAgICBjb25zdCBsZW5ndGhCdWZmZXJWaWV3ID0gdmlldy5zdWJhcnJheShsZW5PZmZzZXQsIGxlbk9mZnNldCArIGNvdW50KTtcclxuICAgICAgICBpZiAobGVuZ3RoQnVmZmVyVmlld1tjb3VudCAtIDFdID09PSAweDAwKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOZWVkbGVzc2x5IGxvbmcgZW5jb2RlZCBsZW5ndGhcIik7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSBwdnV0aWxzLnV0aWxGcm9tQmFzZShsZW5ndGhCdWZmZXJWaWV3LCA4KTtcclxuICAgICAgICBpZiAodGhpcy5sb25nRm9ybVVzZWQgJiYgKHRoaXMubGVuZ3RoIDw9IDEyNykpXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlVubmVjZXNzYXJ5IHVzYWdlIG9mIGxvbmcgbGVuZ3RoIGZvcm1cIik7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGNvdW50ICsgMTtcclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IHJldEJ1ZjtcclxuICAgICAgICBsZXQgcmV0VmlldztcclxuICAgICAgICBpZiAodGhpcy5sZW5ndGggPiAxMjcpXHJcbiAgICAgICAgICAgIHRoaXMubG9uZ0Zvcm1Vc2VkID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcigxKTtcclxuICAgICAgICAgICAgaWYgKHNpemVPbmx5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3WzBdID0gMHg4MDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5sb25nRm9ybVVzZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZEJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZSh0aGlzLmxlbmd0aCwgOCk7XHJcbiAgICAgICAgICAgIGlmIChlbmNvZGVkQnVmLmJ5dGVMZW5ndGggPiAxMjcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlRvbyBiaWcgbGVuZ3RoXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKEVNUFRZX0JVRkZFUik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKGVuY29kZWRCdWYuYnl0ZUxlbmd0aCArIDEpO1xyXG4gICAgICAgICAgICBpZiAoc2l6ZU9ubHkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkVmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYpO1xyXG4gICAgICAgICAgICByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgcmV0Vmlld1swXSA9IGVuY29kZWRCdWYuYnl0ZUxlbmd0aCB8IDB4ODA7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2kgKyAxXSA9IGVuY29kZWRWaWV3W2ldO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoMSk7XHJcbiAgICAgICAgaWYgKHNpemVPbmx5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgcmV0Vmlld1swXSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBpc0luZGVmaW5pdGVGb3JtOiB0aGlzLmlzSW5kZWZpbml0ZUZvcm0sXHJcbiAgICAgICAgICAgIGxvbmdGb3JtVXNlZDogdGhpcy5sb25nRm9ybVVzZWQsXHJcbiAgICAgICAgICAgIGxlbmd0aDogdGhpcy5sZW5ndGgsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbExlbmd0aEJsb2NrLk5BTUUgPSBcImxlbmd0aEJsb2NrXCI7XG5cbmNvbnN0IHR5cGVTdG9yZSA9IHt9O1xuXG5jbGFzcyBCYXNlQmxvY2sgZXh0ZW5kcyBMb2NhbEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IG5hbWUgPSBFTVBUWV9TVFJJTkcsIG9wdGlvbmFsID0gZmFsc2UsIHByaW1pdGl2ZVNjaGVtYSwgLi4ucGFyYW1ldGVycyB9ID0ge30sIHZhbHVlQmxvY2tUeXBlKSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLm9wdGlvbmFsID0gb3B0aW9uYWw7XHJcbiAgICAgICAgaWYgKHByaW1pdGl2ZVNjaGVtYSkge1xyXG4gICAgICAgICAgICB0aGlzLnByaW1pdGl2ZVNjaGVtYSA9IHByaW1pdGl2ZVNjaGVtYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrID0gbmV3IExvY2FsSWRlbnRpZmljYXRpb25CbG9jayhwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmxlbkJsb2NrID0gbmV3IExvY2FsTGVuZ3RoQmxvY2socGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrID0gdmFsdWVCbG9ja1R5cGUgPyBuZXcgdmFsdWVCbG9ja1R5cGUocGFyYW1ldGVycykgOiBuZXcgVmFsdWVCbG9jayhwYXJhbWV0ZXJzKTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE9mZnNldCA9IHRoaXMudmFsdWVCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgKHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkgPyBpbnB1dExlbmd0aCA6IHRoaXMubGVuQmxvY2subGVuZ3RoKTtcclxuICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZUJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy52YWx1ZUJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgY29uc3QgX3dyaXRlciA9IHdyaXRlciB8fCBuZXcgVmlld1dyaXRlcigpO1xyXG4gICAgICAgIGlmICghd3JpdGVyKSB7XHJcbiAgICAgICAgICAgIHByZXBhcmVJbmRlZmluaXRlRm9ybSh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaWRCbG9ja0J1ZiA9IHRoaXMuaWRCbG9jay50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgX3dyaXRlci53cml0ZShpZEJsb2NrQnVmKTtcclxuICAgICAgICBpZiAodGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgICAgIF93cml0ZXIud3JpdGUobmV3IFVpbnQ4QXJyYXkoWzB4ODBdKS5idWZmZXIpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudG9CRVIoc2l6ZU9ubHksIF93cml0ZXIpO1xyXG4gICAgICAgICAgICBfd3JpdGVyLndyaXRlKG5ldyBBcnJheUJ1ZmZlcigyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUJsb2NrQnVmID0gdGhpcy52YWx1ZUJsb2NrLnRvQkVSKHNpemVPbmx5KTtcclxuICAgICAgICAgICAgdGhpcy5sZW5CbG9jay5sZW5ndGggPSB2YWx1ZUJsb2NrQnVmLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbkJsb2NrQnVmID0gdGhpcy5sZW5CbG9jay50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgICAgIF93cml0ZXIud3JpdGUobGVuQmxvY2tCdWYpO1xyXG4gICAgICAgICAgICBfd3JpdGVyLndyaXRlKHZhbHVlQmxvY2tCdWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXdyaXRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gX3dyaXRlci5maW5hbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIGlkQmxvY2s6IHRoaXMuaWRCbG9jay50b0pTT04oKSxcclxuICAgICAgICAgICAgbGVuQmxvY2s6IHRoaXMubGVuQmxvY2sudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlQmxvY2s6IHRoaXMudmFsdWVCbG9jay50b0pTT04oKSxcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICBvcHRpb25hbDogdGhpcy5vcHRpb25hbCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLnByaW1pdGl2ZVNjaGVtYSlcclxuICAgICAgICAgICAgb2JqZWN0LnByaW1pdGl2ZVNjaGVtYSA9IHRoaXMucHJpbWl0aXZlU2NoZW1hLnRvSlNPTigpO1xyXG4gICAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZyhlbmNvZGluZyA9IFwiYXNjaWlcIikge1xyXG4gICAgICAgIGlmIChlbmNvZGluZyA9PT0gXCJhc2NpaVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uQXNjaWlFbmNvZGluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy50b0JFUigpKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7cHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUJsb2NrLnZhbHVlQmVmb3JlRGVjb2RlVmlldyl9YDtcclxuICAgIH1cclxuICAgIGlzRXF1YWwob3RoZXIpIHtcclxuICAgICAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0aGlzUmF3ID0gdGhpcy50b0JFUigpO1xyXG4gICAgICAgIGNvbnN0IG90aGVyUmF3ID0gb3RoZXIudG9CRVIoKTtcclxuICAgICAgICByZXR1cm4gcHZ1dGlscy5pc0VxdWFsQnVmZmVyKHRoaXNSYXcsIG90aGVyUmF3KTtcclxuICAgIH1cclxufVxyXG5CYXNlQmxvY2suTkFNRSA9IFwiQmFzZUJsb2NrXCI7XHJcbmZ1bmN0aW9uIHByZXBhcmVJbmRlZmluaXRlRm9ybShiYXNlQmxvY2spIHtcclxuICAgIGlmIChiYXNlQmxvY2sgaW5zdGFuY2VvZiB0eXBlU3RvcmUuQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGJhc2VCbG9jay52YWx1ZUJsb2NrLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChwcmVwYXJlSW5kZWZpbml0ZUZvcm0odmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBiYXNlQmxvY2subGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gISFiYXNlQmxvY2subGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybTtcclxufVxuXG5jbGFzcyBCYXNlU3RyaW5nQmxvY2sgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IEVNUFRZX1NUUklORywgLi4ucGFyYW1ldGVycyB9ID0ge30sIHN0cmluZ1ZhbHVlQmxvY2tUeXBlKSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgc3RyaW5nVmFsdWVCbG9ja1R5cGUpO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmxvY2sudmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0T2Zmc2V0ID0gdGhpcy52YWx1ZUJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCAodGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSA/IGlucHV0TGVuZ3RoIDogdGhpcy5sZW5CbG9jay5sZW5ndGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlQmxvY2suZXJyb3I7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJvbUJ1ZmZlcih0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3KTtcclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy52YWx1ZUJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAnJHt0aGlzLnZhbHVlQmxvY2sudmFsdWV9J2A7XHJcbiAgICB9XHJcbn1cclxuQmFzZVN0cmluZ0Jsb2NrLk5BTUUgPSBcIkJhc2VTdHJpbmdCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbFByaW1pdGl2ZVZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGlzSGV4T25seSA9IHRydWUsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pc0hleE9ubHkgPSBpc0hleE9ubHk7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxQcmltaXRpdmVWYWx1ZUJsb2NrLk5BTUUgPSBcIlByaW1pdGl2ZVZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHc7XHJcbmNsYXNzIFByaW1pdGl2ZSBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbFByaW1pdGl2ZVZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuX2EkdyA9IFByaW1pdGl2ZTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5QcmltaXRpdmUgPSBfYSR3O1xyXG59KSgpO1xyXG5QcmltaXRpdmUuTkFNRSA9IFwiUFJJTUlUSVZFXCI7XG5cbmZ1bmN0aW9uIGxvY2FsQ2hhbmdlVHlwZShpbnB1dE9iamVjdCwgbmV3VHlwZSkge1xyXG4gICAgaWYgKGlucHV0T2JqZWN0IGluc3RhbmNlb2YgbmV3VHlwZSkge1xyXG4gICAgICAgIHJldHVybiBpbnB1dE9iamVjdDtcclxuICAgIH1cclxuICAgIGNvbnN0IG5ld09iamVjdCA9IG5ldyBuZXdUeXBlKCk7XHJcbiAgICBuZXdPYmplY3QuaWRCbG9jayA9IGlucHV0T2JqZWN0LmlkQmxvY2s7XHJcbiAgICBuZXdPYmplY3QubGVuQmxvY2sgPSBpbnB1dE9iamVjdC5sZW5CbG9jaztcclxuICAgIG5ld09iamVjdC53YXJuaW5ncyA9IGlucHV0T2JqZWN0Lndhcm5pbmdzO1xyXG4gICAgbmV3T2JqZWN0LnZhbHVlQmVmb3JlRGVjb2RlVmlldyA9IGlucHV0T2JqZWN0LnZhbHVlQmVmb3JlRGVjb2RlVmlldztcclxuICAgIHJldHVybiBuZXdPYmplY3Q7XHJcbn1cclxuZnVuY3Rpb24gbG9jYWxGcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCA9IDAsIGlucHV0TGVuZ3RoID0gaW5wdXRCdWZmZXIubGVuZ3RoKSB7XHJcbiAgICBjb25zdCBpbmNvbWluZ09mZnNldCA9IGlucHV0T2Zmc2V0O1xyXG4gICAgbGV0IHJldHVybk9iamVjdCA9IG5ldyBCYXNlQmxvY2soe30sIFZhbHVlQmxvY2spO1xyXG4gICAgY29uc3QgYmFzZUJsb2NrID0gbmV3IExvY2FsQmFzZUJsb2NrKCk7XHJcbiAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKGJhc2VCbG9jaywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBiYXNlQmxvY2suZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRCdWZmZXIuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgaWYgKCFpbnRCdWZmZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBsZXQgcmVzdWx0T2Zmc2V0ID0gcmV0dXJuT2JqZWN0LmlkQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgIGlmIChyZXR1cm5PYmplY3QuaWRCbG9jay53YXJuaW5ncy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm5PYmplY3Qud2FybmluZ3MuY29uY2F0KHJldHVybk9iamVjdC5pZEJsb2NrLndhcm5pbmdzKTtcclxuICAgIH1cclxuICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gcmV0dXJuT2JqZWN0LmlkQmxvY2suZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaW5wdXRPZmZzZXQgPSByZXN1bHRPZmZzZXQ7XHJcbiAgICBpbnB1dExlbmd0aCAtPSByZXR1cm5PYmplY3QuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgIHJlc3VsdE9mZnNldCA9IHJldHVybk9iamVjdC5sZW5CbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgaWYgKHJldHVybk9iamVjdC5sZW5CbG9jay53YXJuaW5ncy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm5PYmplY3Qud2FybmluZ3MuY29uY2F0KHJldHVybk9iamVjdC5sZW5CbG9jay53YXJuaW5ncyk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IHJldHVybk9iamVjdC5sZW5CbG9jay5lcnJvcjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpbnB1dE9mZnNldCA9IHJlc3VsdE9mZnNldDtcclxuICAgIGlucHV0TGVuZ3RoIC09IHJldHVybk9iamVjdC5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgIGlmICghcmV0dXJuT2JqZWN0LmlkQmxvY2suaXNDb25zdHJ1Y3RlZCAmJlxyXG4gICAgICAgIHJldHVybk9iamVjdC5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gXCJJbmRlZmluaXRlIGxlbmd0aCBmb3JtIHVzZWQgZm9yIHByaW1pdGl2ZSBlbmNvZGluZyBmb3JtXCI7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IG5ld0FTTjFUeXBlID0gQmFzZUJsb2NrO1xyXG4gICAgc3dpdGNoIChyZXR1cm5PYmplY3QuaWRCbG9jay50YWdDbGFzcykge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgaWYgKChyZXR1cm5PYmplY3QuaWRCbG9jay50YWdOdW1iZXIgPj0gMzcpICYmXHJcbiAgICAgICAgICAgICAgICAocmV0dXJuT2JqZWN0LmlkQmxvY2suaXNIZXhPbmx5ID09PSBmYWxzZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiVU5JVkVSU0FMIDM3IGFuZCB1cHBlciB0YWdzIGFyZSByZXNlcnZlZCBieSBBU04uMSBzdGFuZGFyZFwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmV0dXJuT2JqZWN0LmlkQmxvY2sudGFnTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChyZXR1cm5PYmplY3QuaWRCbG9jay5pc0NvbnN0cnVjdGVkKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocmV0dXJuT2JqZWN0LmxlbkJsb2NrLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiVHlwZSBbVU5JVkVSU0FMIDBdIGlzIHJlc2VydmVkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuRW5kT2ZDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkJvb2xlYW47XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuSW50ZWdlcjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5CaXRTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuT2N0ZXRTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuTnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5PYmplY3RJZGVudGlmaWVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5FbnVtZXJhdGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5VdGY4U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5SZWxhdGl2ZU9iamVjdElkZW50aWZpZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE0OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlRJTUU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE1OlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiW1VOSVZFUlNBTCAxNV0gaXMgcmVzZXJ2ZWQgYnkgQVNOLjEgc3RhbmRhcmRcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE2OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlNlcXVlbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxNzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5TZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE4OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLk51bWVyaWNTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE5OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlByaW50YWJsZVN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjA6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVGVsZXRleFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjE6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVmlkZW90ZXhTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIyOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLklBNVN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjM6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVVRDVGltZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjQ6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuR2VuZXJhbGl6ZWRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyNTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5HcmFwaGljU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyNjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5WaXNpYmxlU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyNzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5HZW5lcmFsU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyODpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5Vbml2ZXJzYWxTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI5OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkNoYXJhY3RlclN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzA6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuQm1wU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzMTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5EQVRFO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzMjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5UaW1lT2ZEYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMzOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkRhdGVUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzNDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5EdXJhdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdPYmplY3QgPSByZXR1cm5PYmplY3QuaWRCbG9jay5pc0NvbnN0cnVjdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IHR5cGVTdG9yZS5Db25zdHJ1Y3RlZCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3IHR5cGVTdG9yZS5QcmltaXRpdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICBuZXdPYmplY3QuaWRCbG9jayA9IHJldHVybk9iamVjdC5pZEJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld09iamVjdC5sZW5CbG9jayA9IHJldHVybk9iamVjdC5sZW5CbG9jaztcclxuICAgICAgICAgICAgICAgICAgICBuZXdPYmplY3Qud2FybmluZ3MgPSByZXR1cm5PYmplY3Qud2FybmluZ3M7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0ID0gbmV3T2JqZWN0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSByZXR1cm5PYmplY3QuaWRCbG9jay5pc0NvbnN0cnVjdGVkXHJcbiAgICAgICAgICAgICAgICA/IHR5cGVTdG9yZS5Db25zdHJ1Y3RlZFxyXG4gICAgICAgICAgICAgICAgOiB0eXBlU3RvcmUuUHJpbWl0aXZlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybk9iamVjdCA9IGxvY2FsQ2hhbmdlVHlwZShyZXR1cm5PYmplY3QsIG5ld0FTTjFUeXBlKTtcclxuICAgIHJlc3VsdE9mZnNldCA9IHJldHVybk9iamVjdC5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgcmV0dXJuT2JqZWN0LmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPyBpbnB1dExlbmd0aCA6IHJldHVybk9iamVjdC5sZW5CbG9jay5sZW5ndGgpO1xyXG4gICAgcmV0dXJuT2JqZWN0LnZhbHVlQmVmb3JlRGVjb2RlVmlldyA9IGlucHV0QnVmZmVyLnN1YmFycmF5KGluY29taW5nT2Zmc2V0LCBpbmNvbWluZ09mZnNldCArIHJldHVybk9iamVjdC5ibG9ja0xlbmd0aCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG9mZnNldDogcmVzdWx0T2Zmc2V0LFxyXG4gICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGZyb21CRVIoaW5wdXRCdWZmZXIpIHtcclxuICAgIGlmICghaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBCYXNlQmxvY2soe30sIFZhbHVlQmxvY2spO1xyXG4gICAgICAgIHJlc3VsdC5lcnJvciA9IFwiSW5wdXQgYnVmZmVyIGhhcyB6ZXJvIGxlbmd0aFwiO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbG9jYWxGcm9tQkVSKHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKS5zbGljZSgpLCAwLCBpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoKTtcclxufVxuXG5mdW5jdGlvbiBjaGVja0xlbihpbmRlZmluaXRlTGVuZ3RoLCBsZW5ndGgpIHtcclxuICAgIGlmIChpbmRlZmluaXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVuZ3RoO1xyXG59XHJcbmNsYXNzIExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrIGV4dGVuZHMgVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gW10sIGlzSW5kZWZpbml0ZUZvcm0gPSBmYWxzZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5pc0luZGVmaW5pdGVGb3JtID0gaXNJbmRlZmluaXRlRm9ybTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCB2aWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSB2aWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlplcm8gYnVmZmVyIGxlbmd0aFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY3VycmVudE9mZnNldCA9IGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIHdoaWxlIChjaGVja0xlbih0aGlzLmlzSW5kZWZpbml0ZUZvcm0sIGlucHV0TGVuZ3RoKSA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0dXJuT2JqZWN0ID0gbG9jYWxGcm9tQkVSKHZpZXcsIGN1cnJlbnRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJldHVybk9iamVjdC5vZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gcmV0dXJuT2JqZWN0LnJlc3VsdC5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MuY29uY2F0KHJldHVybk9iamVjdC5yZXN1bHQud2FybmluZ3MpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSByZXR1cm5PYmplY3Qub2Zmc2V0O1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHJldHVybk9iamVjdC5yZXN1bHQuYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIGlucHV0TGVuZ3RoIC09IHJldHVybk9iamVjdC5yZXN1bHQuYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChyZXR1cm5PYmplY3QucmVzdWx0KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSAmJiByZXR1cm5PYmplY3QucmVzdWx0LmNvbnN0cnVjdG9yLk5BTUUgPT09IEVORF9PRl9DT05URU5UX05BTUUpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGggLSAxXS5jb25zdHJ1Y3Rvci5OQU1FID09PSBFTkRfT0ZfQ09OVEVOVF9OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnBvcCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTm8gRW5kT2ZDb250ZW50IGJsb2NrIGVuY29kZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgY29uc3QgX3dyaXRlciA9IHdyaXRlciB8fCBuZXcgVmlld1dyaXRlcigpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlW2ldLnRvQkVSKHNpemVPbmx5LCBfd3JpdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF3cml0ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF93cml0ZXIuZmluYWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBpc0luZGVmaW5pdGVGb3JtOiB0aGlzLmlzSW5kZWZpbml0ZUZvcm0sXHJcbiAgICAgICAgICAgIHZhbHVlOiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgICBvYmplY3QudmFsdWUucHVzaCh2YWx1ZS50b0pTT04oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2suTkFNRSA9IFwiQ29uc3RydWN0ZWRWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSR2O1xyXG5jbGFzcyBDb25zdHJ1Y3RlZCBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLmlzQ29uc3RydWN0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPSB0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm07XHJcbiAgICAgICAgY29uc3QgcmVzdWx0T2Zmc2V0ID0gdGhpcy52YWx1ZUJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCAodGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSA/IGlucHV0TGVuZ3RoIDogdGhpcy5sZW5CbG9jay5sZW5ndGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlQmxvY2suZXJyb3I7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pZEJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxlbkJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmxlbkJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy52YWx1ZUJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLnZhbHVlQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMudmFsdWVCbG9jay52YWx1ZSkge1xyXG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZS50b1N0cmluZyhcImFzY2lpXCIpLnNwbGl0KFwiXFxuXCIpLm1hcChvID0+IGAgICR7b31gKS5qb2luKFwiXFxuXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmxvY2tOYW1lID0gdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID09PSAzXHJcbiAgICAgICAgICAgID8gYFske3RoaXMuaWRCbG9jay50YWdOdW1iZXJ9XWBcclxuICAgICAgICAgICAgOiB0aGlzLmNvbnN0cnVjdG9yLk5BTUU7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5sZW5ndGhcclxuICAgICAgICAgICAgPyBgJHtibG9ja05hbWV9IDpcXG4ke3ZhbHVlcy5qb2luKFwiXFxuXCIpfWBcclxuICAgICAgICAgICAgOiBgJHtibG9ja05hbWV9IDpgO1xyXG4gICAgfVxyXG59XHJcbl9hJHYgPSBDb25zdHJ1Y3RlZDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5Db25zdHJ1Y3RlZCA9IF9hJHY7XHJcbn0pKCk7XHJcbkNvbnN0cnVjdGVkLk5BTUUgPSBcIkNPTlNUUlVDVEVEXCI7XG5cbmNsYXNzIExvY2FsRW5kT2ZDb250ZW50VmFsdWVCbG9jayBleHRlbmRzIFZhbHVlQmxvY2sge1xyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsRW5kT2ZDb250ZW50VmFsdWVCbG9jay5vdmVycmlkZSA9IFwiRW5kT2ZDb250ZW50VmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkdTtcclxuY2xhc3MgRW5kT2ZDb250ZW50IGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsRW5kT2ZDb250ZW50VmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMDtcclxuICAgIH1cclxufVxyXG5fYSR1ID0gRW5kT2ZDb250ZW50O1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkVuZE9mQ29udGVudCA9IF9hJHU7XHJcbn0pKCk7XHJcbkVuZE9mQ29udGVudC5OQU1FID0gRU5EX09GX0NPTlRFTlRfTkFNRTtcblxudmFyIF9hJHQ7XHJcbmNsYXNzIE51bGwgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gNTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxlbkJsb2NrLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5vbi16ZXJvIGxlbmd0aCBvZiB2YWx1ZSBibG9jayBmb3IgTnVsbCB0eXBlXCIpO1xyXG4gICAgICAgIGlmICghdGhpcy5pZEJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxlbkJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmxlbkJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgaWYgKChpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKSA+IGlucHV0QnVmZmVyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWQgKGluY29uc2lzdGVudCBvZmZzZXQgYW5kIGxlbmd0aCB2YWx1ZXMpXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBjb25zdCByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoMik7XHJcbiAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgcmV0Vmlld1swXSA9IDB4MDU7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMV0gPSAweDAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod3JpdGVyKSB7XHJcbiAgICAgICAgICAgIHdyaXRlci53cml0ZShyZXRCdWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9YDtcclxuICAgIH1cclxufVxyXG5fYSR0ID0gTnVsbDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5OdWxsID0gX2EkdDtcclxufSkoKTtcclxuTnVsbC5OQU1FID0gXCJOVUxMXCI7XG5cbmNsYXNzIExvY2FsQm9vbGVhblZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLnZhbHVlSGV4KSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocGFyYW1ldGVycy52YWx1ZUhleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG9jdGV0IG9mIHRoaXMudmFsdWVIZXhWaWV3KSB7XHJcbiAgICAgICAgICAgIGlmIChvY3RldCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3WzBdID0gdmFsdWUgPyAweEZGIDogMHgwMDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGlucHV0VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIGlucHV0VmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAoaW5wdXRMZW5ndGggPiAxKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJCb29sZWFuIHZhbHVlIGVuY29kZWQgaW4gbW9yZSB0aGVuIDEgb2N0ZXRcIik7XHJcbiAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIHB2dXRpbHMudXRpbERlY29kZVRDLmNhbGwodGhpcyk7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGlucHV0TGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKTtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbEJvb2xlYW5WYWx1ZUJsb2NrLk5BTUUgPSBcIkJvb2xlYW5WYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRzO1xyXG5jbGFzcyBCb29sZWFuIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsQm9vbGVhblZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0VmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy5nZXRWYWx1ZX1gO1xyXG4gICAgfVxyXG59XHJcbl9hJHMgPSBCb29sZWFuO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkJvb2xlYW4gPSBfYSRzO1xyXG59KSgpO1xyXG5Cb29sZWFuLk5BTUUgPSBcIkJPT0xFQU5cIjtcblxuY2xhc3MgTG9jYWxPY3RldFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyBpc0NvbnN0cnVjdGVkID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gaXNDb25zdHJ1Y3RlZDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQgPSAwO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sucHJvdG90eXBlLmZyb21CRVIuY2FsbCh0aGlzLCBpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRCbG9ja05hbWUgPSB0aGlzLnZhbHVlW2ldLmNvbnN0cnVjdG9yLk5BTUU7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJsb2NrTmFtZSA9PT0gRU5EX09GX0NPTlRFTlRfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmRPZkNvbnRlbnQgaXMgdW5leHBlY3RlZCwgT0NURVQgU1RSSU5HIG1heSBjb25zaXN0cyBvZiBPQ1RFVCBTVFJJTkdzIG9ubHlcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QmxvY2tOYW1lICE9PSBPQ1RFVF9TVFJJTkdfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIk9DVEVUIFNUUklORyBtYXkgY29uc2lzdHMgb2YgT0NURVQgU1RSSU5HcyBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IHN1cGVyLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBpbnB1dExlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKVxyXG4gICAgICAgICAgICByZXR1cm4gTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sucHJvdG90eXBlLnRvQkVSLmNhbGwodGhpcywgc2l6ZU9ubHksIHdyaXRlcik7XHJcbiAgICAgICAgcmV0dXJuIHNpemVPbmx5XHJcbiAgICAgICAgICAgID8gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGgpXHJcbiAgICAgICAgICAgIDogdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIGlzQ29uc3RydWN0ZWQ6IHRoaXMuaXNDb25zdHJ1Y3RlZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsT2N0ZXRTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIk9jdGV0U3RyaW5nVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkcjtcclxuY2xhc3MgT2N0ZXRTdHJpbmcgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyBpZEJsb2NrID0ge30sIGxlbkJsb2NrID0ge30sIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYztcclxuICAgICAgICAoX2IgPSBwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IChwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQgPSAhISgoX2MgPSBwYXJhbWV0ZXJzLnZhbHVlKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSk7XHJcbiAgICAgICAgc3VwZXIoe1xyXG4gICAgICAgICAgICBpZEJsb2NrOiB7XHJcbiAgICAgICAgICAgICAgICBpc0NvbnN0cnVjdGVkOiBwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQsXHJcbiAgICAgICAgICAgICAgICAuLi5pZEJsb2NrLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBsZW5CbG9jazoge1xyXG4gICAgICAgICAgICAgICAgLi4ubGVuQmxvY2ssXHJcbiAgICAgICAgICAgICAgICBpc0luZGVmaW5pdGVGb3JtOiAhIXBhcmFtZXRlcnMuaXNJbmRlZmluaXRlRm9ybSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4ucGFyYW1ldGVycyxcclxuICAgICAgICB9LCBMb2NhbE9jdGV0U3RyaW5nVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gNDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkID0gdGhpcy5pZEJsb2NrLmlzQ29uc3RydWN0ZWQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPSB0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm07XHJcbiAgICAgICAgaWYgKGlucHV0TGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlkQmxvY2suZXJyb3IubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxlbkJsb2NrLmVycm9yLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSBpbnB1dEJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gbmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpIDogaW5wdXRCdWZmZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1ZiA9IHZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGJ1Zi5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuID0gbG9jYWxGcm9tQkVSKGJ1ZiwgMCwgYnVmLmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhc24ub2Zmc2V0ICE9PSAtMSAmJiBhc24ub2Zmc2V0ID09PSBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBbYXNuLnJlc3VsdF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkIHx8ICh0aGlzLnZhbHVlQmxvY2sudmFsdWUgJiYgdGhpcy52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdGVkLnByb3RvdHlwZS5vbkFzY2lpRW5jb2RpbmcuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3B2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcpfWA7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBhcnJheSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgY29udGVudCBvZiB0aGlzLnZhbHVlQmxvY2sudmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBPY3RldFN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaChjb250ZW50LnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci5jb25jYXQoYXJyYXkpO1xyXG4gICAgfVxyXG59XHJcbl9hJHIgPSBPY3RldFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5PY3RldFN0cmluZyA9IF9hJHI7XHJcbn0pKCk7XHJcbk9jdGV0U3RyaW5nLk5BTUUgPSBPQ1RFVF9TVFJJTkdfTkFNRTtcblxuY2xhc3MgTG9jYWxCaXRTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdW51c2VkQml0cyA9IDAsIGlzQ29uc3RydWN0ZWQgPSBmYWxzZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSB1bnVzZWRCaXRzO1xyXG4gICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IGlzQ29uc3RydWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGg7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBpZiAoIWlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlc3VsdE9mZnNldCA9IC0xO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sucHJvdG90eXBlLmZyb21CRVIuY2FsbCh0aGlzLCBpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRCbG9ja05hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5OQU1FO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCbG9ja05hbWUgPT09IEVORF9PRl9DT05URU5UX05BTUUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kT2ZDb250ZW50IGlzIHVuZXhwZWN0ZWQsIEJJVCBTVFJJTkcgbWF5IGNvbnNpc3RzIG9mIEJJVCBTVFJJTkdzIG9ubHlcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QmxvY2tOYW1lICE9PSBCSVRfU1RSSU5HX05BTUUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJCSVQgU1RSSU5HIG1heSBjb25zaXN0cyBvZiBCSVQgU1RSSU5HcyBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVCbG9jayA9IHZhbHVlLnZhbHVlQmxvY2s7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMudW51c2VkQml0cyA+IDApICYmICh2YWx1ZUJsb2NrLnVudXNlZEJpdHMgPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlVzaW5nIG9mIFxcXCJ1bnVzZWQgYml0c1xcXCIgaW5zaWRlIGNvbnN0cnVjdGl2ZSBCSVQgU1RSSU5HIGFsbG93ZWQgZm9yIGxlYXN0IG9uZSBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gdmFsdWVCbG9jay51bnVzZWRCaXRzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlucHV0VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIGlucHV0VmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludEJ1ZmZlciA9IGlucHV0Vmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gaW50QnVmZmVyWzBdO1xyXG4gICAgICAgIGlmICh0aGlzLnVudXNlZEJpdHMgPiA3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlVudXNlZCBiaXRzIGZvciBCaXRTdHJpbmcgbXVzdCBiZSBpbiByYW5nZSAwLTdcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudW51c2VkQml0cykge1xyXG4gICAgICAgICAgICBjb25zdCBidWYgPSBpbnRCdWZmZXIuc3ViYXJyYXkoMSk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVmLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc24gPSBsb2NhbEZyb21CRVIoYnVmLCAwLCBidWYuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFzbi5vZmZzZXQgIT09IC0xICYmIGFzbi5vZmZzZXQgPT09IChpbnB1dExlbmd0aCAtIDEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbYXNuLnJlc3VsdF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBpbnRCdWZmZXIuc3ViYXJyYXkoMSk7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGludEJ1ZmZlci5sZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jay5wcm90b3R5cGUudG9CRVIuY2FsbCh0aGlzLCBzaXplT25seSwgd3JpdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCArIDEpO1xyXG4gICAgICAgIHJldFZpZXdbMF0gPSB0aGlzLnVudXNlZEJpdHM7XHJcbiAgICAgICAgcmV0Vmlldy5zZXQodGhpcy52YWx1ZUhleFZpZXcsIDEpO1xyXG4gICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdW51c2VkQml0czogdGhpcy51bnVzZWRCaXRzLFxyXG4gICAgICAgICAgICBpc0NvbnN0cnVjdGVkOiB0aGlzLmlzQ29uc3RydWN0ZWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbEJpdFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiQml0U3RyaW5nVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkcTtcclxuY2xhc3MgQml0U3RyaW5nIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgaWRCbG9jayA9IHt9LCBsZW5CbG9jayA9IHt9LCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYiwgX2M7XHJcbiAgICAgICAgKF9iID0gcGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAocGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkID0gISEoKF9jID0gcGFyYW1ldGVycy52YWx1ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCkpO1xyXG4gICAgICAgIHN1cGVyKHtcclxuICAgICAgICAgICAgaWRCbG9jazoge1xyXG4gICAgICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogcGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgICAgICAgICAgLi4uaWRCbG9jayxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbGVuQmxvY2s6IHtcclxuICAgICAgICAgICAgICAgIC4uLmxlbkJsb2NrLFxyXG4gICAgICAgICAgICAgICAgaXNJbmRlZmluaXRlRm9ybTogISFwYXJhbWV0ZXJzLmlzSW5kZWZpbml0ZUZvcm0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLnBhcmFtZXRlcnMsXHJcbiAgICAgICAgfSwgTG9jYWxCaXRTdHJpbmdWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzQ29uc3RydWN0ZWQgPSB0aGlzLmlkQmxvY2suaXNDb25zdHJ1Y3RlZDtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suaXNJbmRlZmluaXRlRm9ybSA9IHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybTtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZUJsb2NrLmlzQ29uc3RydWN0ZWQgfHwgKHRoaXMudmFsdWVCbG9jay52YWx1ZSAmJiB0aGlzLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gQ29uc3RydWN0ZWQucHJvdG90eXBlLm9uQXNjaWlFbmNvZGluZy5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgYml0cyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUhleCA9IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgYnl0ZSBvZiB2YWx1ZUhleCkge1xyXG4gICAgICAgICAgICAgICAgYml0cy5wdXNoKGJ5dGUudG9TdHJpbmcoMikucGFkU3RhcnQoOCwgXCIwXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBiaXRzU3RyID0gYml0cy5qb2luKFwiXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7Yml0c1N0ci5zdWJzdHJpbmcoMCwgYml0c1N0ci5sZW5ndGggLSB0aGlzLnZhbHVlQmxvY2sudW51c2VkQml0cyl9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuX2EkcSA9IEJpdFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5CaXRTdHJpbmcgPSBfYSRxO1xyXG59KSgpO1xyXG5CaXRTdHJpbmcuTkFNRSA9IEJJVF9TVFJJTkdfTkFNRTtcblxudmFyIF9hJHA7XHJcbmZ1bmN0aW9uIHZpZXdBZGQoZmlyc3QsIHNlY29uZCkge1xyXG4gICAgY29uc3QgYyA9IG5ldyBVaW50OEFycmF5KFswXSk7XHJcbiAgICBjb25zdCBmaXJzdFZpZXcgPSBuZXcgVWludDhBcnJheShmaXJzdCk7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc2Vjb25kKTtcclxuICAgIGxldCBmaXJzdFZpZXdDb3B5ID0gZmlyc3RWaWV3LnNsaWNlKDApO1xyXG4gICAgY29uc3QgZmlyc3RWaWV3Q29weUxlbmd0aCA9IGZpcnN0Vmlld0NvcHkubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXdDb3B5ID0gc2Vjb25kVmlldy5zbGljZSgwKTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXdDb3B5TGVuZ3RoID0gc2Vjb25kVmlld0NvcHkubGVuZ3RoIC0gMTtcclxuICAgIGxldCB2YWx1ZSA9IDA7XHJcbiAgICBjb25zdCBtYXggPSAoc2Vjb25kVmlld0NvcHlMZW5ndGggPCBmaXJzdFZpZXdDb3B5TGVuZ3RoKSA/IGZpcnN0Vmlld0NvcHlMZW5ndGggOiBzZWNvbmRWaWV3Q29weUxlbmd0aDtcclxuICAgIGxldCBjb3VudGVyID0gMDtcclxuICAgIGZvciAobGV0IGkgPSBtYXg7IGkgPj0gMDsgaS0tLCBjb3VudGVyKyspIHtcclxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICAgICAgY2FzZSAoY291bnRlciA8IHNlY29uZFZpZXdDb3B5Lmxlbmd0aCk6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdICsgc2Vjb25kVmlld0NvcHlbc2Vjb25kVmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSArIGNbMF07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gKyBjWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjWzBdID0gdmFsdWUgLyAxMDtcclxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICAgICAgY2FzZSAoY291bnRlciA+PSBmaXJzdFZpZXdDb3B5Lmxlbmd0aCk6XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5ID0gcHZ1dGlscy51dGlsQ29uY2F0VmlldyhuZXcgVWludDhBcnJheShbdmFsdWUgJSAxMF0pLCBmaXJzdFZpZXdDb3B5KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZSAlIDEwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjWzBdID4gMClcclxuICAgICAgICBmaXJzdFZpZXdDb3B5ID0gcHZ1dGlscy51dGlsQ29uY2F0VmlldyhjLCBmaXJzdFZpZXdDb3B5KTtcclxuICAgIHJldHVybiBmaXJzdFZpZXdDb3B5O1xyXG59XHJcbmZ1bmN0aW9uIHBvd2VyMihuKSB7XHJcbiAgICBpZiAobiA+PSBwb3dlcnMyLmxlbmd0aCkge1xyXG4gICAgICAgIGZvciAobGV0IHAgPSBwb3dlcnMyLmxlbmd0aDsgcCA8PSBuOyBwKyspIHtcclxuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyBVaW50OEFycmF5KFswXSk7XHJcbiAgICAgICAgICAgIGxldCBkaWdpdHMgPSAocG93ZXJzMltwIC0gMV0pLnNsaWNlKDApO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gKGRpZ2l0cy5sZW5ndGggLSAxKTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gbmV3IFVpbnQ4QXJyYXkoWyhkaWdpdHNbaV0gPDwgMSkgKyBjWzBdXSk7XHJcbiAgICAgICAgICAgICAgICBjWzBdID0gbmV3VmFsdWVbMF0gLyAxMDtcclxuICAgICAgICAgICAgICAgIGRpZ2l0c1tpXSA9IG5ld1ZhbHVlWzBdICUgMTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNbMF0gPiAwKVxyXG4gICAgICAgICAgICAgICAgZGlnaXRzID0gcHZ1dGlscy51dGlsQ29uY2F0VmlldyhjLCBkaWdpdHMpO1xyXG4gICAgICAgICAgICBwb3dlcnMyLnB1c2goZGlnaXRzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcG93ZXJzMltuXTtcclxufVxyXG5mdW5jdGlvbiB2aWV3U3ViKGZpcnN0LCBzZWNvbmQpIHtcclxuICAgIGxldCBiID0gMDtcclxuICAgIGNvbnN0IGZpcnN0VmlldyA9IG5ldyBVaW50OEFycmF5KGZpcnN0KTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXcgPSBuZXcgVWludDhBcnJheShzZWNvbmQpO1xyXG4gICAgY29uc3QgZmlyc3RWaWV3Q29weSA9IGZpcnN0Vmlldy5zbGljZSgwKTtcclxuICAgIGNvbnN0IGZpcnN0Vmlld0NvcHlMZW5ndGggPSBmaXJzdFZpZXdDb3B5Lmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3Q29weSA9IHNlY29uZFZpZXcuc2xpY2UoMCk7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3Q29weUxlbmd0aCA9IHNlY29uZFZpZXdDb3B5Lmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgdmFsdWU7XHJcbiAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gc2Vjb25kVmlld0NvcHlMZW5ndGg7IGkgPj0gMDsgaS0tLCBjb3VudGVyKyspIHtcclxuICAgICAgICB2YWx1ZSA9IGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdIC0gc2Vjb25kVmlld0NvcHlbc2Vjb25kVmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSAtIGI7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKHZhbHVlIDwgMCk6XHJcbiAgICAgICAgICAgICAgICBiID0gMTtcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdID0gdmFsdWUgKyAxMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYiA9IDA7XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChiID4gMCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAoZmlyc3RWaWV3Q29weUxlbmd0aCAtIHNlY29uZFZpZXdDb3B5TGVuZ3RoICsgMSk7IGkgPj0gMDsgaS0tLCBjb3VudGVyKyspIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSAtIGI7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA8IDApIHtcclxuICAgICAgICAgICAgICAgIGIgPSAxO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZSArIDEwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYiA9IDA7XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlyc3RWaWV3Q29weS5zbGljZSgpO1xyXG59XHJcbmNsYXNzIExvY2FsSW50ZWdlclZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlRGVjID0gMDtcclxuICAgICAgICBpZiAocGFyYW1ldGVycy52YWx1ZUhleCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlSGV4KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVEZWMgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZUhleCgpIHtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoID49IDQpIHtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVG9vIGJpZyBJbnRlZ2VyIGZvciBkZWNvZGluZywgaGV4IG9ubHlcIik7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWVEZWMgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlRGVjID0gcHZ1dGlscy51dGlsRGVjb2RlVEMuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHNldCB2YWx1ZURlYyh2KSB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWVEZWMgPSB2O1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShwdnV0aWxzLnV0aWxFbmNvZGVUQyh2KSk7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsdWVEZWMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlRGVjO1xyXG4gICAgfVxyXG4gICAgZnJvbURFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoLCBleHBlY3RlZExlbmd0aCA9IDApIHtcclxuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gLTEpXHJcbiAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIGlmICgodmlld1swXSA9PT0gMHgwMCkgJiYgKCh2aWV3WzFdICYgMHg4MCkgIT09IDApKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdmlldy5zdWJhcnJheSgxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChleHBlY3RlZExlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZpZXcubGVuZ3RoIDwgZXhwZWN0ZWRMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGV4cGVjdGVkTGVuZ3RoIC0gdmlldy5sZW5ndGgpID4gMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRMZW5ndGggPSB2aWV3Lmxlbmd0aCArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB2aWV3LnN1YmFycmF5KGV4cGVjdGVkTGVuZ3RoIC0gdmlldy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0RFUihzaXplT25seSA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjYXNlICgodmlld1swXSAmIDB4ODApICE9PSAwKTpcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRWaWV3WzBdID0gMHgwMDtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkVmlldy5zZXQodmlldywgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB1cGRhdGVkVmlldztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICgodmlld1swXSA9PT0gMHgwMCkgJiYgKCh2aWV3WzFdICYgMHg4MCkgPT09IDApKTpcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHRoaXMudmFsdWVIZXhWaWV3LnN1YmFycmF5KDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnRvQkVSKHNpemVPbmx5KTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE9mZnNldCA9IHN1cGVyLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZUhleCgpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIHJldHVybiBzaXplT25seVxyXG4gICAgICAgICAgICA/IG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGgpXHJcbiAgICAgICAgICAgIDogdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlRGVjOiB0aGlzLnZhbHVlRGVjLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICBjb25zdCBmaXJzdEJpdCA9ICh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggKiA4KSAtIDE7XHJcbiAgICAgICAgbGV0IGRpZ2l0cyA9IG5ldyBVaW50OEFycmF5KCh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggKiA4KSAvIDMpO1xyXG4gICAgICAgIGxldCBiaXROdW1iZXIgPSAwO1xyXG4gICAgICAgIGxldCBjdXJyZW50Qnl0ZTtcclxuICAgICAgICBjb25zdCBhc24xVmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBmbGFnID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgYnl0ZU51bWJlciA9IChhc24xVmlldy5ieXRlTGVuZ3RoIC0gMSk7IGJ5dGVOdW1iZXIgPj0gMDsgYnl0ZU51bWJlci0tKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRCeXRlID0gYXNuMVZpZXdbYnl0ZU51bWJlcl07XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGN1cnJlbnRCeXRlICYgMSkgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGJpdE51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGZpcnN0Qml0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0gdmlld1N1Yihwb3dlcjIoYml0TnVtYmVyKSwgZGlnaXRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiLVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSB2aWV3QWRkKGRpZ2l0cywgcG93ZXIyKGJpdE51bWJlcikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJpdE51bWJlcisrO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEJ5dGUgPj49IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWdpdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGRpZ2l0c1tpXSlcclxuICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZmxhZylcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBkaWdpdHNTdHJpbmcuY2hhckF0KGRpZ2l0c1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmbGFnID09PSBmYWxzZSlcclxuICAgICAgICAgICAgcmVzdWx0ICs9IGRpZ2l0c1N0cmluZy5jaGFyQXQoMCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG5fYSRwID0gTG9jYWxJbnRlZ2VyVmFsdWVCbG9jaztcclxuTG9jYWxJbnRlZ2VyVmFsdWVCbG9jay5OQU1FID0gXCJJbnRlZ2VyVmFsdWVCbG9ja1wiO1xyXG4oKCkgPT4ge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9hJHAucHJvdG90eXBlLCBcInZhbHVlSGV4XCIsIHtcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodik7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVIZXgoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG59KSgpO1xuXG52YXIgX2EkbztcclxuY2xhc3MgSW50ZWdlciBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbEludGVnZXJWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyO1xyXG4gICAgfVxyXG4gICAgdG9CaWdJbnQoKSB7XHJcbiAgICAgICAgYXNzZXJ0QmlnSW50KCk7XHJcbiAgICAgICAgcmV0dXJuIEJpZ0ludCh0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbUJpZ0ludCh2YWx1ZSkge1xyXG4gICAgICAgIGFzc2VydEJpZ0ludCgpO1xyXG4gICAgICAgIGNvbnN0IGJpZ0ludFZhbHVlID0gQmlnSW50KHZhbHVlKTtcclxuICAgICAgICBjb25zdCB3cml0ZXIgPSBuZXcgVmlld1dyaXRlcigpO1xyXG4gICAgICAgIGNvbnN0IGhleCA9IGJpZ0ludFZhbHVlLnRvU3RyaW5nKDE2KS5yZXBsYWNlKC9eLS8sIFwiXCIpO1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShwdnRzdXRpbHMuQ29udmVydC5Gcm9tSGV4KGhleCkpO1xyXG4gICAgICAgIGlmIChiaWdJbnRWYWx1ZSA8IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBuZXcgVWludDhBcnJheSh2aWV3Lmxlbmd0aCArICh2aWV3WzBdICYgMHg4MCA/IDEgOiAwKSk7XHJcbiAgICAgICAgICAgIGZpcnN0WzBdIHw9IDB4ODA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SW50ID0gQmlnSW50KGAweCR7cHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgoZmlyc3QpfWApO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmRJbnQgPSBmaXJzdEludCArIGJpZ0ludFZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShwdnRzdXRpbHMuQ29udmVydC5Gcm9tSGV4KHNlY29uZEludC50b1N0cmluZygxNikpKTtcclxuICAgICAgICAgICAgc2Vjb25kWzBdIHw9IDB4ODA7XHJcbiAgICAgICAgICAgIHdyaXRlci53cml0ZShzZWNvbmQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHZpZXdbMF0gJiAweDgwKSB7XHJcbiAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGUobmV3IFVpbnQ4QXJyYXkoWzBdKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd3JpdGVyLndyaXRlKHZpZXcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXMgPSBuZXcgSW50ZWdlcih7XHJcbiAgICAgICAgICAgIHZhbHVlSGV4OiB3cml0ZXIuZmluYWwoKSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgY29udmVydFRvREVSKCkge1xyXG4gICAgICAgIGNvbnN0IGludGVnZXIgPSBuZXcgSW50ZWdlcih7IHZhbHVlSGV4OiB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3IH0pO1xyXG4gICAgICAgIGludGVnZXIudmFsdWVCbG9jay50b0RFUigpO1xyXG4gICAgICAgIHJldHVybiBpbnRlZ2VyO1xyXG4gICAgfVxyXG4gICAgY29udmVydEZyb21ERVIoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHtcclxuICAgICAgICAgICAgdmFsdWVIZXg6IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXdbMF0gPT09IDBcclxuICAgICAgICAgICAgICAgID8gdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldy5zdWJhcnJheSgxKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHt0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKX1gO1xyXG4gICAgfVxyXG59XHJcbl9hJG8gPSBJbnRlZ2VyO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkludGVnZXIgPSBfYSRvO1xyXG59KSgpO1xyXG5JbnRlZ2VyLk5BTUUgPSBcIklOVEVHRVJcIjtcblxudmFyIF9hJG47XHJcbmNsYXNzIEVudW1lcmF0ZWQgZXh0ZW5kcyBJbnRlZ2VyIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDEwO1xyXG4gICAgfVxyXG59XHJcbl9hJG4gPSBFbnVtZXJhdGVkO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkVudW1lcmF0ZWQgPSBfYSRuO1xyXG59KSgpO1xyXG5FbnVtZXJhdGVkLk5BTUUgPSBcIkVOVU1FUkFURURcIjtcblxuY2xhc3MgTG9jYWxTaWRWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZURlYyA9IC0xLCBpc0ZpcnN0U2lkID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZURlYyA9IHZhbHVlRGVjO1xyXG4gICAgICAgIHRoaXMuaXNGaXJzdFNpZCA9IGlzRmlyc3RTaWQ7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBpZiAoIWlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5wdXRWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgaW5wdXRWaWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXdbaV0gPSBpbnRCdWZmZXJbaV0gJiAweDdGO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoKys7XHJcbiAgICAgICAgICAgIGlmICgoaW50QnVmZmVyW2ldICYgMHg4MCkgPT09IDB4MDApXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGVtcFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYmxvY2tMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0ZW1wVmlld1tpXSA9IHRoaXMudmFsdWVIZXhWaWV3W2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHRlbXBWaWV3O1xyXG4gICAgICAgIGlmICgoaW50QnVmZmVyW3RoaXMuYmxvY2tMZW5ndGggLSAxXSAmIDB4ODApICE9PSAweDAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVIZXhWaWV3WzBdID09PSAweDAwKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOZWVkbGVzc2x5IGxvbmcgZm9ybWF0IG9mIFNJRCBlbmNvZGluZ1wiKTtcclxuICAgICAgICBpZiAodGhpcy5ibG9ja0xlbmd0aCA8PSA4KVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlRGVjID0gcHZ1dGlscy51dGlsRnJvbUJhc2UodGhpcy52YWx1ZUhleFZpZXcsIDcpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlRvbyBiaWcgU0lEIGZvciBkZWNvZGluZywgaGV4IG9ubHlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZUJpZ0ludCh2YWx1ZSkge1xyXG4gICAgICAgIGFzc2VydEJpZ0ludCgpO1xyXG4gICAgICAgIGxldCBiaXRzID0gQmlnSW50KHZhbHVlKS50b1N0cmluZygyKTtcclxuICAgICAgICB3aGlsZSAoYml0cy5sZW5ndGggJSA3KSB7XHJcbiAgICAgICAgICAgIGJpdHMgPSBcIjBcIiArIGJpdHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYml0cy5sZW5ndGggLyA3KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGJ5dGVzW2ldID0gcGFyc2VJbnQoYml0cy5zbGljZShpICogNywgaSAqIDcgKyA3KSwgMikgKyAoaSArIDEgPCBieXRlcy5sZW5ndGggPyAweDgwIDogMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJvbUJFUihieXRlcy5idWZmZXIsIDAsIGJ5dGVzLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSGV4T25seSkge1xyXG4gICAgICAgICAgICBpZiAoc2l6ZU9ubHkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1clZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICh0aGlzLmJsb2NrTGVuZ3RoIC0gMSk7IGkrKylcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbaV0gPSBjdXJWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1t0aGlzLmJsb2NrTGVuZ3RoIC0gMV0gPSBjdXJWaWV3W3RoaXMuYmxvY2tMZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBlbmNvZGVkQnVmID0gcHZ1dGlscy51dGlsVG9CYXNlKHRoaXMudmFsdWVEZWMsIDcpO1xyXG4gICAgICAgIGlmIChlbmNvZGVkQnVmLmJ5dGVMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRXJyb3IgZHVyaW5nIGVuY29kaW5nIFNJRCB2YWx1ZVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoKTtcclxuICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IGVuY29kZWRCdWYuYnl0ZUxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2ldID0gZW5jb2RlZFZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICByZXRWaWV3W2xlbl0gPSBlbmNvZGVkVmlld1tsZW5dO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0VmlldztcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSGV4T25seSlcclxuICAgICAgICAgICAgcmVzdWx0ID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUhleFZpZXcpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0ZpcnN0U2lkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2lkVmFsdWUgPSB0aGlzLnZhbHVlRGVjO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVEZWMgPD0gMzkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gXCIwLlwiO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVEZWMgPD0gNzkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gXCIxLlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWRWYWx1ZSAtPSA0MDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiMi5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2lkVmFsdWUgLT0gODA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy52YWx1ZURlYy50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZURlYzogdGhpcy52YWx1ZURlYyxcclxuICAgICAgICAgICAgaXNGaXJzdFNpZDogdGhpcy5pc0ZpcnN0U2lkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxTaWRWYWx1ZUJsb2NrLk5BTUUgPSBcInNpZEJsb2NrXCI7XG5cbmNsYXNzIExvY2FsT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2sgZXh0ZW5kcyBWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBFTVBUWV9TVFJJTkcsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQgPSBpbnB1dE9mZnNldDtcclxuICAgICAgICB3aGlsZSAoaW5wdXRMZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gbmV3IExvY2FsU2lkVmFsdWVCbG9jaygpO1xyXG4gICAgICAgICAgICByZXN1bHRPZmZzZXQgPSBzaWRCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCByZXN1bHRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHNpZEJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICBzaWRCbG9jay5pc0ZpcnN0U2lkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSBzaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgaW5wdXRMZW5ndGggLT0gc2lkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChzaWRCbG9jayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIGNvbnN0IHJldEJ1ZmZlcnMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVCdWYgPSB0aGlzLnZhbHVlW2ldLnRvQkVSKHNpemVPbmx5KTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlQnVmLmJ5dGVMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlW2ldLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXRCdWZmZXJzLnB1c2godmFsdWVCdWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uY2F0KHJldEJ1ZmZlcnMpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgbGV0IHBvczEgPSAwO1xyXG4gICAgICAgIGxldCBwb3MyID0gMDtcclxuICAgICAgICBsZXQgc2lkID0gXCJcIjtcclxuICAgICAgICBsZXQgZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgcG9zMiA9IHN0cmluZy5pbmRleE9mKFwiLlwiLCBwb3MxKTtcclxuICAgICAgICAgICAgaWYgKHBvczIgPT09IC0xKVxyXG4gICAgICAgICAgICAgICAgc2lkID0gc3RyaW5nLnN1YnN0cmluZyhwb3MxKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgc2lkID0gc3RyaW5nLnN1YnN0cmluZyhwb3MxLCBwb3MyKTtcclxuICAgICAgICAgICAgcG9zMSA9IHBvczIgKyAxO1xyXG4gICAgICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSB0aGlzLnZhbHVlWzBdO1xyXG4gICAgICAgICAgICAgICAgbGV0IHBsdXMgPSAwO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzaWRCbG9jay52YWx1ZURlYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVzID0gNDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1cyA9IDgwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFNJRCA9IHBhcnNlSW50KHNpZCwgMTApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBhcnNlZFNJRCkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgc2lkQmxvY2sudmFsdWVEZWMgPSBwYXJzZWRTSUQgKyBwbHVzO1xyXG4gICAgICAgICAgICAgICAgZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSBuZXcgTG9jYWxTaWRWYWx1ZUJsb2NrKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2lkID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcclxuICAgICAgICAgICAgICAgICAgICBhc3NlcnRCaWdJbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWRWYWx1ZSA9IEJpZ0ludChzaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNpZEJsb2NrLnZhbHVlQmlnSW50ID0gc2lkVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzaWRCbG9jay52YWx1ZURlYyA9IHBhcnNlSW50KHNpZCwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihzaWRCbG9jay52YWx1ZURlYykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzaWRCbG9jay5pc0ZpcnN0U2lkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChzaWRCbG9jayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IHdoaWxlIChwb3MyICE9PSAtMSk7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBsZXQgaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlzSGV4T25seSA9IHRoaXMudmFsdWVbaV0uaXNIZXhPbmx5O1xyXG4gICAgICAgICAgICBsZXQgc2lkU3RyID0gdGhpcy52YWx1ZVtpXS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBpZiAoaSAhPT0gMClcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGAke3Jlc3VsdH0uYDtcclxuICAgICAgICAgICAgaWYgKGlzSGV4T25seSkge1xyXG4gICAgICAgICAgICAgICAgc2lkU3RyID0gYHske3NpZFN0cn19YDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlW2ldLmlzRmlyc3RTaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYDIueyR7c2lkU3RyfSAtIDgwfWA7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFN0cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2lkU3RyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHNpZEFycmF5OiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBvYmplY3Quc2lkQXJyYXkucHVzaCh0aGlzLnZhbHVlW2ldLnRvSlNPTigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcclxuICAgIH1cclxufVxyXG5Mb2NhbE9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrLk5BTUUgPSBcIk9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRtO1xyXG5jbGFzcyBPYmplY3RJZGVudGlmaWVyIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDY7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCkgfHwgXCJlbXB0eVwifWA7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFZhbHVlKCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5fYSRtID0gT2JqZWN0SWRlbnRpZmllcjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5PYmplY3RJZGVudGlmaWVyID0gX2EkbTtcclxufSkoKTtcclxuT2JqZWN0SWRlbnRpZmllci5OQU1FID0gXCJPQkpFQ1QgSURFTlRJRklFUlwiO1xuXG5jbGFzcyBMb2NhbFJlbGF0aXZlU2lkVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKExvY2FsQmFzZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlRGVjID0gMCwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlRGVjID0gdmFsdWVEZWM7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBpZiAoaW5wdXRMZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpXHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSBpbnB1dFZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4Vmlld1tpXSA9IGludEJ1ZmZlcltpXSAmIDB4N0Y7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGgrKztcclxuICAgICAgICAgICAgaWYgKChpbnRCdWZmZXJbaV0gJiAweDgwKSA9PT0gMHgwMClcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0ZW1wVmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ibG9ja0xlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB0ZW1wVmlld1tpXSA9IHRoaXMudmFsdWVIZXhWaWV3W2ldO1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdGVtcFZpZXc7XHJcbiAgICAgICAgaWYgKChpbnRCdWZmZXJbdGhpcy5ibG9ja0xlbmd0aCAtIDFdICYgMHg4MCkgIT09IDB4MDApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy52YWx1ZUhleFZpZXdbMF0gPT09IDB4MDApXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5lZWRsZXNzbHkgbG9uZyBmb3JtYXQgb2YgU0lEIGVuY29kaW5nXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLmJsb2NrTGVuZ3RoIDw9IDgpXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVEZWMgPSBwdnV0aWxzLnV0aWxGcm9tQmFzZSh0aGlzLnZhbHVlSGV4VmlldywgNyk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVG9vIGJpZyBTSUQgZm9yIGRlY29kaW5nLCBoZXggb25seVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgaWYgKHNpemVPbmx5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCkpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJWaWV3ID0gdGhpcy52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAodGhpcy5ibG9ja0xlbmd0aCAtIDEpOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2ldID0gY3VyVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgIHJldFZpZXdbdGhpcy5ibG9ja0xlbmd0aCAtIDFdID0gY3VyVmlld1t0aGlzLmJsb2NrTGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZW5jb2RlZEJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZSh0aGlzLnZhbHVlRGVjLCA3KTtcclxuICAgICAgICBpZiAoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVycm9yIGR1cmluZyBlbmNvZGluZyBTSUQgdmFsdWVcIjtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkVmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYpO1xyXG4gICAgICAgICAgICBjb25zdCBsZW4gPSBlbmNvZGVkQnVmLmJ5dGVMZW5ndGggLSAxO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpXSA9IGVuY29kZWRWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1tsZW5dID0gZW5jb2RlZFZpZXdbbGVuXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNIZXhPbmx5KVxyXG4gICAgICAgICAgICByZXN1bHQgPSBwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMudmFsdWVEZWMudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWVEZWM6IHRoaXMudmFsdWVEZWMsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbFJlbGF0aXZlU2lkVmFsdWVCbG9jay5OQU1FID0gXCJyZWxhdGl2ZVNpZEJsb2NrXCI7XG5cbmNsYXNzIExvY2FsUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jayBleHRlbmRzIFZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IEVNUFRZX1NUUklORywgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdE9mZnNldCA9IGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIHdoaWxlIChpbnB1dExlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSBuZXcgTG9jYWxSZWxhdGl2ZVNpZFZhbHVlQmxvY2soKTtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gc2lkQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgcmVzdWx0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBzaWRCbG9jay5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSBzaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgaW5wdXRMZW5ndGggLT0gc2lkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChzaWRCbG9jayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgY29uc3QgcmV0QnVmZmVycyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUJ1ZiA9IHRoaXMudmFsdWVbaV0udG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWVCdWYuYnl0ZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMudmFsdWVbaV0uZXJyb3I7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldEJ1ZmZlcnMucHVzaCh2YWx1ZUJ1Zik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25jYXQocmV0QnVmZmVycyk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgICAgICBsZXQgcG9zMSA9IDA7XHJcbiAgICAgICAgbGV0IHBvczIgPSAwO1xyXG4gICAgICAgIGxldCBzaWQgPSBcIlwiO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgcG9zMiA9IHN0cmluZy5pbmRleE9mKFwiLlwiLCBwb3MxKTtcclxuICAgICAgICAgICAgaWYgKHBvczIgPT09IC0xKVxyXG4gICAgICAgICAgICAgICAgc2lkID0gc3RyaW5nLnN1YnN0cmluZyhwb3MxKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgc2lkID0gc3RyaW5nLnN1YnN0cmluZyhwb3MxLCBwb3MyKTtcclxuICAgICAgICAgICAgcG9zMSA9IHBvczIgKyAxO1xyXG4gICAgICAgICAgICBjb25zdCBzaWRCbG9jayA9IG5ldyBMb2NhbFJlbGF0aXZlU2lkVmFsdWVCbG9jaygpO1xyXG4gICAgICAgICAgICBzaWRCbG9jay52YWx1ZURlYyA9IHBhcnNlSW50KHNpZCwgMTApO1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4oc2lkQmxvY2sudmFsdWVEZWMpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChzaWRCbG9jayk7XHJcbiAgICAgICAgfSB3aGlsZSAocG9zMiAhPT0gLTEpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpc0hleE9ubHkgPSB0aGlzLnZhbHVlW2ldLmlzSGV4T25seTtcclxuICAgICAgICAgICAgbGV0IHNpZFN0ciA9IHRoaXMudmFsdWVbaV0udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaWYgKGkgIT09IDApXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBgJHtyZXN1bHR9LmA7XHJcbiAgICAgICAgICAgIGlmIChpc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIHNpZFN0ciA9IGB7JHtzaWRTdHJ9fWA7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2lkU3RyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaWRTdHI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgc2lkQXJyYXk6IFtdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBvYmplY3Quc2lkQXJyYXkucHVzaCh0aGlzLnZhbHVlW2ldLnRvSlNPTigpKTtcclxuICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jay5OQU1FID0gXCJSZWxhdGl2ZU9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRsO1xyXG5jbGFzcyBSZWxhdGl2ZU9iamVjdElkZW50aWZpZXIgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxSZWxhdGl2ZU9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxMztcclxuICAgIH1cclxuICAgIGdldFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHNldFZhbHVlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHt0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKSB8fCBcImVtcHR5XCJ9YDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0VmFsdWUoKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbl9hJGwgPSBSZWxhdGl2ZU9iamVjdElkZW50aWZpZXI7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyID0gX2EkbDtcclxufSkoKTtcclxuUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyLk5BTUUgPSBcIlJlbGF0aXZlT2JqZWN0SWRlbnRpZmllclwiO1xuXG52YXIgX2EkaztcclxuY2xhc3MgU2VxdWVuY2UgZXh0ZW5kcyBDb25zdHJ1Y3RlZCB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxNjtcclxuICAgIH1cclxufVxyXG5fYSRrID0gU2VxdWVuY2U7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuU2VxdWVuY2UgPSBfYSRrO1xyXG59KSgpO1xyXG5TZXF1ZW5jZS5OQU1FID0gXCJTRVFVRU5DRVwiO1xuXG52YXIgX2EkajtcclxuY2xhc3MgU2V0IGV4dGVuZHMgQ29uc3RydWN0ZWQge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTc7XHJcbiAgICB9XHJcbn1cclxuX2EkaiA9IFNldDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5TZXQgPSBfYSRqO1xyXG59KSgpO1xyXG5TZXQuTkFNRSA9IFwiU0VUXCI7XG5cbmNsYXNzIExvY2FsU3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IEVNUFRZX1NUUklORztcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiU3RyaW5nVmFsdWVCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbFNpbXBsZVN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbFN0cmluZ1ZhbHVlQmxvY2sge1xyXG59XHJcbkxvY2FsU2ltcGxlU3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJTaW1wbGVTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbmNsYXNzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sgZXh0ZW5kcyBCYXNlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsU2ltcGxlU3RyaW5nVmFsdWVCbG9jayk7XHJcbiAgICB9XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHN0ckxlbiA9IGlucHV0U3RyaW5nLmxlbmd0aDtcclxuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHN0ckxlbik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJMZW47IGkrKylcclxuICAgICAgICAgICAgdmlld1tpXSA9IGlucHV0U3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gaW5wdXRTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxTaW1wbGVTdHJpbmdCbG9jay5OQU1FID0gXCJTSU1QTEUgU1RSSU5HXCI7XG5cbmNsYXNzIExvY2FsVXRmOFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGZyb21CdWZmZXIoaW5wdXRCdWZmZXIpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IHB2dHN1dGlscy5Db252ZXJ0LlRvVXRmOFN0cmluZyhpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goYEVycm9yIGR1cmluZyBcImRlY29kZVVSSUNvbXBvbmVudFwiOiAke2V4fSwgdXNpbmcgcmF3IHN0cmluZ2ApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBwdnRzdXRpbHMuQ29udmVydC5Ub0JpbmFyeShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShwdnRzdXRpbHMuQ29udmVydC5Gcm9tVXRmOFN0cmluZyhpbnB1dFN0cmluZykpO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IGlucHV0U3RyaW5nO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsVXRmOFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiVXRmOFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJGk7XHJcbmNsYXNzIFV0ZjhTdHJpbmcgZXh0ZW5kcyBMb2NhbFV0ZjhTdHJpbmdWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDEyO1xyXG4gICAgfVxyXG59XHJcbl9hJGkgPSBVdGY4U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlV0ZjhTdHJpbmcgPSBfYSRpO1xyXG59KSgpO1xyXG5VdGY4U3RyaW5nLk5BTUUgPSBcIlVURjhTdHJpbmdcIjtcblxuY2xhc3MgTG9jYWxCbXBTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9VdGYxNlN0cmluZyhpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBpbnB1dFN0cmluZztcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocHZ0c3V0aWxzLkNvbnZlcnQuRnJvbVV0ZjE2U3RyaW5nKGlucHV0U3RyaW5nKSk7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxCbXBTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIkJtcFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJGg7XHJcbmNsYXNzIEJtcFN0cmluZyBleHRlbmRzIExvY2FsQm1wU3RyaW5nVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMzA7XHJcbiAgICB9XHJcbn1cclxuX2EkaCA9IEJtcFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5CbXBTdHJpbmcgPSBfYSRoO1xyXG59KSgpO1xyXG5CbXBTdHJpbmcuTkFNRSA9IFwiQk1QU3RyaW5nXCI7XG5cbmNsYXNzIExvY2FsVW5pdmVyc2FsU3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IGNvcHlCdWZmZXIgPSBBcnJheUJ1ZmZlci5pc1ZpZXcoaW5wdXRCdWZmZXIpID8gaW5wdXRCdWZmZXIuc2xpY2UoKS5idWZmZXIgOiBpbnB1dEJ1ZmZlci5zbGljZSgwKTtcclxuICAgICAgICBjb25zdCB2YWx1ZVZpZXcgPSBuZXcgVWludDhBcnJheShjb3B5QnVmZmVyKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlVmlldy5sZW5ndGg7IGkgKz0gNCkge1xyXG4gICAgICAgICAgICB2YWx1ZVZpZXdbaV0gPSB2YWx1ZVZpZXdbaSArIDNdO1xyXG4gICAgICAgICAgICB2YWx1ZVZpZXdbaSArIDFdID0gdmFsdWVWaWV3W2kgKyAyXTtcclxuICAgICAgICAgICAgdmFsdWVWaWV3W2kgKyAyXSA9IDB4MDA7XHJcbiAgICAgICAgICAgIHZhbHVlVmlld1tpICsgM10gPSAweDAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIG5ldyBVaW50MzJBcnJheShjb3B5QnVmZmVyKSk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyTGVuZ3RoID0gaW5wdXRTdHJpbmcubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlSGV4VmlldyA9IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShzdHJMZW5ndGggKiA0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ckxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGVCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UoaW5wdXRTdHJpbmcuY2hhckNvZGVBdChpKSwgOCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGVWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoY29kZUJ1Zik7XHJcbiAgICAgICAgICAgIGlmIChjb2RlVmlldy5sZW5ndGggPiA0KVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpZiA9IDQgLSBjb2RlVmlldy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAoY29kZVZpZXcubGVuZ3RoIC0gMSk7IGogPj0gMDsgai0tKVxyXG4gICAgICAgICAgICAgICAgdmFsdWVIZXhWaWV3W2kgKiA0ICsgaiArIGRpZl0gPSBjb2RlVmlld1tqXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gaW5wdXRTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxVbml2ZXJzYWxTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIlVuaXZlcnNhbFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJGc7XHJcbmNsYXNzIFVuaXZlcnNhbFN0cmluZyBleHRlbmRzIExvY2FsVW5pdmVyc2FsU3RyaW5nVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjg7XHJcbiAgICB9XHJcbn1cclxuX2EkZyA9IFVuaXZlcnNhbFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5Vbml2ZXJzYWxTdHJpbmcgPSBfYSRnO1xyXG59KSgpO1xyXG5Vbml2ZXJzYWxTdHJpbmcuTkFNRSA9IFwiVW5pdmVyc2FsU3RyaW5nXCI7XG5cbnZhciBfYSRmO1xyXG5jbGFzcyBOdW1lcmljU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxODtcclxuICAgIH1cclxufVxyXG5fYSRmID0gTnVtZXJpY1N0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5OdW1lcmljU3RyaW5nID0gX2EkZjtcclxufSkoKTtcclxuTnVtZXJpY1N0cmluZy5OQU1FID0gXCJOdW1lcmljU3RyaW5nXCI7XG5cbnZhciBfYSRlO1xyXG5jbGFzcyBQcmludGFibGVTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE5O1xyXG4gICAgfVxyXG59XHJcbl9hJGUgPSBQcmludGFibGVTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuUHJpbnRhYmxlU3RyaW5nID0gX2EkZTtcclxufSkoKTtcclxuUHJpbnRhYmxlU3RyaW5nLk5BTUUgPSBcIlByaW50YWJsZVN0cmluZ1wiO1xuXG52YXIgX2EkZDtcclxuY2xhc3MgVGVsZXRleFN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjA7XHJcbiAgICB9XHJcbn1cclxuX2EkZCA9IFRlbGV0ZXhTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVGVsZXRleFN0cmluZyA9IF9hJGQ7XHJcbn0pKCk7XHJcblRlbGV0ZXhTdHJpbmcuTkFNRSA9IFwiVGVsZXRleFN0cmluZ1wiO1xuXG52YXIgX2EkYztcclxuY2xhc3MgVmlkZW90ZXhTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDIxO1xyXG4gICAgfVxyXG59XHJcbl9hJGMgPSBWaWRlb3RleFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5WaWRlb3RleFN0cmluZyA9IF9hJGM7XHJcbn0pKCk7XHJcblZpZGVvdGV4U3RyaW5nLk5BTUUgPSBcIlZpZGVvdGV4U3RyaW5nXCI7XG5cbnZhciBfYSRiO1xyXG5jbGFzcyBJQTVTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDIyO1xyXG4gICAgfVxyXG59XHJcbl9hJGIgPSBJQTVTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuSUE1U3RyaW5nID0gX2EkYjtcclxufSkoKTtcclxuSUE1U3RyaW5nLk5BTUUgPSBcIklBNVN0cmluZ1wiO1xuXG52YXIgX2EkYTtcclxuY2xhc3MgR3JhcGhpY1N0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjU7XHJcbiAgICB9XHJcbn1cclxuX2EkYSA9IEdyYXBoaWNTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuR3JhcGhpY1N0cmluZyA9IF9hJGE7XHJcbn0pKCk7XHJcbkdyYXBoaWNTdHJpbmcuTkFNRSA9IFwiR3JhcGhpY1N0cmluZ1wiO1xuXG52YXIgX2EkOTtcclxuY2xhc3MgVmlzaWJsZVN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjY7XHJcbiAgICB9XHJcbn1cclxuX2EkOSA9IFZpc2libGVTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVmlzaWJsZVN0cmluZyA9IF9hJDk7XHJcbn0pKCk7XHJcblZpc2libGVTdHJpbmcuTkFNRSA9IFwiVmlzaWJsZVN0cmluZ1wiO1xuXG52YXIgX2EkODtcclxuY2xhc3MgR2VuZXJhbFN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjc7XHJcbiAgICB9XHJcbn1cclxuX2EkOCA9IEdlbmVyYWxTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuR2VuZXJhbFN0cmluZyA9IF9hJDg7XHJcbn0pKCk7XHJcbkdlbmVyYWxTdHJpbmcuTkFNRSA9IFwiR2VuZXJhbFN0cmluZ1wiO1xuXG52YXIgX2EkNztcclxuY2xhc3MgQ2hhcmFjdGVyU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyOTtcclxuICAgIH1cclxufVxyXG5fYSQ3ID0gQ2hhcmFjdGVyU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkNoYXJhY3RlclN0cmluZyA9IF9hJDc7XHJcbn0pKCk7XHJcbkNoYXJhY3RlclN0cmluZy5OQU1FID0gXCJDaGFyYWN0ZXJTdHJpbmdcIjtcblxudmFyIF9hJDY7XHJcbmNsYXNzIFVUQ1RpbWUgZXh0ZW5kcyBWaXNpYmxlU3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUsIHZhbHVlRGF0ZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnllYXIgPSAwO1xyXG4gICAgICAgIHRoaXMubW9udGggPSAwO1xyXG4gICAgICAgIHRoaXMuZGF5ID0gMDtcclxuICAgICAgICB0aGlzLmhvdXIgPSAwO1xyXG4gICAgICAgIHRoaXMubWludXRlID0gMDtcclxuICAgICAgICB0aGlzLnNlY29uZCA9IDA7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSh2YWx1ZS5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlld1tpXSA9IHZhbHVlLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZURhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSh2YWx1ZURhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy50b0J1ZmZlcigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjM7XHJcbiAgICB9XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy5mcm9tU3RyaW5nKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpKSk7XHJcbiAgICB9XHJcbiAgICB0b0J1ZmZlcigpIHtcclxuICAgICAgICBjb25zdCBzdHIgPSB0aGlzLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHN0ci5sZW5ndGgpO1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB2aWV3W2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcclxuICAgIH1cclxuICAgIGZyb21EYXRlKGlucHV0RGF0ZSkge1xyXG4gICAgICAgIHRoaXMueWVhciA9IGlucHV0RGF0ZS5nZXRVVENGdWxsWWVhcigpO1xyXG4gICAgICAgIHRoaXMubW9udGggPSBpbnB1dERhdGUuZ2V0VVRDTW9udGgoKSArIDE7XHJcbiAgICAgICAgdGhpcy5kYXkgPSBpbnB1dERhdGUuZ2V0VVRDRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuaG91ciA9IGlucHV0RGF0ZS5nZXRVVENIb3VycygpO1xyXG4gICAgICAgIHRoaXMubWludXRlID0gaW5wdXREYXRlLmdldFVUQ01pbnV0ZXMoKTtcclxuICAgICAgICB0aGlzLnNlY29uZCA9IGlucHV0RGF0ZS5nZXRVVENTZWNvbmRzKCk7XHJcbiAgICB9XHJcbiAgICB0b0RhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGggLSAxLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQpKSk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgcGFyc2VyID0gLyhcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KVovaWc7XHJcbiAgICAgICAgY29uc3QgcGFyc2VyQXJyYXkgPSBwYXJzZXIuZXhlYyhpbnB1dFN0cmluZyk7XHJcbiAgICAgICAgaWYgKHBhcnNlckFycmF5ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChwYXJzZXJBcnJheVsxXSwgMTApO1xyXG4gICAgICAgIGlmICh5ZWFyID49IDUwKVxyXG4gICAgICAgICAgICB0aGlzLnllYXIgPSAxOTAwICsgeWVhcjtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMueWVhciA9IDIwMDAgKyB5ZWFyO1xyXG4gICAgICAgIHRoaXMubW9udGggPSBwYXJzZUludChwYXJzZXJBcnJheVsyXSwgMTApO1xyXG4gICAgICAgIHRoaXMuZGF5ID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbM10sIDEwKTtcclxuICAgICAgICB0aGlzLmhvdXIgPSBwYXJzZUludChwYXJzZXJBcnJheVs0XSwgMTApO1xyXG4gICAgICAgIHRoaXMubWludXRlID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbNV0sIDEwKTtcclxuICAgICAgICB0aGlzLnNlY29uZCA9IHBhcnNlSW50KHBhcnNlckFycmF5WzZdLCAxMCk7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZyhlbmNvZGluZyA9IFwiaXNvXCIpIHtcclxuICAgICAgICBpZiAoZW5jb2RpbmcgPT09IFwiaXNvXCIpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3V0cHV0QXJyYXkgPSBuZXcgQXJyYXkoNyk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzBdID0gcHZ1dGlscy5wYWROdW1iZXIoKCh0aGlzLnllYXIgPCAyMDAwKSA/ICh0aGlzLnllYXIgLSAxOTAwKSA6ICh0aGlzLnllYXIgLSAyMDAwKSksIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVsxXSA9IHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubW9udGgsIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVsyXSA9IHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuZGF5LCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbM10gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLmhvdXIsIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVs0XSA9IHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubWludXRlLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbNV0gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLnNlY29uZCwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzZdID0gXCJaXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRBcnJheS5qb2luKFwiXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoZW5jb2RpbmcpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHt0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCl9YDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgeWVhcjogdGhpcy55ZWFyLFxyXG4gICAgICAgICAgICBtb250aDogdGhpcy5tb250aCxcclxuICAgICAgICAgICAgZGF5OiB0aGlzLmRheSxcclxuICAgICAgICAgICAgaG91cjogdGhpcy5ob3VyLFxyXG4gICAgICAgICAgICBtaW51dGU6IHRoaXMubWludXRlLFxyXG4gICAgICAgICAgICBzZWNvbmQ6IHRoaXMuc2Vjb25kLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuX2EkNiA9IFVUQ1RpbWU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVVRDVGltZSA9IF9hJDY7XHJcbn0pKCk7XHJcblVUQ1RpbWUuTkFNRSA9IFwiVVRDVGltZVwiO1xuXG52YXIgX2EkNTtcclxuY2xhc3MgR2VuZXJhbGl6ZWRUaW1lIGV4dGVuZHMgVVRDVGltZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICB2YXIgX2I7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgKF9iID0gdGhpcy5taWxsaXNlY29uZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKHRoaXMubWlsbGlzZWNvbmQgPSAwKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyNDtcclxuICAgIH1cclxuICAgIGZyb21EYXRlKGlucHV0RGF0ZSkge1xyXG4gICAgICAgIHN1cGVyLmZyb21EYXRlKGlucHV0RGF0ZSk7XHJcbiAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IGlucHV0RGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcclxuICAgIH1cclxuICAgIHRvRGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gKG5ldyBEYXRlKERhdGUuVVRDKHRoaXMueWVhciwgdGhpcy5tb250aCAtIDEsIHRoaXMuZGF5LCB0aGlzLmhvdXIsIHRoaXMubWludXRlLCB0aGlzLnNlY29uZCwgdGhpcy5taWxsaXNlY29uZCkpKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICBsZXQgaXNVVEMgPSBmYWxzZTtcclxuICAgICAgICBsZXQgdGltZVN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGRhdGVUaW1lU3RyaW5nID0gXCJcIjtcclxuICAgICAgICBsZXQgZnJhY3Rpb25QYXJ0ID0gMDtcclxuICAgICAgICBsZXQgcGFyc2VyO1xyXG4gICAgICAgIGxldCBob3VyRGlmZmVyZW5jZSA9IDA7XHJcbiAgICAgICAgbGV0IG1pbnV0ZURpZmZlcmVuY2UgPSAwO1xyXG4gICAgICAgIGlmIChpbnB1dFN0cmluZ1tpbnB1dFN0cmluZy5sZW5ndGggLSAxXSA9PT0gXCJaXCIpIHtcclxuICAgICAgICAgICAgdGltZVN0cmluZyA9IGlucHV0U3RyaW5nLnN1YnN0cmluZygwLCBpbnB1dFN0cmluZy5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgaXNVVEMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gbmV3IE51bWJlcihpbnB1dFN0cmluZ1tpbnB1dFN0cmluZy5sZW5ndGggLSAxXSk7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihudW1iZXIudmFsdWVPZigpKSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgdGltZVN0cmluZyA9IGlucHV0U3RyaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNVVEMpIHtcclxuICAgICAgICAgICAgaWYgKHRpbWVTdHJpbmcuaW5kZXhPZihcIitcIikgIT09IC0xKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICBpZiAodGltZVN0cmluZy5pbmRleE9mKFwiLVwiKSAhPT0gLTEpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgbXVsdGlwbGllciA9IDE7XHJcbiAgICAgICAgICAgIGxldCBkaWZmZXJlbmNlUG9zaXRpb24gPSB0aW1lU3RyaW5nLmluZGV4T2YoXCIrXCIpO1xyXG4gICAgICAgICAgICBsZXQgZGlmZmVyZW5jZVN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlUG9zaXRpb24gPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBkaWZmZXJlbmNlUG9zaXRpb24gPSB0aW1lU3RyaW5nLmluZGV4T2YoXCItXCIpO1xyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGllciA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlUG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBkaWZmZXJlbmNlU3RyaW5nID0gdGltZVN0cmluZy5zdWJzdHJpbmcoZGlmZmVyZW5jZVBvc2l0aW9uICsgMSk7XHJcbiAgICAgICAgICAgICAgICB0aW1lU3RyaW5nID0gdGltZVN0cmluZy5zdWJzdHJpbmcoMCwgZGlmZmVyZW5jZVBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgIGlmICgoZGlmZmVyZW5jZVN0cmluZy5sZW5ndGggIT09IDIpICYmIChkaWZmZXJlbmNlU3RyaW5nLmxlbmd0aCAhPT0gNCkpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgbGV0IG51bWJlciA9IHBhcnNlSW50KGRpZmZlcmVuY2VTdHJpbmcuc3Vic3RyaW5nKDAsIDIpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obnVtYmVyLnZhbHVlT2YoKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgaG91ckRpZmZlcmVuY2UgPSBtdWx0aXBsaWVyICogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpZmZlcmVuY2VTdHJpbmcubGVuZ3RoID09PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyID0gcGFyc2VJbnQoZGlmZmVyZW5jZVN0cmluZy5zdWJzdHJpbmcoMiwgNCksIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4obnVtYmVyLnZhbHVlT2YoKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICBtaW51dGVEaWZmZXJlbmNlID0gbXVsdGlwbGllciAqIG51bWJlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZnJhY3Rpb25Qb2ludFBvc2l0aW9uID0gdGltZVN0cmluZy5pbmRleE9mKFwiLlwiKTtcclxuICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uID09PSAtMSlcclxuICAgICAgICAgICAgZnJhY3Rpb25Qb2ludFBvc2l0aW9uID0gdGltZVN0cmluZy5pbmRleE9mKFwiLFwiKTtcclxuICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBmcmFjdGlvblBhcnRDaGVjayA9IG5ldyBOdW1iZXIoYDAke3RpbWVTdHJpbmcuc3Vic3RyaW5nKGZyYWN0aW9uUG9pbnRQb3NpdGlvbil9YCk7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihmcmFjdGlvblBhcnRDaGVjay52YWx1ZU9mKCkpKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICBmcmFjdGlvblBhcnQgPSBmcmFjdGlvblBhcnRDaGVjay52YWx1ZU9mKCk7XHJcbiAgICAgICAgICAgIGRhdGVUaW1lU3RyaW5nID0gdGltZVN0cmluZy5zdWJzdHJpbmcoMCwgZnJhY3Rpb25Qb2ludFBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBkYXRlVGltZVN0cmluZyA9IHRpbWVTdHJpbmc7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKGRhdGVUaW1lU3RyaW5nLmxlbmd0aCA9PT0gOCk6XHJcbiAgICAgICAgICAgICAgICBwYXJzZXIgPSAvKFxcZHs0fSkoXFxkezJ9KShcXGR7Mn0pL2lnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgKGRhdGVUaW1lU3RyaW5nLmxlbmd0aCA9PT0gMTApOlxyXG4gICAgICAgICAgICAgICAgcGFyc2VyID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pL2lnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZnJhY3Rpb25SZXN1bHQgPSA2MCAqIGZyYWN0aW9uUGFydDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZSA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uUmVzdWx0ID0gNjAgKiAoZnJhY3Rpb25SZXN1bHQgLSB0aGlzLm1pbnV0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWNvbmQgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBmcmFjdGlvblJlc3VsdCA9IDEwMDAgKiAoZnJhY3Rpb25SZXN1bHQgLSB0aGlzLnNlY29uZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgKGRhdGVUaW1lU3RyaW5nLmxlbmd0aCA9PT0gMTIpOlxyXG4gICAgICAgICAgICAgICAgcGFyc2VyID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkvaWc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmcmFjdGlvblJlc3VsdCA9IDYwICogZnJhY3Rpb25QYXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25SZXN1bHQgPSAxMDAwICogKGZyYWN0aW9uUmVzdWx0IC0gdGhpcy5zZWNvbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWlsbGlzZWNvbmQgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIChkYXRlVGltZVN0cmluZy5sZW5ndGggPT09IDE0KTpcclxuICAgICAgICAgICAgICAgIHBhcnNlciA9IC8oXFxkezR9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkvaWc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZyYWN0aW9uUmVzdWx0ID0gMTAwMCAqIGZyYWN0aW9uUGFydDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcGFyc2VyQXJyYXkgPSBwYXJzZXIuZXhlYyhkYXRlVGltZVN0cmluZyk7XHJcbiAgICAgICAgaWYgKHBhcnNlckFycmF5ID09PSBudWxsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBwYXJzZXJBcnJheS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGopIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGggPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF5ID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdXIgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApICsgaG91ckRpZmZlcmVuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW51dGUgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApICsgbWludXRlRGlmZmVyZW5jZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZCA9IHBhcnNlSW50KHBhcnNlckFycmF5W2pdLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNVVEMgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXBEYXRlID0gbmV3IERhdGUodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubWlsbGlzZWNvbmQpO1xyXG4gICAgICAgICAgICB0aGlzLnllYXIgPSB0ZW1wRGF0ZS5nZXRVVENGdWxsWWVhcigpO1xyXG4gICAgICAgICAgICB0aGlzLm1vbnRoID0gdGVtcERhdGUuZ2V0VVRDTW9udGgoKTtcclxuICAgICAgICAgICAgdGhpcy5kYXkgPSB0ZW1wRGF0ZS5nZXRVVENEYXkoKTtcclxuICAgICAgICAgICAgdGhpcy5ob3VyID0gdGVtcERhdGUuZ2V0VVRDSG91cnMoKTtcclxuICAgICAgICAgICAgdGhpcy5taW51dGUgPSB0ZW1wRGF0ZS5nZXRVVENNaW51dGVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gdGVtcERhdGUuZ2V0VVRDU2Vjb25kcygpO1xyXG4gICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kID0gdGVtcERhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoZW5jb2RpbmcgPSBcImlzb1wiKSB7XHJcbiAgICAgICAgaWYgKGVuY29kaW5nID09PSBcImlzb1wiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dEFycmF5ID0gW107XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy55ZWFyLCA0KSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5tb250aCwgMikpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuZGF5LCAyKSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5ob3VyLCAyKSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5taW51dGUsIDIpKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLnNlY29uZCwgMikpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5taWxsaXNlY29uZCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChcIi5cIik7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubWlsbGlzZWNvbmQsIDMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKFwiWlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dEFycmF5LmpvaW4oXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdXBlci50b1N0cmluZyhlbmNvZGluZyk7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kOiB0aGlzLm1pbGxpc2Vjb25kLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuX2EkNSA9IEdlbmVyYWxpemVkVGltZTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5HZW5lcmFsaXplZFRpbWUgPSBfYSQ1O1xyXG59KSgpO1xyXG5HZW5lcmFsaXplZFRpbWUuTkFNRSA9IFwiR2VuZXJhbGl6ZWRUaW1lXCI7XG5cbnZhciBfYSQ0O1xyXG5jbGFzcyBEQVRFIGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzMTtcclxuICAgIH1cclxufVxyXG5fYSQ0ID0gREFURTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5EQVRFID0gX2EkNDtcclxufSkoKTtcclxuREFURS5OQU1FID0gXCJEQVRFXCI7XG5cbnZhciBfYSQzO1xyXG5jbGFzcyBUaW1lT2ZEYXkgZXh0ZW5kcyBVdGY4U3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDMyO1xyXG4gICAgfVxyXG59XHJcbl9hJDMgPSBUaW1lT2ZEYXk7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVGltZU9mRGF5ID0gX2EkMztcclxufSkoKTtcclxuVGltZU9mRGF5Lk5BTUUgPSBcIlRpbWVPZkRheVwiO1xuXG52YXIgX2EkMjtcclxuY2xhc3MgRGF0ZVRpbWUgZXh0ZW5kcyBVdGY4U3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDMzO1xyXG4gICAgfVxyXG59XHJcbl9hJDIgPSBEYXRlVGltZTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5EYXRlVGltZSA9IF9hJDI7XHJcbn0pKCk7XHJcbkRhdGVUaW1lLk5BTUUgPSBcIkRhdGVUaW1lXCI7XG5cbnZhciBfYSQxO1xyXG5jbGFzcyBEdXJhdGlvbiBleHRlbmRzIFV0ZjhTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMzQ7XHJcbiAgICB9XHJcbn1cclxuX2EkMSA9IER1cmF0aW9uO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkR1cmF0aW9uID0gX2EkMTtcclxufSkoKTtcclxuRHVyYXRpb24uTkFNRSA9IFwiRHVyYXRpb25cIjtcblxudmFyIF9hO1xyXG5jbGFzcyBUSU1FIGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxNDtcclxuICAgIH1cclxufVxyXG5fYSA9IFRJTUU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVElNRSA9IF9hO1xyXG59KSgpO1xyXG5USU1FLk5BTUUgPSBcIlRJTUVcIjtcblxuY2xhc3MgQW55IHtcclxuICAgIGNvbnN0cnVjdG9yKHsgbmFtZSA9IEVNUFRZX1NUUklORywgb3B0aW9uYWwgPSBmYWxzZSwgfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLm9wdGlvbmFsID0gb3B0aW9uYWw7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgQ2hvaWNlIGV4dGVuZHMgQW55IHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBbXSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgUmVwZWF0ZWQgZXh0ZW5kcyBBbnkge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IG5ldyBBbnkoKSwgbG9jYWwgPSBmYWxzZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2FsO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFJhd0RhdGEge1xyXG4gICAgY29uc3RydWN0b3IoeyBkYXRhID0gRU1QVFlfVklFVyB9ID0ge30pIHtcclxuICAgICAgICB0aGlzLmRhdGFWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBnZXQgZGF0YSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHNldCBkYXRhKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhVmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHZhbHVlKTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGVuZExlbmd0aCA9IGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgdGhpcy5kYXRhVmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKS5zdWJhcnJheShpbnB1dE9mZnNldCwgZW5kTGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gZW5kTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiBjb21wYXJlU2NoZW1hKHJvb3QsIGlucHV0RGF0YSwgaW5wdXRTY2hlbWEpIHtcclxuICAgIGlmIChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIENob2ljZSkge1xyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5wdXRTY2hlbWEudmFsdWUubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29tcGFyZVNjaGVtYShyb290LCBpbnB1dERhdGEsIGlucHV0U2NoZW1hLnZhbHVlW2pdKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC52ZXJpZmllZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zdCBfcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IFwiV3JvbmcgdmFsdWVzIGZvciBDaG9pY2UgdHlwZVwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEuaGFzT3duUHJvcGVydHkoTkFNRSkpXHJcbiAgICAgICAgICAgICAgICBfcmVzdWx0Lm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lO1xyXG4gICAgICAgICAgICByZXR1cm4gX3Jlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEgaW5zdGFuY2VvZiBBbnkpIHtcclxuICAgICAgICBpZiAoaW5wdXRTY2hlbWEuaGFzT3duUHJvcGVydHkoTkFNRSkpXHJcbiAgICAgICAgICAgIHJvb3RbaW5wdXRTY2hlbWEubmFtZV0gPSBpbnB1dERhdGE7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKHJvb3QgaW5zdGFuY2VvZiBPYmplY3QpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIHJvb3Qgb2JqZWN0XCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKGlucHV0RGF0YSBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgZGF0YVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKElEX0JMT0NLIGluIGlucHV0U2NoZW1hKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICgoRlJPTV9CRVIgaW4gaW5wdXRTY2hlbWEuaWRCbG9jaykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKFRPX0JFUiBpbiBpbnB1dFNjaGVtYS5pZEJsb2NrKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGVuY29kZWRJZCA9IGlucHV0U2NoZW1hLmlkQmxvY2sudG9CRVIoZmFsc2UpO1xyXG4gICAgaWYgKGVuY29kZWRJZC5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiRXJyb3IgZW5jb2RpbmcgaWRCbG9jayBmb3IgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZWNvZGVkT2Zmc2V0ID0gaW5wdXRTY2hlbWEuaWRCbG9jay5mcm9tQkVSKGVuY29kZWRJZCwgMCwgZW5jb2RlZElkLmJ5dGVMZW5ndGgpO1xyXG4gICAgaWYgKGRlY29kZWRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiRXJyb3IgZGVjb2RpbmcgaWRCbG9jayBmb3IgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5oYXNPd25Qcm9wZXJ0eShUQUdfQ0xBU1MpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2sudGFnQ2xhc3MgIT09IGlucHV0RGF0YS5pZEJsb2NrLnRhZ0NsYXNzKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaGFzT3duUHJvcGVydHkoVEFHX05VTUJFUikgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay50YWdOdW1iZXIgIT09IGlucHV0RGF0YS5pZEJsb2NrLnRhZ051bWJlcikge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmhhc093blByb3BlcnR5KElTX0NPTlNUUlVDVEVEKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmlzQ29uc3RydWN0ZWQgIT09IGlucHV0RGF0YS5pZEJsb2NrLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoIShJU19IRVhfT05MWSBpbiBpbnB1dFNjaGVtYS5pZEJsb2NrKSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaXNIZXhPbmx5ICE9PSBpbnB1dERhdGEuaWRCbG9jay5pc0hleE9ubHkpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5pc0hleE9ubHkpIHtcclxuICAgICAgICBpZiAoKFZBTFVFX0hFWF9WSUVXIGluIGlucHV0U2NoZW1hLmlkQmxvY2spID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hVmlldyA9IGlucHV0U2NoZW1hLmlkQmxvY2sudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIGNvbnN0IGFzbjFWaWV3ID0gaW5wdXREYXRhLmlkQmxvY2sudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIGlmIChzY2hlbWFWaWV3Lmxlbmd0aCAhPT0gYXNuMVZpZXcubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY2hlbWFWaWV3Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChzY2hlbWFWaWV3W2ldICE9PSBhc24xVmlld1sxXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKVxyXG4gICAgICAgICAgICByb290W2lucHV0U2NoZW1hLm5hbWVdID0gaW5wdXREYXRhO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hIGluc3RhbmNlb2YgdHlwZVN0b3JlLkNvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgbGV0IGFkbWlzc2lvbiA9IDA7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHtcclxuICAgICAgICAgICAgICAgIGVycm9yOiBcIlVua25vd24gZXJyb3JcIixcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IG1heExlbmd0aCA9IGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdIGluc3RhbmNlb2YgUmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgIG1heExlbmd0aCA9IGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCA9PT0gMCkgJiZcclxuICAgICAgICAgICAgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoICE9PSAwKSkge1xyXG4gICAgICAgICAgICBsZXQgX29wdGlvbmFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgX29wdGlvbmFsID0gX29wdGlvbmFsICYmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlW2ldLm9wdGlvbmFsIHx8IGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKF9vcHRpb25hbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb290LmVycm9yID0gXCJJbmNvbnNpc3RlbnQgb2JqZWN0IGxlbmd0aFwiO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKChpIC0gYWRtaXNzaW9uKSA+PSBpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlW2ldLm9wdGlvbmFsID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9yZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICByb290LmVycm9yID0gXCJJbmNvbnNpc3RlbnQgbGVuZ3RoIGJldHdlZW4gQVNOLjEgZGF0YSBhbmQgc2NoZW1hXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc3VsdC5uYW1lID0gaW5wdXRTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Jlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdIGluc3RhbmNlb2YgUmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wYXJlU2NoZW1hKHJvb3QsIGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlW2ldLCBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnZlcmlmaWVkID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5vcHRpb25hbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWlzc2lvbisrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoTkFNRSBpbiBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdKSAmJiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5uYW1lLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheVJvb3QgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChMT0NBTCBpbiBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdKSAmJiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5sb2NhbCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJvb3QgPSBpbnB1dERhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5Um9vdCA9IHJvb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJyYXlSb290W2lucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubmFtZV0gPT09IFwidW5kZWZpbmVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJvb3RbaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5uYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJvb3RbaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5uYW1lXS5wdXNoKGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wYXJlU2NoZW1hKHJvb3QsIGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlW2kgLSBhZG1pc3Npb25dLCBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnZlcmlmaWVkID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVtpXS5vcHRpb25hbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWlzc2lvbisrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQudmVyaWZpZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IF9yZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIF9yZXN1bHQubmFtZSA9IGlucHV0U2NoZW1hLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIF9yZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLnByaW1pdGl2ZVNjaGVtYSAmJlxyXG4gICAgICAgIChWQUxVRV9IRVhfVklFVyBpbiBpbnB1dERhdGEudmFsdWVCbG9jaykpIHtcclxuICAgICAgICBjb25zdCBhc24xID0gbG9jYWxGcm9tQkVSKGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgaWYgKGFzbjEub2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBfcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiBhc24xLnJlc3VsdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgX3Jlc3VsdC5uYW1lID0gaW5wdXRTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gX3Jlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVTY2hlbWEocm9vdCwgYXNuMS5yZXN1bHQsIGlucHV0U2NoZW1hLnByaW1pdGl2ZVNjaGVtYSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiB2ZXJpZnlTY2hlbWEoaW5wdXRCdWZmZXIsIGlucHV0U2NoZW1hKSB7XHJcbiAgICBpZiAoKGlucHV0U2NoZW1hIGluc3RhbmNlb2YgT2JqZWN0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWEgdHlwZVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXNuMSA9IGxvY2FsRnJvbUJFUihwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikpO1xyXG4gICAgaWYgKGFzbjEub2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiBhc24xLnJlc3VsdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29tcGFyZVNjaGVtYShhc24xLnJlc3VsdCwgYXNuMS5yZXN1bHQsIGlucHV0U2NoZW1hKTtcclxufVxuXG5leHBvcnQgeyBBbnksIEJhc2VCbG9jaywgQmFzZVN0cmluZ0Jsb2NrLCBCaXRTdHJpbmcsIEJtcFN0cmluZywgQm9vbGVhbiwgQ2hhcmFjdGVyU3RyaW5nLCBDaG9pY2UsIENvbnN0cnVjdGVkLCBEQVRFLCBEYXRlVGltZSwgRHVyYXRpb24sIEVuZE9mQ29udGVudCwgRW51bWVyYXRlZCwgR2VuZXJhbFN0cmluZywgR2VuZXJhbGl6ZWRUaW1lLCBHcmFwaGljU3RyaW5nLCBIZXhCbG9jaywgSUE1U3RyaW5nLCBJbnRlZ2VyLCBOdWxsLCBOdW1lcmljU3RyaW5nLCBPYmplY3RJZGVudGlmaWVyLCBPY3RldFN0cmluZywgUHJpbWl0aXZlLCBQcmludGFibGVTdHJpbmcsIFJhd0RhdGEsIFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllciwgUmVwZWF0ZWQsIFNlcXVlbmNlLCBTZXQsIFRJTUUsIFRlbGV0ZXhTdHJpbmcsIFRpbWVPZkRheSwgVVRDVGltZSwgVW5pdmVyc2FsU3RyaW5nLCBVdGY4U3RyaW5nLCBWYWx1ZUJsb2NrLCBWaWRlb3RleFN0cmluZywgVmlld1dyaXRlciwgVmlzaWJsZVN0cmluZywgY29tcGFyZVNjaGVtYSwgZnJvbUJFUiwgdmVyaWZ5U2NoZW1hIH07XG4iLCAiZXhwb3J0IHZhciBBc25UeXBlVHlwZXM7XG4oZnVuY3Rpb24gKEFzblR5cGVUeXBlcykge1xuICAgIEFzblR5cGVUeXBlc1tBc25UeXBlVHlwZXNbXCJTZXF1ZW5jZVwiXSA9IDBdID0gXCJTZXF1ZW5jZVwiO1xuICAgIEFzblR5cGVUeXBlc1tBc25UeXBlVHlwZXNbXCJTZXRcIl0gPSAxXSA9IFwiU2V0XCI7XG4gICAgQXNuVHlwZVR5cGVzW0FzblR5cGVUeXBlc1tcIkNob2ljZVwiXSA9IDJdID0gXCJDaG9pY2VcIjtcbn0pKEFzblR5cGVUeXBlcyB8fCAoQXNuVHlwZVR5cGVzID0ge30pKTtcbmV4cG9ydCB2YXIgQXNuUHJvcFR5cGVzO1xuKGZ1bmN0aW9uIChBc25Qcm9wVHlwZXMpIHtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQW55XCJdID0gMV0gPSBcIkFueVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJCb29sZWFuXCJdID0gMl0gPSBcIkJvb2xlYW5cIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiT2N0ZXRTdHJpbmdcIl0gPSAzXSA9IFwiT2N0ZXRTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQml0U3RyaW5nXCJdID0gNF0gPSBcIkJpdFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJJbnRlZ2VyXCJdID0gNV0gPSBcIkludGVnZXJcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiRW51bWVyYXRlZFwiXSA9IDZdID0gXCJFbnVtZXJhdGVkXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIk9iamVjdElkZW50aWZpZXJcIl0gPSA3XSA9IFwiT2JqZWN0SWRlbnRpZmllclwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJVdGY4U3RyaW5nXCJdID0gOF0gPSBcIlV0ZjhTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQm1wU3RyaW5nXCJdID0gOV0gPSBcIkJtcFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJVbml2ZXJzYWxTdHJpbmdcIl0gPSAxMF0gPSBcIlVuaXZlcnNhbFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJOdW1lcmljU3RyaW5nXCJdID0gMTFdID0gXCJOdW1lcmljU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlByaW50YWJsZVN0cmluZ1wiXSA9IDEyXSA9IFwiUHJpbnRhYmxlU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlRlbGV0ZXhTdHJpbmdcIl0gPSAxM10gPSBcIlRlbGV0ZXhTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVmlkZW90ZXhTdHJpbmdcIl0gPSAxNF0gPSBcIlZpZGVvdGV4U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIklBNVN0cmluZ1wiXSA9IDE1XSA9IFwiSUE1U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkdyYXBoaWNTdHJpbmdcIl0gPSAxNl0gPSBcIkdyYXBoaWNTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVmlzaWJsZVN0cmluZ1wiXSA9IDE3XSA9IFwiVmlzaWJsZVN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJHZW5lcmFsU3RyaW5nXCJdID0gMThdID0gXCJHZW5lcmFsU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkNoYXJhY3RlclN0cmluZ1wiXSA9IDE5XSA9IFwiQ2hhcmFjdGVyU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlVUQ1RpbWVcIl0gPSAyMF0gPSBcIlVUQ1RpbWVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiR2VuZXJhbGl6ZWRUaW1lXCJdID0gMjFdID0gXCJHZW5lcmFsaXplZFRpbWVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiREFURVwiXSA9IDIyXSA9IFwiREFURVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJUaW1lT2ZEYXlcIl0gPSAyM10gPSBcIlRpbWVPZkRheVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJEYXRlVGltZVwiXSA9IDI0XSA9IFwiRGF0ZVRpbWVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiRHVyYXRpb25cIl0gPSAyNV0gPSBcIkR1cmF0aW9uXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlRJTUVcIl0gPSAyNl0gPSBcIlRJTUVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiTnVsbFwiXSA9IDI3XSA9IFwiTnVsbFwiO1xufSkoQXNuUHJvcFR5cGVzIHx8IChBc25Qcm9wVHlwZXMgPSB7fSkpO1xuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tIFwicHZ0c3V0aWxzXCI7XG5leHBvcnQgY2xhc3MgQml0U3RyaW5nIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMsIHVudXNlZEJpdHMgPSAwKSB7XG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IDA7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mcm9tTnVtYmVyKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UocGFyYW1zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudW51c2VkQml0cyA9IHVudXNlZEJpdHM7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJVbnN1cHBvcnRlZCB0eXBlIG9mICdwYXJhbXMnIGFyZ3VtZW50IGZvciBCaXRTdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnJvbUFTTihhc24pIHtcbiAgICAgICAgaWYgKCEoYXNuIGluc3RhbmNlb2YgYXNuMWpzLkJpdFN0cmluZykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnYXNuJyBpcyBub3QgaW5zdGFuY2Ugb2YgQVNOLjEgQml0U3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IGFzbi52YWx1ZUJsb2NrLnVudXNlZEJpdHM7XG4gICAgICAgIHRoaXMudmFsdWUgPSBhc24udmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRvQVNOKCkge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5CaXRTdHJpbmcoeyB1bnVzZWRCaXRzOiB0aGlzLnVudXNlZEJpdHMsIHZhbHVlSGV4OiB0aGlzLnZhbHVlIH0pO1xuICAgIH1cbiAgICB0b1NjaGVtYShuYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMWpzLkJpdFN0cmluZyh7IG5hbWUgfSk7XG4gICAgfVxuICAgIHRvTnVtYmVyKCkge1xuICAgICAgICBsZXQgcmVzID0gXCJcIjtcbiAgICAgICAgY29uc3QgdWludEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZSk7XG4gICAgICAgIGZvciAoY29uc3Qgb2N0ZXQgb2YgdWludEFycmF5KSB7XG4gICAgICAgICAgICByZXMgKz0gb2N0ZXQudG9TdHJpbmcoMikucGFkU3RhcnQoOCwgXCIwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJlcyA9IHJlcy5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKTtcbiAgICAgICAgaWYgKHRoaXMudW51c2VkQml0cykge1xuICAgICAgICAgICAgcmVzID0gcmVzLnNsaWNlKHRoaXMudW51c2VkQml0cykucGFkU3RhcnQodGhpcy51bnVzZWRCaXRzLCBcIjBcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHJlcywgMik7XG4gICAgfVxuICAgIGZyb21OdW1iZXIodmFsdWUpIHtcbiAgICAgICAgbGV0IGJpdHMgPSB2YWx1ZS50b1N0cmluZygyKTtcbiAgICAgICAgY29uc3Qgb2N0ZXRTaXplID0gKGJpdHMubGVuZ3RoICsgNykgPj4gMztcbiAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gKG9jdGV0U2l6ZSA8PCAzKSAtIGJpdHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBvY3RldHMgPSBuZXcgVWludDhBcnJheShvY3RldFNpemUpO1xuICAgICAgICBiaXRzID0gYml0cy5wYWRTdGFydChvY3RldFNpemUgPDwgMywgXCIwXCIpLnNwbGl0KFwiXCIpLnJldmVyc2UoKS5qb2luKFwiXCIpO1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBvY3RldFNpemUpIHtcbiAgICAgICAgICAgIG9jdGV0c1tpbmRleF0gPSBwYXJzZUludChiaXRzLnNsaWNlKGluZGV4IDw8IDMsIChpbmRleCA8PCAzKSArIDgpLCAyKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IG9jdGV0cy5idWZmZXI7XG4gICAgfVxufVxuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tIFwicHZ0c3V0aWxzXCI7XG5leHBvcnQgY2xhc3MgT2N0ZXRTdHJpbmcge1xuICAgIGdldCBieXRlTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5idWZmZXIuYnl0ZUxlbmd0aDtcbiAgICB9XG4gICAgZ2V0IGJ5dGVPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihwYXJhbSkge1xuICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihwYXJhbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKHBhcmFtKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIocGFyYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwYXJhbSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHBhcmFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZyb21BU04oYXNuKSB7XG4gICAgICAgIGlmICghKGFzbiBpbnN0YW5jZW9mIGFzbjFqcy5PY3RldFN0cmluZykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnYXNuJyBpcyBub3QgaW5zdGFuY2Ugb2YgQVNOLjEgT2N0ZXRTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWZmZXIgPSBhc24udmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRvQVNOKCkge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5PY3RldFN0cmluZyh7IHZhbHVlSGV4OiB0aGlzLmJ1ZmZlciB9KTtcbiAgICB9XG4gICAgdG9TY2hlbWEobmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5PY3RldFN0cmluZyh7IG5hbWUgfSk7XG4gICAgfVxufVxuIiwgImV4cG9ydCAqIGZyb20gXCIuL2JpdF9zdHJpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29jdGV0X3N0cmluZ1wiO1xuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBBc25Qcm9wVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuaW1wb3J0IHsgT2N0ZXRTdHJpbmcgfSBmcm9tIFwiLi90eXBlcy9pbmRleFwiO1xuZXhwb3J0IGNvbnN0IEFzbkFueUNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlIGluc3RhbmNlb2YgYXNuMWpzLk51bGwgPyBudWxsIDogdmFsdWUudmFsdWVCZWZvcmVEZWNvZGVWaWV3LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5OdWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NoZW1hID0gYXNuMWpzLmZyb21CRVIodmFsdWUpO1xuICAgICAgICBpZiAoc2NoZW1hLnJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNjaGVtYS5yZXN1bHQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY2hlbWEucmVzdWx0O1xuICAgIH0sXG59O1xuZXhwb3J0IGNvbnN0IEFzbkludGVnZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoID49IDRcbiAgICAgICAgPyB2YWx1ZS52YWx1ZUJsb2NrLnRvU3RyaW5nKClcbiAgICAgICAgOiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlRGVjLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuSW50ZWdlcih7IHZhbHVlOiArdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkVudW1lcmF0ZWRDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlRGVjLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuRW51bWVyYXRlZCh7IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkludGVnZXIoeyB2YWx1ZUhleDogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkludGVnZXJCaWdJbnRDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS50b0JpZ0ludCgpLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IGFzbjFqcy5JbnRlZ2VyLmZyb21CaWdJbnQodmFsdWUpLFxufTtcbmV4cG9ydCBjb25zdCBBc25CaXRTdHJpbmdDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkJpdFN0cmluZyh7IHZhbHVlSGV4OiB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuT2JqZWN0SWRlbnRpZmllckNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudG9TdHJpbmcoKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLk9iamVjdElkZW50aWZpZXIoeyB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuQm9vbGVhbkNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWUsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5Cb29sZWFuKHsgdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbk9jdGV0U3RyaW5nQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleFZpZXcsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5PY3RldFN0cmluZyh7IHZhbHVlSGV4OiB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuQ29uc3RydWN0ZWRPY3RldFN0cmluZ0NvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IG5ldyBPY3RldFN0cmluZyh2YWx1ZS5nZXRWYWx1ZSgpKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiB2YWx1ZS50b0FTTigpLFxufTtcbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihBc24xVHlwZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZSxcbiAgICAgICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IEFzbjFUeXBlKHsgdmFsdWUgfSksXG4gICAgfTtcbn1cbmV4cG9ydCBjb25zdCBBc25VdGY4U3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5VdGY4U3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25CbXBTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLkJtcFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVW5pdmVyc2FsU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5Vbml2ZXJzYWxTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbk51bWVyaWNTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLk51bWVyaWNTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblByaW50YWJsZVN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuUHJpbnRhYmxlU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25UZWxldGV4U3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5UZWxldGV4U3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25WaWRlb3RleFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVmlkZW90ZXhTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbklBNVN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuSUE1U3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25HcmFwaGljU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5HcmFwaGljU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25WaXNpYmxlU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5WaXNpYmxlU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25HZW5lcmFsU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5HZW5lcmFsU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25DaGFyYWN0ZXJTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLkNoYXJhY3RlclN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVVRDVGltZUNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnRvRGF0ZSgpLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuVVRDVGltZSh7IHZhbHVlRGF0ZTogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkdlbmVyYWxpemVkVGltZUNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnRvRGF0ZSgpLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuR2VuZXJhbGl6ZWRUaW1lKHsgdmFsdWVEYXRlOiB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuTnVsbENvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAoKSA9PiBudWxsLFxuICAgIHRvQVNOOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMWpzLk51bGwoKTtcbiAgICB9LFxufTtcbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0Q29udmVydGVyKHR5cGUpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuQW55OlxuICAgICAgICAgICAgcmV0dXJuIEFzbkFueUNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuQml0U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkJpdFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuQm1wU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkJtcFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuQm9vbGVhbjpcbiAgICAgICAgICAgIHJldHVybiBBc25Cb29sZWFuQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5DaGFyYWN0ZXJTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuQ2hhcmFjdGVyU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5FbnVtZXJhdGVkOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkVudW1lcmF0ZWRDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkdlbmVyYWxTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuR2VuZXJhbFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuR2VuZXJhbGl6ZWRUaW1lOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkdlbmVyYWxpemVkVGltZUNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuR3JhcGhpY1N0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25HcmFwaGljU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5JQTVTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuSUE1U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5JbnRlZ2VyOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkludGVnZXJDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLk51bGw6XG4gICAgICAgICAgICByZXR1cm4gQXNuTnVsbENvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuTnVtZXJpY1N0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25OdW1lcmljU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5PYmplY3RJZGVudGlmaWVyOlxuICAgICAgICAgICAgcmV0dXJuIEFzbk9iamVjdElkZW50aWZpZXJDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbk9jdGV0U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5QcmludGFibGVTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuUHJpbnRhYmxlU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5UZWxldGV4U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblRlbGV0ZXhTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlVUQ1RpbWU6XG4gICAgICAgICAgICByZXR1cm4gQXNuVVRDVGltZUNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVW5pdmVyc2FsU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblVuaXZlcnNhbFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVXRmOFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25VdGY4U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5WaWRlb3RleFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25WaWRlb3RleFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVmlzaWJsZVN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25WaXNpYmxlU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBpc0NvbnZlcnRpYmxlKHRhcmdldCkge1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcImZ1bmN0aW9uXCIgJiYgdGFyZ2V0LnByb3RvdHlwZSkge1xuICAgICAgICBpZiAodGFyZ2V0LnByb3RvdHlwZS50b0FTTiAmJiB0YXJnZXQucHJvdG90eXBlLmZyb21BU04pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzQ29udmVydGlibGUodGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAhISh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldCA9PT0gXCJvYmplY3RcIiAmJiBcInRvQVNOXCIgaW4gdGFyZ2V0ICYmIFwiZnJvbUFTTlwiIGluIHRhcmdldCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVHlwZU9mQXJyYXkodGFyZ2V0KSB7XG4gICAgdmFyIF9hO1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgICAgICAgaWYgKCgoX2EgPSBwcm90byA9PT0gbnVsbCB8fCBwcm90byA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvdG8ucHJvdG90eXBlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29uc3RydWN0b3IpID09PSBBcnJheSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzVHlwZU9mQXJyYXkocHJvdG8pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheUVxdWFsKGJ5dGVzMSwgYnl0ZXMyKSB7XG4gICAgaWYgKCEoYnl0ZXMxICYmIGJ5dGVzMikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYnl0ZXMxLmJ5dGVMZW5ndGggIT09IGJ5dGVzMi5ieXRlTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYjEgPSBuZXcgVWludDhBcnJheShieXRlczEpO1xuICAgIGNvbnN0IGIyID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzMS5ieXRlTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGIxW2ldICE9PSBiMltpXSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBBc25Qcm9wVHlwZXMsIEFzblR5cGVUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgeyBpc0NvbnZlcnRpYmxlIH0gZnJvbSBcIi4vaGVscGVyXCI7XG5leHBvcnQgY2xhc3MgQXNuU2NoZW1hU3RvcmFnZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBuZXcgV2Vha01hcCgpO1xuICAgIH1cbiAgICBoYXModGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmhhcyh0YXJnZXQpO1xuICAgIH1cbiAgICBnZXQodGFyZ2V0LCBjaGVja1NjaGVtYSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHRhcmdldCk7XG4gICAgICAgIGlmICghc2NoZW1hKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgc2NoZW1hIGZvciAnJHt0YXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWV9JyB0YXJnZXRgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tTY2hlbWEgJiYgIXNjaGVtYS5zY2hlbWEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NoZW1hICcke3RhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZX0nIGRvZXNuJ3QgY29udGFpbiBBU04uMSBzY2hlbWEuIENhbGwgJ0FzblNjaGVtYVN0b3JhZ2UuY2FjaGUnLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfVxuICAgIGNhY2hlKHRhcmdldCkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmdldCh0YXJnZXQpO1xuICAgICAgICBpZiAoIXNjaGVtYS5zY2hlbWEpIHtcbiAgICAgICAgICAgIHNjaGVtYS5zY2hlbWEgPSB0aGlzLmNyZWF0ZSh0YXJnZXQsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNyZWF0ZURlZmF1bHQodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHtcbiAgICAgICAgICAgIHR5cGU6IEFzblR5cGVUeXBlcy5TZXF1ZW5jZSxcbiAgICAgICAgICAgIGl0ZW1zOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGFyZW50U2NoZW1hID0gdGhpcy5maW5kUGFyZW50U2NoZW1hKHRhcmdldCk7XG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCBwYXJlbnRTY2hlbWEpO1xuICAgICAgICAgICAgc2NoZW1hLml0ZW1zID0gT2JqZWN0LmFzc2lnbih7fSwgc2NoZW1hLml0ZW1zLCBwYXJlbnRTY2hlbWEuaXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfVxuICAgIGNyZWF0ZSh0YXJnZXQsIHVzZU5hbWVzKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHRhcmdldCkgfHwgdGhpcy5jcmVhdGVEZWZhdWx0KHRhcmdldCk7XG4gICAgICAgIGNvbnN0IGFzbjFWYWx1ZSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBzY2hlbWEuaXRlbXNba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB1c2VOYW1lcyA/IGtleSA6IFwiXCI7XG4gICAgICAgICAgICBsZXQgYXNuMUl0ZW07XG4gICAgICAgICAgICBpZiAodHlwZW9mIChpdGVtLnR5cGUpID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgQXNuMVR5cGVOYW1lID0gQXNuUHJvcFR5cGVzW2l0ZW0udHlwZV07XG4gICAgICAgICAgICAgICAgY29uc3QgQXNuMVR5cGUgPSBhc24xanNbQXNuMVR5cGVOYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoIUFzbjFUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBBU04xIGNsYXNzIGJ5IG5hbWUgJyR7QXNuMVR5cGVOYW1lfSdgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgQXNuMVR5cGUoeyBuYW1lIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNDb252ZXJ0aWJsZShpdGVtLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgaXRlbS50eXBlKCk7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBpbnN0YW5jZS50b1NjaGVtYShuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0ub3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2NoZW1hID0gdGhpcy5nZXQoaXRlbS50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbVNjaGVtYS50eXBlID09PSBBc25UeXBlVHlwZXMuQ2hvaWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IGFzbjFqcy5BbnkoeyBuYW1lIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSB0aGlzLmNyZWF0ZShpdGVtLnR5cGUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgYXNuMUl0ZW0ubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgYXNuMWpzLkFueSh7IG5hbWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcHRpb25hbCA9ICEhaXRlbS5vcHRpb25hbCB8fCBpdGVtLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbS5uYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBpdGVtLnJlcGVhdGVkID09PSBcInNldFwiXG4gICAgICAgICAgICAgICAgICAgID8gYXNuMWpzLlNldFxuICAgICAgICAgICAgICAgICAgICA6IGFzbjFqcy5TZXF1ZW5jZTtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGFzbjFqcy5SZXBlYXRlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXNuMUl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLmNvbnRleHQgIT09IG51bGwgJiYgaXRlbS5jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pbXBsaWNpdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0udHlwZSA9PT0gXCJudW1iZXJcIiB8fCBpc0NvbnZlcnRpYmxlKGl0ZW0udHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IGl0ZW0ucmVwZWF0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFzbjFqcy5Db25zdHJ1Y3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYXNuMWpzLlByaW1pdGl2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBpdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGUoaXRlbS50eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzUmVwZWF0ZWQgPSAhIWl0ZW0ucmVwZWF0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSAhaXNSZXBlYXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZXQoaXRlbS50eXBlLCB0cnVlKS5zY2hlbWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzbjFJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBcInZhbHVlQmxvY2tcIiBpbiB2YWx1ZSA/IHZhbHVlLnZhbHVlQmxvY2sudmFsdWUgOiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICFpc1JlcGVhdGVkID8gbmFtZSA6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBpdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBpdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFthc24xSXRlbV0sXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbS5vcHRpb25hbCA9IG9wdGlvbmFsO1xuICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKGFzbjFJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5TZXF1ZW5jZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5TZXF1ZW5jZSh7IHZhbHVlOiBhc24xVmFsdWUsIG5hbWU6IFwiXCIgfSk7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5TZXQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuU2V0KHsgdmFsdWU6IGFzbjFWYWx1ZSwgbmFtZTogXCJcIiB9KTtcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLkNob2ljZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5DaG9pY2UoeyB2YWx1ZTogYXNuMVZhbHVlLCBuYW1lOiBcIlwiIH0pO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEFTTjEgdHlwZSBpbiB1c2VgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXQodGFyZ2V0LCBzY2hlbWEpIHtcbiAgICAgICAgdGhpcy5pdGVtcy5zZXQodGFyZ2V0LCBzY2hlbWEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCk7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHBhcmVudCk7XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hIHx8IHRoaXMuZmluZFBhcmVudFNjaGVtYShwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBBc25TY2hlbWFTdG9yYWdlIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5leHBvcnQgY29uc3Qgc2NoZW1hU3RvcmFnZSA9IG5ldyBBc25TY2hlbWFTdG9yYWdlKCk7XG4iLCAiaW1wb3J0ICogYXMgY29udmVydGVycyBmcm9tIFwiLi9jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyBBc25UeXBlVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuaW1wb3J0IHsgc2NoZW1hU3RvcmFnZSB9IGZyb20gXCIuL3N0b3JhZ2VcIjtcbmV4cG9ydCBjb25zdCBBc25UeXBlID0gKG9wdGlvbnMpID0+ICh0YXJnZXQpID0+IHtcbiAgICBsZXQgc2NoZW1hO1xuICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0KSkge1xuICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmNyZWF0ZURlZmF1bHQodGFyZ2V0KTtcbiAgICAgICAgc2NoZW1hU3RvcmFnZS5zZXQodGFyZ2V0LCBzY2hlbWEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0KTtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIG9wdGlvbnMpO1xufTtcbmV4cG9ydCBjb25zdCBBc25DaG9pY2VUeXBlID0gKCkgPT4gQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSk7XG5leHBvcnQgY29uc3QgQXNuU2V0VHlwZSA9IChvcHRpb25zKSA9PiBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLlNldCwgLi4ub3B0aW9ucyB9KTtcbmV4cG9ydCBjb25zdCBBc25TZXF1ZW5jZVR5cGUgPSAob3B0aW9ucykgPT4gQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5TZXF1ZW5jZSwgLi4ub3B0aW9ucyB9KTtcbmV4cG9ydCBjb25zdCBBc25Qcm9wID0gKG9wdGlvbnMpID0+ICh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgbGV0IHNjaGVtYTtcbiAgICBpZiAoIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldC5jb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5jcmVhdGVEZWZhdWx0KHRhcmdldC5jb25zdHJ1Y3Rvcik7XG4gICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldC5jb25zdHJ1Y3Rvciwgc2NoZW1hKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldC5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICAgIGNvbnN0IGNvcHlPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyk7XG4gICAgaWYgKHR5cGVvZiBjb3B5T3B0aW9ucy50eXBlID09PSBcIm51bWJlclwiICYmICFjb3B5T3B0aW9ucy5jb252ZXJ0ZXIpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdENvbnZlcnRlciA9IGNvbnZlcnRlcnMuZGVmYXVsdENvbnZlcnRlcihvcHRpb25zLnR5cGUpO1xuICAgICAgICBpZiAoIWRlZmF1bHRDb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBkZWZhdWx0IGNvbnZlcnRlciBmb3IgcHJvcGVydHkgJyR7cHJvcGVydHlLZXl9JyBvZiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvcHlPcHRpb25zLmNvbnZlcnRlciA9IGRlZmF1bHRDb252ZXJ0ZXI7XG4gICAgfVxuICAgIHNjaGVtYS5pdGVtc1twcm9wZXJ0eUtleV0gPSBjb3B5T3B0aW9ucztcbn07XG4iLCAiZXhwb3J0IGNsYXNzIEFzblNjaGVtYVZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5zY2hlbWFzID0gW107XG4gICAgfVxufVxuIiwgImV4cG9ydCAqIGZyb20gXCIuL3NjaGVtYV92YWxpZGF0aW9uXCI7XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEFzblByb3BUeXBlcywgQXNuVHlwZVR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCAqIGFzIGNvbnZlcnRlcnMgZnJvbSBcIi4vY29udmVydGVyc1wiO1xuaW1wb3J0IHsgQXNuU2NoZW1hVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBpc0NvbnZlcnRpYmxlLCBpc1R5cGVPZkFycmF5IH0gZnJvbSBcIi4vaGVscGVyXCI7XG5pbXBvcnQgeyBzY2hlbWFTdG9yYWdlIH0gZnJvbSBcIi4vc3RvcmFnZVwiO1xuZXhwb3J0IGNsYXNzIEFzblBhcnNlciB7XG4gICAgc3RhdGljIHBhcnNlKGRhdGEsIHRhcmdldCkge1xuICAgICAgICBjb25zdCBhc24xUGFyc2VkID0gYXNuMWpzLmZyb21CRVIoZGF0YSk7XG4gICAgICAgIGlmIChhc24xUGFyc2VkLnJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFzbjFQYXJzZWQucmVzdWx0LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSB0aGlzLmZyb21BU04oYXNuMVBhcnNlZC5yZXN1bHQsIHRhcmdldCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tQVNOKGFzbjFTY2hlbWEsIHRhcmdldCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBuZXcgdGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmZyb21BU04oYXNuMVNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXQpO1xuICAgICAgICAgICAgc2NoZW1hU3RvcmFnZS5jYWNoZSh0YXJnZXQpO1xuICAgICAgICAgICAgbGV0IHRhcmdldFNjaGVtYSA9IHNjaGVtYS5zY2hlbWE7XG4gICAgICAgICAgICBpZiAoYXNuMVNjaGVtYS5jb25zdHJ1Y3RvciA9PT0gYXNuMWpzLkNvbnN0cnVjdGVkICYmIHNjaGVtYS50eXBlICE9PSBBc25UeXBlVHlwZXMuQ2hvaWNlKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0U2NoZW1hID0gbmV3IGFzbjFqcy5Db25zdHJ1Y3RlZCh7XG4gICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBhc24xU2NoZW1hLmlkQmxvY2sudGFnTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc2NoZW1hLnNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYS5pdGVtcykge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYXNuMVNjaGVtYVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFzbjFDb21wYXJlZFNjaGVtYSA9IGFzbjFqcy5jb21wYXJlU2NoZW1hKHt9LCBhc24xU2NoZW1hLCB0YXJnZXRTY2hlbWEpO1xuICAgICAgICAgICAgaWYgKCFhc24xQ29tcGFyZWRTY2hlbWEudmVyaWZpZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNuU2NoZW1hVmFsaWRhdGlvbkVycm9yKGBEYXRhIGRvZXMgbm90IG1hdGNoIHRvICR7dGFyZ2V0Lm5hbWV9IEFTTjEgc2NoZW1hLiAke2FzbjFDb21wYXJlZFNjaGVtYS5yZXN1bHQuZXJyb3J9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXMgPSBuZXcgdGFyZ2V0KCk7XG4gICAgICAgICAgICBpZiAoaXNUeXBlT2ZBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoXCJ2YWx1ZVwiIGluIGFzbjFTY2hlbWEudmFsdWVCbG9jayAmJiBBcnJheS5pc0FycmF5KGFzbjFTY2hlbWEudmFsdWVCbG9jay52YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBpdGVtcyBmcm9tIHRoZSBBU04uMSBwYXJzZWQgdmFsdWUuIEFTTi4xIG9iamVjdCBpcyBub3QgY29uc3RydWN0ZWQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1UeXBlID0gc2NoZW1hLml0ZW1UeXBlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbVR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVyID0gY29udmVydGVycy5kZWZhdWx0Q29udmVydGVyKGl0ZW1UeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBkZWZhdWx0IGNvbnZlcnRlciBmb3IgYXJyYXkgaXRlbSBvZiAke3RhcmdldC5uYW1lfSBBU04xIHNjaGVtYWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuZnJvbShhc24xU2NoZW1hLnZhbHVlQmxvY2sudmFsdWUsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIuZnJvbUFTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmZyb20oYXNuMVNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLCAoZWxlbWVudCkgPT4gdGhpcy5mcm9tQVNOKGVsZW1lbnQsIGl0ZW1UeXBlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuMVNjaGVtYVZhbHVlID0gYXNuMUNvbXBhcmVkU2NoZW1hLnJlc3VsdFtrZXldO1xuICAgICAgICAgICAgICAgIGlmICghYXNuMVNjaGVtYVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFJdGVtID0gc2NoZW1hLml0ZW1zW2tleV07XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hSXRlbVR5cGUgPSBzY2hlbWFJdGVtLnR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFJdGVtVHlwZSA9PT0gXCJudW1iZXJcIiB8fCBpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW1UeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZXIgPSAoX2EgPSBzY2hlbWFJdGVtLmNvbnZlcnRlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKGlzQ29udmVydGlibGUoc2NoZW1hSXRlbVR5cGUpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBzY2hlbWFJdGVtVHlwZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnZlcnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udmVydGVyIGlzIGVtcHR5XCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5pbXBsaWNpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IHNjaGVtYUl0ZW0ucmVwZWF0ZWQgPT09IFwic2VxdWVuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFzbjFqcy5TZXF1ZW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzbjFqcy5TZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IG5ldyBDb250YWluZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtLnZhbHVlQmxvY2sgPSBhc24xU2NoZW1hVmFsdWUudmFsdWVCbG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtQXNuID0gYXNuMWpzLmZyb21CRVIobmV3SXRlbS50b0JFUihmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdJdGVtQXNuLm9mZnNldCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGNoaWxkIGl0ZW0uICR7bmV3SXRlbUFzbi5yZXN1bHQuZXJyb3J9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKFwidmFsdWVcIiBpbiBuZXdJdGVtQXNuLnJlc3VsdC52YWx1ZUJsb2NrICYmIEFycmF5LmlzQXJyYXkobmV3SXRlbUFzbi5yZXN1bHQudmFsdWVCbG9jay52YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgaXRlbXMgZnJvbSB0aGUgQVNOLjEgcGFyc2VkIHZhbHVlLiBBU04uMSBvYmplY3QgaXMgbm90IGNvbnN0cnVjdGVkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBuZXdJdGVtQXNuLnJlc3VsdC52YWx1ZUJsb2NrLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gQXJyYXkuZnJvbSh2YWx1ZSwgKGVsZW1lbnQpID0+IGNvbnZlcnRlci5mcm9tQVNOKGVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gQXJyYXkuZnJvbShhc24xU2NoZW1hVmFsdWUsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIuZnJvbUFTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBhc24xU2NoZW1hVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5pbXBsaWNpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW1UeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtID0gbmV3IHNjaGVtYUl0ZW1UeXBlKCkudG9TY2hlbWEoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBc24xVHlwZU5hbWUgPSBBc25Qcm9wVHlwZXNbc2NoZW1hSXRlbVR5cGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBc24xVHlwZSA9IGFzbjFqc1tBc24xVHlwZU5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFzbjFUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgJyR7QXNuMVR5cGVOYW1lfScgY2xhc3MgZnJvbSBhc24xanMgbW9kdWxlYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbSA9IG5ldyBBc24xVHlwZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtLnZhbHVlQmxvY2sgPSB2YWx1ZS52YWx1ZUJsb2NrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXNuMWpzLmZyb21CRVIobmV3SXRlbS50b0JFUihmYWxzZSkpLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gY29udmVydGVyLmZyb21BU04odmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFzbjFTY2hlbWFWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IGxpc3Qgb2YgaXRlbXMgZnJvbSB0aGUgQVNOLjEgcGFyc2VkIHZhbHVlLiBBU04uMSB2YWx1ZSBzaG91bGQgYmUgaXRlcmFibGUuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSBBcnJheS5mcm9tKGFzbjFTY2hlbWFWYWx1ZSwgKGVsZW1lbnQpID0+IHRoaXMuZnJvbUFTTihlbGVtZW50LCBzY2hlbWFJdGVtVHlwZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSB0aGlzLmZyb21BU04oYXNuMVNjaGVtYVZhbHVlLCBzY2hlbWFJdGVtVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXNuU2NoZW1hVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyb3Iuc2NoZW1hcy5wdXNoKHRhcmdldC5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgKiBhcyBjb252ZXJ0ZXJzIGZyb20gXCIuL2NvbnZlcnRlcnNcIjtcbmltcG9ydCB7IEFzblByb3BUeXBlcywgQXNuVHlwZVR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7IGlzQ29udmVydGlibGUsIGlzQXJyYXlFcXVhbCB9IGZyb20gXCIuL2hlbHBlclwiO1xuaW1wb3J0IHsgc2NoZW1hU3RvcmFnZSB9IGZyb20gXCIuL3N0b3JhZ2VcIjtcbmV4cG9ydCBjbGFzcyBBc25TZXJpYWxpemVyIHtcbiAgICBzdGF0aWMgc2VyaWFsaXplKG9iaikge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgYXNuMWpzLkJhc2VCbG9jaykge1xuICAgICAgICAgICAgcmV0dXJuIG9iai50b0JFUihmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9BU04ob2JqKS50b0JFUihmYWxzZSk7XG4gICAgfVxuICAgIHN0YXRpYyB0b0FTTihvYmopIHtcbiAgICAgICAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmIGlzQ29udmVydGlibGUob2JqKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iai50b0FTTigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKG9iaiAmJiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAxIHNob3VsZCBiZSB0eXBlIG9mIE9iamVjdC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gb2JqLmNvbnN0cnVjdG9yO1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXQpO1xuICAgICAgICBzY2hlbWFTdG9yYWdlLmNhY2hlKHRhcmdldCk7XG4gICAgICAgIGxldCBhc24xVmFsdWUgPSBbXTtcbiAgICAgICAgaWYgKHNjaGVtYS5pdGVtVHlwZSkge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyIDEgc2hvdWxkIGJlIHR5cGUgb2YgQXJyYXkuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuaXRlbVR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZXIgPSBjb252ZXJ0ZXJzLmRlZmF1bHRDb252ZXJ0ZXIoc2NoZW1hLml0ZW1UeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnZlcnRlcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZGVmYXVsdCBjb252ZXJ0ZXIgZm9yIGFycmF5IGl0ZW0gb2YgJHt0YXJnZXQubmFtZX0gQVNOMSBzY2hlbWFgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXNuMVZhbHVlID0gb2JqLm1hcCgobykgPT4gY29udmVydGVyLnRvQVNOKG8pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzbjFWYWx1ZSA9IG9iai5tYXAoKG8pID0+IHRoaXMudG9Bc25JdGVtKHsgdHlwZTogc2NoZW1hLml0ZW1UeXBlIH0sIFwiW11cIiwgdGFyZ2V0LCBvKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFJdGVtID0gc2NoZW1hLml0ZW1zW2tleV07XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqUHJvcCA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgIGlmIChvYmpQcm9wID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgfHwgc2NoZW1hSXRlbS5kZWZhdWx0VmFsdWUgPT09IG9ialByb3BcbiAgICAgICAgICAgICAgICAgICAgfHwgKHR5cGVvZiBzY2hlbWFJdGVtLmRlZmF1bHRWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb2JqUHJvcCA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXNBcnJheUVxdWFsKHRoaXMuc2VyaWFsaXplKHNjaGVtYUl0ZW0uZGVmYXVsdFZhbHVlKSwgdGhpcy5zZXJpYWxpemUob2JqUHJvcCkpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuMUl0ZW0gPSBBc25TZXJpYWxpemVyLnRvQXNuSXRlbShzY2hlbWFJdGVtLCBrZXksIHRhcmdldCwgb2JqUHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFJdGVtLmNvbnRleHQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0uaW1wbGljaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2NoZW1hSXRlbS5yZXBlYXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICh0eXBlb2Ygc2NoZW1hSXRlbS50eXBlID09PSBcIm51bWJlclwiIHx8IGlzQ29udmVydGlibGUoc2NoZW1hSXRlbS50eXBlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlSGV4ID0gYXNuMUl0ZW0gaW5zdGFuY2VvZiBhc24xanMuTnVsbCA/IGFzbjFJdGVtLnZhbHVlQmVmb3JlRGVjb2RlVmlldyA6IGFzbjFJdGVtLnZhbHVlQmxvY2sudG9CRVIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLlByaW1pdGl2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsOiBzY2hlbWFJdGVtLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogc2NoZW1hSXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWw6IHNjaGVtYUl0ZW0ub3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBzY2hlbWFJdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhc24xSXRlbS52YWx1ZUJsb2NrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsOiBzY2hlbWFJdGVtLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogc2NoZW1hSXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFthc24xSXRlbV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUgPSBhc24xVmFsdWUuY29uY2F0KGFzbjFJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKGFzbjFJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFzblNjaGVtYTtcbiAgICAgICAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuU2VxdWVuY2U6XG4gICAgICAgICAgICAgICAgYXNuU2NoZW1hID0gbmV3IGFzbjFqcy5TZXF1ZW5jZSh7IHZhbHVlOiBhc24xVmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5TZXQ6XG4gICAgICAgICAgICAgICAgYXNuU2NoZW1hID0gbmV3IGFzbjFqcy5TZXQoeyB2YWx1ZTogYXNuMVZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuQ2hvaWNlOlxuICAgICAgICAgICAgICAgIGlmICghYXNuMVZhbHVlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NoZW1hICcke3RhcmdldC5uYW1lfScgaGFzIHdyb25nIGRhdGEuIENob2ljZSBjYW5ub3QgYmUgZW1wdHkuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzblNjaGVtYSA9IGFzbjFWYWx1ZVswXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXNuU2NoZW1hO1xuICAgIH1cbiAgICBzdGF0aWMgdG9Bc25JdGVtKHNjaGVtYUl0ZW0sIGtleSwgdGFyZ2V0LCBvYmpQcm9wKSB7XG4gICAgICAgIGxldCBhc24xSXRlbTtcbiAgICAgICAgaWYgKHR5cGVvZiAoc2NoZW1hSXRlbS50eXBlKSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgY29uc3QgY29udmVydGVyID0gc2NoZW1hSXRlbS5jb252ZXJ0ZXI7XG4gICAgICAgICAgICBpZiAoIWNvbnZlcnRlcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvcGVydHkgJyR7a2V5fScgZG9lc24ndCBoYXZlIGNvbnZlcnRlciBmb3IgdHlwZSAke0FzblByb3BUeXBlc1tzY2hlbWFJdGVtLnR5cGVdfSBpbiBzY2hlbWEgJyR7dGFyZ2V0Lm5hbWV9J2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqUHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAnb2JqUHJvcCcgc2hvdWxkIGJlIHR5cGUgb2YgQXJyYXkuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IEFycmF5LmZyb20ob2JqUHJvcCwgKGVsZW1lbnQpID0+IGNvbnZlcnRlci50b0FTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyID0gc2NoZW1hSXRlbS5yZXBlYXRlZCA9PT0gXCJzZXF1ZW5jZVwiXG4gICAgICAgICAgICAgICAgICAgID8gYXNuMWpzLlNlcXVlbmNlXG4gICAgICAgICAgICAgICAgICAgIDogYXNuMWpzLlNldDtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IGNvbnZlcnRlci50b0FTTihvYmpQcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9ialByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ29ialByb3AnIHNob3VsZCBiZSB0eXBlIG9mIEFycmF5LlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKG9ialByb3AsIChlbGVtZW50KSA9PiB0aGlzLnRvQVNOKGVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBzY2hlbWFJdGVtLnJlcGVhdGVkID09PSBcInNlcXVlbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgPyBhc24xanMuU2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgOiBhc24xanMuU2V0O1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IENvbnRhaW5lcih7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gdGhpcy50b0FTTihvYmpQcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXNuMUl0ZW07XG4gICAgfVxufVxuIiwgImV4cG9ydCBjbGFzcyBBc25BcnJheSBleHRlbmRzIEFycmF5IHtcbiAgICBjb25zdHJ1Y3RvcihpdGVtcyA9IFtdKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbXMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHN1cGVyKGl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB9IGZyb20gXCJwdnRzdXRpbHNcIjtcbmltcG9ydCB7IEFzblBhcnNlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuaW1wb3J0IHsgQXNuU2VyaWFsaXplciB9IGZyb20gXCIuL3NlcmlhbGl6ZXJcIjtcbmV4cG9ydCBjbGFzcyBBc25Db252ZXJ0IHtcbiAgICBzdGF0aWMgc2VyaWFsaXplKG9iaikge1xuICAgICAgICByZXR1cm4gQXNuU2VyaWFsaXplci5zZXJpYWxpemUob2JqKTtcbiAgICB9XG4gICAgc3RhdGljIHBhcnNlKGRhdGEsIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gQXNuUGFyc2VyLnBhcnNlKGRhdGEsIHRhcmdldCk7XG4gICAgfVxuICAgIHN0YXRpYyB0b1N0cmluZyhkYXRhKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShkYXRhKVxuICAgICAgICAgICAgPyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKVxuICAgICAgICAgICAgOiBBc25Db252ZXJ0LnNlcmlhbGl6ZShkYXRhKTtcbiAgICAgICAgY29uc3QgYXNuID0gYXNuMWpzLmZyb21CRVIoYnVmKTtcbiAgICAgICAgaWYgKGFzbi5vZmZzZXQgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkZWNvZGUgQVNOLjEgZGF0YS4gJHthc24ucmVzdWx0LmVycm9yfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc24ucmVzdWx0LnRvU3RyaW5nKCk7XG4gICAgfVxufVxuIiwgImV4cG9ydCAqIGZyb20gXCIuL2NvbnZlcnRlcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzL2luZGV4XCI7XG5leHBvcnQgeyBBc25Qcm9wLCBBc25UeXBlLCBBc25DaG9pY2VUeXBlLCBBc25TZXF1ZW5jZVR5cGUsIEFzblNldFR5cGUgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgeyBBc25UeXBlVHlwZXMsIEFzblByb3BUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5leHBvcnQgeyBBc25QYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmV4cG9ydCB7IEFzblNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9zZXJpYWxpemVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29iamVjdHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbnZlcnRcIjtcbiIsICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgfVxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgdFtwXSA9IHNbcF07XG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgfVxuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XG4gIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxuICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xuICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcbiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XG4gIHZhciBfLCBkb25lID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XG4gICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcbiAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xuICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcbiAgICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gIGRvbmUgPSB0cnVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XG4gIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xuICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxuICAgICAgICAgIHJba10gPSBhW2pdO1xuICByZXR1cm4gcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XG4gIHZhciBpLCBwO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xuICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxuICByZXR1cm4gY29va2VkO1xufTtcblxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufTtcblxudmFyIG93bktleXMgPSBmdW5jdGlvbihvKSB7XG4gIG93bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgIHZhciBhciA9IFtdO1xuICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgcmV0dXJuIGFyO1xuICB9O1xuICByZXR1cm4gb3duS2V5cyhvKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcbiAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xuICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcbiAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudiwgdmFsdWUsIGFzeW5jKSB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XG4gICAgdmFyIGRpc3Bvc2UsIGlubmVyO1xuICAgIGlmIChhc3luYykge1xuICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG4gICAgfVxuICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcbiAgICAgIGlmICghU3ltYm9sLmRpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgICAgaWYgKGFzeW5jKSBpbm5lciA9IGRpc3Bvc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcbiAgICBpZiAoaW5uZXIpIGRpc3Bvc2UgPSBmdW5jdGlvbigpIHsgdHJ5IHsgaW5uZXIuY2FsbCh0aGlzKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7IH0gfTtcbiAgICBlbnYuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZSwgZGlzcG9zZTogZGlzcG9zZSwgYXN5bmM6IGFzeW5jIH0pO1xuICB9XG4gIGVsc2UgaWYgKGFzeW5jKSB7XG4gICAgZW52LnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGlzcG9zZVJlc291cmNlcyhlbnYpIHtcbiAgZnVuY3Rpb24gZmFpbChlKSB7XG4gICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xuICAgIGVudi5oYXNFcnJvciA9IHRydWU7XG4gIH1cbiAgdmFyIHIsIHMgPSAwO1xuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHdoaWxlIChyID0gZW52LnN0YWNrLnBvcCgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXIuYXN5bmMgJiYgcyA9PT0gMSkgcmV0dXJuIHMgPSAwLCBlbnYuc3RhY2sucHVzaChyKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0KTtcbiAgICAgICAgaWYgKHIuZGlzcG9zZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSByLmRpc3Bvc2UuY2FsbChyLnZhbHVlKTtcbiAgICAgICAgICBpZiAoci5hc3luYykgcmV0dXJuIHMgfD0gMiwgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgcyB8PSAxO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZmFpbChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMgPT09IDEpIHJldHVybiBlbnYuaGFzRXJyb3IgPyBQcm9taXNlLnJlamVjdChlbnYuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xuICB9XG4gIHJldHVybiBuZXh0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbihwYXRoLCBwcmVzZXJ2ZUpzeCkge1xuICBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIgJiYgL15cXC5cXC4/XFwvLy50ZXN0KHBhdGgpKSB7XG4gICAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC4odHN4KSR8KCg/OlxcLmQpPykoKD86XFwuW14uL10rPyk/KVxcLihbY21dPyl0cyQvaSwgZnVuY3Rpb24gKG0sIHRzeCwgZCwgZXh0LCBjbSkge1xuICAgICAgICAgIHJldHVybiB0c3ggPyBwcmVzZXJ2ZUpzeCA/IFwiLmpzeFwiIDogXCIuanNcIiA6IGQgJiYgKCFleHQgfHwgIWNtKSA/IG0gOiAoZCArIGV4dCArIFwiLlwiICsgY20udG9Mb3dlckNhc2UoKSArIFwianNcIik7XG4gICAgICB9KTtcbiAgfVxuICByZXR1cm4gcGF0aDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fZXNEZWNvcmF0ZSxcbiAgX19ydW5Jbml0aWFsaXplcnMsXG4gIF9fcHJvcEtleSxcbiAgX19zZXRGdW5jdGlvbk5hbWUsXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxuICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbixcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAsIFBlY3VsaWFyIFZlbnR1cmVzLCBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICovXG5cbmNsYXNzIEpzb25FcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGlubmVyRXJyb3IpIHtcclxuICAgICAgICBzdXBlcihpbm5lckVycm9yXHJcbiAgICAgICAgICAgID8gYCR7bWVzc2FnZX0uIFNlZSB0aGUgaW5uZXIgZXhjZXB0aW9uIGZvciBtb3JlIGRldGFpbHMuYFxyXG4gICAgICAgICAgICA6IG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICAgICAgdGhpcy5pbm5lckVycm9yID0gaW5uZXJFcnJvcjtcclxuICAgIH1cclxufVxuXG5jbGFzcyBUcmFuc2Zvcm1FcnJvciBleHRlbmRzIEpzb25FcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihzY2hlbWEsIG1lc3NhZ2UsIGlubmVyRXJyb3IpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlLCBpbm5lckVycm9yKTtcclxuICAgICAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBQYXJzZXJFcnJvciBleHRlbmRzIFRyYW5zZm9ybUVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwgbWVzc2FnZSwgaW5uZXJFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKHNjaGVtYSwgYEpTT04gZG9lc24ndCBtYXRjaCB0byAnJHtzY2hlbWEudGFyZ2V0Lm5hbWV9JyBzY2hlbWEuICR7bWVzc2FnZX1gLCBpbm5lckVycm9yKTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBKc29uRXJyb3Ige1xyXG59XG5cbmNsYXNzIFNlcmlhbGl6ZXJFcnJvciBleHRlbmRzIEpzb25FcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihzY2hlbWFOYW1lLCBtZXNzYWdlLCBpbm5lckVycm9yKSB7XHJcbiAgICAgICAgc3VwZXIoYENhbm5vdCBzZXJpYWxpemUgYnkgJyR7c2NoZW1hTmFtZX0nIHNjaGVtYS4gJHttZXNzYWdlfWAsIGlubmVyRXJyb3IpO1xyXG4gICAgICAgIHRoaXMuc2NoZW1hTmFtZSA9IHNjaGVtYU5hbWU7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgS2V5RXJyb3IgZXh0ZW5kcyBQYXJzZXJFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihzY2hlbWEsIGtleXMsIGVycm9ycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIoc2NoZW1hLCBcIlNvbWUga2V5cyBkb2Vzbid0IG1hdGNoIHRvIHNjaGVtYVwiKTtcclxuICAgICAgICB0aGlzLmtleXMgPSBrZXlzO1xyXG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xyXG4gICAgfVxyXG59XG5cbnZhciBKc29uUHJvcFR5cGVzO1xyXG4oZnVuY3Rpb24gKEpzb25Qcm9wVHlwZXMpIHtcclxuICAgIEpzb25Qcm9wVHlwZXNbSnNvblByb3BUeXBlc1tcIkFueVwiXSA9IDBdID0gXCJBbnlcIjtcclxuICAgIEpzb25Qcm9wVHlwZXNbSnNvblByb3BUeXBlc1tcIkJvb2xlYW5cIl0gPSAxXSA9IFwiQm9vbGVhblwiO1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiTnVtYmVyXCJdID0gMl0gPSBcIk51bWJlclwiO1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiU3RyaW5nXCJdID0gM10gPSBcIlN0cmluZ1wiO1xyXG59KShKc29uUHJvcFR5cGVzIHx8IChKc29uUHJvcFR5cGVzID0ge30pKTtcblxuZnVuY3Rpb24gY2hlY2tUeXBlKHZhbHVlLCB0eXBlKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIEpzb25Qcm9wVHlwZXMuQm9vbGVhbjpcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCI7XHJcbiAgICAgICAgY2FzZSBKc29uUHJvcFR5cGVzLk51bWJlcjpcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIjtcclxuICAgICAgICBjYXNlIEpzb25Qcm9wVHlwZXMuU3RyaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuZnVuY3Rpb24gdGhyb3dJZlR5cGVJc1dyb25nKHZhbHVlLCB0eXBlKSB7XHJcbiAgICBpZiAoIWNoZWNrVHlwZSh2YWx1ZSwgdHlwZSkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBWYWx1ZSBtdXN0IGJlICR7SnNvblByb3BUeXBlc1t0eXBlXX1gKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpc0NvbnZlcnRpYmxlKHRhcmdldCkge1xyXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQucHJvdG90eXBlKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldC5wcm90b3R5cGUudG9KU09OICYmIHRhcmdldC5wcm90b3R5cGUuZnJvbUpTT04pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNDb252ZXJ0aWJsZSh0YXJnZXQucHJvdG90eXBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gISEodGFyZ2V0ICYmIHRhcmdldC50b0pTT04gJiYgdGFyZ2V0LmZyb21KU09OKTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBKc29uU2NoZW1hU3RvcmFnZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gbmV3IE1hcCgpO1xyXG4gICAgfVxyXG4gICAgaGFzKHRhcmdldCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmhhcyh0YXJnZXQpIHx8ICEhdGhpcy5maW5kUGFyZW50U2NoZW1hKHRhcmdldCk7XHJcbiAgICB9XHJcbiAgICBnZXQodGFyZ2V0KSB7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5pdGVtcy5nZXQodGFyZ2V0KSB8fCB0aGlzLmZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KTtcclxuICAgICAgICBpZiAoIXNjaGVtYSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHNjaGVtYSBmb3IgY3VycmVudCB0YXJnZXRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzY2hlbWE7XHJcbiAgICB9XHJcbiAgICBjcmVhdGUodGFyZ2V0KSB7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hID0geyBuYW1lczoge30gfTtcclxuICAgICAgICBjb25zdCBwYXJlbnRTY2hlbWEgPSB0aGlzLmZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KTtcclxuICAgICAgICBpZiAocGFyZW50U2NoZW1hKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCBwYXJlbnRTY2hlbWEpO1xyXG4gICAgICAgICAgICBzY2hlbWEubmFtZXMgPSB7fTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIHBhcmVudFNjaGVtYS5uYW1lcykge1xyXG4gICAgICAgICAgICAgICAgc2NoZW1hLm5hbWVzW25hbWVdID0gT2JqZWN0LmFzc2lnbih7fSwgcGFyZW50U2NoZW1hLm5hbWVzW25hbWVdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBzY2hlbWEudGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgICAgIHJldHVybiBzY2hlbWE7XHJcbiAgICB9XHJcbiAgICBzZXQodGFyZ2V0LCBzY2hlbWEpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLnNldCh0YXJnZXQsIHNjaGVtYSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBmaW5kUGFyZW50U2NoZW1hKHRhcmdldCkge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRhcmdldC5fX3Byb3RvX187XHJcbiAgICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldChwYXJlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hIHx8IHRoaXMuZmluZFBhcmVudFNjaGVtYShwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxuXG5jb25zdCBERUZBVUxUX1NDSEVNQSA9IFwiZGVmYXVsdFwiO1xyXG5jb25zdCBzY2hlbWFTdG9yYWdlID0gbmV3IEpzb25TY2hlbWFTdG9yYWdlKCk7XG5cbmNsYXNzIFBhdHRlcm5WYWxpZGF0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm4pIHtcclxuICAgICAgICB0aGlzLnBhdHRlcm4gPSBuZXcgUmVnRXhwKHBhdHRlcm4pO1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCh0aGlzLnBhdHRlcm4uc291cmNlLCB0aGlzLnBhdHRlcm4uZmxhZ3MpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcIkluY29taW5nIHZhbHVlIG11c3QgYmUgc3RyaW5nXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXBhdHRlcm4uZXhlYyh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgZG9lc24ndCBtYXRjaCB0byBwYXR0ZXJuICcke3BhdHRlcm4udG9TdHJpbmcoKX0nYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEluY2x1c2l2ZVZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IobWluID0gTnVtYmVyLk1JTl9WQUxVRSwgbWF4ID0gTnVtYmVyLk1BWF9WQUxVRSkge1xyXG4gICAgICAgIHRoaXMubWluID0gbWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIEpzb25Qcm9wVHlwZXMuTnVtYmVyKTtcclxuICAgICAgICBpZiAoISh0aGlzLm1pbiA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSB0aGlzLm1heCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbWluID0gdGhpcy5taW4gPT09IE51bWJlci5NSU5fVkFMVUUgPyBcIk1JTlwiIDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4ID09PSBOdW1iZXIuTUFYX1ZBTFVFID8gXCJNQVhcIiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBkb2Vzbid0IG1hdGNoIHRvIGRpYXBhc29uIFske21pbn0sJHttYXh9XWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5jbGFzcyBFeGNsdXNpdmVWYWxpZGF0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKG1pbiA9IE51bWJlci5NSU5fVkFMVUUsIG1heCA9IE51bWJlci5NQVhfVkFMVUUpIHtcclxuICAgICAgICB0aGlzLm1pbiA9IG1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG1heDtcclxuICAgIH1cclxuICAgIHZhbGlkYXRlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhyb3dJZlR5cGVJc1dyb25nKHZhbHVlLCBKc29uUHJvcFR5cGVzLk51bWJlcik7XHJcbiAgICAgICAgaWYgKCEodGhpcy5taW4gPCB2YWx1ZSAmJiB2YWx1ZSA8IHRoaXMubWF4KSkge1xyXG4gICAgICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbiA9PT0gTnVtYmVyLk1JTl9WQUxVRSA/IFwiTUlOXCIgOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXggPT09IE51bWJlci5NQVhfVkFMVUUgPyBcIk1BWFwiIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIGRvZXNuJ3QgbWF0Y2ggdG8gZGlhcGFzb24gKCR7bWlufSwke21heH0pYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIExlbmd0aFZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IobGVuZ3RoLCBtaW5MZW5ndGgsIG1heExlbmd0aCkge1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xyXG4gICAgICAgIHRoaXMubWluTGVuZ3RoID0gbWluTGVuZ3RoO1xyXG4gICAgICAgIHRoaXMubWF4TGVuZ3RoID0gbWF4TGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSB0aGlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgbGVuZ3RoIG11c3QgYmUgZXhhY3RseSAke3RoaXMubGVuZ3RofS5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1pbkxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPCB0aGlzLm1pbkxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgbGVuZ3RoIG11c3QgYmUgbW9yZSB0aGFuICR7dGhpcy5taW5MZW5ndGh9LmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuICR7dGhpcy5tYXhMZW5ndGh9LmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEVudW1lcmF0aW9uVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihlbnVtZXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMuZW51bWVyYXRpb24gPSBlbnVtZXJhdGlvbjtcclxuICAgIH1cclxuICAgIHZhbGlkYXRlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhyb3dJZlR5cGVJc1dyb25nKHZhbHVlLCBKc29uUHJvcFR5cGVzLlN0cmluZyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVudW1lcmF0aW9uLmluY2x1ZGVzKHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBtdXN0IGJlIG9uZSBvZiAke3RoaXMuZW51bWVyYXRpb24ubWFwKCh2KSA9PiBgJyR7dn0nYCkuam9pbihcIiwgXCIpfWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5jbGFzcyBKc29uVHJhbnNmb3JtIHtcclxuICAgIHN0YXRpYyBjaGVja1ZhbHVlcyhkYXRhLCBzY2hlbWFJdGVtKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbZGF0YV07XHJcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIHNjaGVtYUl0ZW0udmFsaWRhdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uIGluc3RhbmNlb2YgTGVuZ3RoVmFsaWRhdGlvbiAmJiBzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbi52YWxpZGF0ZShkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb24udmFsaWRhdGUodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGNoZWNrVHlwZXModmFsdWUsIHNjaGVtYUl0ZW0pIHtcclxuICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlZhbHVlIG11c3QgYmUgQXJyYXlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hSXRlbS50eXBlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvd0lmVHlwZUlzV3Jvbmcodiwgc2NoZW1hSXRlbS50eXBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXRpYyBnZXRTY2hlbWFCeU5hbWUoc2NoZW1hLCBuYW1lID0gREVGQVVMVF9TQ0hFTUEpIHtcclxuICAgICAgICByZXR1cm4geyAuLi5zY2hlbWEubmFtZXNbREVGQVVMVF9TQ0hFTUFdLCAuLi5zY2hlbWEubmFtZXNbbmFtZV0gfTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBKc29uU2VyaWFsaXplciBleHRlbmRzIEpzb25UcmFuc2Zvcm0ge1xyXG4gICAgc3RhdGljIHNlcmlhbGl6ZShvYmosIG9wdGlvbnMsIHJlcGxhY2VyLCBzcGFjZSkge1xyXG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTihvYmosIG9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShqc29uLCByZXBsYWNlciwgc3BhY2UpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHRvSlNPTihvYmosIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGxldCByZXM7XHJcbiAgICAgICAgbGV0IHRhcmdldFNjaGVtYSA9IG9wdGlvbnMudGFyZ2V0U2NoZW1hO1xyXG4gICAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBvcHRpb25zLnNjaGVtYU5hbWUgfHwgREVGQVVMVF9TQ0hFTUE7XHJcbiAgICAgICAgaWYgKGlzQ29udmVydGlibGUob2JqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqLnRvSlNPTigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICAgICAgICAgIHJlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygb2JqKSB7XHJcbiAgICAgICAgICAgICAgICByZXMucHVzaCh0aGlzLnRvSlNPTihpdGVtLCBvcHRpb25zKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0U2NoZW1hICYmICFzY2hlbWFTdG9yYWdlLmhhcyh0YXJnZXRTY2hlbWEpKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnNvbkVycm9yKFwiQ2Fubm90IGdldCBzY2hlbWEgZm9yIGB0YXJnZXRTY2hlbWFgIHBhcmFtXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhcmdldFNjaGVtYSA9ICh0YXJnZXRTY2hlbWEgfHwgb2JqLmNvbnN0cnVjdG9yKTtcclxuICAgICAgICAgICAgaWYgKHNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldFNjaGVtYSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldFNjaGVtYSk7XHJcbiAgICAgICAgICAgICAgICByZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVkU2NoZW1hID0gdGhpcy5nZXRTY2hlbWFCeU5hbWUoc2NoZW1hLCBzY2hlbWFOYW1lKTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5hbWVkU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5hbWVkU2NoZW1hW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iakl0ZW0gPSBvYmpba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGl0ZW0ub3B0aW9uYWwgJiYgb2JqSXRlbSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGl0ZW0uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgb2JqSXRlbSA9PT0gaXRlbS5kZWZhdWx0VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0ub3B0aW9uYWwgJiYgb2JqSXRlbSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXplckVycm9yKHRhcmdldFNjaGVtYS5uYW1lLCBgUHJvcGVydHkgJyR7a2V5fScgaXMgcmVxdWlyZWQuYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtLnR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvbnZlcnRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gb2JqSXRlbS5tYXAoKGVsKSA9PiBpdGVtLmNvbnZlcnRlci50b0pTT04oZWwsIG9iaikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpdGVtLmNvbnZlcnRlci50b0pTT04ob2JqSXRlbSwgb2JqKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG9iakl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5yZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gb2JqSXRlbS5tYXAoKGVsKSA9PiB0aGlzLnRvSlNPTihlbCwgeyBzY2hlbWFOYW1lIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy50b0pTT04ob2JqSXRlbSwgeyBzY2hlbWFOYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tUeXBlcyh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tWYWx1ZXModmFsdWUsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNbaXRlbS5uYW1lIHx8IGtleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTZXJpYWxpemVyRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXplckVycm9yKHNjaGVtYS50YXJnZXQubmFtZSwgYFByb3BlcnR5ICcke2tleX0nIGlzIHdyb25nLiAke2UubWVzc2FnZX1gLCBlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSB0aGlzLnRvSlNPTihvYmpba2V5XSwgeyBzY2hlbWFOYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXMgPSBvYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgSnNvblBhcnNlciBleHRlbmRzIEpzb25UcmFuc2Zvcm0ge1xyXG4gICAgc3RhdGljIHBhcnNlKGRhdGEsIG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyb21KU09OKG9iaiwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbUpTT04odGFyZ2V0LCBvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0U2NoZW1hID0gb3B0aW9ucy50YXJnZXRTY2hlbWE7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IG9wdGlvbnMuc2NoZW1hTmFtZSB8fCBERUZBVUxUX1NDSEVNQTtcclxuICAgICAgICBjb25zdCBvYmogPSBuZXcgdGFyZ2V0U2NoZW1hKCk7XHJcbiAgICAgICAgaWYgKGlzQ29udmVydGlibGUob2JqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqLmZyb21KU09OKHRhcmdldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldFNjaGVtYSk7XHJcbiAgICAgICAgY29uc3QgbmFtZWRTY2hlbWEgPSB0aGlzLmdldFNjaGVtYUJ5TmFtZShzY2hlbWEsIHNjaGVtYU5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGtleUVycm9ycyA9IHt9O1xyXG4gICAgICAgIGlmIChvcHRpb25zLnN0cmljdFByb3BlcnR5ICYmICFBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcclxuICAgICAgICAgICAgSnNvblBhcnNlci5jaGVja1N0cmljdFByb3BlcnR5KHRhcmdldCwgbmFtZWRTY2hlbWEsIHNjaGVtYSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5hbWVkU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmFtZWRTY2hlbWFba2V5XTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBpdGVtLm5hbWUgfHwga2V5O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0YXJnZXRbbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAoaXRlbS5vcHRpb25hbCB8fCBpdGVtLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtLm9wdGlvbmFsICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXJyb3Ioc2NoZW1hLCBgUHJvcGVydHkgJyR7bmFtZX0nIGlzIHJlcXVpcmVkLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja1R5cGVzKHZhbHVlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tWYWx1ZXModmFsdWUsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoaXRlbS50eXBlKSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvbnZlcnRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5yZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZS5tYXAoKGVsKSA9PiBpdGVtLmNvbnZlcnRlci5mcm9tSlNPTihlbCwgb2JqKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IGl0ZW0uY29udmVydGVyLmZyb21KU09OKHZhbHVlLCBvYmopO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFNjaGVtYTogaXRlbS50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZS5tYXAoKGVsKSA9PiB0aGlzLmZyb21KU09OKGVsLCBuZXdPcHRpb25zKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHRoaXMuZnJvbUpTT04odmFsdWUsIG5ld09wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIFBhcnNlckVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgUGFyc2VyRXJyb3Ioc2NoZW1hLCBgUHJvcGVydHkgJyR7a2V5fScgaXMgd3JvbmcuICR7ZS5tZXNzYWdlfWAsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RyaWN0QWxsS2V5cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleUVycm9yc1trZXldID0gZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGtleUVycm9ycyk7XHJcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBLZXlFcnJvcihzY2hlbWEsIGtleXMsIGtleUVycm9ycyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY2hlY2tTdHJpY3RQcm9wZXJ0eSh0YXJnZXQsIG5hbWVkU2NoZW1hLCBzY2hlbWEpIHtcclxuICAgICAgICBjb25zdCBqc29uUHJvcHMgPSBPYmplY3Qua2V5cyh0YXJnZXQpO1xyXG4gICAgICAgIGNvbnN0IHNjaGVtYVByb3BzID0gT2JqZWN0LmtleXMobmFtZWRTY2hlbWEpO1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBqc29uUHJvcHMpIHtcclxuICAgICAgICAgICAgaWYgKHNjaGVtYVByb3BzLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgS2V5RXJyb3Ioc2NoZW1hLCBrZXlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gZ2V0VmFsaWRhdGlvbnMoaXRlbSkge1xyXG4gICAgY29uc3QgdmFsaWRhdGlvbnMgPSBbXTtcclxuICAgIGlmIChpdGVtLnBhdHRlcm4pIHtcclxuICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKG5ldyBQYXR0ZXJuVmFsaWRhdGlvbihpdGVtLnBhdHRlcm4pKTtcclxuICAgIH1cclxuICAgIGlmIChpdGVtLnR5cGUgPT09IEpzb25Qcm9wVHlwZXMuTnVtYmVyIHx8IGl0ZW0udHlwZSA9PT0gSnNvblByb3BUeXBlcy5BbnkpIHtcclxuICAgICAgICBpZiAoaXRlbS5taW5JbmNsdXNpdmUgIT09IHVuZGVmaW5lZCB8fCBpdGVtLm1heEluY2x1c2l2ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IEluY2x1c2l2ZVZhbGlkYXRpb24oaXRlbS5taW5JbmNsdXNpdmUsIGl0ZW0ubWF4SW5jbHVzaXZlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLm1pbkV4Y2x1c2l2ZSAhPT0gdW5kZWZpbmVkIHx8IGl0ZW0ubWF4RXhjbHVzaXZlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbnMucHVzaChuZXcgRXhjbHVzaXZlVmFsaWRhdGlvbihpdGVtLm1pbkV4Y2x1c2l2ZSwgaXRlbS5tYXhFeGNsdXNpdmUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0uZW51bWVyYXRpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKG5ldyBFbnVtZXJhdGlvblZhbGlkYXRpb24oaXRlbS5lbnVtZXJhdGlvbikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChpdGVtLnR5cGUgPT09IEpzb25Qcm9wVHlwZXMuU3RyaW5nIHx8IGl0ZW0ucmVwZWF0ZWQgfHwgaXRlbS50eXBlID09PSBKc29uUHJvcFR5cGVzLkFueSkge1xyXG4gICAgICAgIGlmIChpdGVtLmxlbmd0aCAhPT0gdW5kZWZpbmVkIHx8IGl0ZW0ubWluTGVuZ3RoICE9PSB1bmRlZmluZWQgfHwgaXRlbS5tYXhMZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKG5ldyBMZW5ndGhWYWxpZGF0aW9uKGl0ZW0ubGVuZ3RoLCBpdGVtLm1pbkxlbmd0aCwgaXRlbS5tYXhMZW5ndGgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsaWRhdGlvbnM7XHJcbn1cclxuY29uc3QgSnNvblByb3AgPSAob3B0aW9ucyA9IHt9KSA9PiAodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xyXG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYENhbm5vdCBzZXQgdHlwZSBmb3IgJHtwcm9wZXJ0eUtleX0gcHJvcGVydHkgb2YgJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0gc2NoZW1hYDtcclxuICAgIGxldCBzY2hlbWE7XHJcbiAgICBpZiAoIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldC5jb25zdHJ1Y3RvcikpIHtcclxuICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmNyZWF0ZSh0YXJnZXQuY29uc3RydWN0b3IpO1xyXG4gICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldC5jb25zdHJ1Y3Rvciwgc2NoZW1hKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldC5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgaWYgKHNjaGVtYS50YXJnZXQgIT09IHRhcmdldC5jb25zdHJ1Y3Rvcikge1xyXG4gICAgICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmNyZWF0ZSh0YXJnZXQuY29uc3RydWN0b3IpO1xyXG4gICAgICAgICAgICBzY2hlbWFTdG9yYWdlLnNldCh0YXJnZXQuY29uc3RydWN0b3IsIHNjaGVtYSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZGVmYXVsdFNjaGVtYSA9IHtcclxuICAgICAgICB0eXBlOiBKc29uUHJvcFR5cGVzLkFueSxcclxuICAgICAgICB2YWxpZGF0aW9uczogW10sXHJcbiAgICB9O1xyXG4gICAgY29uc3QgY29weU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRTY2hlbWEsIG9wdGlvbnMpO1xyXG4gICAgY29weU9wdGlvbnMudmFsaWRhdGlvbnMgPSBnZXRWYWxpZGF0aW9ucyhjb3B5T3B0aW9ucyk7XHJcbiAgICBpZiAodHlwZW9mIGNvcHlPcHRpb25zLnR5cGUgIT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICBpZiAoIXNjaGVtYVN0b3JhZ2UuaGFzKGNvcHlPcHRpb25zLnR5cGUpICYmICFpc0NvbnZlcnRpYmxlKGNvcHlPcHRpb25zLnR5cGUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvck1lc3NhZ2V9LiBBc3NpZ25pbmcgdHlwZSBkb2Vzbid0IGhhdmUgc2NoZW1hLmApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBzY2hlbWFOYW1lcztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuc2NoZW1hKSkge1xyXG4gICAgICAgIHNjaGVtYU5hbWVzID0gb3B0aW9ucy5zY2hlbWE7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBzY2hlbWFOYW1lcyA9IFtvcHRpb25zLnNjaGVtYSB8fCBERUZBVUxUX1NDSEVNQV07XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHNjaGVtYU5hbWUgb2Ygc2NoZW1hTmFtZXMpIHtcclxuICAgICAgICBpZiAoIXNjaGVtYS5uYW1lc1tzY2hlbWFOYW1lXSkge1xyXG4gICAgICAgICAgICBzY2hlbWEubmFtZXNbc2NoZW1hTmFtZV0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbmFtZWRTY2hlbWEgPSBzY2hlbWEubmFtZXNbc2NoZW1hTmFtZV07XHJcbiAgICAgICAgbmFtZWRTY2hlbWFbcHJvcGVydHlLZXldID0gY29weU9wdGlvbnM7XHJcbiAgICB9XHJcbn07XG5cbmV4cG9ydCB7IEpzb25FcnJvciwgSnNvblBhcnNlciwgSnNvblByb3AsIEpzb25Qcm9wVHlwZXMsIEpzb25TZXJpYWxpemVyLCBLZXlFcnJvciwgUGFyc2VyRXJyb3IsIFNlcmlhbGl6ZXJFcnJvciwgVHJhbnNmb3JtRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9O1xuIiwgIi8qIVxuIENvcHlyaWdodCAoYykgUGVjdWxpYXIgVmVudHVyZXMsIExMQ1xuKi9cblxuaW1wb3J0IHsgQ29udmVydCwgQnVmZmVyU291cmNlQ29udmVydGVyLCBjb21iaW5lIH0gZnJvbSAncHZ0c3V0aWxzJztcbmV4cG9ydCB7IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB9IGZyb20gJ3B2dHN1dGlscyc7XG5pbXBvcnQgeyBBc25Qcm9wLCBBc25Qcm9wVHlwZXMsIEFzblR5cGUsIEFzblR5cGVUeXBlcywgQXNuSW50ZWdlckNvbnZlcnRlciwgQXNuU2VyaWFsaXplciwgQXNuQ29udmVydCB9IGZyb20gJ0BwZWN1bGlhci9hc24xLXNjaGVtYSc7XG5pbXBvcnQgeyBfX2RlY29yYXRlIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgSnNvblByb3AsIEpzb25Qcm9wVHlwZXMgfSBmcm9tICdAcGVjdWxpYXIvanNvbi1zY2hlbWEnO1xuaW1wb3J0ICogYXMgYXNuMSBmcm9tICdhc24xanMnO1xuXG5jbGFzcyBDcnlwdG9FcnJvciBleHRlbmRzIEVycm9yIHtcbn1cblxuY2xhc3MgQWxnb3JpdGhtRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG59XG5cbmNsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG4gICAgY29uc3RydWN0b3IobWV0aG9kTmFtZSkge1xuICAgICAgICBzdXBlcihgVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAke21ldGhvZE5hbWUgPyBgJHttZXRob2ROYW1lfWAgOiBcIlwifWApO1xuICAgIH1cbn1cblxuY2xhc3MgT3BlcmF0aW9uRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG59XG5cbmNsYXNzIFJlcXVpcmVkUHJvcGVydHlFcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wTmFtZSkge1xuICAgICAgICBzdXBlcihgJHtwcm9wTmFtZX06IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlgKTtcbiAgICB9XG59XG5cbmNsYXNzIFBlbUNvbnZlcnRlciB7XG4gICAgc3RhdGljIHRvQXJyYXlCdWZmZXIocGVtKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IHBlbVxuICAgICAgICAgICAgLnJlcGxhY2UoLy17NX0oQkVHSU58RU5EKSAuKi17NX0vZywgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiXFxyXCIsIFwiXCIpXG4gICAgICAgICAgICAucmVwbGFjZShcIlxcblwiLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIENvbnZlcnQuRnJvbUJhc2U2NChiYXNlNjQpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9VaW50OEFycmF5KHBlbSkge1xuICAgICAgICBjb25zdCBieXRlcyA9IHRoaXMudG9BcnJheUJ1ZmZlcihwZW0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbUJ1ZmZlclNvdXJjZShidWZmZXIsIHRhZykge1xuICAgICAgICBjb25zdCBiYXNlNjQgPSBDb252ZXJ0LlRvQmFzZTY0KGJ1ZmZlcik7XG4gICAgICAgIGxldCBzbGljZWQ7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBjb25zdCByb3dzID0gW107XG4gICAgICAgIHdoaWxlIChvZmZzZXQgPCBiYXNlNjQubGVuZ3RoKSB7XG4gICAgICAgICAgICBzbGljZWQgPSBiYXNlNjQuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyA2NCk7XG4gICAgICAgICAgICBpZiAoc2xpY2VkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJvd3MucHVzaChzbGljZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvZmZzZXQgKz0gNjQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBwZXJDYXNlVGFnID0gdGFnLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBgLS0tLS1CRUdJTiAke3VwcGVyQ2FzZVRhZ30tLS0tLVxcbiR7cm93cy5qb2luKFwiXFxuXCIpfVxcbi0tLS0tRU5EICR7dXBwZXJDYXNlVGFnfS0tLS0tYDtcbiAgICB9XG4gICAgc3RhdGljIGlzUEVNKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIC8tLS0tLUJFR0lOIC4rLS0tLS1bQS1aYS16MC05Ky8rPVxcc1xcbl0rLS0tLS1FTkQgListLS0tLS9pLnRlc3QoZGF0YSk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRUYWdOYW1lKHBlbSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNQRU0ocGVtKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFkIHBhcmFtZXRlci4gSW5jb21pbmcgZGF0YSBpcyBub3QgcmlnaHQgUEVNXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IC8tLS0tLUJFR0lOICguKyktLS0tLS8uZXhlYyhwZW0pO1xuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGdldCB0YWcgZnJvbSBQRU1cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1sxXTtcbiAgICB9XG4gICAgc3RhdGljIGhhc1RhZ05hbWUocGVtLCB0YWdOYW1lKSB7XG4gICAgICAgIGNvbnN0IHRhZyA9IHRoaXMuZ2V0VGFnTmFtZShwZW0pO1xuICAgICAgICByZXR1cm4gdGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSB0YWcudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQ2VydGlmaWNhdGUocGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc1RhZ05hbWUocGVtLCBcImNlcnRpZmljYXRlXCIpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNDZXJ0aWZpY2F0ZVJlcXVlc3QocGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc1RhZ05hbWUocGVtLCBcImNlcnRpZmljYXRlIHJlcXVlc3RcIik7XG4gICAgfVxuICAgIHN0YXRpYyBpc0NSTChwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwieDUwOSBjcmxcIik7XG4gICAgfVxuICAgIHN0YXRpYyBpc1B1YmxpY0tleShwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwicHVibGljIGtleVwiKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzSldLKGRhdGEpIHtcbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgXCJrdHlcIiBpbiBkYXRhO1xufVxuXG5jbGFzcyBQcm92aWRlckNyeXB0byB7XG4gICAgYXN5bmMgZGlnZXN0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0RpZ2VzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25EaWdlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRGlnZXN0KGFsZ29yaXRobSwgX2RhdGEpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoX2FsZ29yaXRobSwgX2RhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJkaWdlc3RcIik7XG4gICAgfVxuICAgIGFzeW5jIGdlbmVyYXRlS2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0dlbmVyYXRlS2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkdlbmVyYXRlS2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5KGFsZ29yaXRobSwgX2V4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICBpZiAoIShrZXlVc2FnZXMgJiYga2V5VXNhZ2VzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVzYWdlcyBjYW5ub3QgYmUgZW1wdHkgd2hlbiBjcmVhdGluZyBhIGtleS5gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWxsb3dlZFVzYWdlcztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51c2FnZXMpKSB7XG4gICAgICAgICAgICBhbGxvd2VkVXNhZ2VzID0gdGhpcy51c2FnZXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhbGxvd2VkVXNhZ2VzID0gdGhpcy51c2FnZXMucHJpdmF0ZUtleS5jb25jYXQodGhpcy51c2FnZXMucHVibGljS2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrS2V5VXNhZ2VzKGtleVVzYWdlcywgYWxsb3dlZFVzYWdlcyk7XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KF9hbGdvcml0aG0sIF9leHRyYWN0YWJsZSwgX2tleVVzYWdlcywgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJnZW5lcmF0ZUtleVwiKTtcbiAgICB9XG4gICAgYXN5bmMgc2lnbiguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tTaWduLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vblNpZ24uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrU2lnbihhbGdvcml0aG0sIGtleSwgX2RhdGEsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXksIFwic2lnblwiKTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKF9hbGdvcml0aG0sIF9rZXksIF9kYXRhLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcInNpZ25cIik7XG4gICAgfVxuICAgIGFzeW5jIHZlcmlmeSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tWZXJpZnkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uVmVyaWZ5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja1ZlcmlmeShhbGdvcml0aG0sIGtleSwgX3NpZ25hdHVyZSwgX2RhdGEsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXksIFwidmVyaWZ5XCIpO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShfYWxnb3JpdGhtLCBfa2V5LCBfc2lnbmF0dXJlLCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJ2ZXJpZnlcIik7XG4gICAgfVxuICAgIGFzeW5jIGVuY3J5cHQoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRW5jcnlwdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25FbmNyeXB0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0VuY3J5cHQoYWxnb3JpdGhtLCBrZXksIF9kYXRhLCBvcHRpb25zID0ge30sIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXksIG9wdGlvbnMua2V5VXNhZ2UgPyBcImVuY3J5cHRcIiA6IHZvaWQgMCk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChfYWxnb3JpdGhtLCBfa2V5LCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJlbmNyeXB0XCIpO1xuICAgIH1cbiAgICBhc3luYyBkZWNyeXB0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0RlY3J5cHQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uRGVjcnlwdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEZWNyeXB0KGFsZ29yaXRobSwga2V5LCBfZGF0YSwgb3B0aW9ucyA9IHt9LCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5LCBvcHRpb25zLmtleVVzYWdlID8gXCJkZWNyeXB0XCIgOiB2b2lkIDApO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoX2FsZ29yaXRobSwgX2tleSwgX2RhdGEsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZGVjcnlwdFwiKTtcbiAgICB9XG4gICAgYXN5bmMgZGVyaXZlQml0cyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tEZXJpdmVCaXRzLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkRlcml2ZUJpdHMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCwgb3B0aW9ucyA9IHt9LCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoYmFzZUtleSwgb3B0aW9ucy5rZXlVc2FnZSA/IFwiZGVyaXZlQml0c1wiIDogdm9pZCAwKTtcbiAgICAgICAgaWYgKGxlbmd0aCAlIDggIT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcImxlbmd0aDogSXMgbm90IG11bHRpcGxlIG9mIDhcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKF9hbGdvcml0aG0sIF9iYXNlS2V5LCBfbGVuZ3RoLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImRlcml2ZUJpdHNcIik7XG4gICAgfVxuICAgIGFzeW5jIGV4cG9ydEtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tFeHBvcnRLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uRXhwb3J0S2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0V4cG9ydEtleShmb3JtYXQsIGtleSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0tleUZvcm1hdChmb3JtYXQpO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICgha2V5LmV4dHJhY3RhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ3J5cHRvRXJyb3IoXCJrZXk6IElzIG5vdCBleHRyYWN0YWJsZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShfZm9ybWF0LCBfa2V5LCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImV4cG9ydEtleVwiKTtcbiAgICB9XG4gICAgYXN5bmMgaW1wb3J0S2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0ltcG9ydEtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25JbXBvcnRLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBfZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0tleUZvcm1hdChmb3JtYXQpO1xuICAgICAgICB0aGlzLmNoZWNrS2V5RGF0YShmb3JtYXQsIGtleURhdGEpO1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrSW1wb3J0UGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudXNhZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0tleVVzYWdlcyhrZXlVc2FnZXMsIHRoaXMudXNhZ2VzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShfZm9ybWF0LCBfa2V5RGF0YSwgX2FsZ29yaXRobSwgX2V4dHJhY3RhYmxlLCBfa2V5VXNhZ2VzLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImltcG9ydEtleVwiKTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSkge1xuICAgICAgICBpZiAoYWxnb3JpdGhtLm5hbWUudG9Mb3dlckNhc2UoKSAhPT0gdGhpcy5uYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBbGdvcml0aG1FcnJvcihcIlVucmVjb2duaXplZCBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKF9hbGdvcml0aG0pIHtcbiAgICB9XG4gICAgY2hlY2tEZXJpdmVkS2V5UGFyYW1zKF9hbGdvcml0aG0pIHtcbiAgICB9XG4gICAgY2hlY2tLZXlVc2FnZXModXNhZ2VzLCBhbGxvd2VkKSB7XG4gICAgICAgIGZvciAoY29uc3QgdXNhZ2Ugb2YgdXNhZ2VzKSB7XG4gICAgICAgICAgICBpZiAoYWxsb3dlZC5pbmRleE9mKHVzYWdlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNyZWF0ZSBhIGtleSB1c2luZyB0aGUgc3BlY2lmaWVkIGtleSB1c2FnZXNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShrZXkuYWxnb3JpdGhtKTtcbiAgICAgICAgaWYgKGtleVVzYWdlICYmIGtleS51c2FnZXMuaW5kZXhPZihrZXlVc2FnZSkgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ3J5cHRvRXJyb3IoYGtleSBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIG9wZXJhdGlvbmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrUmVxdWlyZWRQcm9wZXJ0eShkYXRhLCBwcm9wTmFtZSkge1xuICAgICAgICBpZiAoIShwcm9wTmFtZSBpbiBkYXRhKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlcXVpcmVkUHJvcGVydHlFcnJvcihwcm9wTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobSwgaGFzaEFsZ29yaXRobXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGhhc2hBbGdvcml0aG1zKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS50b0xvd2VyQ2FzZSgpID09PSBhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihgaGFzaDogTXVzdCBiZSBvbmUgb2YgJHtoYXNoQWxnb3JpdGhtcy5qb2luKFwiLCBcIil9YCk7XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0UGFyYW1zKF9hbGdvcml0aG0pIHtcbiAgICB9XG4gICAgY2hlY2tLZXlGb3JtYXQoZm9ybWF0KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJmb3JtYXQ6IElzIGludmFsaWQgdmFsdWUuIE11c3QgYmUgJ2p3aycsICdyYXcnLCAnc3BraScsIG9yICdwa2NzOCdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tLZXlEYXRhKGZvcm1hdCwga2V5RGF0YSkge1xuICAgICAgICBpZiAoIWtleURhdGEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXlEYXRhOiBDYW5ub3QgYmUgZW1wdHkgb24gZW1wdHkgb24ga2V5IGltcG9ydGluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImp3a1wiKSB7XG4gICAgICAgICAgICBpZiAoIWlzSldLKGtleURhdGEpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleURhdGE6IElzIG5vdCBKc29uV2ViVG9rZW5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIUJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShrZXlEYXRhKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleURhdGE6IElzIG5vdCBBcnJheUJ1ZmZlclZpZXcgb3IgQXJyYXlCdWZmZXJcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJlcGFyZURhdGEoZGF0YSkge1xuICAgICAgICByZXR1cm4gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBBZXNQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBvZiB0eXBlIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMTI4OlxuICAgICAgICAgICAgY2FzZSAxOTI6XG4gICAgICAgICAgICBjYXNlIDI1NjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogTXVzdCBiZSAxMjgsIDE5Miwgb3IgMjU2XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrRGVyaXZlZEtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSk7XG4gICAgfVxufVxuXG5jbGFzcyBBZXNDYmNQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtQ0JDXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIml2XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0uaXYgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLml2KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdjogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLml2LmJ5dGVMZW5ndGggIT09IDE2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IE11c3QgaGF2ZSBsZW5ndGggMTYgYnl0ZXNcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0NtYWNQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtQ01BQ1wiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcInNpZ25cIiwgXCJ2ZXJpZnlcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcImxlbmd0aDogTXVzdCBiZSBtb3JlIHRoYW4gMFwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzQ3RyUHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUNUUlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJjb3VudGVyXCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0uY291bnRlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0uY291bnRlcikpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY291bnRlcjogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmNvdW50ZXIuYnl0ZUxlbmd0aCAhPT0gMTYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdjogTXVzdCBoYXZlIGxlbmd0aCAxNiBieXRlc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcImxlbmd0aDogTXVzdCBiZSBtb3JlIHRoYW4gMFwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzRWNiUHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUVDQlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG59XG5cbmNsYXNzIEFlc0djbVByb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1HQ01cIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJlbmNyeXB0XCIsIFwiZGVjcnlwdFwiLCBcIndyYXBLZXlcIiwgXCJ1bndyYXBLZXlcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJpdlwiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLml2IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5pdikpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5pdi5ieXRlTGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwiaXY6IE11c3QgaGF2ZSBsZW5ndGggbW9yZSB0aGFuIDAgYW5kIGxlc3MgdGhhbiAyXjY0IC0gMVwiKTtcbiAgICAgICAgfVxuICAgICAgICAoX2EgPSBhbGdvcml0aG0udGFnTGVuZ3RoKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoYWxnb3JpdGhtLnRhZ0xlbmd0aCA9IDEyOCk7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLnRhZ0xlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICBjYXNlIDk2OlxuICAgICAgICAgICAgY2FzZSAxMDQ6XG4gICAgICAgICAgICBjYXNlIDExMjpcbiAgICAgICAgICAgIGNhc2UgMTIwOlxuICAgICAgICAgICAgY2FzZSAxMjg6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcInRhZ0xlbmd0aDogTXVzdCBiZSBvbmUgb2YgMzIsIDY0LCA5NiwgMTA0LCAxMTIsIDEyMCBvciAxMjhcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0t3UHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUtXXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG59XG5cbmNsYXNzIERlc1Byb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIGlmICh0aGlzLml2U2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIml2XCIpO1xuICAgICAgICAgICAgaWYgKCEoYWxnb3JpdGhtLml2IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5pdikpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsZ29yaXRobS5pdi5ieXRlTGVuZ3RoICE9PSB0aGlzLml2U2l6ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGl2OiBNdXN0IGhhdmUgbGVuZ3RoICR7dGhpcy5pdlNpemV9IGJ5dGVzYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImxlbmd0aFwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhbGdvcml0aG0ubGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBJcyBub3Qgb2YgdHlwZSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5sZW5ndGggIT09IHRoaXMua2V5U2l6ZUJpdHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihgYWxnb3JpdGhtLmxlbmd0aDogTXVzdCBiZSAke3RoaXMua2V5U2l6ZUJpdHN9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tEZXJpdmVkS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYVByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJwdWJsaWNFeHBvbmVudFwiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50ICYmIGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicHVibGljRXhwb25lbnQ6IE1pc3Npbmcgb3Igbm90IGEgVWludDhBcnJheVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdWJsaWNFeHBvbmVudCA9IENvbnZlcnQuVG9CYXNlNjQoYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KTtcbiAgICAgICAgaWYgKCEocHVibGljRXhwb25lbnQgPT09IFwiQXc9PVwiIHx8IHB1YmxpY0V4cG9uZW50ID09PSBcIkFRQUJcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWNFeHBvbmVudDogTXVzdCBiZSBbM10gb3IgWzEsMCwxXVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibW9kdWx1c0xlbmd0aFwiKTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoICUgOFxuICAgICAgICAgICAgfHwgYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPCAyNTZcbiAgICAgICAgICAgIHx8IGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoID4gMTYzODQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgbW9kdWx1cyBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDggYml0cyBhbmQgPj0gMjU2IGFuZCA8PSAxNjM4NFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydFBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYVNzYVByb3ZpZGVyIGV4dGVuZHMgUnNhUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJTQVNTQS1QS0NTMS12MV81XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHNzUHJvdmlkZXIgZXh0ZW5kcyBSc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUlNBLVBTU1wiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcInNpZ25cIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcInZlcmlmeVwiXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJzYWx0TGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5zYWx0TGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdExlbmd0aDogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uc2FsdExlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwic2FsdExlbmd0aDogTXVzdCBiZSBwb3NpdGl2ZSBudW1iZXJcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFJzYU9hZXBQcm92aWRlciBleHRlbmRzIFJzYVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSU0EtT0FFUFwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcImRlY3J5cHRcIiwgXCJ1bndyYXBLZXlcIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcImVuY3J5cHRcIiwgXCJ3cmFwS2V5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5sYWJlbFxuICAgICAgICAgICAgJiYgIShhbGdvcml0aG0ubGFiZWwgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLmxhYmVsKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsYWJlbDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgRWxsaXB0aWNQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibmFtZWRDdXJ2ZVwiKTtcbiAgICAgICAgdGhpcy5jaGVja05hbWVkQ3VydmUoYWxnb3JpdGhtLm5hbWVkQ3VydmUpO1xuICAgIH1cbiAgICBjaGVja05hbWVkQ3VydmUobmFtZWRDdXJ2ZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5uYW1lZEN1cnZlcykge1xuICAgICAgICAgICAgaWYgKGl0ZW0udG9Mb3dlckNhc2UoKSA9PT0gbmFtZWRDdXJ2ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihgbmFtZWRDdXJ2ZTogTXVzdCBiZSBvbmUgb2YgJHt0aGlzLm5hbWVkQ3VydmVzLmpvaW4oXCIsIFwiKX1gKTtcbiAgICB9XG59XG5cbmNsYXNzIEVjZHNhUHJvdmlkZXIgZXh0ZW5kcyBFbGxpcHRpY1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFQ0RTQVwiO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gW1wiUC0yNTZcIiwgXCJQLTM4NFwiLCBcIlAtNTIxXCIsIFwiSy0yNTZcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgIH1cbn1cblxuY29uc3QgS0VZX1RZUEVTID0gW1wic2VjcmV0XCIsIFwicHJpdmF0ZVwiLCBcInB1YmxpY1wiXTtcbmNsYXNzIENyeXB0b0tleSB7XG4gICAgc3RhdGljIGNyZWF0ZShhbGdvcml0aG0sIHR5cGUsIGV4dHJhY3RhYmxlLCB1c2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IHRoaXMoKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAga2V5LnR5cGUgPSB0eXBlO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IHVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGlzS2V5VHlwZShkYXRhKSB7XG4gICAgICAgIHJldHVybiBLRVlfVFlQRVMuaW5kZXhPZihkYXRhKSAhPT0gLTE7XG4gICAgfVxuICAgIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICAgICAgcmV0dXJuIFwiQ3J5cHRvS2V5XCI7XG4gICAgfVxufVxuXG5jbGFzcyBFY2RoUHJvdmlkZXIgZXh0ZW5kcyBFbGxpcHRpY1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFQ0RIXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wiZGVyaXZlQml0c1wiLCBcImRlcml2ZUtleVwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW10sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBbXCJQLTI1NlwiLCBcIlAtMzg0XCIsIFwiUC01MjFcIiwgXCJLLTI1NlwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJwdWJsaWNcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5wdWJsaWMgaW5zdGFuY2VvZiBDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicHVibGljOiBJcyBub3QgYSBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5wdWJsaWMudHlwZSAhPT0gXCJwdWJsaWNcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwicHVibGljOiBJcyBub3QgYSBwdWJsaWMga2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0ucHVibGljLmFsZ29yaXRobS5uYW1lICE9PSB0aGlzLm5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihgcHVibGljOiBJcyBub3QgJHt0aGlzLm5hbWV9IGtleWApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBFY2RoRXNQcm92aWRlciBleHRlbmRzIEVjZGhQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiRUNESC1FU1wiO1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gW1wiWDI1NTE5XCIsIFwiWDQ0OFwiXTtcbiAgICB9XG59XG5cbmNsYXNzIEVkRHNhUHJvdmlkZXIgZXh0ZW5kcyBFbGxpcHRpY1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFZERTQVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcInNpZ25cIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcInZlcmlmeVwiXSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IFtcIkVkMjU1MTlcIiwgXCJFZDQ0OFwiXTtcbiAgICB9XG59XG5cbmxldCBPYmplY3RJZGVudGlmaWVyID0gY2xhc3MgT2JqZWN0SWRlbnRpZmllciB7XG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59O1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PYmplY3RJZGVudGlmaWVyIH0pXG5dLCBPYmplY3RJZGVudGlmaWVyLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuT2JqZWN0SWRlbnRpZmllciA9IF9fZGVjb3JhdGUoW1xuICAgIEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pXG5dLCBPYmplY3RJZGVudGlmaWVyKTtcblxuY2xhc3MgQWxnb3JpdGhtSWRlbnRpZmllciB7XG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgcGFyYW1zKTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHtcbiAgICAgICAgdHlwZTogQXNuUHJvcFR5cGVzLk9iamVjdElkZW50aWZpZXIsXG4gICAgfSlcbl0sIEFsZ29yaXRobUlkZW50aWZpZXIucHJvdG90eXBlLCBcImFsZ29yaXRobVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7XG4gICAgICAgIHR5cGU6IEFzblByb3BUeXBlcy5BbnksXG4gICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgIH0pXG5dLCBBbGdvcml0aG1JZGVudGlmaWVyLnByb3RvdHlwZSwgXCJwYXJhbWV0ZXJzXCIsIHZvaWQgMCk7XG5cbmNsYXNzIFByaXZhdGVLZXlJbmZvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gMDtcbiAgICAgICAgdGhpcy5wcml2YXRlS2V5QWxnb3JpdGhtID0gbmV3IEFsZ29yaXRobUlkZW50aWZpZXIoKTtcbiAgICAgICAgdGhpcy5wcml2YXRlS2V5ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciB9KVxuXSwgUHJpdmF0ZUtleUluZm8ucHJvdG90eXBlLCBcInZlcnNpb25cIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBbGdvcml0aG1JZGVudGlmaWVyIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwicHJpdmF0ZUtleUFsZ29yaXRobVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PY3RldFN0cmluZyB9KVxuXSwgUHJpdmF0ZUtleUluZm8ucHJvdG90eXBlLCBcInByaXZhdGVLZXlcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuQW55LCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgUHJpdmF0ZUtleUluZm8ucHJvdG90eXBlLCBcImF0dHJpYnV0ZXNcIiwgdm9pZCAwKTtcblxuY2xhc3MgUHVibGljS2V5SW5mbyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucHVibGljS2V5QWxnb3JpdGhtID0gbmV3IEFsZ29yaXRobUlkZW50aWZpZXIoKTtcbiAgICAgICAgdGhpcy5wdWJsaWNLZXkgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFsZ29yaXRobUlkZW50aWZpZXIgfSlcbl0sIFB1YmxpY0tleUluZm8ucHJvdG90eXBlLCBcInB1YmxpY0tleUFsZ29yaXRobVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5CaXRTdHJpbmcgfSlcbl0sIFB1YmxpY0tleUluZm8ucHJvdG90eXBlLCBcInB1YmxpY0tleVwiLCB2b2lkIDApO1xuXG5jb25zdCBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUpTT046ICh2YWx1ZSkgPT4gQ29udmVydC5Gcm9tQmFzZTY0VXJsKHZhbHVlKSxcbiAgICB0b0pTT046ICh2YWx1ZSkgPT4gQ29udmVydC5Ub0Jhc2U2NFVybChuZXcgVWludDhBcnJheSh2YWx1ZSkpLFxufTtcblxuY29uc3QgQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZUhleCA9IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgICAgIHJldHVybiAhKG5ldyBVaW50OEFycmF5KHZhbHVlSGV4KVswXSlcbiAgICAgICAgICAgID8gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleC5zbGljZSgxKVxuICAgICAgICAgICAgOiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4O1xuICAgIH0sXG4gICAgdG9BU046ICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZUhleCA9IG5ldyBVaW50OEFycmF5KHZhbHVlKVswXSA+IDEyN1xuICAgICAgICAgICAgPyBjb21iaW5lKG5ldyBVaW50OEFycmF5KFswXSkuYnVmZmVyLCB2YWx1ZSlcbiAgICAgICAgICAgIDogdmFsdWU7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMS5JbnRlZ2VyKHsgdmFsdWVIZXggfSk7XG4gICAgfSxcbn07XG5cbnZhciBpbmRleCQzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyLFxuICBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlclxufSk7XG5cbmNsYXNzIFJzYVByaXZhdGVLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZlcnNpb24gPSAwO1xuICAgICAgICB0aGlzLm1vZHVsdXMgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHVibGljRXhwb25lbnQgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHJpdmF0ZUV4cG9uZW50ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLnByaW1lMSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5wcmltZTIgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMuZXhwb25lbnQxID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLmV4cG9uZW50MiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5jb2VmZmljaWVudCA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwidmVyc2lvblwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiblwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwibW9kdWx1c1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZVwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHVibGljRXhwb25lbnRcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImRcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcInByaXZhdGVFeHBvbmVudFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwicFwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHJpbWUxXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJxXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwcmltZTJcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImRwXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJleHBvbmVudDFcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImRxXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJleHBvbmVudDJcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcInFpXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJjb2VmZmljaWVudFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5BbnksIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJvdGhlclByaW1lSW5mb3NcIiwgdm9pZCAwKTtcblxuY2xhc3MgUnNhUHVibGljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tb2R1bHVzID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLnB1YmxpY0V4cG9uZW50ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcIm5cIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVB1YmxpY0tleS5wcm90b3R5cGUsIFwibW9kdWx1c1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZVwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHVibGljS2V5LnByb3RvdHlwZSwgXCJwdWJsaWNFeHBvbmVudFwiLCB2b2lkIDApO1xuXG5sZXQgRWNQdWJsaWNLZXkgPSBjbGFzcyBFY1B1YmxpY0tleSB7XG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlKTtcbiAgICAgICAgaWYgKGJ5dGVzWzBdICE9PSAweDA0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ3J5cHRvRXJyb3IoXCJXcm9uZyBFQ1BvaW50LiBDdXJyZW50IHZlcnNpb24gc3VwcG9ydHMgb25seSBVbmNvbXByZXNzZWQgKDB4MDQpIHBvaW50XCIpO1xuICAgICAgICB9XG4gICAgICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZS5zbGljZSgxKSk7XG4gICAgICAgIGNvbnN0IHNpemUgPSBieXRlcy5sZW5ndGggLyAyO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSAwO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAgeDogQ29udmVydC5Ub0Jhc2U2NFVybChieXRlcy5idWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzaXplKSksXG4gICAgICAgICAgICB5OiBDb252ZXJ0LlRvQmFzZTY0VXJsKGJ5dGVzLmJ1ZmZlci5zbGljZShvZmZzZXQgKyBzaXplLCBvZmZzZXQgKyBzaXplICsgc2l6ZSkpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIShcInhcIiBpbiBqc29uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwieDogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShcInlcIiBpbiBqc29uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwieTogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4ID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24ueCk7XG4gICAgICAgIGNvbnN0IHkgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi55KTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb21iaW5lKG5ldyBVaW50OEFycmF5KFsweDA0XSkuYnVmZmVyLCB4LCB5KTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBVaW50OEFycmF5KHZhbHVlKS5idWZmZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBFY1B1YmxpY0tleS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbkVjUHVibGljS2V5ID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIEVjUHVibGljS2V5KTtcblxuY2xhc3MgRWNQcml2YXRlS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gMTtcbiAgICAgICAgdGhpcy5wcml2YXRlS2V5ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghKFwiZFwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkOiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJpdmF0ZUtleSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLmQpO1xuICAgICAgICBpZiAoXCJ4XCIgaW4ganNvbikge1xuICAgICAgICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IEVjUHVibGljS2V5KCk7XG4gICAgICAgICAgICBwdWJsaWNLZXkuZnJvbUpTT04oanNvbik7XG4gICAgICAgICAgICBjb25zdCBhc24gPSBBc25TZXJpYWxpemVyLnRvQVNOKHB1YmxpY0tleSk7XG4gICAgICAgICAgICBpZiAoXCJ2YWx1ZUhleFwiIGluIGFzbi52YWx1ZUJsb2NrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdWJsaWNLZXkgPSBhc24udmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBqd2sgPSB7fTtcbiAgICAgICAgandrLmQgPSBDb252ZXJ0LlRvQmFzZTY0VXJsKHRoaXMucHJpdmF0ZUtleSk7XG4gICAgICAgIGlmICh0aGlzLnB1YmxpY0tleSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqd2ssIG5ldyBFY1B1YmxpY0tleSh0aGlzLnB1YmxpY0tleSkudG9KU09OKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqd2s7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJDb252ZXJ0ZXIgfSlcbl0sIEVjUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwidmVyc2lvblwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PY3RldFN0cmluZyB9KVxuXSwgRWNQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwcml2YXRlS2V5XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgY29udGV4dDogMCwgdHlwZTogQXNuUHJvcFR5cGVzLkFueSwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIEVjUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicGFyYW1ldGVyc1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IGNvbnRleHQ6IDEsIHR5cGU6IEFzblByb3BUeXBlcy5CaXRTdHJpbmcsIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBFY1ByaXZhdGVLZXkucHJvdG90eXBlLCBcInB1YmxpY0tleVwiLCB2b2lkIDApO1xuXG5jb25zdCBBc25JbnRlZ2VyV2l0aG91dFBhZGRpbmdDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUudmFsdWVCbG9jay52YWx1ZUhleCk7XG4gICAgICAgIHJldHVybiAoYnl0ZXNbMF0gPT09IDApXG4gICAgICAgICAgICA/IGJ5dGVzLmJ1ZmZlci5zbGljZSgxKVxuICAgICAgICAgICAgOiBieXRlcy5idWZmZXI7XG4gICAgfSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpO1xuICAgICAgICBpZiAoYnl0ZXNbMF0gPiAxMjcpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMubGVuZ3RoICsgMSk7XG4gICAgICAgICAgICBuZXdWYWx1ZS5zZXQoYnl0ZXMsIDEpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xLkludGVnZXIoeyB2YWx1ZUhleDogbmV3VmFsdWUuYnVmZmVyIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgYXNuMS5JbnRlZ2VyKHsgdmFsdWVIZXg6IHZhbHVlIH0pO1xuICAgIH0sXG59O1xuXG52YXIgaW5kZXgkMiA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBBc25JbnRlZ2VyV2l0aG91dFBhZGRpbmdDb252ZXJ0ZXI6IEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlclxufSk7XG5cbmNsYXNzIEVjVXRpbHMge1xuICAgIHN0YXRpYyBkZWNvZGVQb2ludChkYXRhLCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3QgdmlldyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoZGF0YSk7XG4gICAgICAgIGlmICgodmlldy5sZW5ndGggPT09IDApIHx8ICh2aWV3WzBdICE9PSA0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT25seSB1bmNvbXByZXNzZWQgcG9pbnQgZm9ybWF0IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuID0gKHZpZXcubGVuZ3RoIC0gMSkgLyAyO1xuICAgICAgICBpZiAobiAhPT0gKE1hdGguY2VpbChwb2ludFNpemUgLyA4KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBvaW50IGRvZXMgbm90IG1hdGNoIGZpZWxkIHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeGIgPSB2aWV3LnNsaWNlKDEsIG4gKyAxKTtcbiAgICAgICAgY29uc3QgeWIgPSB2aWV3LnNsaWNlKG4gKyAxLCBuICsgMSArIG4pO1xuICAgICAgICByZXR1cm4geyB4OiB4YiwgeTogeWIgfTtcbiAgICB9XG4gICAgc3RhdGljIGVuY29kZVBvaW50KHBvaW50LCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IE1hdGguY2VpbChwb2ludFNpemUgLyA4KTtcbiAgICAgICAgaWYgKHBvaW50LnguYnl0ZUxlbmd0aCAhPT0gc2l6ZSB8fCBwb2ludC55LmJ5dGVMZW5ndGggIT09IHNpemUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlgsWSBjb29yZGluYXRlcyBkb24ndCBtYXRjaCBwb2ludCBzaXplIGNyaXRlcmlhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHggPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBvaW50LngpO1xuICAgICAgICBjb25zdCB5ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShwb2ludC55KTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSAqIDIgKyAxKTtcbiAgICAgICAgcmVzWzBdID0gNDtcbiAgICAgICAgcmVzLnNldCh4LCAxKTtcbiAgICAgICAgcmVzLnNldCh5LCBzaXplICsgMSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRTaXplKHBvaW50U2l6ZSkge1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHBvaW50U2l6ZSAvIDgpO1xuICAgIH1cbiAgICBzdGF0aWMgZW5jb2RlU2lnbmF0dXJlKHNpZ25hdHVyZSwgcG9pbnRTaXplKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLmdldFNpemUocG9pbnRTaXplKTtcbiAgICAgICAgY29uc3QgciA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoc2lnbmF0dXJlLnIpO1xuICAgICAgICBjb25zdCBzID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShzaWduYXR1cmUucyk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHNpemUgKiAyKTtcbiAgICAgICAgcmVzLnNldCh0aGlzLnBhZFN0YXJ0KHIsIHNpemUpKTtcbiAgICAgICAgcmVzLnNldCh0aGlzLnBhZFN0YXJ0KHMsIHNpemUpLCBzaXplKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGRlY29kZVNpZ25hdHVyZShkYXRhLCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuZ2V0U2l6ZShwb2ludFNpemUpO1xuICAgICAgICBjb25zdCB2aWV3ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShkYXRhKTtcbiAgICAgICAgaWYgKHZpZXcubGVuZ3RoICE9PSAoc2l6ZSAqIDIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNvcnJlY3Qgc2l6ZSBvZiB0aGUgc2lnbmF0dXJlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIgPSB2aWV3LnNsaWNlKDAsIHNpemUpO1xuICAgICAgICBjb25zdCBzID0gdmlldy5zbGljZShzaXplKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHRoaXMudHJpbVN0YXJ0KHIpLFxuICAgICAgICAgICAgczogdGhpcy50cmltU3RhcnQocyksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyB0cmltU3RhcnQoZGF0YSkge1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIHdoaWxlICgoaSA8IGRhdGEubGVuZ3RoIC0gMSkgJiYgKGRhdGFbaV0gPT09IDApKSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhLnNsaWNlKGksIGRhdGEubGVuZ3RoKTtcbiAgICB9XG4gICAgc3RhdGljIHBhZFN0YXJ0KGRhdGEsIHNpemUpIHtcbiAgICAgICAgaWYgKHNpemUgPT09IGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShzaXplKTtcbiAgICAgICAgcmVzLnNldChkYXRhLCBzaXplIC0gZGF0YS5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cblxuY2xhc3MgRWNEc2FTaWduYXR1cmUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnIgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucyA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21XZWJDcnlwdG9TaWduYXR1cmUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgcG9pbnRTaXplID0gdmFsdWUuYnl0ZUxlbmd0aCAvIDI7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gRWNVdGlscy5kZWNvZGVTaWduYXR1cmUodmFsdWUsIHBvaW50U2l6ZSAqIDgpO1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZSA9IG5ldyBFY0RzYVNpZ25hdHVyZSgpO1xuICAgICAgICBlY1NpZ25hdHVyZS5yID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIocG9pbnQucik7XG4gICAgICAgIGVjU2lnbmF0dXJlLnMgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihwb2ludC5zKTtcbiAgICAgICAgcmV0dXJuIGVjU2lnbmF0dXJlO1xuICAgIH1cbiAgICB0b1dlYkNyeXB0b1NpZ25hdHVyZShwb2ludFNpemUpIHtcbiAgICAgICAgaWYgKCFwb2ludFNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heFBvaW50TGVuZ3RoID0gTWF0aC5tYXgodGhpcy5yLmJ5dGVMZW5ndGgsIHRoaXMucy5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgIGlmIChtYXhQb2ludExlbmd0aCA8PSAzMikge1xuICAgICAgICAgICAgICAgIHBvaW50U2l6ZSA9IDI1NjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1heFBvaW50TGVuZ3RoIDw9IDQ4KSB7XG4gICAgICAgICAgICAgICAgcG9pbnRTaXplID0gMzg0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcG9pbnRTaXplID0gNTIxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IEVjVXRpbHMuZW5jb2RlU2lnbmF0dXJlKHRoaXMsIHBvaW50U2l6ZSk7XG4gICAgICAgIHJldHVybiBzaWduYXR1cmUuYnVmZmVyO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyV2l0aG91dFBhZGRpbmdDb252ZXJ0ZXIgfSlcbl0sIEVjRHNhU2lnbmF0dXJlLnByb3RvdHlwZSwgXCJyXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlcldpdGhvdXRQYWRkaW5nQ29udmVydGVyIH0pXG5dLCBFY0RzYVNpZ25hdHVyZS5wcm90b3R5cGUsIFwic1wiLCB2b2lkIDApO1xuXG5jbGFzcyBPbmVBc3ltbWV0cmljS2V5IGV4dGVuZHMgUHJpdmF0ZUtleUluZm8ge1xufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IGNvbnRleHQ6IDEsIGltcGxpY2l0OiB0cnVlLCB0eXBlOiBBc25Qcm9wVHlwZXMuQml0U3RyaW5nLCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgT25lQXN5bW1ldHJpY0tleS5wcm90b3R5cGUsIFwicHVibGljS2V5XCIsIHZvaWQgMCk7XG5cbmxldCBFZFByaXZhdGVLZXkgPSBjbGFzcyBFZFByaXZhdGVLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkOiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi5kKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QgandrID0ge1xuICAgICAgICAgICAgZDogQ29udmVydC5Ub0Jhc2U2NFVybCh0aGlzLnZhbHVlKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGp3aztcbiAgICB9XG59O1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PY3RldFN0cmluZyB9KVxuXSwgRWRQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuRWRQcml2YXRlS2V5ID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIEVkUHJpdmF0ZUtleSk7XG5cbmxldCBFZFB1YmxpY0tleSA9IGNsYXNzIEVkUHVibGljS2V5IHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICB4OiBDb252ZXJ0LlRvQmFzZTY0VXJsKHRoaXMudmFsdWUpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIShcInhcIiBpbiBqc29uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwieDogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24ueCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZyB9KVxuXSwgRWRQdWJsaWNLZXkucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5FZFB1YmxpY0tleSA9IF9fZGVjb3JhdGUoW1xuICAgIEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pXG5dLCBFZFB1YmxpY0tleSk7XG5cbmxldCBDdXJ2ZVByaXZhdGVLZXkgPSBjbGFzcyBDdXJ2ZVByaXZhdGVLZXkge1xufTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmcgfSksXG4gICAgSnNvblByb3AoeyB0eXBlOiBKc29uUHJvcFR5cGVzLlN0cmluZywgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIEN1cnZlUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwiZFwiLCB2b2lkIDApO1xuQ3VydmVQcml2YXRlS2V5ID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIEN1cnZlUHJpdmF0ZUtleSk7XG5cbmNvbnN0IGlkU2VjcDI1NnIxID0gXCIxLjIuODQwLjEwMDQ1LjMuMS43XCI7XG5jb25zdCBpZEVsbGlwdGljQ3VydmUgPSBcIjEuMy4xMzIuMFwiO1xuY29uc3QgaWRTZWNwMzg0cjEgPSBgJHtpZEVsbGlwdGljQ3VydmV9LjM0YDtcbmNvbnN0IGlkU2VjcDUyMXIxID0gYCR7aWRFbGxpcHRpY0N1cnZlfS4zNWA7XG5jb25zdCBpZFNlY3AyNTZrMSA9IGAke2lkRWxsaXB0aWNDdXJ2ZX0uMTBgO1xuY29uc3QgaWRWZXJzaW9uT25lID0gXCIxLjMuMzYuMy4zLjIuOC4xLjFcIjtcbmNvbnN0IGlkQnJhaW5wb29sUDE2MHIxID0gYCR7aWRWZXJzaW9uT25lfS4xYDtcbmNvbnN0IGlkQnJhaW5wb29sUDE2MHQxID0gYCR7aWRWZXJzaW9uT25lfS4yYDtcbmNvbnN0IGlkQnJhaW5wb29sUDE5MnIxID0gYCR7aWRWZXJzaW9uT25lfS4zYDtcbmNvbnN0IGlkQnJhaW5wb29sUDE5MnQxID0gYCR7aWRWZXJzaW9uT25lfS40YDtcbmNvbnN0IGlkQnJhaW5wb29sUDIyNHIxID0gYCR7aWRWZXJzaW9uT25lfS41YDtcbmNvbnN0IGlkQnJhaW5wb29sUDIyNHQxID0gYCR7aWRWZXJzaW9uT25lfS42YDtcbmNvbnN0IGlkQnJhaW5wb29sUDI1NnIxID0gYCR7aWRWZXJzaW9uT25lfS43YDtcbmNvbnN0IGlkQnJhaW5wb29sUDI1NnQxID0gYCR7aWRWZXJzaW9uT25lfS44YDtcbmNvbnN0IGlkQnJhaW5wb29sUDMyMHIxID0gYCR7aWRWZXJzaW9uT25lfS45YDtcbmNvbnN0IGlkQnJhaW5wb29sUDMyMHQxID0gYCR7aWRWZXJzaW9uT25lfS4xMGA7XG5jb25zdCBpZEJyYWlucG9vbFAzODRyMSA9IGAke2lkVmVyc2lvbk9uZX0uMTFgO1xuY29uc3QgaWRCcmFpbnBvb2xQMzg0dDEgPSBgJHtpZFZlcnNpb25PbmV9LjEyYDtcbmNvbnN0IGlkQnJhaW5wb29sUDUxMnIxID0gYCR7aWRWZXJzaW9uT25lfS4xM2A7XG5jb25zdCBpZEJyYWlucG9vbFA1MTJ0MSA9IGAke2lkVmVyc2lvbk9uZX0uMTRgO1xuY29uc3QgaWRYMjU1MTkgPSBcIjEuMy4xMDEuMTEwXCI7XG5jb25zdCBpZFg0NDggPSBcIjEuMy4xMDEuMTExXCI7XG5jb25zdCBpZEVkMjU1MTkgPSBcIjEuMy4xMDEuMTEyXCI7XG5jb25zdCBpZEVkNDQ4ID0gXCIxLjMuMTAxLjExM1wiO1xuXG52YXIgaW5kZXgkMSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBBbGdvcml0aG1JZGVudGlmaWVyOiBBbGdvcml0aG1JZGVudGlmaWVyLFxuICBnZXQgQ3VydmVQcml2YXRlS2V5ICgpIHsgcmV0dXJuIEN1cnZlUHJpdmF0ZUtleTsgfSxcbiAgRWNEc2FTaWduYXR1cmU6IEVjRHNhU2lnbmF0dXJlLFxuICBFY1ByaXZhdGVLZXk6IEVjUHJpdmF0ZUtleSxcbiAgZ2V0IEVjUHVibGljS2V5ICgpIHsgcmV0dXJuIEVjUHVibGljS2V5OyB9LFxuICBnZXQgRWRQcml2YXRlS2V5ICgpIHsgcmV0dXJuIEVkUHJpdmF0ZUtleTsgfSxcbiAgZ2V0IEVkUHVibGljS2V5ICgpIHsgcmV0dXJuIEVkUHVibGljS2V5OyB9LFxuICBnZXQgT2JqZWN0SWRlbnRpZmllciAoKSB7IHJldHVybiBPYmplY3RJZGVudGlmaWVyOyB9LFxuICBPbmVBc3ltbWV0cmljS2V5OiBPbmVBc3ltbWV0cmljS2V5LFxuICBQcml2YXRlS2V5SW5mbzogUHJpdmF0ZUtleUluZm8sXG4gIFB1YmxpY0tleUluZm86IFB1YmxpY0tleUluZm8sXG4gIFJzYVByaXZhdGVLZXk6IFJzYVByaXZhdGVLZXksXG4gIFJzYVB1YmxpY0tleTogUnNhUHVibGljS2V5LFxuICBjb252ZXJ0ZXJzOiBpbmRleCQyLFxuICBpZEJyYWlucG9vbFAxNjByMTogaWRCcmFpbnBvb2xQMTYwcjEsXG4gIGlkQnJhaW5wb29sUDE2MHQxOiBpZEJyYWlucG9vbFAxNjB0MSxcbiAgaWRCcmFpbnBvb2xQMTkycjE6IGlkQnJhaW5wb29sUDE5MnIxLFxuICBpZEJyYWlucG9vbFAxOTJ0MTogaWRCcmFpbnBvb2xQMTkydDEsXG4gIGlkQnJhaW5wb29sUDIyNHIxOiBpZEJyYWlucG9vbFAyMjRyMSxcbiAgaWRCcmFpbnBvb2xQMjI0dDE6IGlkQnJhaW5wb29sUDIyNHQxLFxuICBpZEJyYWlucG9vbFAyNTZyMTogaWRCcmFpbnBvb2xQMjU2cjEsXG4gIGlkQnJhaW5wb29sUDI1NnQxOiBpZEJyYWlucG9vbFAyNTZ0MSxcbiAgaWRCcmFpbnBvb2xQMzIwcjE6IGlkQnJhaW5wb29sUDMyMHIxLFxuICBpZEJyYWlucG9vbFAzMjB0MTogaWRCcmFpbnBvb2xQMzIwdDEsXG4gIGlkQnJhaW5wb29sUDM4NHIxOiBpZEJyYWlucG9vbFAzODRyMSxcbiAgaWRCcmFpbnBvb2xQMzg0dDE6IGlkQnJhaW5wb29sUDM4NHQxLFxuICBpZEJyYWlucG9vbFA1MTJyMTogaWRCcmFpbnBvb2xQNTEycjEsXG4gIGlkQnJhaW5wb29sUDUxMnQxOiBpZEJyYWlucG9vbFA1MTJ0MSxcbiAgaWRFZDI1NTE5OiBpZEVkMjU1MTksXG4gIGlkRWQ0NDg6IGlkRWQ0NDgsXG4gIGlkRWxsaXB0aWNDdXJ2ZTogaWRFbGxpcHRpY0N1cnZlLFxuICBpZFNlY3AyNTZrMTogaWRTZWNwMjU2azEsXG4gIGlkU2VjcDI1NnIxOiBpZFNlY3AyNTZyMSxcbiAgaWRTZWNwMzg0cjE6IGlkU2VjcDM4NHIxLFxuICBpZFNlY3A1MjFyMTogaWRTZWNwNTIxcjEsXG4gIGlkVmVyc2lvbk9uZTogaWRWZXJzaW9uT25lLFxuICBpZFgyNTUxOTogaWRYMjU1MTksXG4gIGlkWDQ0ODogaWRYNDQ4XG59KTtcblxuY2xhc3MgRWNDdXJ2ZXMge1xuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG4gICAgc3RhdGljIHJlZ2lzdGVyKGl0ZW0pIHtcbiAgICAgICAgY29uc3Qgb2lkID0gbmV3IE9iamVjdElkZW50aWZpZXIoKTtcbiAgICAgICAgb2lkLnZhbHVlID0gaXRlbS5pZDtcbiAgICAgICAgY29uc3QgcmF3ID0gQXNuQ29udmVydC5zZXJpYWxpemUob2lkKTtcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICByYXcsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWVzLnB1c2goaXRlbS5uYW1lKTtcbiAgICB9XG4gICAgc3RhdGljIGZpbmQobmFtZU9ySWQpIHtcbiAgICAgICAgbmFtZU9ySWQgPSBuYW1lT3JJZC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtcykge1xuICAgICAgICAgICAgaWYgKGl0ZW0ubmFtZS50b1VwcGVyQ2FzZSgpID09PSBuYW1lT3JJZCB8fCBpdGVtLmlkLnRvVXBwZXJDYXNlKCkgPT09IG5hbWVPcklkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQobmFtZU9ySWQpIHtcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5maW5kKG5hbWVPcklkKTtcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgRUMgbmFtZWQgY3VydmUgJyR7bmFtZU9ySWR9J2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuRWNDdXJ2ZXMuaXRlbXMgPSBbXTtcbkVjQ3VydmVzLm5hbWVzID0gW107XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiUC0yNTZcIiwgaWQ6IGlkU2VjcDI1NnIxLCBzaXplOiAyNTYgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiUC0zODRcIiwgaWQ6IGlkU2VjcDM4NHIxLCBzaXplOiAzODQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiUC01MjFcIiwgaWQ6IGlkU2VjcDUyMXIxLCBzaXplOiA1MjEgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiSy0yNTZcIiwgaWQ6IGlkU2VjcDI1NmsxLCBzaXplOiAyNTYgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDE2MHIxXCIsIGlkOiBpZEJyYWlucG9vbFAxNjByMSwgc2l6ZTogMTYwIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAxNjB0MVwiLCBpZDogaWRCcmFpbnBvb2xQMTYwdDEsIHNpemU6IDE2MCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMTkycjFcIiwgaWQ6IGlkQnJhaW5wb29sUDE5MnIxLCBzaXplOiAxOTIgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDE5MnQxXCIsIGlkOiBpZEJyYWlucG9vbFAxOTJ0MSwgc2l6ZTogMTkyIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAyMjRyMVwiLCBpZDogaWRCcmFpbnBvb2xQMjI0cjEsIHNpemU6IDIyNCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMjI0dDFcIiwgaWQ6IGlkQnJhaW5wb29sUDIyNHQxLCBzaXplOiAyMjQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDI1NnIxXCIsIGlkOiBpZEJyYWlucG9vbFAyNTZyMSwgc2l6ZTogMjU2IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAyNTZ0MVwiLCBpZDogaWRCcmFpbnBvb2xQMjU2dDEsIHNpemU6IDI1NiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMzIwcjFcIiwgaWQ6IGlkQnJhaW5wb29sUDMyMHIxLCBzaXplOiAzMjAgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDMyMHQxXCIsIGlkOiBpZEJyYWlucG9vbFAzMjB0MSwgc2l6ZTogMzIwIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAzODRyMVwiLCBpZDogaWRCcmFpbnBvb2xQMzg0cjEsIHNpemU6IDM4NCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMzg0dDFcIiwgaWQ6IGlkQnJhaW5wb29sUDM4NHQxLCBzaXplOiAzODQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDUxMnIxXCIsIGlkOiBpZEJyYWlucG9vbFA1MTJyMSwgc2l6ZTogNTEyIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFA1MTJ0MVwiLCBpZDogaWRCcmFpbnBvb2xQNTEydDEsIHNpemU6IDUxMiB9KTtcblxuY2xhc3MgWDI1NTE5UHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiWDI1NTE5XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wiZGVyaXZlS2V5XCIsIFwiZGVyaXZlQml0c1wiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW10sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwicHVibGljXCIpO1xuICAgIH1cbn1cblxuY2xhc3MgRWQyNTUxOVByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVkMjU1MTlcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJzaWduXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJ2ZXJpZnlcIl0sXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBIbWFjUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiSE1BQ1wiO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wic2lnblwiLCBcInZlcmlmeVwiXTtcbiAgICB9XG4gICAgZ2V0RGVmYXVsdExlbmd0aChhbGdOYW1lKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMjU2XCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTM4NFwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQS01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gNTEyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYWxnb3JpdGhtIG5hbWUgJyR7YWxnTmFtZX0nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgaWYgKFwibGVuZ3RoXCIgaW4gYWxnb3JpdGhtKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBJcyBub3QgYSBOdW1iZXJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImxlbmd0aDogTnVtYmVyIGlzIG91dCBvZiByYW5nZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydFBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICB9XG59XG5cbmNsYXNzIFBia2RmMlByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlBCS0RGMlwiO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZGVyaXZlQml0c1wiLCBcImRlcml2ZUtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJzYWx0XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0uc2FsdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0uc2FsdCkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaXRlcmF0aW9uc1wiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhbGdvcml0aG0uaXRlcmF0aW9ucyAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml0ZXJhdGlvbnM6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLml0ZXJhdGlvbnMgPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXRlcmF0aW9uczogSXMgbGVzcyB0aGFuIDFcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpO1xuICAgICAgICBpZiAoZXh0cmFjdGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcImV4dHJhY3RhYmxlOiBNdXN0IGJlICdmYWxzZSdcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEhrZGZQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJIS0RGXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJkZXJpdmVLZXlcIiwgXCJkZXJpdmVCaXRzXCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInNhbHRcIik7XG4gICAgICAgIGlmICghQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGFsZ29yaXRobS5zYWx0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInNhbHQ6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImluZm9cIik7XG4gICAgICAgIGlmICghQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGFsZ29yaXRobS5pbmZvKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInNhbHQ6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpO1xuICAgICAgICBpZiAoZXh0cmFjdGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcImV4dHJhY3RhYmxlOiBNdXN0IGJlICdmYWxzZSdcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgICAgIHRoaXMuZGVmYXVsdExlbmd0aCA9IDA7XG4gICAgfVxuICAgIGRpZ2VzdCguLi5hcmdzKSB7XG4gICAgICAgIGFyZ3NbMF0gPSB7IGxlbmd0aDogdGhpcy5kZWZhdWx0TGVuZ3RoLCAuLi5hcmdzWzBdIH07XG4gICAgICAgIHJldHVybiBzdXBlci5kaWdlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICBzdXBlci5jaGVja0RpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBhbGdvcml0aG0ubGVuZ3RoIHx8IDA7XG4gICAgICAgIGlmICh0eXBlb2YgbGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBJcyBub3QgYSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5lZ2F0aXZlXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZTEyOFByb3ZpZGVyIGV4dGVuZHMgU2hha2VQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwic2hha2UxMjhcIjtcbiAgICAgICAgdGhpcy5kZWZhdWx0TGVuZ3RoID0gMTY7XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZTI1NlByb3ZpZGVyIGV4dGVuZHMgU2hha2VQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwic2hha2UyNTZcIjtcbiAgICAgICAgdGhpcy5kZWZhdWx0TGVuZ3RoID0gMzI7XG4gICAgfVxufVxuXG5jbGFzcyBDcnlwdG8ge1xuICAgIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICAgICAgcmV0dXJuIFwiQ3J5cHRvXCI7XG4gICAgfVxuICAgIHJhbmRvbVVVSUQoKSB7XG4gICAgICAgIGNvbnN0IGIgPSB0aGlzLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxNikpO1xuICAgICAgICBiWzZdID0gKGJbNl0gJiAweDBmKSB8IDB4NDA7XG4gICAgICAgIGJbOF0gPSAoYls4XSAmIDB4M2YpIHwgMHg4MDtcbiAgICAgICAgY29uc3QgdXVpZCA9IENvbnZlcnQuVG9IZXgoYikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGAke3V1aWQuc3Vic3RyaW5nKDAsIDgpfS0ke3V1aWQuc3Vic3RyaW5nKDgsIDEyKX0tJHt1dWlkLnN1YnN0cmluZygxMiwgMTYpfS0ke3V1aWQuc3Vic3RyaW5nKDE2LCAyMCl9LSR7dXVpZC5zdWJzdHJpbmcoMjApfWA7XG4gICAgfVxufVxuXG5jbGFzcyBQcm92aWRlclN0b3JhZ2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLml0ZW1zID0ge307XG4gICAgfVxuICAgIGdldChhbGdvcml0aG1OYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zW2FsZ29yaXRobU5hbWUudG9Mb3dlckNhc2UoKV0gfHwgbnVsbDtcbiAgICB9XG4gICAgc2V0KHByb3ZpZGVyKSB7XG4gICAgICAgIHRoaXMuaXRlbXNbcHJvdmlkZXIubmFtZS50b0xvd2VyQ2FzZSgpXSA9IHByb3ZpZGVyO1xuICAgIH1cbiAgICByZW1vdmVBdChhbGdvcml0aG1OYW1lKSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXQoYWxnb3JpdGhtTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5pdGVtc1thbGdvcml0aG1OYW1lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvdmlkZXI7XG4gICAgfVxuICAgIGhhcyhuYW1lKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ2V0KG5hbWUpO1xuICAgIH1cbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5pdGVtcykubGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgYWxnb3JpdGhtcygpIHtcbiAgICAgICAgY29uc3QgYWxnb3JpdGhtcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuaXRlbXNba2V5XTtcbiAgICAgICAgICAgIGFsZ29yaXRobXMucHVzaChwcm92aWRlci5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxnb3JpdGhtcy5zb3J0KCk7XG4gICAgfVxufVxuXG5jb25zdCBrZXlGb3JtYXRNYXAgPSB7XG4gICAgXCJqd2tcIjogW1wicHJpdmF0ZVwiLCBcInB1YmxpY1wiLCBcInNlY3JldFwiXSxcbiAgICBcInBrY3M4XCI6IFtcInByaXZhdGVcIl0sXG4gICAgXCJzcGtpXCI6IFtcInB1YmxpY1wiXSxcbiAgICBcInJhd1wiOiBbXCJzZWNyZXRcIiwgXCJwdWJsaWNcIl1cbn07XG5jb25zdCBzb3VyY2VCdWZmZXJLZXlGb3JtYXRzID0gW1wicGtjczhcIiwgXCJzcGtpXCIsIFwicmF3XCJdO1xuY2xhc3MgU3VidGxlQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMgPSBuZXcgUHJvdmlkZXJTdG9yYWdlKCk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0hhc2hlZEFsZ29yaXRobShkYXRhKSB7XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAmJiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgJiYgXCJuYW1lXCIgaW4gZGF0YVxuICAgICAgICAgICAgJiYgXCJoYXNoXCIgaW4gZGF0YVxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgIH1cbiAgICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgIHJldHVybiBcIlN1YnRsZUNyeXB0b1wiO1xuICAgIH1cbiAgICBhc3luYyBkaWdlc3QoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMiwgXCJkaWdlc3RcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGRhdGEsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5kaWdlc3QocHJlcGFyZWRBbGdvcml0aG0sIHByZXBhcmVkRGF0YSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZ2VuZXJhdGVLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMywgXCJnZW5lcmF0ZUtleVwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZ2VuZXJhdGVLZXkoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBzaWduKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwic2lnblwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwga2V5LCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5zaWduKHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwga2V5LCBwcmVwYXJlZERhdGEsIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIHZlcmlmeSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCA0LCBcInZlcmlmeVwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZFNpZ25hdHVyZSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIudmVyaWZ5KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwga2V5LCBwcmVwYXJlZFNpZ25hdHVyZSwgcHJlcGFyZWREYXRhLCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBlbmNyeXB0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwiZW5jcnlwdFwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwga2V5LCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5lbmNyeXB0KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwga2V5LCBwcmVwYXJlZERhdGEsIHsga2V5VXNhZ2U6IHRydWUgfSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZGVjcnlwdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcImRlY3J5cHRcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGtleSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZGVjcnlwdCh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGtleSwgcHJlcGFyZWREYXRhLCB7IGtleVVzYWdlOiB0cnVlIH0sIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGRlcml2ZUJpdHMoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMywgXCJkZXJpdmVCaXRzXCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBiYXNlS2V5LCBsZW5ndGgsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGJhc2VLZXkpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmRlcml2ZUJpdHMoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBiYXNlS2V5LCBsZW5ndGgsIHsga2V5VXNhZ2U6IHRydWUgfSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZGVyaXZlS2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDUsIFwiZGVyaXZlS2V5XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBiYXNlS2V5LCBkZXJpdmVkS2V5VHlwZSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGVyaXZlZEtleVR5cGUgPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oZGVyaXZlZEtleVR5cGUpO1xuICAgICAgICBjb25zdCBpbXBvcnRQcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWREZXJpdmVkS2V5VHlwZS5uYW1lKTtcbiAgICAgICAgaW1wb3J0UHJvdmlkZXIuY2hlY2tEZXJpdmVkS2V5UGFyYW1zKHByZXBhcmVkRGVyaXZlZEtleVR5cGUpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIHByb3ZpZGVyLmNoZWNrQ3J5cHRvS2V5KGJhc2VLZXksIFwiZGVyaXZlS2V5XCIpO1xuICAgICAgICBjb25zdCBkZXJpdmVkQml0cyA9IGF3YWl0IHByb3ZpZGVyLmRlcml2ZUJpdHMoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBiYXNlS2V5LCBkZXJpdmVkS2V5VHlwZS5sZW5ndGggfHwgNTEyLCB7IGtleVVzYWdlOiBmYWxzZSB9LCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRLZXkoXCJyYXdcIiwgZGVyaXZlZEJpdHMsIGRlcml2ZWRLZXlUeXBlLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXMpO1xuICAgIH1cbiAgICBhc3luYyBleHBvcnRLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMiwgXCJleHBvcnRLZXlcIik7XG4gICAgICAgIGNvbnN0IFtmb3JtYXQsIGtleSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCFrZXlGb3JtYXRNYXBbZm9ybWF0XSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQga2V5Rm9ybWF0IGFyZ3VtZW50XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgha2V5Rm9ybWF0TWFwW2Zvcm1hdF0uaW5jbHVkZXMoa2V5LnR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFwiVGhlIGtleSBpcyBub3Qgb2YgdGhlIGV4cGVjdGVkIHR5cGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKGtleS5hbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmV4cG9ydEtleShmb3JtYXQsIGtleSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgaW1wb3J0S2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDUsIFwiaW1wb3J0S2V5XCIpO1xuICAgICAgICBjb25zdCBbZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiandrXCIpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5RGF0YSAhPT0gXCJvYmplY3RcIiB8fCAha2V5RGF0YS5rdHkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiS2V5IGRhdGEgbXVzdCBiZSBhbiBvYmplY3QgZm9yIEpXSyBpbXBvcnRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc291cmNlQnVmZmVyS2V5Rm9ybWF0cy5pbmNsdWRlcyhmb3JtYXQpKSB7XG4gICAgICAgICAgICBpZiAoIUJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShrZXlEYXRhKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJLZXkgZGF0YSBtdXN0IGJlIGEgQnVmZmVyU291cmNlIGZvciBub24tSldLIGZvcm1hdHNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIHByb3ZpZGVkIHZhbHVlIGlzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3IG9yIEpzb25XZWJLZXkpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvdmlkZXIuaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXMpO1xuICAgIH1cbiAgICBhc3luYyB3cmFwS2V5KGZvcm1hdCwga2V5LCB3cmFwcGluZ0tleSwgd3JhcEFsZ29yaXRobSwgLi4uYXJncykge1xuICAgICAgICBsZXQga2V5RGF0YSA9IGF3YWl0IHRoaXMuZXhwb3J0S2V5KGZvcm1hdCwga2V5LCAuLi5hcmdzKTtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJqd2tcIikge1xuICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGtleURhdGEpO1xuICAgICAgICAgICAga2V5RGF0YSA9IENvbnZlcnQuRnJvbVV0ZjhTdHJpbmcoanNvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0od3JhcEFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGtleURhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIHJldHVybiBwcm92aWRlci5lbmNyeXB0KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgd3JhcHBpbmdLZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogZmFsc2UgfSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIHVud3JhcEtleShmb3JtYXQsIHdyYXBwZWRLZXksIHVud3JhcHBpbmdLZXksIHVud3JhcEFsZ29yaXRobSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKHVud3JhcEFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHdyYXBwZWRLZXkpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGxldCBrZXlEYXRhID0gYXdhaXQgcHJvdmlkZXIuZGVjcnlwdCh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIHVud3JhcHBpbmdLZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogZmFsc2UgfSwgLi4uYXJncyk7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiandrXCIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAga2V5RGF0YSA9IEpTT04ucGFyc2UoQ29udmVydC5Ub1V0ZjhTdHJpbmcoa2V5RGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoXCJ3cmFwcGVkS2V5OiBJcyBub3QgYSBKU09OXCIpO1xuICAgICAgICAgICAgICAgIGVycm9yLmludGVybmFsID0gZTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB1bndyYXBwZWRLZXlBbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBjaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIHNpemUsIG1ldGhvZE5hbWUpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgc2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgJyR7bWV0aG9kTmFtZX0nIG9uICdTdWJ0bGVDcnlwdG8nOiAke3NpemV9IGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgJHthcmdzLmxlbmd0aH0gcHJlc2VudGApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGFsZ29yaXRobSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFN1YnRsZUNyeXB0by5pc0hhc2hlZEFsZ29yaXRobShhbGdvcml0aG0pKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHsgLi4uYWxnb3JpdGhtIH07XG4gICAgICAgICAgICBwcmVwYXJlZEFsZ29yaXRobS5oYXNoID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoKTtcbiAgICAgICAgICAgIHJldHVybiBwcmVwYXJlZEFsZ29yaXRobTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5hbGdvcml0aG0gfTtcbiAgICB9XG4gICAgZ2V0UHJvdmlkZXIobmFtZSkge1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMucHJvdmlkZXJzLmdldChuYW1lKTtcbiAgICAgICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFsZ29yaXRobUVycm9yKFwiVW5yZWNvZ25pemVkIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgS2V5IGlzIG5vdCBvZiB0eXBlICdDcnlwdG9LZXknYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbnZhciBpbmRleCA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBjb252ZXJ0ZXJzOiBpbmRleCQzXG59KTtcblxuY29uc3QgUkVRVUlSRURfRklFTERTID0gW1wiY3J2XCIsIFwiZVwiLCBcImtcIiwgXCJrdHlcIiwgXCJuXCIsIFwieFwiLCBcInlcIl07XG5jbGFzcyBKd2tVdGlscyB7XG4gICAgc3RhdGljIGFzeW5jIHRodW1icHJpbnQoaGFzaCwgandrLCBjcnlwdG8pIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZm9ybWF0KGp3aywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmRpZ2VzdChoYXNoLCBDb252ZXJ0LkZyb21CaW5hcnkoSlNPTi5zdHJpbmdpZnkoZGF0YSkpKTtcbiAgICB9XG4gICAgc3RhdGljIGZvcm1hdChqd2ssIHJlbW92ZSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCByZXMgPSBPYmplY3QuZW50cmllcyhqd2spO1xuICAgICAgICBpZiAocmVtb3ZlKSB7XG4gICAgICAgICAgICByZXMgPSByZXMuZmlsdGVyKG8gPT4gUkVRVUlSRURfRklFTERTLmluY2x1ZGVzKG9bMF0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSByZXMuc29ydCgoW2tleUFdLCBba2V5Ql0pID0+IGtleUEgPiBrZXlCID8gMSA6IGtleUEgPCBrZXlCID8gLTEgOiAwKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhyZXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgQWVzQ2JjUHJvdmlkZXIsIEFlc0NtYWNQcm92aWRlciwgQWVzQ3RyUHJvdmlkZXIsIEFlc0VjYlByb3ZpZGVyLCBBZXNHY21Qcm92aWRlciwgQWVzS3dQcm92aWRlciwgQWVzUHJvdmlkZXIsIEFsZ29yaXRobUVycm9yLCBDcnlwdG8sIENyeXB0b0Vycm9yLCBDcnlwdG9LZXksIERlc1Byb3ZpZGVyLCBFY0N1cnZlcywgRWNVdGlscywgRWNkaEVzUHJvdmlkZXIsIEVjZGhQcm92aWRlciwgRWNkc2FQcm92aWRlciwgRWQyNTUxOVByb3ZpZGVyLCBFZERzYVByb3ZpZGVyLCBFbGxpcHRpY1Byb3ZpZGVyLCBIa2RmUHJvdmlkZXIsIEhtYWNQcm92aWRlciwgSndrVXRpbHMsIE9wZXJhdGlvbkVycm9yLCBQYmtkZjJQcm92aWRlciwgUGVtQ29udmVydGVyLCBQcm92aWRlckNyeXB0bywgUHJvdmlkZXJTdG9yYWdlLCBSZXF1aXJlZFByb3BlcnR5RXJyb3IsIFJzYU9hZXBQcm92aWRlciwgUnNhUHJvdmlkZXIsIFJzYVBzc1Byb3ZpZGVyLCBSc2FTc2FQcm92aWRlciwgU2hha2UxMjhQcm92aWRlciwgU2hha2UyNTZQcm92aWRlciwgU2hha2VQcm92aWRlciwgU3VidGxlQ3J5cHRvLCBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yLCBYMjU1MTlQcm92aWRlciwgaW5kZXgkMSBhcyBhc24xLCBpc0pXSywgaW5kZXggYXMganNvbiB9O1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwgIi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5leHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCAiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGN1c3RvbUluc3BlY3RTeW1ib2wgPVxuICAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sWydmb3InXSA9PT0gJ2Z1bmN0aW9uJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA/IFN5bWJvbFsnZm9yJ10oJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA6IG51bGxcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG52YXIgS19NQVhfTEVOR1RIID0gMHg3ZmZmZmZmZlxuZXhwb3J0cy5rTWF4TGVuZ3RoID0gS19NQVhfTEVOR1RIXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFByaW50IHdhcm5pbmcgYW5kIHJlY29tbWVuZCB1c2luZyBgYnVmZmVyYCB2NC54IHdoaWNoIGhhcyBhbiBPYmplY3RcbiAqICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIFdlIHJlcG9ydCB0aGF0IHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGlmIHRoZSBhcmUgbm90IHN1YmNsYXNzYWJsZVxuICogdXNpbmcgX19wcm90b19fLiBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YFxuICogKFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4KS4gSUUgMTAgbGFja3Mgc3VwcG9ydFxuICogZm9yIF9fcHJvdG9fXyBhbmQgaGFzIGEgYnVnZ3kgdHlwZWQgYXJyYXkgaW1wbGVtZW50YXRpb24uXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gdHlwZWRBcnJheVN1cHBvcnQoKVxuXG5pZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgJ1RoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSAnICtcbiAgICAnYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4nXG4gIClcbn1cblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICAvLyBDYW4gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWQ/XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgdmFyIHByb3RvID0geyBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH0gfVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgVWludDhBcnJheS5wcm90b3R5cGUpXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFyciwgcHJvdG8pXG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDJcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAncGFyZW50Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ1ZmZlclxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ29mZnNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7XG4gIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIGxlbmd0aCArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlci5wcm90b3R5cGUpXG4gIHJldHVybiBidWZcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZShhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20oYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG5mdW5jdGlvbiBmcm9tICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlWaWV3KHZhbHVlKVxuICB9XG5cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICAgIClcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlKHZhbHVlLCBBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgQXJyYXlCdWZmZXIpKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAoaXNJbnN0YW5jZSh2YWx1ZSwgU2hhcmVkQXJyYXlCdWZmZXIpIHx8XG4gICAgICAodmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIFNoYXJlZEFycmF5QnVmZmVyKSkpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJ1xuICAgIClcbiAgfVxuXG4gIHZhciB2YWx1ZU9mID0gdmFsdWUudmFsdWVPZiAmJiB2YWx1ZS52YWx1ZU9mKClcbiAgaWYgKHZhbHVlT2YgIT0gbnVsbCAmJiB2YWx1ZU9mICE9PSB2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZU9mLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICB2YXIgYiA9IGZyb21PYmplY3QodmFsdWUpXG4gIGlmIChiKSByZXR1cm4gYlxuXG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oXG4gICAgICB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKCdzdHJpbmcnKSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoXG4gICAgKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICApXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gTm90ZTogQ2hhbmdlIHByb3RvdHlwZSAqYWZ0ZXIqIEJ1ZmZlci5mcm9tIGlzIGRlZmluZWQgdG8gd29ya2Fyb3VuZCBDaHJvbWUgYnVnOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC8xNDhcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIucHJvdG90eXBlLCBVaW50OEFycmF5LnByb3RvdHlwZSlcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIsIFVpbnQ4QXJyYXkpXG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBzaXplICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlIChzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gYnVmLndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlIChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheVZpZXcgKGFycmF5Vmlldykge1xuICBpZiAoaXNJbnN0YW5jZShhcnJheVZpZXcsIFVpbnQ4QXJyYXkpKSB7XG4gICAgdmFyIGNvcHkgPSBuZXcgVWludDhBcnJheShhcnJheVZpZXcpXG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcihjb3B5LmJ1ZmZlciwgY29weS5ieXRlT2Zmc2V0LCBjb3B5LmJ5dGVMZW5ndGgpXG4gIH1cbiAgcmV0dXJuIGZyb21BcnJheUxpa2UoYXJyYXlWaWV3KVxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wib2Zmc2V0XCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJsZW5ndGhcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgdmFyIGJ1ZlxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyLnByb3RvdHlwZSlcblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoMClcbiAgICB9XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKVxuICB9XG5cbiAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJlxuICAgIGIgIT09IEJ1ZmZlci5wcm90b3R5cGUgLy8gc28gQnVmZmVyLmlzQnVmZmVyKEJ1ZmZlci5wcm90b3R5cGUpIHdpbGwgYmUgZmFsc2Vcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmIChpc0luc3RhbmNlKGEsIFVpbnQ4QXJyYXkpKSBhID0gQnVmZmVyLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aClcbiAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpIGIgPSBCdWZmZXIuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJidWYxXCIsIFwiYnVmMlwiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5J1xuICAgIClcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmIChpc0luc3RhbmNlKGJ1ZiwgVWludDhBcnJheSkpIHtcbiAgICAgIGlmIChwb3MgKyBidWYubGVuZ3RoID4gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICBCdWZmZXIuZnJvbShidWYpLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgYnVmLFxuICAgICAgICAgIHBvc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIH1cbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBpc0luc3RhbmNlKHN0cmluZywgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHN0cmluZ1xuICAgIClcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBtdXN0TWF0Y2ggPSAoYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdID09PSB0cnVlKVxuICBpZiAoIW11c3RNYXRjaCAmJiBsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHtcbiAgICAgICAgICByZXR1cm4gbXVzdE1hdGNoID8gLTEgOiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICB9XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcmNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIChhbmQgdGhlIGBpcy1idWZmZXJgIG5wbSBwYWNrYWdlKVxuLy8gdG8gZGV0ZWN0IGEgQnVmZmVyIGluc3RhbmNlLiBJdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgYGluc3RhbmNlb2YgQnVmZmVyYFxuLy8gcmVsaWFibHkgaW4gYSBicm93c2VyaWZ5IGNvbnRleHQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBkaWZmZXJlbnRcbi8vIGNvcGllcyBvZiB0aGUgJ2J1ZmZlcicgcGFja2FnZSBpbiB1c2UuIFRoaXMgbWV0aG9kIHdvcmtzIGV2ZW4gZm9yIEJ1ZmZlclxuLy8gaW5zdGFuY2VzIHRoYXQgd2VyZSBjcmVhdGVkIGZyb20gYW5vdGhlciBjb3B5IG9mIHRoZSBgYnVmZmVyYCBwYWNrYWdlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTU0XG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nID0gQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZ1xuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLnJlcGxhY2UoLyguezJ9KS9nLCAnJDEgJykudHJpbSgpXG4gIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cbmlmIChjdXN0b21JbnNwZWN0U3ltYm9sKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGVbY3VzdG9tSW5zcGVjdFN5bWJvbF0gPSBCdWZmZXIucHJvdG90eXBlLmluc3BlY3Rcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkge1xuICAgIHRhcmdldCA9IEJ1ZmZlci5mcm9tKHRhcmdldCwgdGFyZ2V0Lm9mZnNldCwgdGFyZ2V0LmJ5dGVMZW5ndGgpXG4gIH1cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB0YXJnZXQpXG4gICAgKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAobnVtYmVySXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmICh0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbdmFsXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKVxuICAgICAgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKVxuICAgICAgICAgID8gM1xuICAgICAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpXG4gICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gaGV4U2xpY2VMb29rdXBUYWJsZVtidWZbaV1dXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIC8vIElmIGJ5dGVzLmxlbmd0aCBpcyBvZGQsIHRoZSBsYXN0IDggYml0cyBtdXN0IGJlIGlnbm9yZWQgKHNhbWUgYXMgbm9kZS5qcylcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGggLSAxOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIChieXRlc1tpICsgMV0gKiAyNTYpKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXdCdWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50QkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDE2TEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyQkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludEJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MTZMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDE2QkUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MzJCRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyJylcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBVc2UgYnVpbHQtaW4gd2hlbiBhdmFpbGFibGUsIG1pc3NpbmcgZnJvbSBJRTExXG4gICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmICgoZW5jb2RpbmcgPT09ICd1dGY4JyAmJiBjb2RlIDwgMTI4KSB8fFxuICAgICAgICAgIGVuY29kaW5nID09PSAnbGF0aW4xJykge1xuICAgICAgICAvLyBGYXN0IHBhdGg6IElmIGB2YWxgIGZpdHMgaW50byBhIHNpbmdsZSBieXRlLCB1c2UgdGhhdCBudW1lcmljIHZhbHVlLlxuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgdmFsID0gTnVtYmVyKHZhbClcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInICsgdmFsICtcbiAgICAgICAgJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpXG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgdGFrZXMgZXF1YWwgc2lnbnMgYXMgZW5kIG9mIHRoZSBCYXNlNjQgZW5jb2RpbmdcbiAgc3RyID0gc3RyLnNwbGl0KCc9JylbMF1cbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuLy8gQXJyYXlCdWZmZXIgb3IgVWludDhBcnJheSBvYmplY3RzIGZyb20gb3RoZXIgY29udGV4dHMgKGkuZS4gaWZyYW1lcykgZG8gbm90IHBhc3Ncbi8vIHRoZSBgaW5zdGFuY2VvZmAgY2hlY2sgYnV0IHRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgb2YgdGhhdCB0eXBlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTY2XG5mdW5jdGlvbiBpc0luc3RhbmNlIChvYmosIHR5cGUpIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIHR5cGUgfHxcbiAgICAob2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWUgIT0gbnVsbCAmJlxuICAgICAgb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09IHR5cGUubmFtZSlcbn1cbmZ1bmN0aW9uIG51bWJlcklzTmFOIChvYmopIHtcbiAgLy8gRm9yIElFMTEgc3VwcG9ydFxuICByZXR1cm4gb2JqICE9PSBvYmogLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cblxuLy8gQ3JlYXRlIGxvb2t1cCB0YWJsZSBmb3IgYHRvU3RyaW5nKCdoZXgnKWBcbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzIxOVxudmFyIGhleFNsaWNlTG9va3VwVGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgYWxwaGFiZXQgPSAnMDEyMzQ1Njc4OWFiY2RlZidcbiAgdmFyIHRhYmxlID0gbmV3IEFycmF5KDI1NilcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgdmFyIGkxNiA9IGkgKiAxNlxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgdGFibGVbaTE2ICsgal0gPSBhbHBoYWJldFtpXSArIGFscGhhYmV0W2pdXG4gICAgfVxuICB9XG4gIHJldHVybiB0YWJsZVxufSkoKVxuIiwgIi8qIVxuIENvcHlyaWdodCAoYykgUGVjdWxpYXIgVmVudHVyZXMsIExMQ1xuKi9cblxuaW1wb3J0ICogYXMgY29yZSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgYXMgQnVmZmVyU291cmNlQ29udmVydGVyJDEgfSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5leHBvcnQgeyBDcnlwdG9LZXkgfSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5pbXBvcnQgeyBCdWZmZXIgYXMgQnVmZmVyJDEgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0ICogYXMgcHJvY2VzcyBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB7IF9fZGVjb3JhdGUgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBKc29uUHJvcCwgSnNvblByb3BUeXBlcywgSnNvblNlcmlhbGl6ZXIsIEpzb25QYXJzZXIgfSBmcm9tICdAcGVjdWxpYXIvanNvbi1zY2hlbWEnO1xuaW1wb3J0IHsgQ29udmVydCwgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSAncHZ0c3V0aWxzJztcbmltcG9ydCB7IEFzblBhcnNlciwgQXNuU2VyaWFsaXplciwgQXNuQ29udmVydCB9IGZyb20gJ0BwZWN1bGlhci9hc24xLXNjaGVtYSc7XG5cbmNvbnN0IEpzb25CYXNlNjRVcmxDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUpTT046ICh2YWx1ZSkgPT4gQnVmZmVyJDEuZnJvbShDb252ZXJ0LkZyb21CYXNlNjRVcmwodmFsdWUpKSxcbiAgICB0b0pTT046ICh2YWx1ZSkgPT4gQ29udmVydC5Ub0Jhc2U2NFVybCh2YWx1ZSksXG59O1xuXG5jbGFzcyBDcnlwdG9LZXkgZXh0ZW5kcyBjb3JlLkNyeXB0b0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlciQxLmFsbG9jKDApO1xuICAgICAgICB0aGlzLmFsZ29yaXRobSA9IHsgbmFtZTogXCJcIiB9O1xuICAgICAgICB0aGlzLmV4dHJhY3RhYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudHlwZSA9IFwic2VjcmV0XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgICAgIHRoaXMua3R5ID0gXCJvY3RcIjtcbiAgICAgICAgdGhpcy5hbGcgPSBcIlwiO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJleHRcIiwgdHlwZTogSnNvblByb3BUeXBlcy5Cb29sZWFuLCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJleHRyYWN0YWJsZVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImtleV9vcHNcIiwgdHlwZTogSnNvblByb3BUeXBlcy5TdHJpbmcsIHJlcGVhdGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJ1c2FnZXNcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgdHlwZTogSnNvblByb3BUeXBlcy5TdHJpbmcgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwia3R5XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IHR5cGU6IEpzb25Qcm9wVHlwZXMuU3RyaW5nLCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJhbGdcIiwgdm9pZCAwKTtcblxuY2xhc3MgU3ltbWV0cmljS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5rdHkgPSBcIm9jdFwiO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInNlY3JldFwiO1xuICAgIH1cbn1cblxuY2xhc3MgQXN5bW1ldHJpY0tleSBleHRlbmRzIENyeXB0b0tleSB7XG59XG5cbmNsYXNzIEFlc0NyeXB0b0tleSBleHRlbmRzIFN5bW1ldHJpY0tleSB7XG4gICAgZ2V0IGFsZygpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9Q0JDYDtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ1RSXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9Q1RSYDtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtR0NNXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9R0NNYDtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtS1dcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEEke3RoaXMuYWxnb3JpdGhtLmxlbmd0aH1LV2A7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNNQUNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEEke3RoaXMuYWxnb3JpdGhtLmxlbmd0aH1DTUFDYDtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtRUNCXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9RUNCYDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQWxnb3JpdGhtRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGdvcml0aG0gbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXQgYWxnKHZhbHVlKSB7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImtcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQ29udmVydGVyIH0pXG5dLCBBZXNDcnlwdG9LZXkucHJvdG90eXBlLCBcImRhdGFcIiwgdm9pZCAwKTtcblxuY2xhc3MgQWVzQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBBZXNDcnlwdG9LZXkoKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIGtleS5kYXRhID0gY3J5cHRvLnJhbmRvbUJ5dGVzKGFsZ29yaXRobS5sZW5ndGggPj4gMyk7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBleHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5OiBJcyBub3QgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgbGV0IGtleTtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IEFlc0NyeXB0b0tleSB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBuZXcgQWVzQ3J5cHRvS2V5KCk7XG4gICAgICAgICAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkuYWxnb3JpdGhtLmxlbmd0aCA9IGtleS5kYXRhLmxlbmd0aCA8PCAzO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgc3dpdGNoIChrZXkuYWxnb3JpdGhtLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAxMjg6XG4gICAgICAgICAgICBjYXNlIDE5MjpcbiAgICAgICAgICAgIGNhc2UgMjU2OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImtleURhdGE6IElzIHdyb25nIGtleSBsZW5ndGhcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHRBZXNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DVFJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzQ1RSKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtR0NNXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0dDTShhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUtXXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0tXKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtRUNCXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0VDQihhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBpZiAoIShrZXkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJrZXk6IElzIG5vdCBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRBZXNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DVFJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzQ1RSKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtR0NNXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFlc0dDTShhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUtXXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFlc0tXKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtRUNCXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFlc0VDQihhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIkMS5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlciQxLmNvbmNhdChbZGVjLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHRBZXNDVFIoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tY3RyYCwga2V5LmRhdGEsIEJ1ZmZlciQxLmZyb20oYWxnb3JpdGhtLmNvdW50ZXIpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlciQxLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHRBZXNDVFIoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWN0cmAsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uY291bnRlcikpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIkMS5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0QWVzR0NNKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWdjbWAsIGtleS5kYXRhLCBCdWZmZXIkMS5mcm9tKGFsZ29yaXRobS5pdiksIHtcbiAgICAgICAgICAgIGF1dGhUYWdMZW5ndGg6IChhbGdvcml0aG0udGFnTGVuZ3RoIHx8IDEyOCkgPj4gMyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChhbGdvcml0aG0uYWRkaXRpb25hbERhdGEpIHtcbiAgICAgICAgICAgIGNpcGhlci5zZXRBQUQoQnVmZmVyJDEuZnJvbShhbGdvcml0aG0uYWRkaXRpb25hbERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZW5jID0gY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZW5jID0gQnVmZmVyJDEuY29uY2F0KFtlbmMsIGNpcGhlci5maW5hbCgpLCBjaXBoZXIuZ2V0QXV0aFRhZygpXSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0dDTShhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCB0YWdMZW5ndGggPSAoYWxnb3JpdGhtLnRhZ0xlbmd0aCB8fCAxMjgpID4+IDM7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1nY21gLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSwge1xuICAgICAgICAgICAgYXV0aFRhZ0xlbmd0aDogdGFnTGVuZ3RoLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5jID0gZGF0YS5zbGljZSgwLCBkYXRhLmxlbmd0aCAtIHRhZ0xlbmd0aCk7XG4gICAgICAgIGNvbnN0IHRhZyA9IGRhdGEuc2xpY2UoZGF0YS5sZW5ndGggLSB0YWdMZW5ndGgpO1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSB7XG4gICAgICAgICAgICBkZWNpcGhlci5zZXRBQUQoQnVmZmVyJDEuZnJvbShhbGdvcml0aG0uYWRkaXRpb25hbERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBkZWNpcGhlci5zZXRBdXRoVGFnKHRhZyk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZW5jKTtcbiAgICAgICAgZGVjID0gQnVmZmVyJDEuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0tXKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgaWQtYWVzJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0td3JhcGAsIGtleS5kYXRhLCB0aGlzLkFFU19LV19JVik7XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIkMS5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0tXKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGlkLWFlcyR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LXdyYXBgLCBrZXkuZGF0YSwgdGhpcy5BRVNfS1dfSVYpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIkMS5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0QWVzRUNCKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWVjYmAsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheSgwKSk7XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIkMS5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzRUNCKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1lY2JgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoMCkpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIkMS5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxufVxuQWVzQ3J5cHRvLkFFU19LV19JViA9IEJ1ZmZlciQxLmZyb20oXCJBNkE2QTZBNkE2QTZBNkE2XCIsIFwiaGV4XCIpO1xuXG5jb25zdCBrZXlTdG9yYWdlID0gbmV3IFdlYWtNYXAoKTtcbmZ1bmN0aW9uIGdldENyeXB0b0tleShrZXkpIHtcbiAgICBjb25zdCByZXMgPSBrZXlTdG9yYWdlLmdldChrZXkpO1xuICAgIGlmICghcmVzKSB7XG4gICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiQ2Fubm90IGdldCBDcnlwdG9LZXkgZnJvbSBzZWN1cmUgc3RvcmFnZVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIHNldENyeXB0b0tleSh2YWx1ZSkge1xuICAgIGNvbnN0IGtleSA9IGNvcmUuQ3J5cHRvS2V5LmNyZWF0ZSh2YWx1ZS5hbGdvcml0aG0sIHZhbHVlLnR5cGUsIHZhbHVlLmV4dHJhY3RhYmxlLCB2YWx1ZS51c2FnZXMpO1xuICAgIE9iamVjdC5mcmVlemUoa2V5KTtcbiAgICBrZXlTdG9yYWdlLnNldChrZXksIHZhbHVlKTtcbiAgICByZXR1cm4ga2V5O1xufVxuXG5jbGFzcyBBZXNDYmNQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzQ2JjUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGFsZ29yaXRobS5sZW5ndGgsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jb25zdCB6ZXJvID0gQnVmZmVyJDEuZnJvbShbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0pO1xuY29uc3QgcmIgPSBCdWZmZXIkMS5mcm9tKFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzVdKTtcbmNvbnN0IGJsb2NrU2l6ZSA9IDE2O1xuZnVuY3Rpb24gYml0U2hpZnRMZWZ0KGJ1ZmZlcikge1xuICAgIGNvbnN0IHNoaWZ0ZWQgPSBCdWZmZXIkMS5hbGxvYyhidWZmZXIubGVuZ3RoKTtcbiAgICBjb25zdCBsYXN0ID0gYnVmZmVyLmxlbmd0aCAtIDE7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxhc3Q7IGluZGV4KyspIHtcbiAgICAgICAgc2hpZnRlZFtpbmRleF0gPSBidWZmZXJbaW5kZXhdIDw8IDE7XG4gICAgICAgIGlmIChidWZmZXJbaW5kZXggKyAxXSAmIDB4ODApIHtcbiAgICAgICAgICAgIHNoaWZ0ZWRbaW5kZXhdICs9IDB4MDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2hpZnRlZFtsYXN0XSA9IGJ1ZmZlcltsYXN0XSA8PCAxO1xuICAgIHJldHVybiBzaGlmdGVkO1xufVxuZnVuY3Rpb24geG9yKGEsIGIpIHtcbiAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpO1xuICAgIGNvbnN0IG91dHB1dCA9IEJ1ZmZlciQxLmFsbG9jKGxlbmd0aCk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBvdXRwdXRbaW5kZXhdID0gYVtpbmRleF0gXiBiW2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cbmZ1bmN0aW9uIGFlcyhrZXksIG1lc3NhZ2UpIHtcbiAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYGFlcyR7a2V5Lmxlbmd0aCA8PCAzfWAsIGtleSwgemVybyk7XG4gICAgY29uc3QgcmVzdWx0ID0gY2lwaGVyLnVwZGF0ZShtZXNzYWdlKTtcbiAgICBjaXBoZXIuZmluYWwoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0TWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGJsb2NrSW5kZXgpIHtcbiAgICBjb25zdCBibG9jayA9IEJ1ZmZlciQxLmFsbG9jKGJsb2NrU2l6ZSk7XG4gICAgY29uc3Qgc3RhcnQgPSBibG9ja0luZGV4ICogYmxvY2tTaXplO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgYmxvY2tTaXplO1xuICAgIG1lc3NhZ2UuY29weShibG9jaywgMCwgc3RhcnQsIGVuZCk7XG4gICAgcmV0dXJuIGJsb2NrO1xufVxuZnVuY3Rpb24gZ2V0UGFkZGVkTWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGJsb2NrSW5kZXgpIHtcbiAgICBjb25zdCBibG9jayA9IEJ1ZmZlciQxLmFsbG9jKGJsb2NrU2l6ZSk7XG4gICAgY29uc3Qgc3RhcnQgPSBibG9ja0luZGV4ICogYmxvY2tTaXplO1xuICAgIGNvbnN0IGVuZCA9IG1lc3NhZ2UubGVuZ3RoO1xuICAgIGJsb2NrLmZpbGwoMCk7XG4gICAgbWVzc2FnZS5jb3B5KGJsb2NrLCAwLCBzdGFydCwgZW5kKTtcbiAgICBibG9ja1tlbmQgLSBzdGFydF0gPSAweDgwO1xuICAgIHJldHVybiBibG9jaztcbn1cbmZ1bmN0aW9uIGdlbmVyYXRlU3Via2V5cyhrZXkpIHtcbiAgICBjb25zdCBsID0gYWVzKGtleSwgemVybyk7XG4gICAgbGV0IHN1YmtleTEgPSBiaXRTaGlmdExlZnQobCk7XG4gICAgaWYgKGxbMF0gJiAweDgwKSB7XG4gICAgICAgIHN1YmtleTEgPSB4b3Ioc3Via2V5MSwgcmIpO1xuICAgIH1cbiAgICBsZXQgc3Via2V5MiA9IGJpdFNoaWZ0TGVmdChzdWJrZXkxKTtcbiAgICBpZiAoc3Via2V5MVswXSAmIDB4ODApIHtcbiAgICAgICAgc3Via2V5MiA9IHhvcihzdWJrZXkyLCByYik7XG4gICAgfVxuICAgIHJldHVybiB7IHN1YmtleTEsIHN1YmtleTIgfTtcbn1cbmZ1bmN0aW9uIGFlc0NtYWMoa2V5LCBtZXNzYWdlKSB7XG4gICAgY29uc3Qgc3Via2V5cyA9IGdlbmVyYXRlU3Via2V5cyhrZXkpO1xuICAgIGxldCBibG9ja0NvdW50ID0gTWF0aC5jZWlsKG1lc3NhZ2UubGVuZ3RoIC8gYmxvY2tTaXplKTtcbiAgICBsZXQgbGFzdEJsb2NrQ29tcGxldGVGbGFnO1xuICAgIGxldCBsYXN0QmxvY2s7XG4gICAgaWYgKGJsb2NrQ291bnQgPT09IDApIHtcbiAgICAgICAgYmxvY2tDb3VudCA9IDE7XG4gICAgICAgIGxhc3RCbG9ja0NvbXBsZXRlRmxhZyA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGFzdEJsb2NrQ29tcGxldGVGbGFnID0gKG1lc3NhZ2UubGVuZ3RoICUgYmxvY2tTaXplID09PSAwKTtcbiAgICB9XG4gICAgY29uc3QgbGFzdEJsb2NrSW5kZXggPSBibG9ja0NvdW50IC0gMTtcbiAgICBpZiAobGFzdEJsb2NrQ29tcGxldGVGbGFnKSB7XG4gICAgICAgIGxhc3RCbG9jayA9IHhvcihnZXRNZXNzYWdlQmxvY2sobWVzc2FnZSwgbGFzdEJsb2NrSW5kZXgpLCBzdWJrZXlzLnN1YmtleTEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGFzdEJsb2NrID0geG9yKGdldFBhZGRlZE1lc3NhZ2VCbG9jayhtZXNzYWdlLCBsYXN0QmxvY2tJbmRleCksIHN1YmtleXMuc3Via2V5Mik7XG4gICAgfVxuICAgIGxldCB4ID0gemVybztcbiAgICBsZXQgeTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGFzdEJsb2NrSW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgeSA9IHhvcih4LCBnZXRNZXNzYWdlQmxvY2sobWVzc2FnZSwgaW5kZXgpKTtcbiAgICAgICAgeCA9IGFlcyhrZXksIHkpO1xuICAgIH1cbiAgICB5ID0geG9yKGxhc3RCbG9jaywgeCk7XG4gICAgcmV0dXJuIGFlcyhrZXksIHkpO1xufVxuY2xhc3MgQWVzQ21hY1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNDbWFjUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGFsZ29yaXRobS5sZW5ndGgsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhZXNDbWFjKGdldENyeXB0b0tleShrZXkpLmRhdGEsIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5idWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlMiA9IGF3YWl0IHRoaXMuc2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSk7XG4gICAgICAgIHJldHVybiBCdWZmZXIkMS5mcm9tKHNpZ25hdHVyZSkuY29tcGFyZShCdWZmZXIkMS5mcm9tKHNpZ25hdHVyZTIpKSA9PT0gMDtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNDdHJQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzQ3RyUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGFsZ29yaXRobS5sZW5ndGgsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNHY21Qcm92aWRlciBleHRlbmRzIGNvcmUuQWVzR2NtUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGFsZ29yaXRobS5sZW5ndGgsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNLd1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNLd1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogYWxnb3JpdGhtLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzRWNiUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0VjYlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgRGVzQ3J5cHRvS2V5IGV4dGVuZHMgU3ltbWV0cmljS2V5IHtcbiAgICBnZXQgYWxnKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYERFUy1DQkNgO1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1FREUzLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgM0RFUy1DQkNgO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5BbGdvcml0aG1FcnJvcihcIlVuc3VwcG9ydGVkIGFsZ29yaXRobSBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCBhbGcodmFsdWUpIHtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwia1wiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxDb252ZXJ0ZXIgfSlcbl0sIERlc0NyeXB0b0tleS5wcm90b3R5cGUsIFwiZGF0YVwiLCB2b2lkIDApO1xuXG5jbGFzcyBEZXNDcnlwdG8ge1xuICAgIHN0YXRpYyBhc3luYyBnZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IERlc0NyeXB0b0tleSgpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAga2V5LmRhdGEgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoYWxnb3JpdGhtLmxlbmd0aCA+PiAzKTtcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShrZXkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBEZXNDcnlwdG9LZXkgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICAgICAga2V5ID0gbmV3IERlc0NyeXB0b0tleSgpO1xuICAgICAgICAgICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShrZXlEYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICAgICAga2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtRURFMy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBpZiAoIShrZXkgaW5zdGFuY2VvZiBEZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJrZXk6IElzIG5vdCBEZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHREZXNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1FREUzLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHREZXNFREUzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgZGVzLWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlciQxLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHREZXNDQkMoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihgZGVzLWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZGVjID0gQnVmZmVyJDEuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdERlc0VERTNDQkMoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGBkZXMtZWRlMy1jYmNgLCBrZXkuZGF0YSwgQnVmZmVyJDEuZnJvbShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlciQxLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHREZXNFREUzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGRlcy1lZGUzLWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZGVjID0gQnVmZmVyJDEuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbn1cblxuY2xhc3MgRGVzQ2JjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkRlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5rZXlTaXplQml0cyA9IDY0O1xuICAgICAgICB0aGlzLml2U2l6ZSA9IDg7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiREVTLUNCQ1wiO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmtleVNpemVCaXRzLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiB0aGlzLm5hbWUsIGxlbmd0aDogdGhpcy5rZXlTaXplQml0cyB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgaWYgKGtleS5kYXRhLmxlbmd0aCAhPT0gKHRoaXMua2V5U2l6ZUJpdHMgPj4gMykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogV3Jvbmcga2V5IHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIERlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIERlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgRGVzRWRlM0NiY1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5EZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMua2V5U2l6ZUJpdHMgPSAxOTI7XG4gICAgICAgIHRoaXMuaXZTaXplID0gODtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJERVMtRURFMy1DQkNcIjtcbiAgICB9XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRGVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogdGhpcy5rZXlTaXplQml0cyxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRGVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gRGVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRGVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogdGhpcy5uYW1lLCBsZW5ndGg6IHRoaXMua2V5U2l6ZUJpdHMgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIGlmIChrZXkuZGF0YS5sZW5ndGggIT09ICh0aGlzLmtleVNpemVCaXRzID4+IDMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImtleURhdGE6IFdyb25nIGtleSBzaXplXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBEZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBEZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldEp3a0FsZ29yaXRobShhbGdvcml0aG0pIHtcbiAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSBcIlJTQS1PQUVQXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IG1kU2l6ZSA9IC8oXFxkKykkLy5leGVjKGFsZ29yaXRobS5oYXNoLm5hbWUpWzFdO1xuICAgICAgICAgICAgcmV0dXJuIGBSU0EtT0FFUCR7bWRTaXplICE9PSBcIjFcIiA/IGAtJHttZFNpemV9YCA6IFwiXCJ9YDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiUlNBU1NBLVBLQ1MxLVYxXzVcIjpcbiAgICAgICAgICAgIHJldHVybiBgUlMkey8oXFxkKykkLy5leGVjKGFsZ29yaXRobS5oYXNoLm5hbWUpWzFdfWA7XG4gICAgICAgIGNhc2UgXCJSU0EtUFNTXCI6XG4gICAgICAgICAgICByZXR1cm4gYFBTJHsvKFxcZCspJC8uZXhlYyhhbGdvcml0aG0uaGFzaC5uYW1lKVsxXX1gO1xuICAgICAgICBjYXNlIFwiUlNBLVBLQ1MxXCI6XG4gICAgICAgICAgICByZXR1cm4gYFJTMWA7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQcml2YXRlS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHJpdmF0ZVwiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICByZXR1cm4gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLlJzYVByaXZhdGVLZXkpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiUlNBXCIsXG4gICAgICAgICAgICBhbGc6IGdldEp3a0FsZ29yaXRobSh0aGlzLmFsZ29yaXRobSksXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5Sc2FQcml2YXRlS2V5IH0pO1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IG51bGw7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHVibGljS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHVibGljXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnB1YmxpY0tleSwgY29yZS5hc24xLlJzYVB1YmxpY0tleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJSU0FcIixcbiAgICAgICAgICAgIGFsZzogZ2V0SndrQWxnb3JpdGhtKHRoaXMuYWxnb3JpdGhtKSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVB1YmxpY0tleSB9KTtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBudWxsO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBuZXcgUnNhUHJpdmF0ZUtleSgpO1xuICAgICAgICBwcml2YXRlS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHJpdmF0ZUtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBwcml2YXRlS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnByaXZhdGVLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IFJzYVB1YmxpY0tleSgpO1xuICAgICAgICBwdWJsaWNLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwdWJsaWNLZXkuZXh0cmFjdGFibGUgPSB0cnVlO1xuICAgICAgICBwdWJsaWNLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHVibGljS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0V4cG9uZW50ID0gQnVmZmVyJDEuY29uY2F0KFtcbiAgICAgICAgICAgIEJ1ZmZlciQxLmFsbG9jKDQgLSBhbGdvcml0aG0ucHVibGljRXhwb25lbnQuYnl0ZUxlbmd0aCwgMCksXG4gICAgICAgICAgICBCdWZmZXIkMS5mcm9tKGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCksXG4gICAgICAgIF0pLnJlYWRJbnQzMkJFKDApO1xuICAgICAgICBjb25zdCBrZXlzID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmMoXCJyc2FcIiwge1xuICAgICAgICAgICAgbW9kdWx1c0xlbmd0aDogYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgsXG4gICAgICAgICAgICBwdWJsaWNFeHBvbmVudCxcbiAgICAgICAgICAgIHB1YmxpY0tleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3BraVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByaXZhdGVLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcHJpdmF0ZUtleS5kYXRhID0ga2V5cy5wcml2YXRlS2V5O1xuICAgICAgICBwdWJsaWNLZXkuZGF0YSA9IGtleXMucHVibGljS2V5O1xuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGp3ayA9IGtleURhdGE7XG4gICAgICAgICAgICAgICAgaWYgKGp3ay5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5Sc2FQcml2YXRlS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5Sc2FQdWJsaWNLZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UobmV3IFVpbnQ4QXJyYXkoa2V5RGF0YSksIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wdWJsaWNLZXksIGNvcmUuYXNuMS5Sc2FQdWJsaWNLZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UobmV3IFVpbnQ4QXJyYXkoa2V5RGF0YSksIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLlJzYVByaXZhdGVLZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3BrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUlNBLVBTU1wiOlxuICAgICAgICAgICAgY2FzZSBcIlJTQVNTQS1QS0NTMS1WMV81XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnblJzYShhbGdvcml0aG0sIGtleSwgZGF0YSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgdmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUlNBLVBTU1wiOlxuICAgICAgICAgICAgY2FzZSBcIlJTQVNTQS1QS0NTMS1WMV81XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5U1NBKGFsZ29yaXRobSwga2V5LCBkYXRhLCBzaWduYXR1cmUpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUlNBLU9BRVBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0T0FFUChhbGdvcml0aG0sIGtleSwgZGF0YSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJSU0EtT0FFUFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRPQUVQKGFsZ29yaXRobSwga2V5LCBkYXRhKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBpbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gbnVsbDtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoYXNuS2V5KTtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IFJzYVByaXZhdGVLZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0ucHVibGljRXhwb25lbnQgPSBuZXcgVWludDhBcnJheShhc25LZXkucHVibGljRXhwb25lbnQpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPSBhc25LZXkubW9kdWx1cy5ieXRlTGVuZ3RoIDw8IDM7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gbnVsbDtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShhc25LZXkpO1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgUnNhUHVibGljS2V5KCk7XG4gICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50ID0gbmV3IFVpbnQ4QXJyYXkoYXNuS2V5LnB1YmxpY0V4cG9uZW50KTtcbiAgICAgICAga2V5LmFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoID0gYXNuS2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCA8PCAzO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGdldENyeXB0b0FsZ29yaXRobShhbGcpIHtcbiAgICAgICAgc3dpdGNoIChhbGcuaGFzaC5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEExXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEyNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTM4NFwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBNTEyXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBMy0yNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEzLTM4NFwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTMtNTEyXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtLmhhc2g6IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBzaWduUnNhKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IHRoaXMuZ2V0Q3J5cHRvQWxnb3JpdGhtKGtleS5hbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG8uY3JlYXRlU2lnbihjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSA9PT0gXCJSU0EtUFNTXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucGFkZGluZyA9IGNyeXB0by5jb25zdGFudHMuUlNBX1BLQ1MxX1BTU19QQURESU5HO1xuICAgICAgICAgICAgb3B0aW9ucy5zYWx0TGVuZ3RoID0gYWxnb3JpdGhtLnNhbHRMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmVyLnNpZ24ob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIHZlcmlmeVNTQShhbGdvcml0aG0sIGtleSwgZGF0YSwgc2lnbmF0dXJlKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IHRoaXMuZ2V0Q3J5cHRvQWxnb3JpdGhtKGtleS5hbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG8uY3JlYXRlVmVyaWZ5KGNyeXB0b0FsZyk7XG4gICAgICAgIHNpZ25lci51cGRhdGUoQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSA9PT0gXCJSU0EtUFNTXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucGFkZGluZyA9IGNyeXB0by5jb25zdGFudHMuUlNBX1BLQ1MxX1BTU19QQURESU5HO1xuICAgICAgICAgICAgb3B0aW9ucy5zYWx0TGVuZ3RoID0gYWxnb3JpdGhtLnNhbHRMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2sgPSBzaWduZXIudmVyaWZ5KG9wdGlvbnMsIHNpZ25hdHVyZSk7XG4gICAgICAgIHJldHVybiBvaztcbiAgICB9XG4gICAgc3RhdGljIGVuY3J5cHRPQUVQKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYCxcbiAgICAgICAgICAgIHBhZGRpbmc6IGNyeXB0by5jb25zdGFudHMuUlNBX1BLQ1MxX09BRVBfUEFERElORyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5sYWJlbCkgO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvLnB1YmxpY0VuY3J5cHQob3B0aW9ucywgZGF0YSkpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGRlY3J5cHRPQUVQKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGAtLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1gLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfT0FFUF9QQURESU5HLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmxhYmVsKSA7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShjcnlwdG8ucHJpdmF0ZURlY3J5cHQob3B0aW9ucywgZGF0YSkpLmJ1ZmZlcjtcbiAgICB9XG59XG5Sc2FDcnlwdG8ucHVibGljS2V5VXNhZ2VzID0gW1widmVyaWZ5XCIsIFwiZW5jcnlwdFwiLCBcIndyYXBLZXlcIl07XG5Sc2FDcnlwdG8ucHJpdmF0ZUtleVVzYWdlcyA9IFtcInNpZ25cIiwgXCJkZWNyeXB0XCIsIFwidW53cmFwS2V5XCJdO1xuXG5jbGFzcyBSc2FTc2FQcm92aWRlciBleHRlbmRzIGNvcmUuUnNhU3NhUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1xuICAgICAgICAgICAgXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiLFxuICAgICAgICAgICAgXCJzaGFrZTEyOFwiLCBcInNoYWtlMjU2XCIsXG4gICAgICAgICAgICBcIlNIQTMtMjU2XCIsIFwiU0hBMy0zODRcIiwgXCJTSEEzLTUxMlwiXG4gICAgICAgIF07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5zaWduKGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgUnNhUHNzUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlJzYVBzc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtcyA9IFtcbiAgICAgICAgICAgIFwiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIixcbiAgICAgICAgICAgIFwic2hha2UxMjhcIiwgXCJzaGFrZTI1NlwiLFxuICAgICAgICAgICAgXCJTSEEzLTI1NlwiLCBcIlNIQTMtMzg0XCIsIFwiU0hBMy01MTJcIlxuICAgICAgICBdO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgUnNhQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uc2lnbihhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by52ZXJpZnkoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgUnNhQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQcml2YXRlS2V5IHx8IGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHVibGljS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IFJTQSBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFNoYUNyeXB0byB7XG4gICAgc3RhdGljIHNpemUoYWxnb3JpdGhtKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0xXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE2MDtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMjU2XCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMjU2O1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0zODRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAzODQ7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTUxMlwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQTMtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDUxMjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0xXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMVwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEyNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMzg0XCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTUxMlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMjU2XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMy0yNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTMtMzg0XCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEzLTUxMlwiO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgZGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICBjb25zdCBoYXNoQWxnID0gdGhpcy5nZXRBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChoYXNoQWxnKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhhc2gpLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNsYXNzIFJzYU9hZXBQcm92aWRlciBleHRlbmRzIGNvcmUuUnNhT2FlcFByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgUnNhQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG4gICAgICAgIGNvbnN0IGtleVNpemUgPSBNYXRoLmNlaWwoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPj4gMyk7XG4gICAgICAgIGNvbnN0IGhhc2hTaXplID0gU2hhQ3J5cHRvLnNpemUoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gpID4+IDM7XG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBkYXRhVmlldy5ieXRlTGVuZ3RoO1xuICAgICAgICBjb25zdCBwc0xlbmd0aCA9IGtleVNpemUgLSBkYXRhTGVuZ3RoIC0gMiAqIGhhc2hTaXplIC0gMjtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPiBrZXlTaXplIC0gMiAqIGhhc2hTaXplIC0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YSB0b28gbGFyZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG5ldyBVaW50OEFycmF5KGtleVNpemUpO1xuICAgICAgICBjb25zdCBzZWVkID0gbWVzc2FnZS5zdWJhcnJheSgxLCBoYXNoU2l6ZSArIDEpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2sgPSBtZXNzYWdlLnN1YmFycmF5KGhhc2hTaXplICsgMSk7XG4gICAgICAgIGRhdGFCbG9jay5zZXQoZGF0YVZpZXcsIGhhc2hTaXplICsgcHNMZW5ndGggKyAxKTtcbiAgICAgICAgY29uc3QgbGFiZWxIYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKSlcbiAgICAgICAgICAgIC51cGRhdGUoY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGFsZ29yaXRobS5sYWJlbCB8fCBuZXcgVWludDhBcnJheSgwKSkpXG4gICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgIGRhdGFCbG9jay5zZXQobGFiZWxIYXNoLCAwKTtcbiAgICAgICAgZGF0YUJsb2NrW2hhc2hTaXplICsgcHNMZW5ndGhdID0gMTtcbiAgICAgICAgY3J5cHRvLnJhbmRvbUZpbGxTeW5jKHNlZWQpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2tNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBzZWVkLCBkYXRhQmxvY2subGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQmxvY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFCbG9ja1tpXSBePSBkYXRhQmxvY2tNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlZWRNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBkYXRhQmxvY2ssIHNlZWQubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzZWVkW2ldIF49IHNlZWRNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW50ZXJuYWxLZXkucGVtKSB7XG4gICAgICAgICAgICBpbnRlcm5hbEtleS5wZW0gPSBgLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG4ke2ludGVybmFsS2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwa2NzMCA9IGNyeXB0by5wdWJsaWNFbmNyeXB0KHtcbiAgICAgICAgICAgIGtleTogaW50ZXJuYWxLZXkucGVtLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfTk9fUEFERElORyxcbiAgICAgICAgfSwgQnVmZmVyJDEuZnJvbShtZXNzYWdlKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShwa2NzMCkuYnVmZmVyO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3Qga2V5U2l6ZSA9IE1hdGguY2VpbChpbnRlcm5hbEtleS5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA+PiAzKTtcbiAgICAgICAgY29uc3QgaGFzaFNpemUgPSBTaGFDcnlwdG8uc2l6ZShpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaCkgPj4gMztcbiAgICAgICAgY29uc3QgZGF0YUxlbmd0aCA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggIT09IGtleVNpemUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhZCBkYXRhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW50ZXJuYWxLZXkucGVtKSB7XG4gICAgICAgICAgICBpbnRlcm5hbEtleS5wZW0gPSBgLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXFxuJHtpbnRlcm5hbEtleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwa2NzMCA9IGNyeXB0by5wcml2YXRlRGVjcnlwdCh7XG4gICAgICAgICAgICBrZXk6IGludGVybmFsS2V5LnBlbSxcbiAgICAgICAgICAgIHBhZGRpbmc6IGNyeXB0by5jb25zdGFudHMuUlNBX05PX1BBRERJTkcsXG4gICAgICAgIH0sIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICBjb25zdCB6ID0gcGtjczBbMF07XG4gICAgICAgIGNvbnN0IHNlZWQgPSBwa2NzMC5zdWJhcnJheSgxLCBoYXNoU2l6ZSArIDEpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2sgPSBwa2NzMC5zdWJhcnJheShoYXNoU2l6ZSArIDEpO1xuICAgICAgICBpZiAoeiAhPT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVjcnlwdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VlZE1hc2sgPSB0aGlzLm1nZjEoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gsIGRhdGFCbG9jaywgc2VlZC5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHNlZWRbaV0gXj0gc2VlZE1hc2tbaV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YUJsb2NrTWFzayA9IHRoaXMubWdmMShpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaCwgc2VlZCwgZGF0YUJsb2NrLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YUJsb2NrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkYXRhQmxvY2tbaV0gXj0gZGF0YUJsb2NrTWFza1tpXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYWJlbEhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaC5uYW1lLnJlcGxhY2UoXCItXCIsIFwiXCIpKVxuICAgICAgICAgICAgLnVwZGF0ZShjb3JlLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYWxnb3JpdGhtLmxhYmVsIHx8IG5ldyBVaW50OEFycmF5KDApKSlcbiAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYXNoU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobGFiZWxIYXNoW2ldICE9PSBkYXRhQmxvY2tbaV0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyeXB0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcHNFbmQgPSBoYXNoU2l6ZTtcbiAgICAgICAgZm9yICg7IHBzRW5kIDwgZGF0YUJsb2NrLmxlbmd0aDsgcHNFbmQrKykge1xuICAgICAgICAgICAgY29uc3QgcHN6ID0gZGF0YUJsb2NrW3BzRW5kXTtcbiAgICAgICAgICAgIGlmIChwc3ogPT09IDEpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwc3ogIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyeXB0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHNFbmQgPT09IGRhdGFCbG9jay5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3J5cHRpb24gZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHBrY3MwID0gZGF0YUJsb2NrLnN1YmFycmF5KHBzRW5kICsgMSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShwa2NzMCkuYnVmZmVyO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgUnNhQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQcml2YXRlS2V5IHx8IGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHVibGljS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IFJTQSBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWdmMShhbGdvcml0aG0sIHNlZWQsIGxlbmd0aCA9IDApIHtcbiAgICAgICAgY29uc3QgaGFzaFNpemUgPSBTaGFDcnlwdG8uc2l6ZShhbGdvcml0aG0pID4+IDM7XG4gICAgICAgIGNvbnN0IG1hc2sgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgICAgICBjb25zdCBjb3VudGVyID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG4gICAgICAgIGNvbnN0IGNodW5rcyA9IE1hdGguY2VpbChsZW5ndGggLyBoYXNoU2l6ZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2h1bmtzOyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXJbMF0gPSBpID4+PiAyNDtcbiAgICAgICAgICAgIGNvdW50ZXJbMV0gPSAoaSA+Pj4gMTYpICYgMjU1O1xuICAgICAgICAgICAgY291bnRlclsyXSA9IChpID4+PiA4KSAmIDI1NTtcbiAgICAgICAgICAgIGNvdW50ZXJbM10gPSBpICYgMjU1O1xuICAgICAgICAgICAgY29uc3Qgc3VibWFzayA9IG1hc2suc3ViYXJyYXkoaSAqIGhhc2hTaXplKTtcbiAgICAgICAgICAgIGxldCBjaHVuayA9IGNyeXB0by5jcmVhdGVIYXNoKGFsZ29yaXRobS5uYW1lLnJlcGxhY2UoXCItXCIsIFwiXCIpKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoc2VlZClcbiAgICAgICAgICAgICAgICAudXBkYXRlKGNvdW50ZXIpXG4gICAgICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICAgICAgICAgICAgaWYgKGNodW5rLmxlbmd0aCA+IHN1Ym1hc2subGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2h1bmsgPSBjaHVuay5zdWJhcnJheSgwLCBzdWJtYXNrLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJtYXNrLnNldChjaHVuayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hc2s7XG4gICAgfVxufVxuXG5jbGFzcyBSc2FFc1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUlNBRVMtUEtDUzEtdjFfNVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1wiZW5jcnlwdFwiLCBcIndyYXBLZXlcIl0sXG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJkZWNyeXB0XCIsIFwidW53cmFwS2V5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgUnNhQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInB1YmxpY0V4cG9uZW50XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0ucHVibGljRXhwb25lbnQgJiYgYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50IGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWNFeHBvbmVudDogTWlzc2luZyBvciBub3QgYSBVaW50OEFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB1YmxpY0V4cG9uZW50ID0gQ29udmVydC5Ub0Jhc2U2NChhbGdvcml0aG0ucHVibGljRXhwb25lbnQpO1xuICAgICAgICBpZiAoIShwdWJsaWNFeHBvbmVudCA9PT0gXCJBdz09XCIgfHwgcHVibGljRXhwb25lbnQgPT09IFwiQVFBQlwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInB1YmxpY0V4cG9uZW50OiBNdXN0IGJlIFszXSBvciBbMSwwLDFdXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJtb2R1bHVzTGVuZ3RoXCIpO1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDEwMjQ6XG4gICAgICAgICAgICBjYXNlIDIwNDg6XG4gICAgICAgICAgICBjYXNlIDQwOTY6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJtb2R1bHVzTGVuZ3RoOiBNdXN0IGJlIDEwMjQsIDIwNDgsIG9yIDQwOTZcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnRvQ3J5cHRvT3B0aW9ucyhrZXkpO1xuICAgICAgICBjb25zdCBlbmMgPSBjcnlwdG8ucHVibGljRW5jcnlwdChvcHRpb25zLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnRvQ3J5cHRvT3B0aW9ucyhrZXkpO1xuICAgICAgICBjb25zdCBkZWMgPSBjcnlwdG8ucHJpdmF0ZURlY3J5cHQob3B0aW9ucywgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0NyeXB0b09wdGlvbnMoa2V5KSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBrZXkudHlwZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiBgLS0tLS1CRUdJTiAke3R5cGV9IEtFWS0tLS0tXFxuJHtnZXRDcnlwdG9LZXkoa2V5KS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EICR7dHlwZX0gS0VZLS0tLS1gLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfUEFERElORyxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmNvbnN0IG5hbWVkT0lEcyA9IHtcbiAgICBcIjEuMi44NDAuMTAwNDUuMy4xLjdcIjogXCJQLTI1NlwiLFxuICAgIFwiUC0yNTZcIjogXCIxLjIuODQwLjEwMDQ1LjMuMS43XCIsXG4gICAgXCIxLjMuMTMyLjAuMzRcIjogXCJQLTM4NFwiLFxuICAgIFwiUC0zODRcIjogXCIxLjMuMTMyLjAuMzRcIixcbiAgICBcIjEuMy4xMzIuMC4zNVwiOiBcIlAtNTIxXCIsXG4gICAgXCJQLTUyMVwiOiBcIjEuMy4xMzIuMC4zNVwiLFxuICAgIFwiMS4zLjEzMi4wLjEwXCI6IFwiSy0yNTZcIixcbiAgICBcIkstMjU2XCI6IFwiMS4zLjEzMi4wLjEwXCIsXG4gICAgXCJicmFpbnBvb2xQMTYwcjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMVwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjFcIjogXCJicmFpbnBvb2xQMTYwcjFcIixcbiAgICBcImJyYWlucG9vbFAxNjB0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4yXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMlwiOiBcImJyYWlucG9vbFAxNjB0MVwiLFxuICAgIFwiYnJhaW5wb29sUDE5MnIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjNcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4zXCI6IFwiYnJhaW5wb29sUDE5MnIxXCIsXG4gICAgXCJicmFpbnBvb2xQMTkydDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuNFwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjRcIjogXCJicmFpbnBvb2xQMTkydDFcIixcbiAgICBcImJyYWlucG9vbFAyMjRyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS41XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuNVwiOiBcImJyYWlucG9vbFAyMjRyMVwiLFxuICAgIFwiYnJhaW5wb29sUDIyNHQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjZcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS42XCI6IFwiYnJhaW5wb29sUDIyNHQxXCIsXG4gICAgXCJicmFpbnBvb2xQMjU2cjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuN1wiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjdcIjogXCJicmFpbnBvb2xQMjU2cjFcIixcbiAgICBcImJyYWlucG9vbFAyNTZ0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS44XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuOFwiOiBcImJyYWlucG9vbFAyNTZ0MVwiLFxuICAgIFwiYnJhaW5wb29sUDMyMHIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjlcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS45XCI6IFwiYnJhaW5wb29sUDMyMHIxXCIsXG4gICAgXCJicmFpbnBvb2xQMzIwdDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTBcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMFwiOiBcImJyYWlucG9vbFAzMjB0MVwiLFxuICAgIFwiYnJhaW5wb29sUDM4NHIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjExXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTFcIjogXCJicmFpbnBvb2xQMzg0cjFcIixcbiAgICBcImJyYWlucG9vbFAzODR0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMlwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjEyXCI6IFwiYnJhaW5wb29sUDM4NHQxXCIsXG4gICAgXCJicmFpbnBvb2xQNTEycjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTNcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xM1wiOiBcImJyYWlucG9vbFA1MTJyMVwiLFxuICAgIFwiYnJhaW5wb29sUDUxMnQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjE0XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTRcIjogXCJicmFpbnBvb2xQNTEydDFcIixcbn07XG5mdW5jdGlvbiBnZXRPaWRCeU5hbWVkQ3VydmUkMShuYW1lZEN1cnZlKSB7XG4gICAgY29uc3Qgb2lkID0gbmFtZWRPSURzW25hbWVkQ3VydmVdO1xuICAgIGlmICghb2lkKSB7XG4gICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgY29udmVydCBXZWJDcnlwdG8gbmFtZWQgY3VydmUgJyR7bmFtZWRDdXJ2ZX0nIHRvIE9JRGApO1xuICAgIH1cbiAgICByZXR1cm4gb2lkO1xufVxuXG5jbGFzcyBFY1ByaXZhdGVLZXkgZXh0ZW5kcyBBc3ltbWV0cmljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwcml2YXRlXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuRWNQcml2YXRlS2V5KTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIkVDXCIsXG4gICAgICAgICAgICBjcnY6IHRoaXMuYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5jcnYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgZ2V0IG5hbWVkIGN1cnZlIGZyb20gSldLLiBQcm9wZXJ0eSAnY3J2JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUobmV3IGNvcmUuYXNuMS5PYmplY3RJZGVudGlmaWVyKGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKGpzb24uY3J2KSkpO1xuICAgICAgICBjb25zdCBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGpzb24sIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuRWNQcml2YXRlS2V5IH0pO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXkgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXkpO1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBFY1B1YmxpY0tleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBuZXcgY29yZS5hc24xLkVjUHVibGljS2V5KGtleUluZm8ucHVibGljS2V5KTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIkVDXCIsXG4gICAgICAgICAgICBjcnY6IHRoaXMuYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5jcnYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgZ2V0IG5hbWVkIGN1cnZlIGZyb20gSldLLiBQcm9wZXJ0eSAnY3J2JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1B1YmxpY0tleSB9KTtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIoZ2V0T2lkQnlOYW1lZEN1cnZlJDEoanNvbi5jcnYpKSk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5ID0gQXNuU2VyaWFsaXplci50b0FTTihrZXkpLnZhbHVlSGV4O1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBTaGExUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEtMVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTI1NlByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBLTI1NlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTM4NFByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBLTM4NFwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTUxMlByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBLTUxMlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTMyNTZQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQTMtMjU2XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMzM4NFByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBMy0zODRcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEzNTEyUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEzLTUxMlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIEVjQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBuZXcgRWNQcml2YXRlS2V5KCk7XG4gICAgICAgIHByaXZhdGVLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwcml2YXRlS2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIHByaXZhdGVLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHJpdmF0ZUtleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgRWNQdWJsaWNLZXkoKTtcbiAgICAgICAgcHVibGljS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHVibGljS2V5LmV4dHJhY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgcHVibGljS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnB1YmxpY0tleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBrZXlzID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmMoXCJlY1wiLCB7XG4gICAgICAgICAgICBuYW1lZEN1cnZlOiB0aGlzLmdldE9wZW5TU0xOYW1lZEN1cnZlKGFsZ29yaXRobS5uYW1lZEN1cnZlKSxcbiAgICAgICAgICAgIHB1YmxpY0tleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3BraVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByaXZhdGVLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcHJpdmF0ZUtleS5kYXRhID0ga2V5cy5wcml2YXRlS2V5O1xuICAgICAgICBwdWJsaWNLZXkuZGF0YSA9IGtleXMucHVibGljS2V5O1xuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgc2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShhbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IHNpZ25lciA9IGNyeXB0by5jcmVhdGVTaWduKGNyeXB0b0FsZyk7XG4gICAgICAgIHNpZ25lci51cGRhdGUoQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25lci5zaWduKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZSA9IEFzblBhcnNlci5wYXJzZShzaWduYXR1cmUsIGNvcmUuYXNuMS5FY0RzYVNpZ25hdHVyZSk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZVJhdyA9IGNvcmUuRWNVdGlscy5lbmNvZGVTaWduYXR1cmUoZWNTaWduYXR1cmUsIGNvcmUuRWNDdXJ2ZXMuZ2V0KGtleS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSkuc2l6ZSk7XG4gICAgICAgIHJldHVybiBzaWduYXR1cmVSYXcuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgdmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gU2hhQ3J5cHRvLmdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG8uY3JlYXRlVmVyaWZ5KGNyeXB0b0FsZyk7XG4gICAgICAgIHNpZ25lci51cGRhdGUoQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZSA9IG5ldyBjb3JlLmFzbjEuRWNEc2FTaWduYXR1cmUoKTtcbiAgICAgICAgY29uc3QgbmFtZWRDdXJ2ZSA9IGNvcmUuRWNDdXJ2ZXMuZ2V0KGtleS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZVBvaW50ID0gY29yZS5FY1V0aWxzLmRlY29kZVNpZ25hdHVyZShzaWduYXR1cmUsIG5hbWVkQ3VydmUuc2l6ZSk7XG4gICAgICAgIGVjU2lnbmF0dXJlLnIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmVQb2ludC5yKTtcbiAgICAgICAgZWNTaWduYXR1cmUucyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZVBvaW50LnMpO1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZVJhdyA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoZWNTaWduYXR1cmUpKTtcbiAgICAgICAgY29uc3Qgb2sgPSBzaWduZXIudmVyaWZ5KG9wdGlvbnMsIGVjU2lnbmF0dXJlUmF3KTtcbiAgICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSB0aGlzLmdldE9wZW5TU0xOYW1lZEN1cnZlKGJhc2VLZXkuYWxnb3JpdGhtLm5hbWVkQ3VydmUpO1xuICAgICAgICBjb25zdCBlY2RoID0gY3J5cHRvLmNyZWF0ZUVDREgoY3J5cHRvQWxnKTtcbiAgICAgICAgY29uc3QgYXNuUHJpdmF0ZUtleSA9IEFzblBhcnNlci5wYXJzZShiYXNlS2V5LmRhdGEsIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgIGNvbnN0IGFzbkVjUHJpdmF0ZUtleSA9IEFzblBhcnNlci5wYXJzZShhc25Qcml2YXRlS2V5LnByaXZhdGVLZXksIGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkpO1xuICAgICAgICBlY2RoLnNldFByaXZhdGVLZXkoQnVmZmVyJDEuZnJvbShhc25FY1ByaXZhdGVLZXkucHJpdmF0ZUtleSkpO1xuICAgICAgICBjb25zdCBhc25QdWJsaWNLZXkgPSBBc25QYXJzZXIucGFyc2UoYWxnb3JpdGhtLnB1YmxpYy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBlY2RoLmNvbXB1dGVTZWNyZXQoQnVmZmVyJDEuZnJvbShhc25QdWJsaWNLZXkucHVibGljS2V5KSk7XG4gICAgICAgIGlmIChsZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiaXRzKS5idWZmZXIuc2xpY2UoMCwgbGVuZ3RoID4+IDMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWJsaWNLZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKGtleS5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1YmxpY0tleUluZm8ucHVibGljS2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsIHBrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuRWNQcml2YXRlS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1B1YmxpY0tleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBuZXcgY29yZS5hc24xLkVjUHVibGljS2V5KGtleURhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IG5ldyBjb3JlLmFzbjEuRWNQdWJsaWNLZXkoa2V5SW5mby5wdWJsaWNLZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0S2V5UGFyYW1ldGVycyhrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzLCBhbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuRWNQcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydEtleVBhcmFtZXRlcnMoa2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMsIGFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCAncGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXNzZXJ0S2V5UGFyYW1ldGVycyhwYXJhbWV0ZXJzLCBuYW1lZEN1cnZlKSB7XG4gICAgICAgIGlmICghcGFyYW1ldGVycykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQ3J5cHRvRXJyb3IoXCJLZXkgaW5mbyBkb2Vzbid0IGhhdmUgcmVxdWlyZWQgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmFtZWRDdXJ2ZUlkZW50aWZpZXIgPSBcIlwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmFtZWRDdXJ2ZUlkZW50aWZpZXIgPSBBc25QYXJzZXIucGFyc2UocGFyYW1ldGVycywgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5DcnlwdG9FcnJvcihcIkNhbm5vdCByZWFkIGtleSBpbmZvIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKG5hbWVkQ3VydmUpICE9PSBuYW1lZEN1cnZlSWRlbnRpZmllcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQ3J5cHRvRXJyb3IoXCJLZXkgaW5mbyBwYXJhbWV0ZXIgZG9lc24ndCBtYXRjaCB0byBuYW1lZCBjdXJ2ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjEwMDQ1LjIuMVwiO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG5ldyBjb3JlLmFzbjEuT2JqZWN0SWRlbnRpZmllcihnZXRPaWRCeU5hbWVkQ3VydmUkMShhbGdvcml0aG0ubmFtZWRDdXJ2ZSkpKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoYXNuS2V5KTtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEVjUHJpdmF0ZUtleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG4gICAgICAgIGNvbnN0IG5hbWVkQ3VydmUgPSBnZXRPaWRCeU5hbWVkQ3VydmUkMShhbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIobmFtZWRDdXJ2ZSkpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IGFzbktleS52YWx1ZTtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEVjUHVibGljS2V5KCk7XG4gICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGdldE9wZW5TU0xOYW1lZEN1cnZlKGN1cnZlKSB7XG4gICAgICAgIHN3aXRjaCAoY3VydmUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlAtMjU2XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwicHJpbWUyNTZ2MVwiO1xuICAgICAgICAgICAgY2FzZSBcIkstMjU2XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2VjcDI1NmsxXCI7XG4gICAgICAgICAgICBjYXNlIFwiUC0zODRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzZWNwMzg0cjFcIjtcbiAgICAgICAgICAgIGNhc2UgXCJQLTUyMVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNlY3A1MjFyMVwiO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VydmU7XG4gICAgICAgIH1cbiAgICB9XG59XG5FY0NyeXB0by5wdWJsaWNLZXlVc2FnZXMgPSBbXCJ2ZXJpZnlcIl07XG5FY0NyeXB0by5wcml2YXRlS2V5VXNhZ2VzID0gW1wic2lnblwiLCBcImRlcml2ZUtleVwiLCBcImRlcml2ZUJpdHNcIl07XG5cbmNsYXNzIEVjZHNhUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkVjZHNhUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gY29yZS5FY0N1cnZlcy5uYW1lcztcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtcyA9IFtcbiAgICAgICAgICAgIFwiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIixcbiAgICAgICAgICAgIFwic2hha2UxMjhcIiwgXCJzaGFrZTI1NlwiLFxuICAgICAgICAgICAgXCJTSEEzLTI1NlwiLCBcIlNIQTMtMzg0XCIsIFwiU0hBMy01MTJcIlxuICAgICAgICBdO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEVjQ3J5cHRvLnNpZ24oYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBFY0NyeXB0by52ZXJpZnkoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gRWNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBFY0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgRWNQcml2YXRlS2V5IHx8IGludGVybmFsS2V5IGluc3RhbmNlb2YgRWNQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgRUMgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBFY2RoUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkVjZGhQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBjb3JlLkVjQ3VydmVzLm5hbWVzO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gRWNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBFY0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgRWNQcml2YXRlS2V5IHx8IGludGVybmFsS2V5IGluc3RhbmNlb2YgRWNQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgRUMgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBiaXRzID0gYXdhaXQgRWNDcnlwdG8uZGVyaXZlQml0cyh7IC4uLmFsZ29yaXRobSwgcHVibGljOiBnZXRDcnlwdG9LZXkoYWxnb3JpdGhtLnB1YmxpYykgfSwgZ2V0Q3J5cHRvS2V5KGJhc2VLZXkpLCBsZW5ndGgpO1xuICAgICAgICByZXR1cm4gYml0cztcbiAgICB9XG59XG5cbmNvbnN0IGVkT0lEcyA9IHtcbiAgICBbY29yZS5hc24xLmlkRWQ0NDhdOiBcIkVkNDQ4XCIsXG4gICAgXCJlZDQ0OFwiOiBjb3JlLmFzbjEuaWRFZDQ0OCxcbiAgICBbY29yZS5hc24xLmlkWDQ0OF06IFwiWDQ0OFwiLFxuICAgIFwieDQ0OFwiOiBjb3JlLmFzbjEuaWRYNDQ4LFxuICAgIFtjb3JlLmFzbjEuaWRFZDI1NTE5XTogXCJFZDI1NTE5XCIsXG4gICAgXCJlZDI1NTE5XCI6IGNvcmUuYXNuMS5pZEVkMjU1MTksXG4gICAgW2NvcmUuYXNuMS5pZFgyNTUxOV06IFwiWDI1NTE5XCIsXG4gICAgXCJ4MjU1MTlcIjogY29yZS5hc24xLmlkWDI1NTE5LFxufTtcbmZ1bmN0aW9uIGdldE9pZEJ5TmFtZWRDdXJ2ZShuYW1lZEN1cnZlKSB7XG4gICAgY29uc3Qgb2lkID0gZWRPSURzW25hbWVkQ3VydmUudG9Mb3dlckNhc2UoKV07XG4gICAgaWYgKCFvaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBjb252ZXJ0IFdlYkNyeXB0byBuYW1lZCBjdXJ2ZSAnJHtuYW1lZEN1cnZlfScgdG8gT0lEYCk7XG4gICAgfVxuICAgIHJldHVybiBvaWQ7XG59XG5cbmNsYXNzIEVkUHJpdmF0ZUtleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInByaXZhdGVcIjtcbiAgICB9XG4gICAgZ2V0S2V5KCkge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKHRoaXMuZGF0YSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiT0tQXCIsXG4gICAgICAgICAgICBjcnY6IHRoaXMuYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5jcnYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgZ2V0IG5hbWVkIGN1cnZlIGZyb20gSldLLiBQcm9wZXJ0eSAnY3J2JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBnZXRPaWRCeU5hbWVkQ3VydmUoanNvbi5jcnYpO1xuICAgICAgICBjb25zdCBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGpzb24sIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuQ3VydmVQcml2YXRlS2V5IH0pO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXkgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXkpO1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBFZFB1YmxpY0tleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBrZXlJbmZvLnB1YmxpY0tleTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIk9LUFwiLFxuICAgICAgICAgICAgY3J2OiB0aGlzLmFsZ29yaXRobS5uYW1lZEN1cnZlLFxuICAgICAgICAgICAga2V5X29wczogdGhpcy51c2FnZXMsXG4gICAgICAgICAgICBleHQ6IHRoaXMuZXh0cmFjdGFibGUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGpzb24sIHtcbiAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwoa2V5KVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIWpzb24uY3J2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGdldCBuYW1lZCBjdXJ2ZSBmcm9tIEpXSy4gUHJvcGVydHkgJ2NydicgaXMgcmVxdWlyZWRgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWpzb24ueCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgcHJvcGVydHkgZnJvbSBKV0suIFByb3BlcnR5ICd4JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gZ2V0T2lkQnlOYW1lZEN1cnZlKGpzb24uY3J2KTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi54KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuY2xhc3MgRWRDcnlwdG8ge1xuICAgIHN0YXRpYyBhc3luYyBnZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IG5ldyBFZFByaXZhdGVLZXkoKTtcbiAgICAgICAgcHJpdmF0ZUtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHByaXZhdGVLZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAgcHJpdmF0ZUtleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wcml2YXRlS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBFZFB1YmxpY0tleSgpO1xuICAgICAgICBwdWJsaWNLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwdWJsaWNLZXkuZXh0cmFjdGFibGUgPSB0cnVlO1xuICAgICAgICBwdWJsaWNLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHVibGljS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhbGdvcml0aG0ubmFtZWRDdXJ2ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBrZXlzID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmModHlwZSwge1xuICAgICAgICAgICAgcHVibGljS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJpdmF0ZUtleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwicGtjczhcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBwcml2YXRlS2V5LmRhdGEgPSBrZXlzLnByaXZhdGVLZXk7XG4gICAgICAgIHB1YmxpY0tleS5kYXRhID0ga2V5cy5wdWJsaWNLZXk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXksXG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBzaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5zaWduKG51bGwsIEJ1ZmZlciQxLmZyb20oZGF0YSksIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmUpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgdmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9rID0gY3J5cHRvLnZlcmlmeShudWxsLCBCdWZmZXIkMS5mcm9tKGRhdGEpLCBvcHRpb25zLCBCdWZmZXIkMS5mcm9tKHNpZ25hdHVyZSkpO1xuICAgICAgICByZXR1cm4gb2s7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoe1xuICAgICAgICAgICAga2V5OiBhbGdvcml0aG0ucHVibGljLmRhdGEsXG4gICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBjcnlwdG8uY3JlYXRlUHJpdmF0ZUtleSh7XG4gICAgICAgICAgICBrZXk6IGJhc2VLZXkuZGF0YSxcbiAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgIHR5cGU6IFwicGtjczhcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBjcnlwdG8uZGlmZmllSGVsbG1hbih7XG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJpdHMpLmJ1ZmZlci5zbGljZSgwLCBsZW5ndGggPj4gMyk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBleHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KTtcbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOlxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoa2V5LmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHB1YmxpY0tleUluZm8gPSBBc25QYXJzZXIucGFyc2Uoa2V5LmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVibGljS2V5SW5mby5wdWJsaWNLZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncmF3JywgcGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGp3ayA9IGtleURhdGE7XG4gICAgICAgICAgICAgICAgaWYgKGp3ay5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFqd2sueCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleURhdGE6IENhbm5vdCBnZXQgcmVxdWlyZWQgJ3gnIGZpbGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShDb252ZXJ0LkZyb21CYXNlNjRVcmwoandrLngpLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjoge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UobmV3IFVpbnQ4QXJyYXkoa2V5RGF0YSksIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoa2V5SW5mby5wdWJsaWNLZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UobmV3IFVpbnQ4QXJyYXkoa2V5RGF0YSksIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLkN1cnZlUHJpdmF0ZUtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncmF3JywgJ3BrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEVkUHJpdmF0ZUtleSgpO1xuICAgICAgICBrZXkuZnJvbUpTT04oe1xuICAgICAgICAgICAgY3J2OiBhbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGQ6IENvbnZlcnQuVG9CYXNlNjRVcmwoYXNuS2V5LmQpLFxuICAgICAgICB9KTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBFZFB1YmxpY0tleSgpO1xuICAgICAgICBrZXkuZnJvbUpTT04oe1xuICAgICAgICAgICAgY3J2OiBhbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwoYXNuS2V5KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG59XG5FZENyeXB0by5wdWJsaWNLZXlVc2FnZXMgPSBbXCJ2ZXJpZnlcIl07XG5FZENyeXB0by5wcml2YXRlS2V5VXNhZ2VzID0gW1wic2lnblwiLCBcImRlcml2ZUtleVwiLCBcImRlcml2ZUJpdHNcIl07XG5cbmNsYXNzIEVkRHNhUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkVkRHNhUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFZENyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBuYW1lZEN1cnZlOiBhbGdvcml0aG0ubmFtZWRDdXJ2ZS5yZXBsYWNlKC9eZWQvaSwgXCJFZFwiKSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBFZENyeXB0by5zaWduKGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRWRDcnlwdG8udmVyaWZ5KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEVkQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRWRDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbn1cblxuY2xhc3MgRWNkaEVzUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkVjZGhFc1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWRDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbmFtZWRDdXJ2ZTogYWxnb3JpdGhtLm5hbWVkQ3VydmUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBhd2FpdCBFZENyeXB0by5kZXJpdmVCaXRzKHsgLi4uYWxnb3JpdGhtLCBwdWJsaWM6IGdldENyeXB0b0tleShhbGdvcml0aG0ucHVibGljKSB9LCBnZXRDcnlwdG9LZXkoYmFzZUtleSksIGxlbmd0aCk7XG4gICAgICAgIHJldHVybiBiaXRzO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gRWRDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBFZENyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxufVxuXG5jbGFzcyBFZDI1NTE5Q3J5cHRvS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbiAgICBjb25zdHJ1Y3RvcihhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCB1c2FnZXMsIGRhdGEpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHRoaXMuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB1c2FnZXM7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEpO1xuICAgIH1cbiAgICB0b0pXSygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGt0eTogXCJPS1BcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY2xhc3MgRWQyNTUxOVByaXZhdGVLZXkgZXh0ZW5kcyBFZDI1NTE5Q3J5cHRvS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwcml2YXRlXCI7XG4gICAgfVxuICAgIHRvSldLKCkge1xuICAgICAgICBjb25zdCBwdWJKd2sgPSBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgIGtleTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgZm9ybWF0OiBcInBlbVwiLFxuICAgICAgICB9KS5leHBvcnQoeyBmb3JtYXQ6IFwiandrXCIgfSk7XG4gICAgICAgIGNvbnN0IHJhdyA9IGNvcmUuUGVtQ29udmVydGVyLnRvVWludDhBcnJheSh0aGlzLmRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IHBrY3M4ID0gQXNuQ29udmVydC5wYXJzZShyYXcsIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgIGNvbnN0IGQgPSBBc25Db252ZXJ0LnBhcnNlKHBrY3M4LnByaXZhdGVLZXksIGNvcmUuYXNuMS5FZFByaXZhdGVLZXkpLnZhbHVlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3VwZXIudG9KV0soKSxcbiAgICAgICAgICAgIC4uLnB1Ykp3ayxcbiAgICAgICAgICAgIGQ6IEJ1ZmZlci5mcm9tKG5ldyBVaW50OEFycmF5KGQpKS50b1N0cmluZyhcImJhc2U2NHVybFwiKSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmNsYXNzIEVkMjU1MTlQdWJsaWNLZXkgZXh0ZW5kcyBFZDI1NTE5Q3J5cHRvS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwdWJsaWNcIjtcbiAgICB9XG4gICAgdG9KV0soKSB7XG4gICAgICAgIGNvbnN0IGp3ayA9IGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBmb3JtYXQ6IFwicGVtXCIsXG4gICAgICAgIH0pLmV4cG9ydCh7IGZvcm1hdDogXCJqd2tcIiB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSldLKCksXG4gICAgICAgICAgICAuLi5qd2ssXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBFZDI1NTE5Q3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBrZXlzID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmModHlwZSwge1xuICAgICAgICAgICAgcHVibGljS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwicGVtXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJpdmF0ZUtleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcInBlbVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwicGtjczhcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBrZXlBbGcgPSB7XG4gICAgICAgICAgICBuYW1lOiB0eXBlID09PSBcImVkMjU1MTlcIiA/IFwiRWQyNTUxOVwiIDogXCJYMjU1MTlcIixcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleVVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnByaXZhdGVLZXlVc2FnZXMuaW5jbHVkZXModXNhZ2UpKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5VXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHVibGljS2V5VXNhZ2VzLmluY2x1ZGVzKHVzYWdlKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBuZXcgRWQyNTUxOVByaXZhdGVLZXkoa2V5QWxnLCBleHRyYWN0YWJsZSwgcHJpdmF0ZUtleVVzYWdlcywga2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogbmV3IEVkMjU1MTlQdWJsaWNLZXkoa2V5QWxnLCB0cnVlLCBwdWJsaWNLZXlVc2FnZXMsIGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gY3J5cHRvLnNpZ24obnVsbCwgQnVmZmVyLmZyb20oZGF0YSksIGtleS5kYXRhKTtcbiAgICAgICAgcmV0dXJuIGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoc2lnbmF0dXJlKTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBjcnlwdG8udmVyaWZ5KG51bGwsIEJ1ZmZlci5mcm9tKGRhdGEpLCBrZXkuZGF0YSwgc2lnbmF0dXJlKTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBrZXkudG9KV0soKTtcbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvcmUuUGVtQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoa2V5LmRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvcmUuUGVtQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoa2V5LmRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXkudG9KV0soKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGp3ay54KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncmF3JywgcGtjczgnIG9yICdzcGtpJ1wiKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgandrID0ga2V5RGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoandrLmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpdmF0ZURhdGEgPSBuZXcgY29yZS5hc24xLkVkUHJpdmF0ZUtleSgpO1xuICAgICAgICAgICAgICAgICAgICBwcml2YXRlRGF0YS52YWx1ZSA9IGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoQnVmZmVyLmZyb20oandrLmQsIFwiYmFzZTY0dXJsXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGtjczggPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgICAgICAgICAgICAgIHBrY3M4LnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gYWxnb3JpdGhtLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJlZDI1NTE5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29yZS5hc24xLmlkRWQyNTUxOVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjb3JlLmFzbjEuaWRYMjU1MTk7XG4gICAgICAgICAgICAgICAgICAgIHBrY3M4LnByaXZhdGVLZXkgPSBBc25Db252ZXJ0LnNlcmlhbGl6ZShwcml2YXRlRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhdyA9IEFzbkNvbnZlcnQuc2VyaWFsaXplKHBrY3M4KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVtID0gY29yZS5QZW1Db252ZXJ0ZXIuZnJvbUJ1ZmZlclNvdXJjZShyYXcsIFwiUFJJVkFURSBLRVlcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWQyNTUxOVByaXZhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBwZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChqd2sueCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwdWJLZXkgPSBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogXCJqd2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogandrLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVtID0gcHViS2V5LmV4cG9ydCh7IGZvcm1hdDogXCJwZW1cIiwgdHlwZTogXCJzcGtpXCIgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWQyNTUxOVB1YmxpY0tleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIHBlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImtleURhdGE6IENhbm5vdCBpbXBvcnQgSldLLiAnZCcgb3IgJ3gnIG11c3QgYmUgcHJlc2VudGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGVtID0gY29yZS5QZW1Db252ZXJ0ZXIuZnJvbUJ1ZmZlclNvdXJjZShrZXlEYXRhLCBcIlBSSVZBVEUgS0VZXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWQyNTUxOVByaXZhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBwZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBlbSA9IGNvcmUuUGVtQ29udmVydGVyLmZyb21CdWZmZXJTb3VyY2Uoa2V5RGF0YSwgXCJQVUJMSUMgS0VZXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWQyNTUxOVB1YmxpY0tleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIHBlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXcgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoe1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiandrXCIsXG4gICAgICAgICAgICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgICAgICAgICAgICAga3R5OiBcIk9LUFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3J2OiBhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImVkMjU1MTlcIiA/IFwiRWQyNTUxOVwiIDogXCJYMjU1MTlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwocmF3KSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwZW0gPSBrZXkuZXhwb3J0KHsgZm9ybWF0OiBcInBlbVwiLCB0eXBlOiBcInNwa2lcIiB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVkMjU1MTlQdWJsaWNLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBwZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCBwa2NzOCcgb3IgJ3Nwa2knXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkVkMjU1MTlDcnlwdG8ucHJpdmF0ZUtleVVzYWdlcyA9IFtcInNpZ25cIiwgXCJkZXJpdmVCaXRzXCIsIFwiZGVyaXZlS2V5XCJdO1xuRWQyNTUxOUNyeXB0by5wdWJsaWNLZXlVc2FnZXMgPSBbXCJ2ZXJpZnlcIl07XG5cbmNsYXNzIEVkMjU1MTlQcm92aWRlciBleHRlbmRzIGNvcmUuRWQyNTUxOVByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWQyNTUxOUNyeXB0by5nZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBFZDI1NTE5Q3J5cHRvLnNpZ24oYWxnb3JpdGhtLCBpbnRlcm5hbEtleSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgICAgICByZXR1cm4gc2lnbmF0dXJlO1xuICAgIH1cbiAgICBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIHJldHVybiBFZDI1NTE5Q3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGludGVybmFsS2V5LCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIHJldHVybiBFZDI1NTE5Q3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGludGVybmFsS2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBhd2FpdCBFZDI1NTE5Q3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoaW50ZXJuYWxLZXkpO1xuICAgIH1cbn1cblxuY2xhc3MgWDI1NTE5UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlgyNTUxOVByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWQyNTUxOUNyeXB0by5nZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBpbnRlcm5hbEJhc2VLZXkgPSBnZXRDcnlwdG9LZXkoYmFzZUtleSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsUHVibGljS2V5ID0gZ2V0Q3J5cHRvS2V5KGFsZ29yaXRobS5wdWJsaWMpO1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgIGtleTogaW50ZXJuYWxQdWJsaWNLZXkuZGF0YS50b1N0cmluZygpLFxuICAgICAgICAgICAgZm9ybWF0OiBcInBlbVwiLFxuICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gY3J5cHRvLmNyZWF0ZVByaXZhdGVLZXkoe1xuICAgICAgICAgICAga2V5OiBpbnRlcm5hbEJhc2VLZXkuZGF0YS50b1N0cmluZygpLFxuICAgICAgICAgICAgZm9ybWF0OiBcInBlbVwiLFxuICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYml0cyA9IGNyeXB0by5kaWZmaWVIZWxsbWFuKHtcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICAgIHByaXZhdGVLZXksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYml0cykuYnVmZmVyLnNsaWNlKDAsIGxlbmd0aCA+PiAzKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgcmV0dXJuIEVkMjU1MTlDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgaW50ZXJuYWxLZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBFZDI1NTE5Q3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBFZDI1NTE5Q3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgRWQyNTUxOUNyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgUGJrZGZDcnlwdG9LZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xufVxuXG5jbGFzcyBQYmtkZjJQcm92aWRlciBleHRlbmRzIGNvcmUuUGJrZGYyUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2FsdCA9IGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoYWxnb3JpdGhtLnNhbHQpO1xuICAgICAgICAgICAgY29uc3QgaGFzaCA9IGFsZ29yaXRobS5oYXNoLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIik7XG4gICAgICAgICAgICBjcnlwdG8ucGJrZGYyKGdldENyeXB0b0tleShiYXNlS2V5KS5kYXRhLCBCdWZmZXIkMS5mcm9tKHNhbHQpLCBhbGdvcml0aG0uaXRlcmF0aW9ucywgbGVuZ3RoID4+IDMsIGhhc2gsIChlcnIsIGRlcml2ZWRCaXRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFVpbnQ4QXJyYXkoZGVyaXZlZEJpdHMpLmJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBpZiAoZm9ybWF0ID09PSBcInJhd1wiKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBuZXcgUGJrZGZDcnlwdG9LZXkoKTtcbiAgICAgICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShrZXlEYXRhKTtcbiAgICAgICAgICAgIGtleS5hbGdvcml0aG0gPSB7IG5hbWU6IHRoaXMubmFtZSB9O1xuICAgICAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdyYXcnXCIpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIFBia2RmQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IFBCS0RGIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgSG1hY0NyeXB0b0tleSBleHRlbmRzIENyeXB0b0tleSB7XG4gICAgZ2V0IGFsZygpIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHRoaXMuYWxnb3JpdGhtLmhhc2gubmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gYEhTJHtoYXNoLnJlcGxhY2UoXCJTSEEtXCIsIFwiXCIpfWA7XG4gICAgfVxuICAgIHNldCBhbGcodmFsdWUpIHtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwia1wiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxDb252ZXJ0ZXIgfSlcbl0sIEhtYWNDcnlwdG9LZXkucHJvdG90eXBlLCBcImRhdGFcIiwgdm9pZCAwKTtcblxuY2xhc3MgSG1hY1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5IbWFjUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IChhbGdvcml0aG0ubGVuZ3RoIHx8IHRoaXMuZ2V0RGVmYXVsdExlbmd0aChhbGdvcml0aG0uaGFzaC5uYW1lKSkgPj4gMyA8PCAzO1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgSG1hY0NyeXB0b0tleSgpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0ge1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbGVuZ3RoLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9O1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAga2V5LmRhdGEgPSBjcnlwdG8ucmFuZG9tQnl0ZXMobGVuZ3RoID4+IDMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShrZXkuYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBobWFjID0gY3J5cHRvLmNyZWF0ZUhtYWMoY3J5cHRvQWxnLCBnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhtYWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShrZXkuYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBobWFjID0gY3J5cHRvLmNyZWF0ZUhtYWMoY3J5cHRvQWxnLCBnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIGhtYWMuY29tcGFyZShCdWZmZXIkMS5mcm9tKHNpZ25hdHVyZSkpID09PSAwO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogSG1hY0NyeXB0b0tleSB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBuZXcgSG1hY0NyeXB0b0tleSgpO1xuICAgICAgICAgICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShrZXlEYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICAgICAga2V5LmFsZ29yaXRobSA9IHtcbiAgICAgICAgICAgIGhhc2g6IHsgbmFtZTogYWxnb3JpdGhtLmhhc2gubmFtZSB9LFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBrZXkuZGF0YS5sZW5ndGggPDwgMyxcbiAgICAgICAgfTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgSG1hY0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBITUFDIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgSGtkZkNyeXB0b0tleSBleHRlbmRzIENyeXB0b0tleSB7XG59XG5cbmNsYXNzIEhrZGZQcm92aWRlciBleHRlbmRzIGNvcmUuSGtkZlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBpZiAoZm9ybWF0LnRvTG93ZXJDYXNlKCkgIT09IFwicmF3XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEhrZGZDcnlwdG9LZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKGtleURhdGEpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0geyBuYW1lOiB0aGlzLm5hbWUgfTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKHBhcmFtcywgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBwYXJhbXMuaGFzaC5uYW1lLnJlcGxhY2UoXCItXCIsIFwiXCIpO1xuICAgICAgICBjb25zdCBoYXNoTGVuZ3RoID0gY3J5cHRvLmNyZWF0ZUhhc2goaGFzaCkuZGlnZXN0KCkubGVuZ3RoO1xuICAgICAgICBjb25zdCBieXRlTGVuZ3RoID0gbGVuZ3RoIC8gODtcbiAgICAgICAgY29uc3QgaW5mbyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciQxLnRvVWludDhBcnJheShwYXJhbXMuaW5mbyk7XG4gICAgICAgIGNvbnN0IFBSSyA9IGNyeXB0by5jcmVhdGVIbWFjKGhhc2gsIEJ1ZmZlclNvdXJjZUNvbnZlcnRlciQxLnRvVWludDhBcnJheShwYXJhbXMuc2FsdCkpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlclNvdXJjZUNvbnZlcnRlciQxLnRvVWludDhBcnJheShnZXRDcnlwdG9LZXkoYmFzZUtleSkuZGF0YSkpXG4gICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgIGNvbnN0IGJsb2NrcyA9IFtCdWZmZXIkMS5hbGxvYygwKV07XG4gICAgICAgIGNvbnN0IGJsb2NrQ291bnQgPSBNYXRoLmNlaWwoYnl0ZUxlbmd0aCAvIGhhc2hMZW5ndGgpICsgMTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBibG9ja0NvdW50OyArK2kpIHtcbiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKGNyeXB0by5jcmVhdGVIbWFjKGhhc2gsIFBSSylcbiAgICAgICAgICAgICAgICAudXBkYXRlKEJ1ZmZlciQxLmNvbmNhdChbYmxvY2tzW2kgLSAxXSwgaW5mbywgQnVmZmVyJDEuZnJvbShbaV0pXSkpXG4gICAgICAgICAgICAgICAgLmRpZ2VzdCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQnVmZmVyJDEuY29uY2F0KGJsb2Nrcykuc2xpY2UoMCwgYnl0ZUxlbmd0aCk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgSGtkZkNyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBIS0RGIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2hha2VDcnlwdG8ge1xuICAgIHN0YXRpYyBkaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpLCB7IG91dHB1dExlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCB9KVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhhc2gpLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMTI4UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlNoYWtlMTI4UHJvdmlkZXIge1xuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hha2VDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZTI1NlByb3ZpZGVyIGV4dGVuZHMgY29yZS5TaGFrZTI1NlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYWtlQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU3VidGxlQ3J5cHRvIGV4dGVuZHMgY29yZS5TdWJ0bGVDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ3RyUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzR2NtUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ21hY1Byb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEFlc0t3UHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzRWNiUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IGNpcGhlcnMgPSBjcnlwdG8uZ2V0Q2lwaGVycygpO1xuICAgICAgICBpZiAoY2lwaGVycy5pbmNsdWRlcyhcImRlcy1jYmNcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRGVzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBEZXNFZGUzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhU3NhUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhUHNzUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhT2FlcFByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFJzYUVzUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRWNkc2FQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFY2RoUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMVByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTI1NlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTM4NFByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTUxMlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFBia2RmMlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEhtYWNQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBIa2RmUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IG5vZGVNYWpvclZlcnNpb24gPSAoX2EgPSAvXnYoXFxkKykvLmV4ZWMocHJvY2Vzcy52ZXJzaW9uKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzFdO1xuICAgICAgICBpZiAobm9kZU1ham9yVmVyc2lvbiAmJiBwYXJzZUludChub2RlTWFqb3JWZXJzaW9uLCAxMCkgPj0gMTIpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hha2UxMjhQcm92aWRlcigpKTtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hha2UyNTZQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzKCk7XG4gICAgICAgIGlmIChoYXNoZXMuaW5jbHVkZXMoXCJzaGEzLTI1NlwiKSkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGEzMjU2UHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc2hlcy5pbmNsdWRlcyhcInNoYTMtMzg0XCIpKSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTMzODRQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzaGVzLmluY2x1ZGVzKFwic2hhMy01MTJcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMzUxMlByb3ZpZGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlTWFqb3JWZXJzaW9uICYmIHBhcnNlSW50KG5vZGVNYWpvclZlcnNpb24sIDEwKSA+PSAxNCkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFZERzYVByb3ZpZGVyKCkpO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFY2RoRXNQcm92aWRlcigpKTtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRWQyNTUxOVByb3ZpZGVyKCkpO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBYMjU1MTlQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQ3J5cHRvIGV4dGVuZHMgY29yZS5DcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnN1YnRsZSA9IG5ldyBTdWJ0bGVDcnlwdG8oKTtcbiAgICB9XG4gICAgZ2V0UmFuZG9tVmFsdWVzKGFycmF5KSB7XG4gICAgICAgIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KGFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXRSYW5kb21WYWx1ZXMnIG9uICdDcnlwdG8nOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnQXJyYXlCdWZmZXJWaWV3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIkMS5mcm9tKGFycmF5LmJ1ZmZlciwgYXJyYXkuYnl0ZU9mZnNldCwgYXJyYXkuYnl0ZUxlbmd0aCk7XG4gICAgICAgIGNyeXB0by5yYW5kb21GaWxsU3luYyhidWZmZXIpO1xuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBDcnlwdG8gfTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW50ZXJuYWxTdGF0ZVN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBpbnRlcm5hbFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2ludGVybmFsXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IGludGVybmFsU3RhdGVTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9zdGF0ZVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW5zdGFuY2VTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pbnN0YW5jZVwiKTtcbiIsICJleHBvcnQgdmFyIHRvcCA9ICd0b3AnO1xuZXhwb3J0IHZhciBib3R0b20gPSAnYm90dG9tJztcbmV4cG9ydCB2YXIgcmlnaHQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBsZWZ0ID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBhdXRvID0gJ2F1dG8nO1xuZXhwb3J0IHZhciBiYXNlUGxhY2VtZW50cyA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuZXhwb3J0IHZhciBzdGFydCA9ICdzdGFydCc7XG5leHBvcnQgdmFyIGVuZCA9ICdlbmQnO1xuZXhwb3J0IHZhciBjbGlwcGluZ1BhcmVudHMgPSAnY2xpcHBpbmdQYXJlbnRzJztcbmV4cG9ydCB2YXIgdmlld3BvcnQgPSAndmlld3BvcnQnO1xuZXhwb3J0IHZhciBwb3BwZXIgPSAncG9wcGVyJztcbmV4cG9ydCB2YXIgcmVmZXJlbmNlID0gJ3JlZmVyZW5jZSc7XG5leHBvcnQgdmFyIHZhcmlhdGlvblBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovYmFzZVBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9bXS5jb25jYXQoYmFzZVBsYWNlbWVudHMsIFthdXRvXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50LCBwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pOyAvLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuXG5leHBvcnQgdmFyIGJlZm9yZVJlYWQgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgdmFyIHJlYWQgPSAncmVhZCc7XG5leHBvcnQgdmFyIGFmdGVyUmVhZCA9ICdhZnRlclJlYWQnOyAvLyBwdXJlLWxvZ2ljIG1vZGlmaWVyc1xuXG5leHBvcnQgdmFyIGJlZm9yZU1haW4gPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgdmFyIG1haW4gPSAnbWFpbic7XG5leHBvcnQgdmFyIGFmdGVyTWFpbiA9ICdhZnRlck1haW4nOyAvLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5cbmV4cG9ydCB2YXIgYmVmb3JlV3JpdGUgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IHZhciB3cml0ZSA9ICd3cml0ZSc7XG5leHBvcnQgdmFyIGFmdGVyV3JpdGUgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgdmFyIG1vZGlmaWVyUGhhc2VzID0gW2JlZm9yZVJlYWQsIHJlYWQsIGFmdGVyUmVhZCwgYmVmb3JlTWFpbiwgbWFpbiwgYWZ0ZXJNYWluLCBiZWZvcmVXcml0ZSwgd3JpdGUsIGFmdGVyV3JpdGVdOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlTmFtZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ID8gKGVsZW1lbnQubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChub2RlLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdyA6IHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5FbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5IVE1MRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNTaGFkb3dSb290KG5vZGUpIHtcbiAgLy8gSUUgMTEgaGFzIG5vIFNoYWRvd1Jvb3RcbiAgaWYgKHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLlNoYWRvd1Jvb3Q7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbn1cblxuZXhwb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfTsiLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gVGhpcyBtb2RpZmllciB0YWtlcyB0aGUgc3R5bGVzIHByZXBhcmVkIGJ5IHRoZSBgY29tcHV0ZVN0eWxlc2AgbW9kaWZpZXJcbi8vIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIEhUTUxFbGVtZW50cyBzdWNoIGFzIHBvcHBlciBhbmQgYXJyb3dcblxuZnVuY3Rpb24gYXBwbHlTdHlsZXMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlO1xuICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnN0eWxlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0byBleHRlbmQgdGhpcyBwcm9wZXJ0eSwgYnV0IGl0J3MgdGhlIG1vc3RcbiAgICAvLyBlZmZlY3RpdmUgd2F5IHRvIGFwcGx5IHN0eWxlcyB0byBhbiBIVE1MRWxlbWVudFxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuXG5cbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhdHRyaWJ1dGVzW25hbWVdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUgPT09IHRydWUgPyAnJyA6IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZTtcbiAgdmFyIGluaXRpYWxTdHlsZXMgPSB7XG4gICAgcG9wcGVyOiB7XG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHRvcDogJzAnLFxuICAgICAgbWFyZ2luOiAnMCdcbiAgICB9LFxuICAgIGFycm93OiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sXG4gICAgcmVmZXJlbmNlOiB7fVxuICB9O1xuICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLnBvcHBlci5zdHlsZSwgaW5pdGlhbFN0eWxlcy5wb3BwZXIpO1xuICBzdGF0ZS5zdHlsZXMgPSBpbml0aWFsU3R5bGVzO1xuXG4gIGlmIChzdGF0ZS5lbGVtZW50cy5hcnJvdykge1xuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMuYXJyb3cuc3R5bGUsIGluaXRpYWxTdHlsZXMuYXJyb3cpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTtcbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICAgIHZhciBzdHlsZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhzdGF0ZS5zdHlsZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBzdGF0ZS5zdHlsZXNbbmFtZV0gOiBpbml0aWFsU3R5bGVzW25hbWVdKTsgLy8gU2V0IGFsbCB2YWx1ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIHVuc2V0IHRoZW1cblxuICAgICAgdmFyIHN0eWxlID0gc3R5bGVQcm9wZXJ0aWVzLnJlZHVjZShmdW5jdGlvbiAoc3R5bGUsIHByb3BlcnR5KSB7XG4gICAgICAgIHN0eWxlW3Byb3BlcnR5XSA9ICcnO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9LCB7fSk7IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGFwcGx5U3R5bGVzLFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddXG59OyIsICJpbXBvcnQgeyBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59IiwgImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVBU3RyaW5nKCkge1xuICB2YXIgdWFEYXRhID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGE7XG5cbiAgaWYgKHVhRGF0YSAhPSBudWxsICYmIHVhRGF0YS5icmFuZHMgJiYgQXJyYXkuaXNBcnJheSh1YURhdGEuYnJhbmRzKSkge1xuICAgIHJldHVybiB1YURhdGEuYnJhbmRzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uYnJhbmQgKyBcIi9cIiArIGl0ZW0udmVyc2lvbjtcbiAgICB9KS5qb2luKCcgJyk7XG4gIH1cblxuICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbn0iLCAiaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTGF5b3V0Vmlld3BvcnQoKSB7XG4gIHJldHVybiAhL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChnZXRVQVN0cmluZygpKTtcbn0iLCAiaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gMTtcbiAgdmFyIHNjYWxlWSA9IDE7XG5cbiAgaWYgKGluY2x1ZGVTY2FsZSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgc2NhbGVYID0gZWxlbWVudC5vZmZzZXRXaWR0aCA+IDAgPyByb3VuZChjbGllbnRSZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMSA6IDE7XG4gICAgc2NhbGVZID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgPiAwID8gcm91bmQoY2xpZW50UmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMSA6IDE7XG4gIH1cblxuICB2YXIgX3JlZiA9IGlzRWxlbWVudChlbGVtZW50KSA/IGdldFdpbmRvdyhlbGVtZW50KSA6IHdpbmRvdyxcbiAgICAgIHZpc3VhbFZpZXdwb3J0ID0gX3JlZi52aXN1YWxWaWV3cG9ydDtcblxuICB2YXIgYWRkVmlzdWFsT2Zmc2V0cyA9ICFpc0xheW91dFZpZXdwb3J0KCkgJiYgaXNGaXhlZFN0cmF0ZWd5O1xuICB2YXIgeCA9IChjbGllbnRSZWN0LmxlZnQgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQgOiAwKSkgLyBzY2FsZVg7XG4gIHZhciB5ID0gKGNsaWVudFJlY3QudG9wICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3AgOiAwKSkgLyBzY2FsZVk7XG4gIHZhciB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZVg7XG4gIHZhciBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlWTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxuICAgIGxlZnQ6IHgsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7IC8vIFJldHVybnMgdGhlIGxheW91dCByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC4gTGF5b3V0XG4vLyBtZWFucyBpdCBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRyYW5zZm9ybXMuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExheW91dFJlY3QoZWxlbWVudCkge1xuICB2YXIgY2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KTsgLy8gVXNlIHRoZSBjbGllbnRSZWN0IHNpemVzIGlmIGl0J3Mgbm90IGJlZW4gdHJhbnNmb3JtZWQuXG4gIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTIyM1xuXG4gIHZhciB3aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC53aWR0aCAtIHdpZHRoKSA8PSAxKSB7XG4gICAgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoO1xuICB9XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3QuaGVpZ2h0IC0gaGVpZ2h0KSA8PSAxKSB7XG4gICAgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGVsZW1lbnQub2Zmc2V0TGVmdCxcbiAgICB5OiBlbGVtZW50Lm9mZnNldFRvcCxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn0iLCAiaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGFpbnMocGFyZW50LCBjaGlsZCkge1xuICB2YXIgcm9vdE5vZGUgPSBjaGlsZC5nZXRSb290Tm9kZSAmJiBjaGlsZC5nZXRSb290Tm9kZSgpOyAvLyBGaXJzdCwgYXR0ZW1wdCB3aXRoIGZhc3RlciBuYXRpdmUgbWV0aG9kXG5cbiAgaWYgKHBhcmVudC5jb250YWlucyhjaGlsZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyB0aGVuIGZhbGxiYWNrIHRvIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiB3aXRoIFNoYWRvdyBET00gc3VwcG9ydFxuICBlbHNlIGlmIChyb290Tm9kZSAmJiBpc1NoYWRvd1Jvb3Qocm9vdE5vZGUpKSB7XG4gICAgICB2YXIgbmV4dCA9IGNoaWxkO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChuZXh0ICYmIHBhcmVudC5pc1NhbWVOb2RlKG5leHQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddOiBuZWVkIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgdGhpcy4uLlxuXG5cbiAgICAgICAgbmV4dCA9IG5leHQucGFyZW50Tm9kZSB8fCBuZXh0Lmhvc3Q7XG4gICAgICB9IHdoaWxlIChuZXh0KTtcbiAgICB9IC8vIEdpdmUgdXAsIHRoZSByZXN1bHQgaXMgZmFsc2VcblxuXG4gIHJldHVybiBmYWxzZTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59IiwgImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNUYWJsZUVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gWyd0YWJsZScsICd0ZCcsICd0aCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpID49IDA7XG59IiwgImltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSB7XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgcmV0dXJuICgoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5vd25lckRvY3VtZW50IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIGVsZW1lbnQuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkuZG9jdW1lbnRFbGVtZW50O1xufSIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiAoLy8gdGhpcyBpcyBhIHF1aWNrZXIgKGJ1dCBsZXNzIHR5cGUgc2FmZSkgd2F5IHRvIHNhdmUgcXVpdGUgc29tZSBieXRlcyBmcm9tIHRoZSBidW5kbGVcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgZWxlbWVudC5hc3NpZ25lZFNsb3QgfHwgLy8gc3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGVcbiAgICBlbGVtZW50LnBhcmVudE5vZGUgfHwgKCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIGlzU2hhZG93Um9vdChlbGVtZW50KSA/IGVsZW1lbnQuaG9zdCA6IG51bGwpIHx8IC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogSFRNTEVsZW1lbnQgaXMgYSBOb2RlXG4gICAgZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIC8vIGZhbGxiYWNrXG5cbiAgKTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGlzVGFibGVFbGVtZW50IGZyb20gXCIuL2lzVGFibGVFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0VUFTdHJpbmcgZnJvbSBcIi4uL3V0aWxzL3VzZXJBZ2VudC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvODM3XG4gIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcbn0gLy8gYC5vZmZzZXRQYXJlbnRgIHJlcG9ydHMgYG51bGxgIGZvciBmaXhlZCBlbGVtZW50cywgd2hpbGUgYWJzb2x1dGUgZWxlbWVudHNcbi8vIHJldHVybiB0aGUgY29udGFpbmluZyBibG9ja1xuXG5cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIHZhciBpc0ZpcmVmb3ggPSAvZmlyZWZveC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG4gIHZhciBpc0lFID0gL1RyaWRlbnQvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuXG4gIGlmIChpc0lFICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAvLyBJbiBJRSA5LCAxMCBhbmQgMTEgZml4ZWQgZWxlbWVudHMgY29udGFpbmluZyBibG9jayBpcyBhbHdheXMgZXN0YWJsaXNoZWQgYnkgdGhlIHZpZXdwb3J0XG4gICAgdmFyIGVsZW1lbnRDc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuXG4gICAgaWYgKGVsZW1lbnRDc3MucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG5cbiAgaWYgKGlzU2hhZG93Um9vdChjdXJyZW50Tm9kZSkpIHtcbiAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmhvc3Q7XG4gIH1cblxuICB3aGlsZSAoaXNIVE1MRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgWydodG1sJywgJ2JvZHknXS5pbmRleE9mKGdldE5vZGVOYW1lKGN1cnJlbnROb2RlKSkgPCAwKSB7XG4gICAgdmFyIGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudE5vZGUpOyAvLyBUaGlzIGlzIG5vbi1leGhhdXN0aXZlIGJ1dCBjb3ZlcnMgdGhlIG1vc3QgY29tbW9uIENTUyBwcm9wZXJ0aWVzIHRoYXRcbiAgICAvLyBjcmVhdGUgYSBjb250YWluaW5nIGJsb2NrLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG5cbiAgICBpZiAoY3NzLnRyYW5zZm9ybSAhPT0gJ25vbmUnIHx8IGNzcy5wZXJzcGVjdGl2ZSAhPT0gJ25vbmUnIHx8IGNzcy5jb250YWluID09PSAncGFpbnQnIHx8IFsndHJhbnNmb3JtJywgJ3BlcnNwZWN0aXZlJ10uaW5kZXhPZihjc3Mud2lsbENoYW5nZSkgIT09IC0xIHx8IGlzRmlyZWZveCAmJiBjc3Mud2lsbENoYW5nZSA9PT0gJ2ZpbHRlcicgfHwgaXNGaXJlZm94ICYmIGNzcy5maWx0ZXIgJiYgY3NzLmZpbHRlciAhPT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn0gLy8gR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBwb3NpdGlvbmVkIGVsZW1lbnQuIEhhbmRsZXMgc29tZSBlZGdlIGNhc2VzLFxuLy8gc3VjaCBhcyB0YWJsZSBhbmNlc3RvcnMgYW5kIGNyb3NzIGJyb3dzZXIgYnVncy5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KTtcblxuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50KTtcbiAgfVxuXG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdodG1sJyB8fCBnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnYm9keScgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luZG93O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgPj0gMCA/ICd4JyA6ICd5Jztcbn0iLCAiaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpIHtcbiAgcmV0dXJuIG1hdGhNYXgobWluLCBtYXRoTWluKHZhbHVlLCBtYXgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW5NYXhDbGFtcChtaW4sIHZhbHVlLCBtYXgpIHtcbiAgdmFyIHYgPSB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KTtcbiAgcmV0dXJuIHYgPiBtYXggPyBtYXggOiB2O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRGcmVzaFNpZGVPYmplY3QoKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwXG4gIH07XG59IiwgImltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4vZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVBhZGRpbmdPYmplY3QocGFkZGluZ09iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ2V0RnJlc2hTaWRlT2JqZWN0KCksIHBhZGRpbmdPYmplY3QpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXAodmFsdWUsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChoYXNoTWFwLCBrZXkpIHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufSIsICJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4uL2RvbS11dGlscy9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4gfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuLi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4uL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qc1wiO1xuaW1wb3J0IHsgbGVmdCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB0b3AsIGJvdHRvbSB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB0b1BhZGRpbmdPYmplY3QgPSBmdW5jdGlvbiB0b1BhZGRpbmdPYmplY3QocGFkZGluZywgc3RhdGUpIHtcbiAgcGFkZGluZyA9IHR5cGVvZiBwYWRkaW5nID09PSAnZnVuY3Rpb24nID8gcGFkZGluZyhPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHBhZGRpbmc7XG4gIHJldHVybiBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xufTtcblxuZnVuY3Rpb24gYXJyb3coX3JlZikge1xuICB2YXIgX3N0YXRlJG1vZGlmaWVyc0RhdGEkO1xuXG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBheGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgaXNWZXJ0aWNhbCA9IFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwO1xuICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICBpZiAoIWFycm93RWxlbWVudCB8fCAhcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gdG9QYWRkaW5nT2JqZWN0KG9wdGlvbnMucGFkZGluZywgc3RhdGUpO1xuICB2YXIgYXJyb3dSZWN0ID0gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpO1xuICB2YXIgbWluUHJvcCA9IGF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gIHZhciBtYXhQcm9wID0gYXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gIHZhciBlbmREaWZmID0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2xlbl0gKyBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucG9wcGVyW2xlbl07XG4gIHZhciBzdGFydERpZmYgPSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQoYXJyb3dFbGVtZW50KTtcbiAgdmFyIGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudEhlaWdodCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50V2lkdGggfHwgMCA6IDA7XG4gIHZhciBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjsgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBwb3BwZXIgaWYgdGhlIGNlbnRlciBwb2ludCBpc1xuICAvLyBvdXRzaWRlIG9mIHRoZSBwb3BwZXIgYm91bmRzXG5cbiAgdmFyIG1pbiA9IHBhZGRpbmdPYmplY3RbbWluUHJvcF07XG4gIHZhciBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dSZWN0W2xlbl0gLSBwYWRkaW5nT2JqZWN0W21heFByb3BdO1xuICB2YXIgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd1JlY3RbbGVuXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcbiAgdmFyIG9mZnNldCA9IHdpdGhpbihtaW4sIGNlbnRlciwgbWF4KTsgLy8gUHJldmVudHMgYnJlYWtpbmcgc3ludGF4IGhpZ2hsaWdodGluZy4uLlxuXG4gIHZhciBheGlzUHJvcCA9IGF4aXM7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSAoX3N0YXRlJG1vZGlmaWVyc0RhdGEkID0ge30sIF9zdGF0ZSRtb2RpZmllcnNEYXRhJFtheGlzUHJvcF0gPSBvZmZzZXQsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJC5jZW50ZXJPZmZzZXQgPSBvZmZzZXQgLSBjZW50ZXIsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJCk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZWxlbWVudCA9IG9wdGlvbnMuZWxlbWVudCxcbiAgICAgIGFycm93RWxlbWVudCA9IF9vcHRpb25zJGVsZW1lbnQgPT09IHZvaWQgMCA/ICdbZGF0YS1wb3BwZXItYXJyb3ddJyA6IF9vcHRpb25zJGVsZW1lbnQ7XG5cbiAgaWYgKGFycm93RWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIENTUyBzZWxlY3RvclxuXG5cbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMucG9wcGVyLnF1ZXJ5U2VsZWN0b3IoYXJyb3dFbGVtZW50KTtcblxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb250YWlucyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIsIGFycm93RWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0ZS5lbGVtZW50cy5hcnJvdyA9IGFycm93RWxlbWVudDtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2Fycm93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGFycm93LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddXG59OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn0iLCAiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB1bnNldFNpZGVzID0ge1xuICB0b3A6ICdhdXRvJyxcbiAgcmlnaHQ6ICdhdXRvJyxcbiAgYm90dG9tOiAnYXV0bycsXG4gIGxlZnQ6ICdhdXRvJ1xufTsgLy8gUm91bmQgdGhlIG9mZnNldHMgdG8gdGhlIG5lYXJlc3Qgc3VpdGFibGUgc3VicGl4ZWwgYmFzZWQgb24gdGhlIERQUi5cbi8vIFpvb21pbmcgY2FuIGNoYW5nZSB0aGUgRFBSLCBidXQgaXQgc2VlbXMgdG8gcmVwb3J0IGEgdmFsdWUgdGhhdCB3aWxsXG4vLyBjbGVhbmx5IGRpdmlkZSB0aGUgdmFsdWVzIGludG8gdGhlIGFwcHJvcHJpYXRlIHN1YnBpeGVscy5cblxuZnVuY3Rpb24gcm91bmRPZmZzZXRzQnlEUFIoX3JlZiwgd2luKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAqIGRwcikgLyBkcHIgfHwgMCxcbiAgICB5OiByb3VuZCh5ICogZHByKSAvIGRwciB8fCAwXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1N0eWxlcyhfcmVmMikge1xuICB2YXIgX09iamVjdCRhc3NpZ24yO1xuXG4gIHZhciBwb3BwZXIgPSBfcmVmMi5wb3BwZXIsXG4gICAgICBwb3BwZXJSZWN0ID0gX3JlZjIucG9wcGVyUmVjdCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIHZhcmlhdGlvbiA9IF9yZWYyLnZhcmlhdGlvbixcbiAgICAgIG9mZnNldHMgPSBfcmVmMi5vZmZzZXRzLFxuICAgICAgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9yZWYyLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGFkYXB0aXZlID0gX3JlZjIuYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHMgPSBfcmVmMi5yb3VuZE9mZnNldHMsXG4gICAgICBpc0ZpeGVkID0gX3JlZjIuaXNGaXhlZDtcbiAgdmFyIF9vZmZzZXRzJHggPSBvZmZzZXRzLngsXG4gICAgICB4ID0gX29mZnNldHMkeCA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHgsXG4gICAgICBfb2Zmc2V0cyR5ID0gb2Zmc2V0cy55LFxuICAgICAgeSA9IF9vZmZzZXRzJHkgPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR5O1xuXG4gIHZhciBfcmVmMyA9IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjMueDtcbiAgeSA9IF9yZWYzLnk7XG4gIHZhciBoYXNYID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneCcpO1xuICB2YXIgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcbiAgdmFyIHNpZGVYID0gbGVmdDtcbiAgdmFyIHNpZGVZID0gdG9wO1xuICB2YXIgd2luID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICB2YXIgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIHZhciB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJyAmJiBwb3NpdGlvbiA9PT0gJ2Fic29sdXRlJykge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYXN0XTogZm9yY2UgdHlwZSByZWZpbmVtZW50LCB3ZSBjb21wYXJlIG9mZnNldFBhcmVudCB3aXRoIHdpbmRvdyBhYm92ZSwgYnV0IEZsb3cgZG9lc24ndCBkZXRlY3QgaXRcblxuXG4gICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50O1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gdG9wIHx8IChwbGFjZW1lbnQgPT09IGxlZnQgfHwgcGxhY2VtZW50ID09PSByaWdodCkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVZID0gYm90dG9tO1xuICAgICAgdmFyIG9mZnNldFkgPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC5oZWlnaHQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXTtcbiAgICAgIHkgLT0gb2Zmc2V0WSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCAocGxhY2VtZW50ID09PSB0b3AgfHwgcGxhY2VtZW50ID09PSBib3R0b20pICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0O1xuICAgICAgdmFyIG9mZnNldFggPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF07XG4gICAgICB4IC09IG9mZnNldFggLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICB2YXIgX3JlZjQgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUih7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0sIGdldFdpbmRvdyhwb3BwZXIpKSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjQueDtcbiAgeSA9IF9yZWY0Lnk7XG5cbiAgaWYgKGdwdUFjY2VsZXJhdGlvbikge1xuICAgIHZhciBfT2JqZWN0JGFzc2lnbjtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbiA9IHt9LCBfT2JqZWN0JGFzc2lnbltzaWRlWV0gPSBoYXNZID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduW3NpZGVYXSA9IGhhc1ggPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ24udHJhbnNmb3JtID0gKHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIDw9IDEgPyBcInRyYW5zbGF0ZShcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4KVwiIDogXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCAwKVwiLCBfT2JqZWN0JGFzc2lnbikpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduMiA9IHt9LCBfT2JqZWN0JGFzc2lnbjJbc2lkZVldID0gaGFzWSA/IHkgKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yW3NpZGVYXSA9IGhhc1ggPyB4ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMi50cmFuc2Zvcm0gPSAnJywgX09iamVjdCRhc3NpZ24yKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZXMoX3JlZjUpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjUuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjUub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZ3B1QWNjZWxlcmF0LFxuICAgICAgX29wdGlvbnMkYWRhcHRpdmUgPSBvcHRpb25zLmFkYXB0aXZlLFxuICAgICAgYWRhcHRpdmUgPSBfb3B0aW9ucyRhZGFwdGl2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFkYXB0aXZlLFxuICAgICAgX29wdGlvbnMkcm91bmRPZmZzZXRzID0gb3B0aW9ucy5yb3VuZE9mZnNldHMsXG4gICAgICByb3VuZE9mZnNldHMgPSBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyb3VuZE9mZnNldHM7XG4gIHZhciBjb21tb25TdHlsZXMgPSB7XG4gICAgcGxhY2VtZW50OiBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCksXG4gICAgdmFyaWF0aW9uOiBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KSxcbiAgICBwb3BwZXI6IHN0YXRlLmVsZW1lbnRzLnBvcHBlcixcbiAgICBwb3BwZXJSZWN0OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgZ3B1QWNjZWxlcmF0aW9uOiBncHVBY2NlbGVyYXRpb24sXG4gICAgaXNGaXhlZDogc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJ1xuICB9O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMucG9wcGVyLCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgYWRhcHRpdmU6IGFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3cgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5hcnJvdyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5hcnJvdywgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93LFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBhZGFwdGl2ZTogZmFsc2UsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCc6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2NvbXB1dGVTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgZm46IGNvbXB1dGVTdHlsZXMsXG4gIGRhdGE6IHt9XG59OyIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHBhc3NpdmUgPSB7XG4gIHBhc3NpdmU6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBpbnN0YW5jZSA9IF9yZWYuaW5zdGFuY2UsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkc2Nyb2xsID0gb3B0aW9ucy5zY3JvbGwsXG4gICAgICBzY3JvbGwgPSBfb3B0aW9ucyRzY3JvbGwgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRzY3JvbGwsXG4gICAgICBfb3B0aW9ucyRyZXNpemUgPSBvcHRpb25zLnJlc2l6ZSxcbiAgICAgIHJlc2l6ZSA9IF9vcHRpb25zJHJlc2l6ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJlc2l6ZTtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIpO1xuICB2YXIgc2Nyb2xsUGFyZW50cyA9IFtdLmNvbmNhdChzdGF0ZS5zY3JvbGxQYXJlbnRzLnJlZmVyZW5jZSwgc3RhdGUuc2Nyb2xsUGFyZW50cy5wb3BwZXIpO1xuXG4gIGlmIChzY3JvbGwpIHtcbiAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgc2Nyb2xsUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAocmVzaXplKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChzY3JvbGwpIHtcbiAgICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICAgIHNjcm9sbFBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc2l6ZSkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfVxuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZXZlbnRMaXN0ZW5lcnMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGZ1bmN0aW9uIGZuKCkge30sXG4gIGVmZmVjdDogZWZmZWN0LFxuICBkYXRhOiB7fVxufTsiLCAidmFyIGhhc2ggPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwgInZhciBoYXNoID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbChub2RlKSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3cobm9kZSk7XG4gIHZhciBzY3JvbGxMZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0O1xuICB2YXIgc2Nyb2xsVG9wID0gd2luLnBhZ2VZT2Zmc2V0O1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3BcbiAgfTtcbn0iLCAiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSB7XG4gIC8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbiAgLy8gaW5jb3JyZWN0IGZvciBSVEwuXG4gIC8vIFBvcHBlciAxIGlzIGJyb2tlbiBpbiB0aGlzIGNhc2UgYW5kIG5ldmVyIGhhZCBhIGJ1ZyByZXBvcnQgc28gbGV0J3MgYXNzdW1lXG4gIC8vIGl0J3Mgbm90IGFuIGlzc3VlLiBJIGRvbid0IHRoaW5rIGFueW9uZSBldmVyIHNwZWNpZmllcyB3aWR0aCBvbiA8aHRtbD5cbiAgLy8gYW55d2F5LlxuICAvLyBCcm93c2VycyB3aGVyZSB0aGUgbGVmdCBzY3JvbGxiYXIgZG9lc24ndCBjYXVzZSBhbiBpc3N1ZSByZXBvcnQgYDBgIGZvclxuICAvLyB0aGlzIChlLmcuIEVkZ2UgMjAxOSwgSUUxMSwgU2FmYXJpKVxuICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGdldFdpbmRvd1Njcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICB2YXIgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuXG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIHZhciBsYXlvdXRWaWV3cG9ydCA9IGlzTGF5b3V0Vmlld3BvcnQoKTtcblxuICAgIGlmIChsYXlvdXRWaWV3cG9ydCB8fCAhbGF5b3V0Vmlld3BvcnQgJiYgc3RyYXRlZ3kgPT09ICdmaXhlZCcpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSxcbiAgICB5OiB5XG4gIH07XG59IiwgImltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IHsgbWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgd2luU2Nyb2xsID0gZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpO1xuICB2YXIgYm9keSA9IChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keTtcbiAgdmFyIHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LnNjcm9sbFdpZHRoIDogMCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKTtcbiAgdmFyIGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkgPyBib2R5LnNjcm9sbEhlaWdodCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudEhlaWdodCA6IDApO1xuICB2YXIgeCA9IC13aW5TY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIHZhciB5ID0gLXdpblNjcm9sbC5zY3JvbGxUb3A7XG5cbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSB8fCBodG1sKS5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgeCArPSBtYXgoaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKSAtIHdpZHRoO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwgImltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzU2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gRmlyZWZveCB3YW50cyB1cyB0byBjaGVjayBgLXhgIGFuZCBgLXlgIHZhcmlhdGlvbnMgYXMgd2VsbFxuICB2YXIgX2dldENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvdyxcbiAgICAgIG92ZXJmbG93WCA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WCxcbiAgICAgIG92ZXJmbG93WSA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WTtcblxuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVuLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKTtcbn0iLCAiaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQobm9kZSkge1xuICBpZiAoWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5kZXhPZihnZXROb2RlTmFtZShub2RlKSkgPj0gMCkge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cblxuICBpZiAoaXNIVE1MRWxlbWVudChub2RlKSAmJiBpc1Njcm9sbFBhcmVudChub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIGdldFNjcm9sbFBhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKTtcbn0iLCAiaW1wb3J0IGdldFNjcm9sbFBhcmVudCBmcm9tIFwiLi9nZXRTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbi8qXG5naXZlbiBhIERPTSBlbGVtZW50LCByZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIHNjcm9sbCBwYXJlbnRzLCB1cCB0aGUgbGlzdCBvZiBhbmNlc29yc1xudW50aWwgd2UgZ2V0IHRvIHRoZSB0b3Agd2luZG93IG9iamVjdC4gVGhpcyBsaXN0IGlzIHdoYXQgd2UgYXR0YWNoIHNjcm9sbCBsaXN0ZW5lcnNcbnRvLCBiZWNhdXNlIGlmIGFueSBvZiB0aGVzZSBwYXJlbnQgZWxlbWVudHMgc2Nyb2xsLCB3ZSdsbCBuZWVkIHRvIHJlLWNhbGN1bGF0ZSB0aGVcbnJlZmVyZW5jZSBlbGVtZW50J3MgcG9zaXRpb24uXG4qL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0U2Nyb2xsUGFyZW50cyhlbGVtZW50LCBsaXN0KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuXG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoZWxlbWVudCk7XG4gIHZhciBpc0JvZHkgPSBzY3JvbGxQYXJlbnQgPT09ICgoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHkpO1xuICB2YXIgd2luID0gZ2V0V2luZG93KHNjcm9sbFBhcmVudCk7XG4gIHZhciB0YXJnZXQgPSBpc0JvZHkgPyBbd2luXS5jb25jYXQod2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBpc1Njcm9sbFBhcmVudChzY3JvbGxQYXJlbnQpID8gc2Nyb2xsUGFyZW50IDogW10pIDogc2Nyb2xsUGFyZW50O1xuICB2YXIgdXBkYXRlZExpc3QgPSBsaXN0LmNvbmNhdCh0YXJnZXQpO1xuICByZXR1cm4gaXNCb2R5ID8gdXBkYXRlZExpc3QgOiAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogaXNCb2R5IHRlbGxzIHVzIHRhcmdldCB3aWxsIGJlIGFuIEhUTUxFbGVtZW50IGhlcmVcbiAgdXBkYXRlZExpc3QuY29uY2F0KGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUodGFyZ2V0KSkpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJlY3QsIHtcbiAgICBsZWZ0OiByZWN0LngsXG4gICAgdG9wOiByZWN0LnksXG4gICAgcmlnaHQ6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiByZWN0LnkgKyByZWN0LmhlaWdodFxuICB9KTtcbn0iLCAiaW1wb3J0IHsgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSBcIi4vZ2V0Vmlld3BvcnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gXCIuL2dldERvY3VtZW50UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgZmFsc2UsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgcmVjdC50b3AgPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICByZWN0LmxlZnQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3Qud2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LmhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnggPSByZWN0LmxlZnQ7XG4gIHJlY3QueSA9IHJlY3QudG9wO1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnQgPyByZWN0VG9DbGllbnRSZWN0KGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkpIDogaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkgOiByZWN0VG9DbGllbnRSZWN0KGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpKTtcbn0gLy8gQSBcImNsaXBwaW5nIHBhcmVudFwiIGlzIGFuIG92ZXJmbG93YWJsZSBjb250YWluZXIgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpdGggYSBwb3NpdGlvbiBkaWZmZXJlbnQgZnJvbVxuLy8gYGluaXRpYWxgXG5cblxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xuICB2YXIgY2FuRXNjYXBlQ2xpcHBpbmcgPSBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSA+PSAwO1xuICB2YXIgY2xpcHBlckVsZW1lbnQgPSBjYW5Fc2NhcGVDbGlwcGluZyAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogZWxlbWVudDtcblxuICBpZiAoIWlzRWxlbWVudChjbGlwcGVyRWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE0MTRcblxuXG4gIHJldHVybiBjbGlwcGluZ1BhcmVudHMuZmlsdGVyKGZ1bmN0aW9uIChjbGlwcGluZ1BhcmVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpICYmIGNvbnRhaW5zKGNsaXBwaW5nUGFyZW50LCBjbGlwcGVyRWxlbWVudCkgJiYgZ2V0Tm9kZU5hbWUoY2xpcHBpbmdQYXJlbnQpICE9PSAnYm9keSc7XG4gIH0pO1xufSAvLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBwYXJlbnRzXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KGVsZW1lbnQsIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KSB7XG4gIHZhciBtYWluQ2xpcHBpbmdQYXJlbnRzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IFtdLmNvbmNhdChtYWluQ2xpcHBpbmdQYXJlbnRzLCBbcm9vdEJvdW5kYXJ5XSk7XG4gIHZhciBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuICB2YXIgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdQYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjUmVjdCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpKTtcbiAgY2xpcHBpbmdSZWN0LndpZHRoID0gY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC5oZWlnaHQgPSBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgY2xpcHBpbmdSZWN0LnggPSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LnkgPSBjbGlwcGluZ1JlY3QudG9wO1xuICByZXR1cm4gY2xpcHBpbmdSZWN0O1xufSIsICJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgc3RhcnQsIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZU9mZnNldHMoX3JlZikge1xuICB2YXIgcmVmZXJlbmNlID0gX3JlZi5yZWZlcmVuY2UsXG4gICAgICBlbGVtZW50ID0gX3JlZi5lbGVtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZi5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50ID8gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIHZhcmlhdGlvbiA9IHBsYWNlbWVudCA/IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIGNvbW1vblggPSByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCAvIDIgLSBlbGVtZW50LndpZHRoIC8gMjtcbiAgdmFyIGNvbW1vblkgPSByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQgLyAyIC0gZWxlbWVudC5oZWlnaHQgLyAyO1xuICB2YXIgb2Zmc2V0cztcblxuICBzd2l0Y2ggKGJhc2VQbGFjZW1lbnQpIHtcbiAgICBjYXNlIHRvcDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55IC0gZWxlbWVudC5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgYm90dG9tOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIHJpZ2h0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgbGVmdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZWxlbWVudC53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuXG4gIHZhciBtYWluQXhpcyA9IGJhc2VQbGFjZW1lbnQgPyBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCkgOiBudWxsO1xuXG4gIGlmIChtYWluQXhpcyAhPSBudWxsKSB7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICBzd2l0Y2ggKHZhcmlhdGlvbikge1xuICAgICAgY2FzZSBzdGFydDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSAtIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgZW5kOlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdICsgKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0cztcbn0iLCAiaW1wb3J0IGdldENsaXBwaW5nUmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBjbGlwcGluZ1BhcmVudHMsIHJlZmVyZW5jZSwgcG9wcGVyLCBib3R0b20sIHRvcCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi9leHBhbmRUb0hhc2hNYXAuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIF9vcHRpb25zJHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zJHBsYWNlbWVudCA9PT0gdm9pZCAwID8gc3RhdGUucGxhY2VtZW50IDogX29wdGlvbnMkcGxhY2VtZW50LFxuICAgICAgX29wdGlvbnMkc3RyYXRlZ3kgPSBfb3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIHN0cmF0ZWd5ID0gX29wdGlvbnMkc3RyYXRlZ3kgPT09IHZvaWQgMCA/IHN0YXRlLnN0cmF0ZWd5IDogX29wdGlvbnMkc3RyYXRlZ3ksXG4gICAgICBfb3B0aW9ucyRib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucyRib3VuZGFyeSA9PT0gdm9pZCAwID8gY2xpcHBpbmdQYXJlbnRzIDogX29wdGlvbnMkYm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRyb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucyRyb290Qm91bmRhcnkgPT09IHZvaWQgMCA/IHZpZXdwb3J0IDogX29wdGlvbnMkcm9vdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZWxlbWVudENvbnRlID0gX29wdGlvbnMuZWxlbWVudENvbnRleHQsXG4gICAgICBlbGVtZW50Q29udGV4dCA9IF9vcHRpb25zJGVsZW1lbnRDb250ZSA9PT0gdm9pZCAwID8gcG9wcGVyIDogX29wdGlvbnMkZWxlbWVudENvbnRlLFxuICAgICAgX29wdGlvbnMkYWx0Qm91bmRhcnkgPSBfb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMkYWx0Qm91bmRhcnkgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucyRwYWRkaW5nID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkcGFkZGluZztcbiAgdmFyIHBhZGRpbmdPYmplY3QgPSBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xuICB2YXIgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyByZWZlcmVuY2UgOiBwb3BwZXI7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW2FsdEJvdW5kYXJ5ID8gYWx0Q29udGV4dCA6IGVsZW1lbnRDb250ZXh0XTtcbiAgdmFyIGNsaXBwaW5nQ2xpZW50UmVjdCA9IGdldENsaXBwaW5nUmVjdChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCBnZXREb2N1bWVudEVsZW1lbnQoc3RhdGUuZWxlbWVudHMucG9wcGVyKSwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpO1xuICB2YXIgcmVmZXJlbmNlQ2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChzdGF0ZS5lbGVtZW50cy5yZWZlcmVuY2UpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHJlZmVyZW5jZUNsaWVudFJlY3QsXG4gICAgZWxlbWVudDogcG9wcGVyUmVjdCxcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KTtcbiAgdmFyIHBvcHBlckNsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KE9iamVjdC5hc3NpZ24oe30sIHBvcHBlclJlY3QsIHBvcHBlck9mZnNldHMpKTtcbiAgdmFyIGVsZW1lbnRDbGllbnRSZWN0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHBvcHBlckNsaWVudFJlY3QgOiByZWZlcmVuY2VDbGllbnRSZWN0OyAvLyBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyByZWN0XG4gIC8vIDAgb3IgbmVnYXRpdmUgPSB3aXRoaW4gdGhlIGNsaXBwaW5nIHJlY3RcblxuICB2YXIgb3ZlcmZsb3dPZmZzZXRzID0ge1xuICAgIHRvcDogY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wLFxuICAgIGJvdHRvbTogZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tLFxuICAgIGxlZnQ6IGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCxcbiAgICByaWdodDogZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0XG4gIH07XG4gIHZhciBvZmZzZXREYXRhID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQ7IC8vIE9mZnNldHMgY2FuIGJlIGFwcGxpZWQgb25seSB0byB0aGUgcG9wcGVyIGVsZW1lbnRcblxuICBpZiAoZWxlbWVudENvbnRleHQgPT09IHBvcHBlciAmJiBvZmZzZXREYXRhKSB7XG4gICAgdmFyIG9mZnNldCA9IG9mZnNldERhdGFbcGxhY2VtZW50XTtcbiAgICBPYmplY3Qua2V5cyhvdmVyZmxvd09mZnNldHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIG11bHRpcGx5ID0gW3JpZ2h0LCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gMSA6IC0xO1xuICAgICAgdmFyIGF4aXMgPSBbdG9wLCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gJ3knIDogJ3gnO1xuICAgICAgb3ZlcmZsb3dPZmZzZXRzW2tleV0gKz0gb2Zmc2V0W2F4aXNdICogbXVsdGlwbHk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gb3ZlcmZsb3dPZmZzZXRzO1xufSIsICJpbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgdmFyaWF0aW9uUGxhY2VtZW50cywgYmFzZVBsYWNlbWVudHMsIHBsYWNlbWVudHMgYXMgYWxsUGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPSBfb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPT09IHZvaWQgMCA/IGFsbFBsYWNlbWVudHMgOiBfb3B0aW9ucyRhbGxvd2VkQXV0b1A7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KTtcbiAgdmFyIHBsYWNlbWVudHMgPSB2YXJpYXRpb24gPyBmbGlwVmFyaWF0aW9ucyA/IHZhcmlhdGlvblBsYWNlbWVudHMgOiB2YXJpYXRpb25QbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSB2YXJpYXRpb247XG4gIH0pIDogYmFzZVBsYWNlbWVudHM7XG4gIHZhciBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWxsb3dlZEF1dG9QbGFjZW1lbnRzLmluZGV4T2YocGxhY2VtZW50KSA+PSAwO1xuICB9KTtcblxuICBpZiAoYWxsb3dlZFBsYWNlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdOiBGbG93IHNlZW1zIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCB0d28gYXJyYXkgdW5pb25zLi4uXG5cblxuICB2YXIgb3ZlcmZsb3dzID0gYWxsb3dlZFBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSlbZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvdmVyZmxvd3MpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dzW2FdIC0gb3ZlcmZsb3dzW2JdO1xuICB9KTtcbn0iLCAiaW1wb3J0IGdldE9wcG9zaXRlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBjb21wdXRlQXV0b1BsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IGJvdHRvbSwgdG9wLCBzdGFydCwgcmlnaHQsIGxlZnQsIGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmZ1bmN0aW9uIGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBpZiAoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdmFyIG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cblxuZnVuY3Rpb24gZmxpcChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyA9IG9wdGlvbnMuZmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZmxpcFZhcmlhdGlvID0gb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMkZmxpcFZhcmlhdGlvID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZmxpcFZhcmlhdGlvLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHM7XG4gIHZhciBwcmVmZXJyZWRQbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSBiYXNlUGxhY2VtZW50ID09PSBwcmVmZXJyZWRQbGFjZW1lbnQ7XG4gIHZhciBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcFZhcmlhdGlvbnMgPyBbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwcmVmZXJyZWRQbGFjZW1lbnQpKTtcbiAgdmFyIHBsYWNlbWVudHMgPSBbcHJlZmVycmVkUGxhY2VtZW50XS5jb25jYXQoZmFsbGJhY2tQbGFjZW1lbnRzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvID8gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnM6IGZsaXBWYXJpYXRpb25zLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzOiBhbGxvd2VkQXV0b1BsYWNlbWVudHNcbiAgICB9KSA6IHBsYWNlbWVudCk7XG4gIH0sIFtdKTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgY2hlY2tzTWFwID0gbmV3IE1hcCgpO1xuICB2YXIgbWFrZUZhbGxiYWNrQ2hlY2tzID0gdHJ1ZTtcbiAgdmFyIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHNbMF07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGFjZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBsYWNlbWVudCA9IHBsYWNlbWVudHNbaV07XG5cbiAgICB2YXIgX2Jhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG5cbiAgICB2YXIgaXNTdGFydFZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSBzdGFydDtcbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihfYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KTtcbiAgICB2YXIgbWFpblZhcmlhdGlvblNpZGUgPSBpc1ZlcnRpY2FsID8gaXNTdGFydFZhcmlhdGlvbiA/IHJpZ2h0IDogbGVmdCA6IGlzU3RhcnRWYXJpYXRpb24gPyBib3R0b20gOiB0b3A7XG5cbiAgICBpZiAocmVmZXJlbmNlUmVjdFtsZW5dID4gcG9wcGVyUmVjdFtsZW5dKSB7XG4gICAgICBtYWluVmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB9XG5cbiAgICB2YXIgYWx0VmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB2YXIgY2hlY2tzID0gW107XG5cbiAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbX2Jhc2VQbGFjZW1lbnRdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W21haW5WYXJpYXRpb25TaWRlXSA8PSAwLCBvdmVyZmxvd1thbHRWYXJpYXRpb25TaWRlXSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgcmV0dXJuIGNoZWNrO1xuICAgIH0pKSB7XG4gICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICBtYWtlRmFsbGJhY2tDaGVja3MgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNoZWNrc01hcC5zZXQocGxhY2VtZW50LCBjaGVja3MpO1xuICB9XG5cbiAgaWYgKG1ha2VGYWxsYmFja0NoZWNrcykge1xuICAgIC8vIGAyYCBtYXkgYmUgZGVzaXJlZCBpbiBzb21lIGNhc2VzIFx1MjAxMyByZXNlYXJjaCBsYXRlclxuICAgIHZhciBudW1iZXJPZkNoZWNrcyA9IGZsaXBWYXJpYXRpb25zID8gMyA6IDE7XG5cbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChfaSkge1xuICAgICAgdmFyIGZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzLmZpbmQoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgICAgICB2YXIgY2hlY2tzID0gY2hlY2tzTWFwLmdldChwbGFjZW1lbnQpO1xuXG4gICAgICAgIGlmIChjaGVja3MpIHtcbiAgICAgICAgICByZXR1cm4gY2hlY2tzLnNsaWNlKDAsIF9pKS5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChmaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IGZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pID0gbnVtYmVyT2ZDaGVja3M7IF9pID4gMDsgX2ktLSkge1xuICAgICAgdmFyIF9yZXQgPSBfbG9vcChfaSk7XG5cbiAgICAgIGlmIChfcmV0ID09PSBcImJyZWFrXCIpIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS5wbGFjZW1lbnQgIT09IGZpcnN0Rml0dGluZ1BsYWNlbWVudCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXAgPSB0cnVlO1xuICAgIHN0YXRlLnBsYWNlbWVudCA9IGZpcnN0Rml0dGluZ1BsYWNlbWVudDtcbiAgICBzdGF0ZS5yZXNldCA9IHRydWU7XG4gIH1cbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2ZsaXAnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogZmxpcCxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXSxcbiAgZGF0YToge1xuICAgIF9za2lwOiBmYWxzZVxuICB9XG59OyIsICJpbXBvcnQgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QsIHByZXZlbnRlZE9mZnNldHMpIHtcbiAgaWYgKHByZXZlbnRlZE9mZnNldHMgPT09IHZvaWQgMCkge1xuICAgIHByZXZlbnRlZE9mZnNldHMgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQgLSBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCArIHByZXZlbnRlZE9mZnNldHMueCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0ICsgcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoIC0gcHJldmVudGVkT2Zmc2V0cy54XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF0uc29tZShmdW5jdGlvbiAoc2lkZSkge1xuICAgIHJldHVybiBvdmVyZmxvd1tzaWRlXSA+PSAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGlkZShfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBwcmV2ZW50ZWRPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3c7XG4gIHZhciByZWZlcmVuY2VPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gIH0pO1xuICB2YXIgcG9wcGVyQWx0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gIH0pO1xuICB2YXIgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocmVmZXJlbmNlT3ZlcmZsb3csIHJlZmVyZW5jZVJlY3QpO1xuICB2YXIgcG9wcGVyRXNjYXBlT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHBvcHBlckFsdE92ZXJmbG93LCBwb3BwZXJSZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKTtcbiAgdmFyIGlzUmVmZXJlbmNlSGlkZGVuID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyk7XG4gIHZhciBoYXNQb3BwZXJFc2NhcGVkID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHBvcHBlckVzY2FwZU9mZnNldHMpO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0ge1xuICAgIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0czogcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzLFxuICAgIHBvcHBlckVzY2FwZU9mZnNldHM6IHBvcHBlckVzY2FwZU9mZnNldHMsXG4gICAgaXNSZWZlcmVuY2VIaWRkZW46IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgIGhhc1BvcHBlckVzY2FwZWQ6IGhhc1BvcHBlckVzY2FwZWRcbiAgfTtcbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1yZWZlcmVuY2UtaGlkZGVuJzogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgJ2RhdGEtcG9wcGVyLWVzY2FwZWQnOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnaGlkZScsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J10sXG4gIGZuOiBoaWRlXG59OyIsICJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgcGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHJlY3RzLCBvZmZzZXQpIHtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciBpbnZlcnREaXN0YW5jZSA9IFtsZWZ0LCB0b3BdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IC0xIDogMTtcblxuICB2YXIgX3JlZiA9IHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicgPyBvZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgcmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KSkgOiBvZmZzZXQsXG4gICAgICBza2lkZGluZyA9IF9yZWZbMF0sXG4gICAgICBkaXN0YW5jZSA9IF9yZWZbMV07XG5cbiAgc2tpZGRpbmcgPSBza2lkZGluZyB8fCAwO1xuICBkaXN0YW5jZSA9IChkaXN0YW5jZSB8fCAwKSAqIGludmVydERpc3RhbmNlO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyB7XG4gICAgeDogZGlzdGFuY2UsXG4gICAgeTogc2tpZGRpbmdcbiAgfSA6IHtcbiAgICB4OiBza2lkZGluZyxcbiAgICB5OiBkaXN0YW5jZVxuICB9O1xufVxuXG5mdW5jdGlvbiBvZmZzZXQoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmMi5uYW1lO1xuICB2YXIgX29wdGlvbnMkb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfb3B0aW9ucyRvZmZzZXQgPT09IHZvaWQgMCA/IFswLCAwXSA6IF9vcHRpb25zJG9mZnNldDtcbiAgdmFyIGRhdGEgPSBwbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgc3RhdGUucmVjdHMsIG9mZnNldCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICB2YXIgX2RhdGEkc3RhdGUkcGxhY2VtZW50ID0gZGF0YVtzdGF0ZS5wbGFjZW1lbnRdLFxuICAgICAgeCA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC54LFxuICAgICAgeSA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC55O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54ICs9IHg7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkgKz0geTtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnb2Zmc2V0JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICBmbjogb2Zmc2V0XG59OyIsICJpbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5cbmZ1bmN0aW9uIHBvcHBlck9mZnNldHMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgLy8gT2Zmc2V0cyBhcmUgdGhlIGFjdHVhbCBwb3NpdGlvbiB0aGUgcG9wcGVyIG5lZWRzIHRvIGhhdmUgdG8gYmVcbiAgLy8gcHJvcGVybHkgcG9zaXRpb25lZCBuZWFyIGl0cyByZWZlcmVuY2UgZWxlbWVudFxuICAvLyBUaGlzIGlzIHRoZSBtb3N0IGJhc2ljIHBsYWNlbWVudCwgYW5kIHdpbGwgYmUgYWRqdXN0ZWQgYnlcbiAgLy8gdGhlIG1vZGlmaWVycyBpbiB0aGUgbmV4dCBzdGVwXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiBzdGF0ZS5yZWN0cy5yZWZlcmVuY2UsXG4gICAgZWxlbWVudDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncG9wcGVyT2Zmc2V0cycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAncmVhZCcsXG4gIGZuOiBwb3BwZXJPZmZzZXRzLFxuICBkYXRhOiB7fVxufTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWx0QXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59IiwgImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4sIHdpdGhpbk1heENsYW1wIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWluIGFzIG1hdGhNaW4sIG1heCBhcyBtYXRoTWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZSxcbiAgICBhbHRBeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZVxuICB9IDogT2JqZWN0LmFzc2lnbih7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgYWx0QXhpczogMFxuICB9LCB0ZXRoZXJPZmZzZXRWYWx1ZSk7XG4gIHZhciBvZmZzZXRNb2RpZmllclN0YXRlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdIDogbnVsbDtcbiAgdmFyIGRhdGEgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKCFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkO1xuXG4gICAgdmFyIG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gICAgdmFyIGFsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgdmFyIG9mZnNldCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdO1xuICAgIHZhciBtaW4gPSBvZmZzZXQgKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IG9mZnNldCAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWluTGVuIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBhcnJvd09mZnNldFBhcmVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93ICYmIGdldE9mZnNldFBhcmVudChzdGF0ZS5lbGVtZW50cy5hcnJvdyk7XG4gICAgdmFyIGNsaWVudE9mZnNldCA9IGFycm93T2Zmc2V0UGFyZW50ID8gbWFpbkF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFRvcCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50TGVmdCB8fCAwIDogMDtcbiAgICB2YXIgb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW21haW5BeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJCA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IG9mZnNldCArIG1pbk9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWUgLSBjbGllbnRPZmZzZXQ7XG4gICAgdmFyIHRldGhlck1heCA9IG9mZnNldCArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG4gICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQgLSBvZmZzZXQ7XG4gIH1cblxuICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDI7XG5cbiAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICB2YXIgX2FsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gYm90dG9tIDogcmlnaHQ7XG5cbiAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICB2YXIgX2xlbiA9IGFsdEF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICB2YXIgaXNPcmlnaW5TaWRlID0gW3RvcCwgbGVmdF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICB2YXIgX29mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkMiA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbYWx0QXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIDogMDtcblxuICAgIHZhciBfdGV0aGVyTWluID0gaXNPcmlnaW5TaWRlID8gX21pbiA6IF9vZmZzZXQgLSByZWZlcmVuY2VSZWN0W19sZW5dIC0gcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXM7XG5cbiAgICB2YXIgX3RldGhlck1heCA9IGlzT3JpZ2luU2lkZSA/IF9vZmZzZXQgKyByZWZlcmVuY2VSZWN0W19sZW5dICsgcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXMgOiBfbWF4O1xuXG4gICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB0ZXRoZXIgJiYgaXNPcmlnaW5TaWRlID8gd2l0aGluTWF4Q2xhbXAoX3RldGhlck1pbiwgX29mZnNldCwgX3RldGhlck1heCkgOiB3aXRoaW4odGV0aGVyID8gX3RldGhlck1pbiA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IF90ZXRoZXJNYXggOiBfbWF4KTtcblxuICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCAiZXhwb3J0IHsgZGVmYXVsdCBhcyBhcHBseVN0eWxlcyB9IGZyb20gXCIuL2FwcGx5U3R5bGVzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFycm93IH0gZnJvbSBcIi4vYXJyb3cuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29tcHV0ZVN0eWxlcyB9IGZyb20gXCIuL2NvbXB1dGVTdHlsZXMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXZlbnRMaXN0ZW5lcnMgfSBmcm9tIFwiLi9ldmVudExpc3RlbmVycy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmbGlwIH0gZnJvbSBcIi4vZmxpcC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoaWRlIH0gZnJvbSBcIi4vaGlkZS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvZmZzZXQgfSBmcm9tIFwiLi9vZmZzZXQuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcG9wcGVyT2Zmc2V0cyB9IGZyb20gXCIuL3BvcHBlck9mZnNldHMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcHJldmVudE92ZXJmbG93IH0gZnJvbSBcIi4vcHJldmVudE92ZXJmbG93LmpzXCI7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEhUTUxFbGVtZW50U2Nyb2xsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICB9O1xufSIsICJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iLCAiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXROb2RlU2Nyb2xsIGZyb20gXCIuL2dldE5vZGVTY3JvbGwuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50U2NhbGVkKGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gcm91bmQocmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDE7XG4gIHZhciBzY2FsZVkgPSByb3VuZChyZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxO1xuICByZXR1cm4gc2NhbGVYICE9PSAxIHx8IHNjYWxlWSAhPT0gMTtcbn0gLy8gUmV0dXJucyB0aGUgY29tcG9zaXRlIHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LlxuLy8gQ29tcG9zaXRlIG1lYW5zIGl0IHRha2VzIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zIGFzIHdlbGwgYXMgbGF5b3V0LlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXBvc2l0ZVJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudCwgaXNGaXhlZCkge1xuICBpZiAoaXNGaXhlZCA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZCA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50SXNTY2FsZWQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNFbGVtZW50U2NhbGVkKG9mZnNldFBhcmVudCk7XG4gIHZhciBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudElzU2NhbGVkLCBpc0ZpeGVkKTtcbiAgdmFyIHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICB2YXIgb2Zmc2V0cyA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEwNzhcbiAgICBpc1Njcm9sbFBhcmVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgb2Zmc2V0cyA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUpO1xuICAgICAgb2Zmc2V0cy54ICs9IG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ICs9IG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54LFxuICAgIHk6IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59IiwgImltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcblxuZnVuY3Rpb24gb3JkZXIobW9kaWZpZXJzKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIG1hcC5zZXQobW9kaWZpZXIubmFtZSwgbW9kaWZpZXIpO1xuICB9KTsgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuXG4gIGZ1bmN0aW9uIHNvcnQobW9kaWZpZXIpIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcbiAgICB2YXIgcmVxdWlyZXMgPSBbXS5jb25jYXQobW9kaWZpZXIucmVxdWlyZXMgfHwgW10sIG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIHJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIHZhciBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkZXJNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIC8vIG9yZGVyIGJhc2VkIG9uIGRlcGVuZGVuY2llc1xuICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7IC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG5cbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwaGFzZSkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgcmV0dXJuIG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZTtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZm4pIHtcbiAgdmFyIHBlbmRpbmc7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICBwZW5kaW5nID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNvbHZlKGZuKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwZW5kaW5nO1xuICB9O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUJ5TmFtZShtb2RpZmllcnMpIHtcbiAgdmFyIG1lcmdlZCA9IG1vZGlmaWVycy5yZWR1Y2UoZnVuY3Rpb24gKG1lcmdlZCwgY3VycmVudCkge1xuICAgIHZhciBleGlzdGluZyA9IG1lcmdlZFtjdXJyZW50Lm5hbWVdO1xuICAgIG1lcmdlZFtjdXJyZW50Lm5hbWVdID0gZXhpc3RpbmcgPyBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZywgY3VycmVudCwge1xuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3Rpbmcub3B0aW9ucywgY3VycmVudC5vcHRpb25zKSxcbiAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLmRhdGEsIGN1cnJlbnQuZGF0YSlcbiAgICB9KSA6IGN1cnJlbnQ7XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfSwge30pOyAvLyBJRTExIGRvZXMgbm90IHN1cHBvcnQgT2JqZWN0LnZhbHVlc1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhtZXJnZWQpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG1lcmdlZFtrZXldO1xuICB9KTtcbn0iLCAiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tIFwiLi91dGlscy9vcmRlck1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL3V0aWxzL2RlYm91bmNlLmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiAnYWJzb2x1dGUnXG59O1xuXG5mdW5jdGlvbiBhcmVWYWxpZEVsZW1lbnRzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wcGVyR2VuZXJhdG9yKGdlbmVyYXRvck9wdGlvbnMpIHtcbiAgaWYgKGdlbmVyYXRvck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdlbmVyYXRvck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfZ2VuZXJhdG9yT3B0aW9ucyA9IGdlbmVyYXRvck9wdGlvbnMsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0TW9kaWZpZXJzLFxuICAgICAgZGVmYXVsdE1vZGlmaWVycyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9PT0gdm9pZCAwID8gW10gOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0T3B0aW9ucyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPT09IHZvaWQgMCA/IERFRkFVTFRfT1BUSU9OUyA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZjI7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBkZWZhdWx0T3B0aW9ucyksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXI6IHBvcHBlclxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fVxuICAgIH07XG4gICAgdmFyIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB2YXIgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5zdGFuY2UgPSB7XG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKHNldE9wdGlvbnNBY3Rpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2V0T3B0aW9uc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHNldE9wdGlvbnNBY3Rpb24oc3RhdGUub3B0aW9ucykgOiBzZXRPcHRpb25zQWN0aW9uO1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHN0YXRlLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgc3RhdGUub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHN0YXRlLnNjcm9sbFBhcmVudHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpXG4gICAgICAgIH07IC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG5cbiAgICAgICAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhtZXJnZUJ5TmFtZShbXS5jb25jYXQoZGVmYXVsdE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpKSk7IC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gbS5lbmFibGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSBcdTIwMTMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG5cblxuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJyksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlcilcbiAgICAgICAgfTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG5cbiAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7IC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RpZmllci5kYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIFx1MjAxMyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICAgICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYuZWZmZWN0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZWZmZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNsZWFudXBGbiA9IGVmZmVjdCh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIG5vb3BGbiA9IGZ1bmN0aW9uIG5vb3BGbigpIHt9O1xuXG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07IiwgImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwgImV4cG9ydCAqIGZyb20gXCIuL2VudW1zLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2RpZmllcnMvaW5kZXguanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93LCBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyQmFzZSB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciB9IGZyb20gXCIuL3BvcHBlci5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJMaXRlIH0gZnJvbSBcIi4vcG9wcGVyLWxpdGUuanNcIjsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBCYXNlIH07XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmcm9tIHdoaWNoIHRoZSBtb3N0IGNsYXNzZXMgYXJlIGRlcml2ZWQuXG4gKlxuICogVGhpcyBjbGFzcyBoYXMgYmVzaWRlcyBhIGB0b1N0cmluZ2Agd2hpY2ggcmV0dXJucyB0aGUganNvbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0XG4gKiBhbHNvIGEgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcy5cbiAqXG4gKiBUaGVyZWZvcmUsIHRoZSBjbGFzcyBoYXMgYSBzdGF0aWMgbWV0aG9kIGAgW1N5bWJvbC5oYXNJbnN0YW5jZV0odGhhdClgIHdoaWNoIHJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0XG4gKiBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MuXG4gKlxuICogQHNlZSBbaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3ltYm9sL2hhc0luc3RhbmNlXShkZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3ltYm9sL2hhc0luc3RhbmNlKVxuICpcbiAqIERlcml2ZWQgY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IGEgc3RhdGljIGdldHRlciBgaW5zdGFuY2VTeW1ib2xgIHdoaWNoIHJldHVybnMgYSB1bmlxdWUgc3ltYm9sLlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcbiAqICAgIHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9iYXNlXCIpO1xuICogfVxuICogYGBgXG4gKlxuICogVGhlIGNsYXNzIHdhcyBmb3JtZXJseSBjYWxsZWQgT2JqZWN0LlxuICpcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBiYXNlIGNsYXNzIGZvciB0aGUgbW9zdCBjbGFzc2VzIGluIHRoZSBtb25zdGVyIGxpYnJhcnlcbiAqL1xuY2xhc3MgQmFzZSBleHRlbmRzIE9iamVjdCB7XG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL2Jhc2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEBwYXJhbSB0aGF0XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdKHRoYXQpIHtcblx0XHRpZiAoXG5cdFx0XHR0aGF0ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdHRoYXQgPT09IG51bGwgfHxcblx0XHRcdCh0eXBlb2YgdGhhdCAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdGhhdCAhPT0gXCJmdW5jdGlvblwiKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRoYXRDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGF0KTtcblx0XHRpZiAoXG5cdFx0XHR0aGF0Q2xhc3MgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0dGhhdENsYXNzID09PSBudWxsIHx8XG5cdFx0XHQodHlwZW9mIHRoYXRDbGFzcyAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdGhhdENsYXNzICE9PSBcImZ1bmN0aW9uXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKGNoZWNrSW5zdGFuY2VTeW1ib2wuYXBwbHkodGhpcywgW3RoYXRDbGFzc10pID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyB0aGlzIGNhbGwgdGhlIHN0YXRpYyBtZXRob2Qgb2YgdGhlIHN1cGVyIGNsYXNzLCBpZiB0aGVyZSBpcyBvbmVcblx0XHRyZXR1cm4gc3VwZXJbU3ltYm9sLmhhc0luc3RhbmNlXSh0aGF0KTtcblx0fVxufVxuXG4vKipcbiAqIHRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBjbGFzcyBoYXMgYSBzdGF0aWMgZ2V0dGVyIGBpbnN0YW5jZVN5bWJvbGAgYW5kIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIGdldHRlciBpcyBlcXVhbCB0byB0aGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9ialxuICogQHJldHVybiB7Ym9vbGVhbnxhbnl8Ym9vbGVhbn1cbiAqIEBzaW5jZSAyLjEuMFxuICovXG5mdW5jdGlvbiBjaGVja0luc3RhbmNlU3ltYm9sKG9iaikge1xuXHRpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShpbnN0YW5jZVN5bWJvbCkgPT09IGZhbHNlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Y29uc3QgcHJvdG8gPSBvYmo/LmNvbnN0cnVjdG9yO1xuXHRpZiAoXG5cdFx0cHJvdG8gPT09IHVuZGVmaW5lZCB8fFxuXHRcdHByb3RvID09PSBudWxsIHx8XG5cdFx0KHR5cGVvZiBwcm90byAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcHJvdG8gIT09IFwiZnVuY3Rpb25cIilcblx0KSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKHByb3RvLmhhc093blByb3BlcnR5KGluc3RhbmNlU3ltYm9sKSAhPT0gdHJ1ZSkge1xuXHRcdHJldHVybiBjaGVja0luc3RhbmNlU3ltYm9sLmFwcGx5KHRoaXMsIFtvYmouX19wcm90b19fXSk7XG5cdH1cblxuXHRjb25zdCBzeW1ib2wgPSBwcm90b1tpbnN0YW5jZVN5bWJvbF07XG5cdGlmIChzeW1ib2wgPT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChvYmouX19wcm90b19fKSB7XG5cdFx0XHRyZXR1cm4gY2hlY2tJbnN0YW5jZVN5bWJvbChvYmouX19wcm90b19fKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChzeW1ib2wgPT09IHRoaXNbaW5zdGFuY2VTeW1ib2xdKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gY2hlY2tJbnN0YW5jZVN5bWJvbC5hcHBseSh0aGlzLCBbb2JqLl9fcHJvdG9fX10pO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgU3RhY2sgfTtcblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgUXVldWUoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIFN0YWNrIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvc3RhY2tcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzRW1wdHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPT09IDA7XG5cdH1cblxuXHQvKipcblx0ICogbG9va3MgYXQgdGhlIG9iamVjdCBhdCB0aGUgdG9wIG9mIHRoaXMgc3RhY2sgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRoZSBzdGFjay5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBlZWsoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmRhdGE/Llt0aGlzLmRhdGEubGVuZ3RoIC0gMV07XG5cdH1cblxuXHQvKipcblx0ICogcHVzaGVzIGFuIGl0ZW0gb250byB0aGUgdG9wIG9mIHRoaXMgc3RhY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UXVldWV9XG5cdCAqL1xuXHRwdXNoKHZhbHVlKSB7XG5cdFx0dGhpcy5kYXRhLnB1c2godmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgZW50cmllc1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZXMgdGhlIG9iamVjdCBhdCB0aGUgdG9wIG9mIHRoaXMgc3RhY2sgYW5kIHJldHVybnNcblx0ICogdGhhdCBvYmplY3QgYXMgdGhlIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24uIGlzIHRoZSBzdGFjayBlbXB0eVxuXHQgKiB0aGUgcmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZC5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBvcCgpIHtcblx0XHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmRhdGEucG9wKCk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge1xuXHRpc0FycmF5LFxuXHRpc0ludGVnZXIsXG5cdGlzT2JqZWN0LFxuXHRpc1ByaW1pdGl2ZSxcblx0aXNTdHJpbmcsXG59IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSBcIi4uL3R5cGVzL3N0YWNrLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVJbnRlZ2VyLFxuXHR2YWxpZGF0ZUJvb2xlYW4sXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IFBhdGhmaW5kZXIsIERFTElNSVRFUiwgV0lMRENBUkQgfTtcblxuLyoqXG4gKiBwYXRoIHNlcGFyYXRvclxuICpcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBERUxJTUlURVIgPSBcIi5cIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgV0lMRENBUkQgPSBcIipcIjtcblxuLyoqXG4gKiBQYXRoZmluZGVyIGlzIGEgY2xhc3MgdG8gZmluZCBhIHBhdGggdG8gYW4gb2JqZWN0LlxuICpcbiAqIFdpdGggdGhlIGhlbHAgb2YgdGhlIHBhdGhmaW5kZXIsIHZhbHVlcyBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbiBmcm9tIGFuIG9iamVjdCBjb25zdHJ1Y3QuXG4gKlxuICogYGBgXG4gKiBuZXcgUGF0aGZpbmRlcih7XG4gKiBhOiB7XG4gKiAgICAgYjoge1xuICogICAgICAgICBmOiBbXG4gKiAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgZzogZmFsc2UsXG4gKiAgICAgICAgICAgICB9XG4gKiAgICAgICAgIF0sXG4gKiAgICAgfVxuICogfVxuICogfSkuZ2V0VmlhKFwiYS5iLmYuMC5nXCIpOyAvLyBcdTIxQTYgZmFsc2VcbiAqIGBgYFxuICpcbiAqIGlmIGEgdmFsdWUgaXMgbm90IHByZXNlbnQgb3IgaGFzIHRoZSB3cm9uZyB0eXBlLCBhIGNvcnJlc3BvbmRpbmcgZXhjZXB0aW9uIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIG5ldyBQYXRoZmluZGVyKHt9KS5nZXRWaWEoXCJhLmIuZi4wLmdcIik7IC8vIFx1MjFBNiBFcnJvclxuICogYGBgXG4gKlxuICogVGhlIGBQYXRoZmluZGVyLmV4aXN0cygpYCBtZXRob2QgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBhY2Nlc3MgdG8gdGhlIHBhdGggaXMgcG9zc2libGUuXG4gKlxuICogYGBgXG4gKiBuZXcgUGF0aGZpbmRlcih7fSkuZXhpc3RzKFwiYS5iLmYuMC5nXCIpOyAvLyBcdTIxQTYgZmFsc2VcbiAqIGBgYFxuICpcbiAqIHBhdGhmaW5kZXIgY2FuIGFsc28gYmUgdXNlZCB0byBidWlsZCBvYmplY3Qgc3RydWN0dXJlcy4gdG8gZG8gdGhpcywgdGhlIGBQYXRoZmluZGVyLnNldFZpYSgpYCBtZXRob2QgbXVzdCBiZSB1c2VkLlxuICpcbiAqIGBgYFxuICogb2JqID0ge307XG4gKiBuZXcgUGF0aGZpbmRlcihvYmopLnNldFZpYSgnYS5iLjAuYycsIHRydWUpOyAvLyBcdTIxQTYge2E6e2I6W3tjOnRydWV9XX19XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL3BhdGhmaW5kZXIvZXhhbXBsZS0xLyBFeGFtcGxlIDFcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvcGF0aGZpbmRlci9leGFtcGxlLTIvIEV4YW1wbGUgMlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgUGF0aGZpbmRlciBpcyBhIGNsYXNzIHRvIGZpbmQgYSBwYXRoIHRvIGFuIG9iamVjdC5cbiAqL1xuY2xhc3MgUGF0aGZpbmRlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY29uc3RydWN0b3IuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgLSBUaGUgb2JqZWN0IHBhcmFtZXRlciBmb3IgdGhlIGNvbnN0cnVjdG9yLlxuXHQgKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBwcm92aWRlZCBvYmplY3QgcGFyYW1ldGVyIGlzIGEgc2ltcGxlIHR5cGUuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvYmplY3QpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGlzUHJpbWl0aXZlKG9iamVjdCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBwYXJhbWV0ZXIgbXVzdCBub3QgYmUgYSBzaW1wbGUgdHlwZVwiKTtcblx0XHR9XG5cblx0XHR0aGlzLm9iamVjdCA9IG9iamVjdDtcblx0XHR0aGlzLndpbGRDYXJkID0gV0lMRENBUkQ7XG5cdH1cblxuXHQvKipcblx0ICogc2V0IHdpbGRjYXJkXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB3aWxkY2FyZFxuXHQgKiBAcmV0dXJuIHtQYXRoZmluZGVyfVxuXHQgKiBAc2luY2UgMS43LjBcblx0ICovXG5cdHNldFdpbGRDYXJkKHdpbGRjYXJkKSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcod2lsZGNhcmQpO1xuXHRcdHRoaXMud2lsZENhcmQgPSB3aWxkY2FyZDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuXHQgKiBAc2luY2UgMS40LjBcblx0ICogQHJldHVybiB7Kn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG5cdCAqL1xuXHRnZXRWaWEocGF0aCkge1xuXHRcdHJldHVybiBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCB0aGlzLm9iamVjdCwgcGF0aCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQYXRoZmluZGVyfVxuXHQgKiBAc2luY2UgMS40LjBcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcblx0ICovXG5cdHNldFZpYShwYXRoLCB2YWx1ZSkge1xuXHRcdHNldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHRoaXMub2JqZWN0LCBwYXRoLCB2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlIFZpYSBQYXRoXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG5cdCAqIEByZXR1cm4ge1BhdGhmaW5kZXJ9XG5cdCAqIEBzaW5jZSAxLjYuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuXHQgKi9cblx0ZGVsZXRlVmlhKHBhdGgpIHtcblx0XHRkZWxldGVWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCB0aGlzLm9iamVjdCwgcGF0aCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcblx0ICogQHJldHVybiB7Ym9vbH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHNpbmNlIDEuNC4wXG5cdCAqL1xuXHRleGlzdHMocGF0aCkge1xuXHRcdHRyeSB7XG5cdFx0XHRnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCB0aGlzLm9iamVjdCwgcGF0aCwgdHJ1ZSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdFxuICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2hlY2tcbiAqIEByZXR1cm4ge01hcH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXRlcmF0ZShzdWJqZWN0LCBwYXRoLCBjaGVjaykge1xuXHRpZiAoY2hlY2sgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNoZWNrID0gZmFsc2U7XG5cdH1cblx0dmFsaWRhdGVCb29sZWFuKGNoZWNrKTtcblxuXHRjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG5cblx0aWYgKGlzQXJyYXkocGF0aCkpIHtcblx0XHRwYXRoID0gcGF0aC5qb2luKERFTElNSVRFUik7XG5cdH1cblxuXHRpZiAoaXNPYmplY3Qoc3ViamVjdCkgfHwgaXNBcnJheShzdWJqZWN0KSkge1xuXHRcdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHN1YmplY3QpKSB7XG5cdFx0XHRyZXN1bHQuc2V0KGtleSwgZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdmFsdWUsIHBhdGgsIGNoZWNrKSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGtleSA9IHBhdGguc3BsaXQoREVMSU1JVEVSKS5zaGlmdCgpO1xuXHRcdHJlc3VsdC5zZXQoa2V5LCBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBzdWJqZWN0LCBwYXRoLCBjaGVjaykpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN1YmplY3RcbiAqIEBwYXJhbSBwYXRoXG4gKiBAcGFyYW0gY2hlY2tcbiAqIEByZXR1cm4ge1Z8KnxNYXB9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVWaWFQYXRoKHN1YmplY3QsIHBhdGgsIGNoZWNrKSB7XG5cdGlmIChjaGVjayA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y2hlY2sgPSBmYWxzZTtcblx0fVxuXHR2YWxpZGF0ZUJvb2xlYW4oY2hlY2spO1xuXG5cdGlmICghKGlzQXJyYXkocGF0aCkgfHwgaXNTdHJpbmcocGF0aCkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJ0eXBlIGVycm9yOiBhIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBpbiBnZXRWYWx1ZVZpYVBhdGhcIixcblx0XHQpO1xuXHR9XG5cblx0bGV0IHBhcnRzO1xuXHRpZiAoaXNTdHJpbmcocGF0aCkpIHtcblx0XHRpZiAocGF0aCA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuIHN1YmplY3Q7XG5cdFx0fVxuXG5cdFx0cGFydHMgPSBwYXRoLnNwbGl0KERFTElNSVRFUik7XG5cdH1cblxuXHRsZXQgY3VycmVudCA9IHBhcnRzLnNoaWZ0KCk7XG5cblx0aWYgKGN1cnJlbnQgPT09IHRoaXMud2lsZENhcmQpIHtcblx0XHRyZXR1cm4gaXRlcmF0ZS5jYWxsKHRoaXMsIHN1YmplY3QsIHBhcnRzLmpvaW4oREVMSU1JVEVSKSwgY2hlY2spO1xuXHR9XG5cblx0aWYgKGlzT2JqZWN0KHN1YmplY3QpIHx8IGlzQXJyYXkoc3ViamVjdCkpIHtcblx0XHRsZXQgYW5jaG9yO1xuXHRcdGlmIChzdWJqZWN0IGluc3RhbmNlb2YgTWFwIHx8IHN1YmplY3QgaW5zdGFuY2VvZiBXZWFrTWFwKSB7XG5cdFx0XHRhbmNob3IgPSBzdWJqZWN0LmdldChjdXJyZW50KTtcblx0XHR9IGVsc2UgaWYgKHN1YmplY3QgaW5zdGFuY2VvZiBTZXQgfHwgc3ViamVjdCBpbnN0YW5jZW9mIFdlYWtTZXQpIHtcblx0XHRcdGN1cnJlbnQgPSBwYXJzZUludChjdXJyZW50KTtcblx0XHRcdHZhbGlkYXRlSW50ZWdlcihjdXJyZW50KTtcblx0XHRcdGFuY2hvciA9IFsuLi5zdWJqZWN0XT8uW2N1cnJlbnRdO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIFdlYWtSZWYgPT09IFwiZnVuY3Rpb25cIiAmJiBzdWJqZWN0IGluc3RhbmNlb2YgV2Vha1JlZikge1xuXHRcdFx0dGhyb3cgRXJyb3IoXCJ1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlIChXZWFrUmVmKVwiKTtcblx0XHR9IGVsc2UgaWYgKGlzQXJyYXkoc3ViamVjdCkpIHtcblx0XHRcdGN1cnJlbnQgPSBwYXJzZUludChjdXJyZW50KTtcblx0XHRcdHZhbGlkYXRlSW50ZWdlcihjdXJyZW50KTtcblx0XHRcdGFuY2hvciA9IHN1YmplY3Q/LltjdXJyZW50XTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YW5jaG9yID0gc3ViamVjdD8uW2N1cnJlbnRdO1xuXHRcdH1cblxuXHRcdGlmIChpc09iamVjdChhbmNob3IpIHx8IGlzQXJyYXkoYW5jaG9yKSkge1xuXHRcdFx0cmV0dXJuIGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIGFuY2hvciwgcGFydHMuam9pbihERUxJTUlURVIpLCBjaGVjayk7XG5cdFx0fVxuXG5cdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdHRocm93IEVycm9yKGB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZCAoJHtwYXJ0cy5qb2luKERFTElNSVRFUil9KWApO1xuXHRcdH1cblxuXHRcdGlmIChjaGVjayA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG5cdFx0XHRcdE9iamVjdC5nZXRQcm90b3R5cGVPZihzdWJqZWN0KSxcblx0XHRcdFx0Y3VycmVudCxcblx0XHRcdCk7XG5cblx0XHRcdGlmICghc3ViamVjdC5oYXNPd25Qcm9wZXJ0eShjdXJyZW50KSAmJiBkZXNjcmlwdG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgRXJyb3IoXCJ1bmtub3duIHZhbHVlIFwiICsgY3VycmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFuY2hvcjtcblx0fVxuXG5cdHRocm93IFR5cGVFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZSAke3R5cGVvZiBzdWJqZWN0fSBmb3IgcGF0aCAke3BhdGh9YCk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZXRWYWx1ZVZpYVBhdGgoc3ViamVjdCwgcGF0aCwgdmFsdWUpIHtcblx0aWYgKCEoaXNBcnJheShwYXRoKSB8fCBpc1N0cmluZyhwYXRoKSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIGVycm9yOiBhIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBhbiBhcnJheVwiKTtcblx0fVxuXG5cdGxldCBwYXJ0cztcblx0aWYgKGlzQXJyYXkocGF0aCkpIHtcblx0XHRpZiAocGF0aC5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRwYXJ0cyA9IHBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0cGFydHMgPSBwYXRoLnNwbGl0KERFTElNSVRFUik7XG5cdH1cblxuXHRsZXQgbGFzdCA9IHBhcnRzLnBvcCgpO1xuXHRjb25zdCBzdWJwYXRoID0gcGFydHMuam9pbihERUxJTUlURVIpO1xuXG5cdGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cdGxldCBjdXJyZW50ID0gc3VicGF0aDtcblx0d2hpbGUgKHRydWUpIHtcblx0XHR0cnkge1xuXHRcdFx0Z2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgY3VycmVudCwgdHJ1ZSk7XG5cdFx0XHRicmVhaztcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0c3RhY2sucHVzaChjdXJyZW50KTtcblx0XHRwYXJ0cy5wb3AoKTtcblx0XHRjdXJyZW50ID0gcGFydHMuam9pbihERUxJTUlURVIpO1xuXG5cdFx0aWYgKGN1cnJlbnQgPT09IFwiXCIpIGJyZWFrO1xuXHR9XG5cblx0d2hpbGUgKCFzdGFjay5pc0VtcHR5KCkpIHtcblx0XHRjdXJyZW50ID0gc3RhY2sucG9wKCk7XG5cdFx0bGV0IG9iaiA9IHt9O1xuXG5cdFx0aWYgKCFzdGFjay5pc0VtcHR5KCkpIHtcblx0XHRcdGNvbnN0IG4gPSBzdGFjay5wZWVrKCkuc3BsaXQoREVMSU1JVEVSKS5wb3AoKTtcblx0XHRcdGlmIChpc0ludGVnZXIocGFyc2VJbnQobikpKSB7XG5cdFx0XHRcdG9iaiA9IFtdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHNldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHN1YmplY3QsIGN1cnJlbnQsIG9iaik7XG5cdH1cblxuXHRjb25zdCBhbmNob3IgPSBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBzdWJqZWN0LCBzdWJwYXRoKTtcblxuXHRpZiAoIShpc09iamVjdChzdWJqZWN0KSB8fCBpc0FycmF5KHN1YmplY3QpKSkge1xuXHRcdHRocm93IFR5cGVFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZTogJHt0eXBlb2Ygc3ViamVjdH0gaW4gc2V0VmFsdWVWaWFQYXRoYCk7XG5cdH1cblxuXHRpZiAoYW5jaG9yIGluc3RhbmNlb2YgTWFwIHx8IGFuY2hvciBpbnN0YW5jZW9mIFdlYWtNYXApIHtcblx0XHRhbmNob3Iuc2V0KGxhc3QsIHZhbHVlKTtcblx0fSBlbHNlIGlmIChhbmNob3IgaW5zdGFuY2VvZiBTZXQgfHwgYW5jaG9yIGluc3RhbmNlb2YgV2Vha1NldCkge1xuXHRcdGFuY2hvci5hcHBlbmQodmFsdWUpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBXZWFrUmVmID09PSBcImZ1bmN0aW9uXCIgJiYgYW5jaG9yIGluc3RhbmNlb2YgV2Vha1JlZikge1xuXHRcdHRocm93IEVycm9yKFwidW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZSBpbiBzZXRWYWx1ZVZpYVBhdGhcIik7XG5cdH0gZWxzZSBpZiAoaXNBcnJheShhbmNob3IpKSB7XG5cdFx0bGFzdCA9IHBhcnNlSW50KGxhc3QpO1xuXHRcdHZhbGlkYXRlSW50ZWdlcihsYXN0KTtcblx0XHRhc3NpZ25Qcm9wZXJ0eShhbmNob3IsIFwiXCIgKyBsYXN0LCB2YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0YXNzaWduUHJvcGVydHkoYW5jaG9yLCBsYXN0LCB2YWx1ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5mdW5jdGlvbiBhc3NpZ25Qcm9wZXJ0eShvYmplY3QsIGtleSwgdmFsdWUpIHtcblx0aWYgKCFvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdG9iamVjdFtrZXldID0gdmFsdWU7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRkZWxldGUgb2JqZWN0W2tleV07XG5cdH1cblxuXHRvYmplY3Rba2V5XSA9IHZhbHVlO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZVZhbHVlVmlhUGF0aChzdWJqZWN0LCBwYXRoKSB7XG5cdGlmICghKGlzQXJyYXkocGF0aCkgfHwgaXNTdHJpbmcocGF0aCkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJ0eXBlIGVycm9yOiBhIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBpbiBkZWxldGVWYWx1ZVZpYVBhdGhcIixcblx0XHQpO1xuXHR9XG5cblx0bGV0IHBhcnRzO1xuXHRpZiAoaXNBcnJheShwYXRoKSkge1xuXHRcdGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHBhcnRzID0gcGF0aDtcblx0fSBlbHNlIHtcblx0XHRwYXJ0cyA9IHBhdGguc3BsaXQoREVMSU1JVEVSKTtcblx0fVxuXG5cdGxldCBsYXN0ID0gcGFydHMucG9wKCk7XG5cdGNvbnN0IHN1YlBhdGggPSBwYXJ0cy5qb2luKERFTElNSVRFUik7XG5cblx0Y29uc3QgYW5jaG9yID0gZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgc3ViUGF0aCk7XG5cblx0aWYgKGFuY2hvciBpbnN0YW5jZW9mIE1hcCkge1xuXHRcdGFuY2hvci5kZWxldGUobGFzdCk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0YW5jaG9yIGluc3RhbmNlb2YgU2V0IHx8XG5cdFx0YW5jaG9yIGluc3RhbmNlb2YgV2Vha01hcCB8fFxuXHRcdGFuY2hvciBpbnN0YW5jZW9mIFdlYWtTZXQgfHxcblx0XHQodHlwZW9mIFdlYWtSZWYgPT09IFwiZnVuY3Rpb25cIiAmJiBhbmNob3IgaW5zdGFuY2VvZiBXZWFrUmVmKVxuXHQpIHtcblx0XHR0aHJvdyBFcnJvcihcInVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGUgaW4gZGVsZXRlVmFsdWVWaWFQYXRoXCIpO1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkoYW5jaG9yKSkge1xuXHRcdGxhc3QgPSBwYXJzZUludChsYXN0KTtcblx0XHR2YWxpZGF0ZUludGVnZXIobGFzdCk7XG5cdFx0ZGVsZXRlIGFuY2hvcltsYXN0XTtcblx0fSBlbHNlIHtcblx0XHRkZWxldGUgYW5jaG9yW2xhc3RdO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNJdGVyYWJsZSwgaXNTdHJpbmcgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcblxuZXhwb3J0IHsgVG9rZW5MaXN0IH07XG5cbi8qKlxuICogQSBgVG9rZW5MaXN0YCBhbGxvd3MgeW91IHRvIG1hbmFnZSB0b2tlbnMgKGluZGl2aWR1YWwgY2hhcmFjdGVyIHN0cmluZ3Mgc3VjaCBhcyBjc3MgY2xhc3NlcyBpbiBhbiBhdHRyaWJ1dGUgc3RyaW5nKS5cbiAqXG4gKiBUaGUgYFRva2VuTGlzdGAgb2ZmZXJzIHZhcmlvdXMgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgdmFsdWVzLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBhZGQsIHJlbW92ZSBvciByZXBsYWNlIGEgY2xhc3MgaW4gYSBDU1MgbGlzdC5cbiAqXG4gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIFtpdGVyYXRpb24gcHJvdG9jb2xdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0l0ZXJhdGlvbl9wcm90b2NvbHMpLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBUb2tlbkxpc3QgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfGl0ZXJhdGFibGV9IGluaXRcblx0ICovXG5cdGNvbnN0cnVjdG9yKGluaXQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudG9rZW5zID0gbmV3IFNldCgpO1xuXG5cdFx0aWYgKHR5cGVvZiBpbml0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0aGlzLmFkZChpbml0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSXRlcmF0b3IgcHJvdG9jb2xcblx0ICpcblx0ICogQHJldHVybiB7U3ltYm9sLml0ZXJhdG9yfVxuXHQgKi9cblx0Z2V0SXRlcmF0b3IoKSB7XG5cdFx0cmV0dXJuIHRoaXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEl0ZXJhdG9yXG5cdCAqXG5cdCAqIEByZXR1cm4ge3tuZXh0OiAoKGZ1bmN0aW9uKCk6ICh7dmFsdWU6ICosIGRvbmU6IGJvb2xlYW59KSl8Kil9fVxuXHQgKi9cblx0W1N5bWJvbC5pdGVyYXRvcl0oKSB7XG5cdFx0Ly8gVXNlIGEgbmV3IGluZGV4IGZvciBlYWNoIGl0ZXJhdG9yLiBUaGlzIG1ha2VzIG11bHRpcGxlXG5cdFx0Ly8gaXRlcmF0aW9ucyBvdmVyIHRoZSBpdGVyYWJsZSBzYWZlIGZvciBub24tdHJpdmlhbCBjYXNlcyxcblx0XHQvLyBzdWNoIGFzIHVzZSBvZiBicmVhayBvciBuZXN0ZWQgbG9vcGluZyBvdmVyIHRoZSBzYW1lIGl0ZXJhYmxlLlxuXHRcdGxldCBpbmRleCA9IDA7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcygpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG5leHQ6ICgpID0+IHtcblx0XHRcdFx0aWYgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRyZXR1cm4geyB2YWx1ZTogZW50cmllcz8uW2luZGV4KytdLCBkb25lOiBmYWxzZSB9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiB7IGRvbmU6IHRydWUgfTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiBpdCBjb250YWlucyB0b2tlbiwgb3RoZXJ3aXNlIGZhbHNlXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtMi5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGNvbnRhaW5zKHZhbHVlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUgPSB2YWx1ZS50cmltKCk7XG5cdFx0XHRsZXQgY291bnRlciA9IDA7XG5cdFx0XHR2YWx1ZS5zcGxpdChcIiBcIikuZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdFx0aWYgKHRoaXMudG9rZW5zLmhhcyh0b2tlbi50cmltKCkpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRjb3VudGVyKys7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBjb3VudGVyID4gMCA/IHRydWUgOiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHRcdGxldCBjb3VudGVyID0gMDtcblx0XHRcdGZvciAoY29uc3QgdG9rZW4gb2YgdmFsdWUpIHtcblx0XHRcdFx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHRcdFx0XHRpZiAodGhpcy50b2tlbnMuaGFzKHRva2VuLnRyaW0oKSkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGNvdW50ZXIrKztcblx0XHRcdH1cblx0XHRcdHJldHVybiBjb3VudGVyID4gMCA/IHRydWUgOiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHRva2Vuc1xuXHQgKlxuXHQgKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvdG9rZW5saXN0LTMubWpzXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfGl0ZXJhdGFibGV9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Rva2VuTGlzdH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB2YWx1ZVxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdHRoaXMudG9rZW5zLmFkZCh0b2tlbi50cmltKCkpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdFx0XHRcdHRoaXMudG9rZW5zLmFkZCh0b2tlbi50cmltKCkpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5zdXBwb3J0ZWQgdmFsdWVcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCB0b2tlbnNcblx0ICpcblx0ICogQHJldHVybiB7VG9rZW5MaXN0fVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy50b2tlbnMuY2xlYXIoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRva2VuXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtNC5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybiB7VG9rZW5MaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHZhbHVlXG5cdCAqL1xuXHRyZW1vdmUodmFsdWUpIHtcblx0XHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHR2YWx1ZS5zcGxpdChcIiBcIikuZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdFx0dGhpcy50b2tlbnMuZGVsZXRlKHRva2VuLnRyaW0oKSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKGlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHZhbHVlKSB7XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0XHRcdFx0dGhpcy50b2tlbnMuZGVsZXRlKHRva2VuLnRyaW0oKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ1bnN1cHBvcnRlZCB2YWx1ZVwiLCBcInR5cGVzL3Rva2VubGlzdC5tanNcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmVwbGFjZXMgYSB0b2tlbiB3aXRoIGEgbmV3IHRva2VuLlxuXHQgKlxuXHQgKiBpZiB0aGUgcGFzc2VkIHRva2VuIGV4aXN0cywgaXQgaXMgcmVwbGFjZWQgd2l0aCBuZXdUb2tlbiBhbmQgVG9rZW5MaXN0IGlzIHJldHVybmVkLlxuXHQgKiBpZiB0aGUgdG9rZW4gZG9lcyBub3QgZXhpc3QsIG5ld1Rva2VuIGlzIG5vdCBzZXQgYW5kIFRva2VuTGlzdCBpcyByZXR1cm5lZC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuZXdUb2tlblxuXHQgKiBAcmV0dXJuIHtUb2tlbkxpc3R9XG5cdCAqL1xuXHRyZXBsYWNlKHRva2VuLCBuZXdUb2tlbikge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0XHR2YWxpZGF0ZVN0cmluZyhuZXdUb2tlbik7XG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKHRva2VuKSkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYSA9IEFycmF5LmZyb20odGhpcy50b2tlbnMpO1xuXHRcdGNvbnN0IGkgPSBhLmluZGV4T2YodG9rZW4pO1xuXHRcdGlmIChpID09PSAtMSkgcmV0dXJuIHRoaXM7XG5cblx0XHRhLnNwbGljZShpLCAxLCBuZXdUb2tlbik7XG5cdFx0dGhpcy50b2tlbnMgPSBuZXcgU2V0KCk7XG5cdFx0dGhpcy5hZGQoYSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRva2VuIGZyb20gc3RyaW5nLiBJZiB0b2tlbiBkb2Vzbid0IGV4aXN0IGl0J3MgYWRkZWQuXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtNS5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB2YWx1ZVxuXHQgKi9cblx0dG9nZ2xlKHZhbHVlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdHRvZ2dsZVZhbHVlLmNhbGwodGhpcywgdG9rZW4pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR0b2dnbGVWYWx1ZS5jYWxsKHRoaXMsIHRva2VuKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInVuc3VwcG9ydGVkIHZhbHVlXCIsIFwidHlwZXMvdG9rZW5saXN0Lm1qc1wiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIGFuIGFycmF5IHdpdGggYWxsIHRva2Vuc1xuXHQgKlxuXHQgKiBAcmV0dXJuIHthcnJheX1cblx0ICovXG5cdGVudHJpZXMoKSB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20odGhpcy50b2tlbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIGV4ZWN1dGVzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiB3aXRoIGVhY2ggdmFsdWUgb2YgdGhlIHNldFxuXHQgKlxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcmV0dXJuIHtUb2tlbkxpc3R9XG5cdCAqL1xuXHRmb3JFYWNoKGNhbGxiYWNrKSB7XG5cdFx0dmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayk7XG5cdFx0dGhpcy50b2tlbnMuZm9yRWFjaChjYWxsYmFjayk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmV0dXJucyB0aGUgaW5kaXZpZHVhbCB0b2tlbnMgc2VwYXJhdGVkIGJ5IGEgYmxhbmsgY2hhcmFjdGVyXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLmVudHJpZXMoKS5qb2luKFwiIFwiKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdG9rZW5cbiAqIEByZXR1cm4ge3RvZ2dsZVZhbHVlfVxuICogQHRocm93cyB7RXJyb3J9IG11c3QgYmUgY2FsbGVkIHdpdGggVG9rZW5MaXN0LmNhbGxcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlVmFsdWUodG9rZW4pIHtcblx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIFRva2VuTGlzdCkpXG5cdFx0dGhyb3cgRXJyb3IoXCJtdXN0IGJlIGNhbGxlZCB3aXRoIFRva2VuTGlzdC5jYWxsXCIpO1xuXHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdHRva2VuID0gdG9rZW4udHJpbSgpO1xuXHRpZiAodGhpcy5jb250YWlucyh0b2tlbikpIHtcblx0XHR0aGlzLnJlbW92ZSh0b2tlbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0dGhpcy5hZGQodG9rZW4pO1xuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQge1xuXHRERUZBVUxUX1RIRU1FLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfT1BUSU9OUyxcblx0QVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IsXG5cdEFUVFJJQlVURV9USEVNRV9QUkVGSVgsXG5cdEFUVFJJQlVURV9USEVNRV9OQU1FLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJUyxcblx0QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJULFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9SRU1PVkUsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkQsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkRfVFlQRSxcblx0QVRUUklCVVRFX1RFTVBMQVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX1JPTEUsXG5cdEFUVFJJQlVURV9ESVNBQkxFRCxcblx0QVRUUklCVVRFX1ZBTFVFLFxuXHRBVFRSSUJVVEVfT0JKRUNUTElOSyxcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0VEFHX1NDUklQVCxcblx0VEFHX1NUWUxFLFxuXHRUQUdfTElOSyxcblx0QVRUUklCVVRFX0lELFxuXHRBVFRSSUJVVEVfQ0xBU1MsXG5cdEFUVFJJQlVURV9USVRMRSxcblx0QVRUUklCVVRFX1NSQyxcblx0QVRUUklCVVRFX0hSRUYsXG5cdEFUVFJJQlVURV9UWVBFLFxuXHRBVFRSSUJVVEVfTk9OQ0UsXG5cdEFUVFJJQlVURV9UUkFOU0xBVEUsXG5cdEFUVFJJQlVURV9UQUJJTkRFWCxcblx0QVRUUklCVVRFX1NQRUxMQ0hFQ0ssXG5cdEFUVFJJQlVURV9TTE9ULFxuXHRBVFRSSUJVVEVfUEFSVCxcblx0QVRUUklCVVRFX0xBTkcsXG5cdEFUVFJJQlVURV9JVEVNVFlQRSxcblx0QVRUUklCVVRFX0lURU1TQ09QRSxcblx0QVRUUklCVVRFX0lURU1SRUYsXG5cdEFUVFJJQlVURV9JVEVNSUQsXG5cdEFUVFJJQlVURV9JVEVNUFJPUCxcblx0QVRUUklCVVRFX0lTLFxuXHRBVFRSSUJVVEVfSU5QVVRNT0RFLFxuXHRBVFRSSUJVVEVfQUNDRVNTS0VZLFxuXHRBVFRSSUJVVEVfQVVUT0NBUElUQUxJWkUsXG5cdEFUVFJJQlVURV9BVVRPRk9DVVMsXG5cdEFUVFJJQlVURV9DT05URU5URURJVEFCTEUsXG5cdEFUVFJJQlVURV9ESVIsXG5cdEFUVFJJQlVURV9EUkFHR0FCTEUsXG5cdEFUVFJJQlVURV9FTlRFUktFWUhJTlQsXG5cdEFUVFJJQlVURV9FWFBPUlRQQVJUUyxcblx0QVRUUklCVVRFX0hJRERFTixcblx0QVRUUklCVVRFX0ZPUk1fQklORCxcblx0QVRUUklCVVRFX0ZPUk1fQklORF9UWVBFLFxuXHRvYmplY3RVcGRhdGVyTGlua1N5bWJvbCxcblx0Y3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sLFxuXHRpbml0Q29udHJvbENhbGxiYWNrTmFtZSxcblx0QVRUUklCVVRFX1NDUklQVF9IT1NULFxuXHRBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSyxcbn07XG5cbi8qKlxuICogZGVmYXVsdCB0aGVtZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgREVGQVVMVF9USEVNRSA9IFwibW9uc3RlclwiO1xuXG4vKipcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfUFJFRklYID0gXCJkYXRhLW1vbnN0ZXItXCI7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHBhc3Mgb3B0aW9ucyB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX09QVElPTlMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfW9wdGlvbnNgO1xuXG4vKipcbiAqIFRoaXMgaXMgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHBhc3MgdGhlIHNjcmlwdCBob3N0IHRvIGEgY29udHJvbFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNDguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX1NDUklQVF9IT1NUID0gYCR7QVRUUklCVVRFX1BSRUZJWH1zY3JpcHQtaG9zdGA7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHBhc3Mgb3B0aW9ucyB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMwLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SID0gYCR7QVRUUklCVVRFX1BSRUZJWH1vcHRpb25zLXNlbGVjdG9yYDtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcGFzcyB0aGUgY2FsbGJhY2sgdG8gYSBjb250cm9sXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40OC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSyA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW5pdC1jYWxsYmFja2A7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY2FsbGJhY2sgdG8gcGFzcyB0aGUgY2FsbGJhY2sgdG8gYSBjb250cm9sXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40OC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBpbml0Q29udHJvbENhbGxiYWNrTmFtZSA9IGBpbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RIRU1FX1BSRUZJWCA9IGAke0FUVFJJQlVURV9QUkVGSVh9dGhlbWUtYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfVEhFTUVfTkFNRSA9IGAke0FUVFJJQlVURV9USEVNRV9QUkVGSVh9bmFtZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWF0dHJpYnV0ZXNgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI3LjFcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXNlbGVjdC10aGlzYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9cmVwbGFjZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVCA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW5zZXJ0YDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW5zZXJ0LXJlZmVyZW5jZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX1JFTU9WRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9cmVtb3ZlYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfQklORCA9IGAke0FUVFJJQlVURV9QUkVGSVh9YmluZGA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNzMuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9CSU5EID0gYCR7QVRUUklCVVRFX1BSRUZJWH1mb3JtLWJpbmRgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjczLjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0ZPUk1fQklORF9UWVBFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1mb3JtLWJpbmQtdHlwZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0JJTkRfVFlQRSA9IGAke0FUVFJJQlVURV9VUERBVEVSX0JJTkR9LXR5cGVgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI3LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RFTVBMQVRFX1BSRUZJWCA9IGAke0FUVFJJQlVURV9QUkVGSVh9dGVtcGxhdGUtcHJlZml4YDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ST0xFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yb2xlYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9WQUxVRSA9IFwidmFsdWVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX09CSkVDVExJTksgPSBgJHtBVFRSSUJVVEVfUFJFRklYfW9iamVjdGxpbmtgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0VSUk9STUVTU0FHRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9ZXJyb3JgO1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3Qgb2JqZWN0VXBkYXRlckxpbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAb2JqZWN0LXVwZGF0ZXItbGlua1wiLFxuKTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rXCIsXG4pO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgVEFHX1NDUklQVCA9IFwic2NyaXB0XCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBUQUdfU1RZTEUgPSBcInN0eWxlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBUQUdfTElOSyA9IFwibGlua1wiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuXG5jb25zdCBBVFRSSUJVVEVfSUQgPSBcImlkXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5cbmNvbnN0IEFUVFJJQlVURV9DTEFTUyA9IFwiY2xhc3NcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9USVRMRSA9IFwidGl0bGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9TUkMgPSBcInNyY1wiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9IUkVGID0gXCJocmVmXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVFlQRSA9IFwidHlwZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX05PTkNFID0gXCJub25jZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RSQU5TTEFURSA9IFwidHJhbnNsYXRlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVEFCSU5ERVggPSBcInRhYmluZGV4XCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfU1BFTExDSEVDSyA9IFwic3BlbGxjaGVja1wiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1NMT1QgPSBcInNsb3RcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9QQVJUID0gXCJwYXJ0XCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfTEFORyA9IFwibGFuZ1wiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lURU1UWVBFID0gXCJpdGVtdHlwZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lURU1TQ09QRSA9IFwiaXRlbXNjb3BlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVJFRiA9IFwiaXRlbXJlZlwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lURU1JRCA9IFwiaXRlbWlkXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVBST1AgPSBcIml0ZW1wcm9wXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVMgPSBcImlzXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSU5QVVRNT0RFID0gXCJpbnB1dG1vZGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9BQ0NFU1NLRVkgPSBcImFjY2Vzc2tleVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0FVVE9DQVBJVEFMSVpFID0gXCJhdXRvY2FwaXRhbGl6ZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0FVVE9GT0NVUyA9IFwiYXV0b2ZvY3VzXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfQ09OVEVOVEVESVRBQkxFID0gXCJjb250ZW50ZWRpdGFibGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ESVIgPSBcImRpclwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0RSQUdHQUJMRSA9IFwiZHJhZ2dhYmxlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRU5URVJLRVlISU5UID0gXCJlbnRlcmtleWhpbnRcIjtcbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRVhQT1JUUEFSVFMgPSBcImV4cG9ydHBhcnRzXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0hJRERFTiA9IFwiaGlkZGVuXCI7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgVG9rZW5MaXN0IH0gZnJvbSBcIi4uL3R5cGVzL3Rva2VubGlzdC5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlU3RyaW5nLFxuXHR2YWxpZGF0ZVN5bWJvbCxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX09CSkVDVExJTksgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7XG5cdGZpbmRDbG9zZXN0T2JqZWN0TGluayxcblx0YWRkVG9PYmplY3RMaW5rLFxuXHRyZW1vdmVPYmplY3RMaW5rLFxuXHRoYXNPYmplY3RMaW5rLFxuXHRnZXRMaW5rZWRPYmplY3RzLFxuXHR0b2dnbGVBdHRyaWJ1dGVUb2tlbixcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuLFxuXHRjb250YWluc0F0dHJpYnV0ZVRva2VuLFxuXHRyZXBsYWNlQXR0cmlidXRlVG9rZW4sXG5cdGNsZWFyQXR0cmlidXRlVG9rZW5zLFxuXHRmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlLFxuXHRmaW5kQ2xvc2VzdEJ5Q2xhc3MsXG59O1xuXG4vKipcbiAqIEdldCB0aGUgY2xvc2VzdCBvYmplY3QgbGluayBvZiBhIG5vZGVcbiAqXG4gKiBpZiBhIG5vZGUgaXMgc3BlY2lmaWVkIHdpdGhvdXQgYSBvYmplY3QgbGluaywgYSByZWN1cnNpdmUgc2VhcmNoIHVwd2FyZHMgaXMgcGVyZm9ybWVkIHVudGlsIHRoZSBjb3JyZXNwb25kaW5nXG4gKiBvYmplY3QgbGluayBpcyBmb3VuZCwgb3IgdW5kZWZpbmVkIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fHVuZGVmaW5lZH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGZpbmRDbG9zZXN0T2JqZWN0TGluayhlbGVtZW50KSB7XG5cdHJldHVybiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGVsZW1lbnQsIEFUVFJJQlVURV9PQkpFQ1RMSU5LKTtcbn1cblxuLyoqXG4gKiBBZGRzIGEgY2xhc3MgYXR0cmlidXRlIHRvIGFuIGVsZW1lbnQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0gZWxlbWVudFxuICogQHBhcmFtIHN5bWJvbFxuICogQHBhcmFtIG9iamVjdFxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gYWRkVG9PYmplY3RMaW5rKGVsZW1lbnQsIHN5bWJvbCwgb2JqZWN0KSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0ZWxlbWVudFtzeW1ib2xdID0gbmV3IFNldCgpO1xuXHR9XG5cblx0YWRkQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgQVRUUklCVVRFX09CSkVDVExJTkssIHN5bWJvbC50b1N0cmluZygpKTtcblx0ZWxlbWVudFtzeW1ib2xdLmFkZChvYmplY3QpO1xuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFuIG9iamVjdCBmcm9tIGFuIGVsZW1lbnRcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U3ltYm9sfSBzeW1ib2xcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZU9iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBBVFRSSUJVVEVfT0JKRUNUTElOSywgc3ltYm9sLnRvU3RyaW5nKCkpO1xuXHRkZWxldGUgZWxlbWVudFtzeW1ib2xdO1xuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZWxlbWVudCBoYXMgYW4gb2JqZWN0IGxpbmtcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U3ltYm9sfSBzeW1ib2xcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oXG5cdFx0ZWxlbWVudCxcblx0XHRBVFRSSUJVVEVfT0JKRUNUTElOSyxcblx0XHRzeW1ib2wudG9TdHJpbmcoKSxcblx0KTtcbn1cblxuLyoqXG4gKiBUaGUgT2JqZWN0TGluayBjYW4gYmUgdXNlZCB0byBhdHRhY2ggb2JqZWN0cyB0byBIVE1MRWxlbWVudHMuIFRoZSBlbGVtZW50cyBhcmUga2VwdCBpbiBhIHNldCB1bmRlciBhIHVuaXF1ZVxuICogc3ltYm9sIGFuZCBjYW4gYmUgcmVhZCB2aWEgYW4gaXRlcmF0b3Ige0BzZWUge0BsaW5rIGdldExpbmtlZE9iamVjdHN9fS5cbiAqXG4gKiBJbiBhZGRpdGlvbiwgZWxlbWVudHMgd2l0aCBhbiBvYmplY3RMaW5rIHJlY2VpdmUgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9iamVjdGxpbmtgLlxuICpcbiAqIFdpdGggdGhlIG1ldGhvZCAge0BzZWUge0BsaW5rIGFkZFRvT2JqZWN0TGlua319IHRoZSBvYmplY3RzIGNhbiBiZSBhZGRlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U3ltYm9sfSBzeW1ib2xcbiAqIEByZXR1cm4ge0l0ZXJhdG9yfVxuICogQHRocm93cyB7RXJyb3J9IHRoZXJlIGlzIG5vIG9iamVjdCBsaW5rIGZvciBzeW1ib2xcbiAqL1xuZnVuY3Rpb24gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCBzeW1ib2wpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3ltYm9sKHN5bWJvbCk7XG5cblx0aWYgKGVsZW1lbnQ/LltzeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYHRoZXJlIGlzIG5vIG9iamVjdCBsaW5rIGZvciAke3N5bWJvbC50b1N0cmluZygpfWApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnQ/LltzeW1ib2xdW1N5bWJvbC5pdGVyYXRvcl0oKTtcbn1cblxuLyoqXG4gKiBXaXRoIHRoaXMgbWV0aG9kIHRva2VucyBpbiBhbiBhdHRyaWJ1dGUgY2FuIGJlIHN3aXRjaGVkIG9uIG9yIG9mZi4gRm9yIGV4YW1wbGUsIGNsYXNzZXMgY2FuIGJlIHN3aXRjaGVkIG9uIGFuZCBvZmYgaW4gdGhlIGVsZW1lbnRzIGNsYXNzIGF0dHJpYnV0ZS5cbiAqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdG9rZW4pIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHRva2VuKTtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdGtleSxcblx0XHRuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLnRvZ2dsZSh0b2tlbikudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBhZGQgYSB0b2tlbiB0byBhbiBhdHRyaWJ1dGUuIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gYWRkQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB0b2tlbikge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdG9rZW4pO1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0a2V5LFxuXHRcdG5ldyBUb2tlbkxpc3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSkuYWRkKHRva2VuKS50b1N0cmluZygpLFxuXHQpO1xuXG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmVtb3ZlIHRva2VucyBmcm9tIGFuIGF0dHJpYnV0ZS5cbiAqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdG9rZW4pIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdGtleSxcblx0XHRuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLnJlbW92ZSh0b2tlbikudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBhdHRyaWJ1dGUgaGFzIGEgdG9rZW4uXG4gKlxuICogVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB0b2tlbikge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiBuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLmNvbnRhaW5zKHRva2VuKTtcbn1cblxuLyoqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBmcm9tXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICovXG5mdW5jdGlvbiByZXBsYWNlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCBmcm9tLCB0bykge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcoZnJvbSk7XG5cdHZhbGlkYXRlU3RyaW5nKHRvKTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdGtleSxcblx0XHRuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLnJlcGxhY2UoZnJvbSwgdG8pLnRvU3RyaW5nKCksXG5cdCk7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY2xlYXJBdHRyaWJ1dGVUb2tlbnMoZWxlbWVudCwga2V5KSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBcIlwiKTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzLCBzdGFydGluZyBmcm9tIGFuIGBIVE1MRWxlbWVtZW50YCwgZm9yIHRoZSBuZXh0IGVsZW1lbnQgdGhhdCBoYXMgYSBjZXJ0YWluIGF0dHJpYnV0ZS5cbiAqXG4gKiBgYGBodG1sXG4gKiA8ZGl2IGRhdGEtbXktYXR0cmlidXRlPVwiMlwiIGlkPVwiMlwiPlxuICogICAgIDxkaXYgaWQ9XCIxXCI+PC9kaXY+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIC8vIGlmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCAodW5kZWZpbmVkKSwgdGhlbiBvbmx5IHRoZSBhdHRyaWJ1dGUgaXMgY2hlY2tlZC5cbiAqIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzEnKSwnZGF0YS1teS1hdHRyaWJ1dGUnKTsgLy8gXHUyMUE2IG5vZGUgd2l0aCBpZCAyXG4gKiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcyJyksJ2RhdGEtbXktYXR0cmlidXRlJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICpcbiAqIC8vIGlmIGEgdmFsdWUgaXMgc3BlY2lmaWVkLCBmb3IgZXhhbXBsZSBhbiBlbXB0eSBzdHJpbmcsIHRoZW4gdGhlIG5hbWUgYW5kIHRoZSB2YWx1ZSBhcmUgY2hlY2tlZC5cbiAqIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzEnKSwnZGF0YS1teS1hdHRyaWJ1dGUnLCAnJyk7ICAvLyBcdTIxQTYgdW5kZWZpbmVkXG4gKiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ2RhdGEtbXktYXR0cmlidXRlJywgJzInKTsgLy8gXHUyMUE2IG5vZGUgd2l0aCBpZCAyXG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9XG4gKiBAc3VtbWFyeSBmaW5kIGNsb3Nlc3Qgbm9kZVxuICovXG5mdW5jdGlvbiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxFbGVtZW50XCIpKTtcblxuXHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cblx0XHRpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSA9PT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0fVxuXG5cdGxldCBzZWxlY3RvciA9IHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSBzZWxlY3RvciArPSBgPSR7dmFsaWRhdGVTdHJpbmcodmFsdWUpfWA7XG5cdGNvbnN0IHJlc3VsdCA9IGVsZW1lbnQuY2xvc2VzdChgWyR7c2VsZWN0b3J9XWApO1xuXHRpZiAocmVzdWx0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcywgc3RhcnRpbmcgZnJvbSBhbiBgSFRNTEVsZW1lbnRgLCBmb3IgdGhlIG5leHQgZWxlbWVudCB0aGF0IGhhcyBhIGNlcnRhaW4gYXR0cmlidXRlLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgY2xhc3M9XCJteWNsYXNzXCIgaWQ9XCIyXCI+XG4gKiAgICAgPGRpdiBpZD1cIjFcIj48L2Rpdj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gaWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkICh1bmRlZmluZWQpLCB0aGVuIG9ubHkgdGhlIGF0dHJpYnV0ZSBpcyBjaGVja2VkLlxuICogZmluZENsb3Nlc3RCeUNsYXNzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ215Y2xhc3MnKTsgLy8gXHUyMUE2IG5vZGUgd2l0aCBpZCAyXG4gKiBmaW5kQ2xvc2VzdEJ5Q2xhc3MoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzInKSwnbXljbGFzcycpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqIGBgYFxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge2ZpbmRDbG9zZXN0QnlDbGFzc30gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvZG9tL2F0dHJpYnV0ZXMubWpzJztcbiAqIGZpbmRDbG9zZXN0QnlDbGFzcygpO1xuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI3LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9XG4gKiBAc3VtbWFyeSBmaW5kIGNsb3Nlc3Qgbm9kZVxuICovXG5mdW5jdGlvbiBmaW5kQ2xvc2VzdEJ5Q2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgZ2V0R2xvYmFsRnVuY3Rpb24oXCJIVE1MRWxlbWVudFwiKSk7XG5cblx0aWYgKGVsZW1lbnQ/LmNsYXNzTGlzdD8uY29udGFpbnModmFsaWRhdGVTdHJpbmcoY2xhc3NOYW1lKSkpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGNvbnN0IHJlc3VsdCA9IGVsZW1lbnQuY2xvc2VzdChgLiR7Y2xhc3NOYW1lfWApO1xuXHRpZiAocmVzdWx0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7XG5cdGdldERvY3VtZW50LFxuXHRnZXRXaW5kb3csXG5cdGdldERvY3VtZW50RnJhZ21lbnRGcm9tU3RyaW5nLFxuXHRmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMsXG5cdGdldENvbnRhaW5pbmdEb2N1bWVudCxcblx0Z2V0UmVnaXN0ZXJlZEN1c3RvbUVsZW1lbnRzLFxuXHRmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMsXG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGZldGNoZXMgdGhlIGRvY3VtZW50IG9iamVjdFxuICpcbiAqIEluIG5vZGVqcyB0aGlzIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIHBlcmZvcm1lZCB3aXRoIFtqc2RvbV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvanNkb20pLlxuICpcbiAqIGBgYFxuICogaW1wb3J0IHtKU0RPTX0gZnJvbSBcImpzZG9tXCJcbiAqIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcIm9iamVjdFwiKSB7XG4gKiAgICBjb25zdCB7d2luZG93fSA9IG5ldyBKU0RPTSgnJywge1xuICogICAgICAgIHVybDogJ2h0dHA6Ly9leGFtcGxlLmNvbS8nLFxuICogICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlXG4gKiAgICB9KTtcbiAqXG4gKiAgICBbXG4gKiAgICAgICAgJ3NlbGYnLFxuICogICAgICAgICdkb2N1bWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50JyxcbiAqICAgICAgICAnTm9kZScsXG4gKiAgICAgICAgJ0VsZW1lbnQnLFxuICogICAgICAgICdIVE1MRWxlbWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICogICAgICAgICdET01QYXJzZXInLFxuICogICAgICAgICdYTUxTZXJpYWxpemVyJyxcbiAqICAgICAgICAnTm9kZUZpbHRlcicsXG4gKiAgICAgICAgJ0lucHV0RXZlbnQnLFxuICogICAgICAgICdDdXN0b21FdmVudCdcbiAqICAgIF0uZm9yRWFjaChrZXkgPT4gKGdldEdsb2JhbCgpW2tleV0gPSB3aW5kb3dba2V5XSkpO1xuICogfVxuICogYGBgXG4gKlxuICogQHJldHVybiB7b2JqZWN0fVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFxuICovXG5mdW5jdGlvbiBnZXREb2N1bWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXRHbG9iYWwoKT8uW1wiZG9jdW1lbnRcIl07XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwib2JqZWN0XCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3Qgc3VwcG9ydGVkIGVudmlyb25tZW50XCIpO1xuXHR9XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGZldGNoZXMgdGhlIHdpbmRvdyBvYmplY3RcbiAqXG4gKiBJbiBub2RlanMgdGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBiZSBwZXJmb3JtZWQgd2l0aCBbanNkb21dKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2pzZG9tKS5cbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7SlNET019IGZyb20gXCJqc2RvbVwiXG4gKiBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJvYmplY3RcIikge1xuICogICAgY29uc3Qge3dpbmRvd30gPSBuZXcgSlNET00oJycsIHtcbiAqICAgICAgICB1cmw6ICdodHRwOi8vZXhhbXBsZS5jb20vJyxcbiAqICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZVxuICogICAgfSk7XG4gKlxuICogICAgZ2V0R2xvYmFsKClbJ3dpbmRvdyddPXdpbmRvdztcbiAqXG4gKiAgICBbXG4gKiAgICAgICAgJ3NlbGYnLFxuICogICAgICAgICdkb2N1bWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50JyxcbiAqICAgICAgICAnTm9kZScsXG4gKiAgICAgICAgJ0VsZW1lbnQnLFxuICogICAgICAgICdIVE1MRWxlbWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICogICAgICAgICdET01QYXJzZXInLFxuICogICAgICAgICdYTUxTZXJpYWxpemVyJyxcbiAqICAgICAgICAnTm9kZUZpbHRlcicsXG4gKiAgICAgICAgJ0lucHV0RXZlbnQnLFxuICogICAgICAgICdDdXN0b21FdmVudCdcbiAqICAgIF0uZm9yRWFjaChrZXkgPT4gKGdldEdsb2JhbCgpW2tleV0gPSB3aW5kb3dba2V5XSkpO1xuICogfVxuICogYGBgXG4gKlxuICogQHJldHVybiB7b2JqZWN0fVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFxuICovXG5mdW5jdGlvbiBnZXRXaW5kb3coKSB7XG5cdGNvbnN0IHdpbmRvdyA9IGdldEdsb2JhbCgpPy5bXCJ3aW5kb3dcIl07XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFwiKTtcblx0fVxuXG5cdHJldHVybiB3aW5kb3c7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgZmV0Y2hlcyB0aGUgZG9jdW1lbnQgb2JqZWN0XG4gKlxuICogSW4gbm9kZWpzIHRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgcGVyZm9ybWVkIHdpdGggW2pzZG9tXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9qc2RvbSkuXG4gKlxuICogYGBgXG4gKiBpbXBvcnQge0pTRE9NfSBmcm9tIFwianNkb21cIlxuICogaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwib2JqZWN0XCIpIHtcbiAqICAgIGNvbnN0IHt3aW5kb3d9ID0gbmV3IEpTRE9NKCcnLCB7XG4gKiAgICAgICAgdXJsOiAnaHR0cDovL2V4YW1wbGUuY29tLycsXG4gKiAgICAgICAgcHJldGVuZFRvQmVWaXN1YWw6IHRydWVcbiAqICAgIH0pO1xuICpcbiAqICAgIFtcbiAqICAgICAgICAnc2VsZicsXG4gKiAgICAgICAgJ2RvY3VtZW50JyxcbiAqICAgICAgICAnRG9jdW1lbnQnLFxuICogICAgICAgICdOb2RlJyxcbiAqICAgICAgICAnRWxlbWVudCcsXG4gKiAgICAgICAgJ0hUTUxFbGVtZW50JyxcbiAqICAgICAgICAnRG9jdW1lbnRGcmFnbWVudCcsXG4gKiAgICAgICAgJ0RPTVBhcnNlcicsXG4gKiAgICAgICAgJ1hNTFNlcmlhbGl6ZXInLFxuICogICAgICAgICdOb2RlRmlsdGVyJyxcbiAqICAgICAgICAnSW5wdXRFdmVudCcsXG4gKiAgICAgICAgJ0N1c3RvbUV2ZW50J1xuICogICAgXS5mb3JFYWNoKGtleSA9PiAoZ2V0R2xvYmFsKClba2V5XSA9IHdpbmRvd1trZXldKSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJuIHtEb2N1bWVudEZyYWdtZW50fVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmcoaHRtbCkge1xuXHR2YWxpZGF0ZVN0cmluZyhodG1sKTtcblxuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cdGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuXHR0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sO1xuXG5cdHJldHVybiB0ZW1wbGF0ZS5jb250ZW50O1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHNlYXJjaGVzIHVwd2FyZHMgZnJvbSBhIGdpdmVuIGVsZW1lbnQgdG8gZmluZCBhbiBhbmNlc3RvciBlbGVtZW50XG4gKiB3aXRoIGEgc3BlY2lmaWVkIElELCBjb25zaWRlcmluZyBib3RoIG5vcm1hbCBET00gYW5kIHNoYWRvdyBET00uXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudHxTaGFkb3dSb290fSBlbGVtZW50IC0gVGhlIHN0YXJ0aW5nIGVsZW1lbnQgb3Igc2hhZG93IHJvb3QgdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0SWQgLSBUaGUgSUQgb2YgdGhlIHRhcmdldCBlbGVtZW50IHRvIGZpbmQuXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHxudWxsfSAtIFRoZSBhbmNlc3RvciBlbGVtZW50IHdpdGggdGhlIHNwZWNpZmllZCBJRCwgb3IgbnVsbCBpZiBub3QgZm91bmQuXG4gKiBAc2luY2UgMy4yOS4wXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhlbGVtZW50LCB0YXJnZXRJZCkge1xuXHRpZiAoIWVsZW1lbnQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgaGFzIHRoZSB0YXJnZXQgSURcblx0aWYgKGVsZW1lbnQuaWQgPT09IHRhcmdldElkKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHQvLyBTZWFyY2ggd2l0aGluIHRoZSBjdXJyZW50IGVsZW1lbnQncyBzaGFkb3cgcm9vdCwgaWYgaXQgZXhpc3RzXG5cdGlmIChlbGVtZW50LnNoYWRvd1Jvb3QpIHtcblx0XHRjb25zdCB0YXJnZXQgPSBlbGVtZW50LnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQpO1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyB0aGUgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBzZWFyY2ggd2l0aGluIHRoZSBtYWluIGRvY3VtZW50XG5cdGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZWxlbWVudCA9PT0gZG9jdW1lbnQpIHtcblx0XHRjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXRJZCk7XG5cdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0cmV0dXJuIHRhcmdldDtcblx0XHR9XG5cdH1cblxuXHQvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIGluc2lkZSBhIHNoYWRvdyByb290LCBzZWFyY2ggaXRzIGhvc3QncyBhbmNlc3RvcnNcblx0Y29uc3Qgcm9vdE5vZGUgPSBlbGVtZW50LmdldFJvb3ROb2RlKCk7XG5cdGlmIChyb290Tm9kZSAmJiByb290Tm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcblx0XHRyZXR1cm4gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKHJvb3ROb2RlLmhvc3QsIHRhcmdldElkKTtcblx0fVxuXG5cdC8vIE90aGVyd2lzZSwgc2VhcmNoIHRoZSBjdXJyZW50IGVsZW1lbnQncyBwYXJlbnRcblx0cmV0dXJuIGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhlbGVtZW50LnBhcmVudEVsZW1lbnQsIHRhcmdldElkKTtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzZWFyY2hlcyB1cHdhcmRzIGZyb20gYSBnaXZlbiBlbGVtZW50IHRvIGZpbmQgYW4gYW5jZXN0b3IgZWxlbWVudFxuICogd2l0aCBhIHNwZWNpZmllZCBzZWxlY3RvciwgY29uc2lkZXJpbmcgYm90aCBub3JtYWwgRE9NIGFuZCBzaGFkb3cgRE9NLlxuICogVGhpcyBtZXRob2QgaXMgdXNlZnVsIGZvciBmaW5kaW5nIGEgcGFyZW50IGVsZW1lbnQgd2l0aCBhIHNwZWNpZmljIGNsYXNzLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U2hhZG93Um9vdH0gZWxlbWVudCAtIFRoZSBzdGFydGluZyBlbGVtZW50IG9yIHNoYWRvdyByb290IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gVGhlIHNlbGVjdG9yIG9mIHRoZSB0YXJnZXQgZWxlbWVudCB0byBmaW5kLlxuICogQHJldHVybiB7SFRNTEVsZW1lbnR8bnVsbH0gLSBUaGUgYW5jZXN0b3IgZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgc2VsZWN0b3IsIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuICogQHNpbmNlIDMuNTUuMFxuICovXG5mdW5jdGlvbiBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMoZWxlbWVudCwgc2VsZWN0b3IpIHtcblx0aWYgKCFlbGVtZW50IHx8ICFzZWxlY3Rvcikge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU2VhcmNoIHdpdGhpbiB0aGUgY3VycmVudCBlbGVtZW50J3Mgc2hhZG93IHJvb3QsIGlmIGl0IGV4aXN0c1xuXHRpZiAoZWxlbWVudC5zaGFkb3dSb290KSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZWxlbWVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuXHRcdGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBpbnNpZGUgYSBzaGFkb3cgcm9vdCwgc2VhcmNoIGl0cyBob3N0J3MgYW5jZXN0b3JzXG5cdGNvbnN0IHJvb3ROb2RlID0gZWxlbWVudC5nZXRSb290Tm9kZSgpO1xuXHRpZiAocm9vdE5vZGUgJiYgcm9vdE5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG5cdFx0cmV0dXJuIGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyhyb290Tm9kZS5ob3N0LCBzZWxlY3Rvcik7XG5cdH1cblxuXHQvLyBPdGhlcndpc2UsIHNlYXJjaCB0aGUgY3VycmVudCBlbGVtZW50J3MgcGFyZW50XG5cdHJldHVybiBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMoZWxlbWVudC5wYXJlbnRFbGVtZW50LCBzZWxlY3Rvcik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fG51bGx9XG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlU2hhZG93Um9vdHMoZWxlbWVudCkge1xuXHRsZXQgY3VycmVudFJvb3QgPSBlbGVtZW50LnNoYWRvd1Jvb3Q7XG5cdGxldCBjdXJyZW50UGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXG5cdHdoaWxlIChcblx0XHRjdXJyZW50UGFyZW50ICYmXG5cdFx0Y3VycmVudFBhcmVudC5ub2RlVHlwZSAhPT0gTm9kZS5ET0NVTUVOVF9OT0RFICYmXG5cdFx0Y3VycmVudFBhcmVudC5ub2RlVHlwZSAhPT0gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFXG5cdCkge1xuXHRcdGlmIChjdXJyZW50Um9vdCAmJiBjdXJyZW50Um9vdC5wYXJlbnROb2RlKSB7XG5cdFx0XHRjdXJyZW50UGFyZW50ID0gY3VycmVudFJvb3QucGFyZW50Tm9kZTtcblx0XHRcdGN1cnJlbnRSb290ID0gY3VycmVudFBhcmVudC5zaGFkb3dSb290O1xuXHRcdH0gZWxzZSBpZiAoY3VycmVudFBhcmVudC5wYXJlbnROb2RlKSB7XG5cdFx0XHRjdXJyZW50UGFyZW50ID0gY3VycmVudFBhcmVudC5wYXJlbnROb2RlO1xuXHRcdFx0Y3VycmVudFJvb3QgPSBudWxsO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRjdXJyZW50Um9vdCAmJlxuXHRcdFx0Y3VycmVudFJvb3QuaG9zdCAmJlxuXHRcdFx0Y3VycmVudFJvb3QuaG9zdC5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFXG5cdFx0KSB7XG5cdFx0XHRjdXJyZW50UGFyZW50ID0gY3VycmVudFJvb3QuaG9zdDtcblx0XHRcdGN1cnJlbnRSb290ID0gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VycmVudFBhcmVudCA9IG51bGw7XG5cdFx0XHRjdXJyZW50Um9vdCA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGN1cnJlbnRQYXJlbnQ7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgc2VhcmNoZXMgdXB3YXJkcyBmcm9tIGEgZ2l2ZW4gZWxlbWVudCB0byBmaW5kIGFuIGFuY2VzdG9yIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHsqfVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgYXJndW1lbnQuIEV4cGVjdGVkIGFuIEhUTUxFbGVtZW50LlxuICogQHNpbmNlIDMuMzYuMFxuICovXG5mdW5jdGlvbiBnZXRDb250YWluaW5nRG9jdW1lbnQoZWxlbWVudCkge1xuXHRpZiAoXG5cdFx0IWVsZW1lbnQgfHxcblx0XHQhKFxuXHRcdFx0ZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8XG5cdFx0XHRlbGVtZW50IGluc3RhbmNlb2YgZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkhUTUxFbGVtZW50XG5cdFx0KVxuXHQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50LiBFeHBlY3RlZCBhbiBIVE1MRWxlbWVudC5cIik7XG5cdH1cblxuXHRyZXR1cm4gdHJhdmVyc2VTaGFkb3dSb290cyhlbGVtZW50KSB8fCBudWxsO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCByZWdpc3RlcmVkIGN1c3RvbSBlbGVtZW50cyBpbiB0aGUgY3VycmVudCBkb2N1bWVudC5cbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqIEBzaW5jZSA0LjAuMFxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRDdXN0b21FbGVtZW50cygpIHtcblx0Y29uc3QgY3VzdG9tRWxlbWVudFRhZ3MgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpKVxuXHRcdC5tYXAoKHRhZykgPT4gdGFnLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlcblx0XHQuZmlsdGVyKCh0YWdOYW1lKSA9PiB0YWdOYW1lLmluY2x1ZGVzKFwiLVwiKSAmJiBjdXN0b21FbGVtZW50cy5nZXQodGFnTmFtZSkpO1xuXG5cdHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoY3VzdG9tRWxlbWVudFRhZ3MpKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNPYmplY3QsIGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdHlwZU9mIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVvZi5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBjbG9uZSB9O1xuXG4vKipcbiAqIFdpdGggdGhpcyBmdW5jdGlvbiwgb2JqZWN0cyBjYW4gYmUgY2xvbmVkLlxuICogVGhlIGVudGlyZSBvYmplY3QgdHJlZSBpcyBydW4gdGhyb3VnaC5cbiAqXG4gKiBQcm94eSwgRWxlbWVudCwgSFRNTERvY3VtZW50IGFuZCBEb2N1bWVudEZyYWdtZW50IGluc3RhbmNlcyBhcmUgbm90IGNsb25lZC5cbiAqIEdsb2JhbCBvYmplY3RzIHN1Y2ggYXMgd2luZG93cyBhcmUgYWxzbyBub3QgY2xvbmVkLFxuICpcbiAqIElmIGFuIG9iamVjdCBoYXMgYSBtZXRob2QgYGdldENsb25lKClgLCB0aGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgY2xvbmUuXG4gKlxuICogQHBhcmFtIHsqfSBvYmogb2JqZWN0IHRvIGJlIGNsb25lZFxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHVuYWJsZSB0byBjbG9uZSBvYmohIGl0cyB0eXBlIGlzbid0IHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gY2xvbmUob2JqKSB7XG5cdC8vIHR5cGVvZiBudWxsIHJlc3VsdHMgaW4gJ29iamVjdCcuICBodHRwczovLzJhbGl0eS5jb20vMjAxMy8xMC90eXBlb2YtbnVsbC5odG1sXG5cdGlmIChudWxsID09PSBvYmopIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSB0d28gc2ltcGxlIHR5cGVzLCBudWxsIGFuZCB1bmRlZmluZWRcblx0aWYgKGlzUHJpbWl0aXZlKG9iaikpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSB0d28gc2ltcGxlIHR5cGVzLCBudWxsIGFuZCB1bmRlZmluZWRcblx0aWYgKGlzRnVuY3Rpb24ob2JqKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyBIYW5kbGUgQXJyYXlcblx0aWYgKGlzQXJyYXkob2JqKSkge1xuXHRcdGNvbnN0IGNvcHkgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMCwgbGVuID0gb2JqLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRjb3B5W2ldID0gY2xvbmUob2JqW2ldKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29weTtcblx0fVxuXG5cdGlmIChpc09iamVjdChvYmopKSB7XG5cdFx0Ly8gSGFuZGxlIERhdGVcblx0XHRpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0Y29uc3QgY29weSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRjb3B5LnNldFRpbWUob2JqLmdldFRpbWUoKSk7XG5cdFx0XHRyZXR1cm4gY29weTtcblx0XHR9XG5cblx0XHQvKiogRG8gbm90IGNsb25lIERPTSBub2RlcyAqL1xuXHRcdGlmICh0eXBlb2YgRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogaW5zdGFuY2VvZiBFbGVtZW50KSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgSFRNTERvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiBpbnN0YW5jZW9mIEhUTUxEb2N1bWVudClcblx0XHRcdHJldHVybiBvYmo7XG5cdFx0aWYgKFxuXHRcdFx0dHlwZW9mIERvY3VtZW50RnJhZ21lbnQgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdG9iaiBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcblx0XHQpXG5cdFx0XHRyZXR1cm4gb2JqO1xuXG5cdFx0LyoqIERvIG5vdCBjbG9uZSBnbG9iYWwgb2JqZWN0cyAqL1xuXHRcdGlmIChvYmogPT09IGdldEdsb2JhbCgpKSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgZ2xvYmFsQ29udGV4dCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IGdsb2JhbENvbnRleHQpXG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiA9PT0gd2luZG93KSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSBkb2N1bWVudCkgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IG5hdmlnYXRvcikgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIEpTT04gIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSBKU09OKSByZXR1cm4gb2JqO1xuXG5cdFx0Ly8gSGFuZGxlIFByb3h5LU9iamVjdFxuXHRcdHRyeSB7XG5cdFx0XHQvLyB0cnkvY2F0Y2ggYmVjYXVzZSBwb3NzaWJsZTogVHlwZUVycm9yOiBGdW5jdGlvbiBoYXMgbm9uLW9iamVjdCBwcm90b3R5cGUgJ3VuZGVmaW5lZCcgaW4gaW5zdGFuY2VvZiBjaGVja1xuXHRcdFx0aWYgKG9iaiBpbnN0YW5jZW9mIFByb3h5KSB7XG5cdFx0XHRcdHJldHVybiBvYmo7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdHJldHVybiBjbG9uZU9iamVjdChvYmopO1xuXHR9XG5cblx0dGhyb3cgbmV3IEVycm9yKFwidW5hYmxlIHRvIGNsb25lIG9iaiEgaXRzIHR5cGUgaXNuJ3Qgc3VwcG9ydGVkLlwiKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9ialxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2xvbmVPYmplY3Qob2JqKSB7XG5cdHZhbGlkYXRlT2JqZWN0KG9iaik7XG5cblx0Y29uc3QgZmt0ID0gb2JqPy5bXCJjb25zdHJ1Y3RvclwiXTtcblxuXHQvKiogT2JqZWN0IGhhcyBjbG9uZSBtZXRob2QgKi9cblx0aWYgKHR5cGVPZihma3QpID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRjb25zdCBwcm90b3R5cGUgPSBma3Q/LnByb3RvdHlwZTtcblx0XHRpZiAodHlwZW9mIHByb3RvdHlwZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRwcm90b3R5cGUuaGFzT3duUHJvcGVydHkoXCJnZXRDbG9uZVwiKSAmJlxuXHRcdFx0XHR0eXBlT2Yob2JqLmdldENsb25lKSA9PT0gXCJmdW5jdGlvblwiXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIG9iai5nZXRDbG9uZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGxldCBjb3B5ID0ge307XG5cdGlmIChcblx0XHR0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yLmNhbGwgPT09IFwiZnVuY3Rpb25cIlxuXHQpIHtcblx0XHRjb3B5ID0gbmV3IG9iai5jb25zdHJ1Y3RvcigpO1xuXHR9XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG5cdFx0aWYgKCFvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGlzUHJpbWl0aXZlKG9ialtrZXldKSkge1xuXHRcdFx0Y29weVtrZXldID0gb2JqW2tleV07XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb3B5W2tleV0gPSBjbG9uZShvYmpba2V5XSk7XG5cdH1cblxuXHRyZXR1cm4gY29weTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5cbmV4cG9ydCB7IExvY2FsZSwgcGFyc2VMb2NhbGUgfTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwcm9wZXJ0aWVzU3ltYm9sID0gU3ltYm9sKFwicHJvcGVydGllc1wiKTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBsb2NhbGVTdHJpbmdTeW1ib2wgPSBTeW1ib2woXCJsb2NhbGVTdHJpbmdcIik7XG5cbi8qKlxuICogVGhlIExvY2FsZSBjbGFzcyBpcyBhIGJhc2UgY2xhc3MgZm9yIHRoZSBsYW5ndWFnZSBjbGFzc2VzLlxuICpcbiAqIFJGQ1xuICpcbiAqIGBgYFxuICogQSBMYW5ndWFnZS1UYWcgY29uc2lzdHMgb2Y6XG4gKiBsYW5ndGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBnZW5lcmF0ZWQgdGFnXG4gKiAgICAgICAgICAgLW9yLSBwcml2YXRlLXVzZSAgICAgICAgOyBhIHByaXZhdGUgdXNlIHRhZ1xuICpcbiAqIGxhbmd0YWcgICAgICAgPSAobGFuZ3VhZ2VcbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgc2NyaXB0XVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiByZWdpb25dXG4gKiAgICAgICAgICAgICAgICAgICAgKihcIi1cIiB2YXJpYW50KVxuICogICAgICAgICAgICAgICAgICAgICooXCItXCIgZXh0ZW5zaW9uKVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiBwcml2YXRldXNlXSlcbiAqXG4gKiBsYW5ndWFnZSAgICAgID0gXCJlblwiLCBcImFsZVwiLCBvciBhIHJlZ2lzdGVyZWQgdmFsdWVcbiAqXG4gKiBzY3JpcHQgICAgICAgID0gXCJMYXRuXCIsIFwiQ3lybFwiLCBcIkhhbnRcIiBJU08gMTU5MjQgY29kZXNcbiAqXG4gKiByZWdpb24gICAgICAgID0gXCJVU1wiLCBcIkNTXCIsIFwiRlJcIiBJU08gMzE2NiBjb2Rlc1xuICogICAgICAgICAgICAgICAgIFwiNDE5XCIsIFwiMDE5XCIsICBvciBVTiBNLjQ5IGNvZGVzXG4gKlxuICogdmFyaWFudCAgICAgICA9IFwicm96YWpcIiwgXCJuZWRpc1wiLCBcIjE5OTZcIiwgbXVsdGlwbGUgc3VidGFncyBjYW4gYmUgdXNlZCBpbiBhIHRhZ1xuICpcbiAqIGV4dGVuc2lvbiAgICAgPSBzaW5nbGUgbGV0dGVyIGZvbGxvd2VkIGJ5IGFkZGl0aW9uYWwgc3VidGFnczsgbW9yZSB0aGFuIG9uZSBleHRlbnNpb25cbiAqICAgICAgICAgICAgICAgICBtYXkgYmUgdXNlZCBpbiBhIGxhbmd1YWdlIHRhZ1xuICpcbiAqIHByaXZhdGUtdXNlICAgPSBcIngtXCIgZm9sbG93ZWQgYnkgYWRkaXRpb25hbCBzdWJ0YWdzLCBhcyBtYW55IGFzIGFyZSByZXF1aXJlZFxuICogICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGVzZSBjYW4gc3RhcnQgYSB0YWcgb3IgYXBwZWFyIGF0IHRoZSBlbmQgKGJ1dCBub3RcbiAqICAgICAgICAgICAgICAgICBpbiB0aGUgbWlkZGxlKVxuICogYGBgXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZcbiAqL1xuY2xhc3MgTG9jYWxlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2Vcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtyZWdpb25dXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbc2NyaXB0XVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3ZhcmlhbnRzXVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW2V4dGxhbmddXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbcHJpdmF0ZVVzZV1cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGxvY2FsZVxuXHQgKi9cblx0Y29uc3RydWN0b3IobGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW3Byb3BlcnRpZXNTeW1ib2xdID0ge1xuXHRcdFx0bGFuZ3VhZ2U6IGxhbmd1YWdlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhsYW5ndWFnZSksXG5cdFx0XHRzY3JpcHQ6IHNjcmlwdCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdmFsaWRhdGVTdHJpbmcoc2NyaXB0KSxcblx0XHRcdHJlZ2lvbjogcmVnaW9uID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhyZWdpb24pLFxuXHRcdFx0dmFyaWFudHM6IHZhcmlhbnRzID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyh2YXJpYW50cyksXG5cdFx0XHRleHRsYW5nOiBleHRsYW5nID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhleHRsYW5nKSxcblx0XHRcdHByaXZhdGVVc2U6XG5cdFx0XHRcdHByaXZhdGVVc2UgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbGlkYXRlU3RyaW5nKHByaXZhdGVVc2UpLFxuXHRcdH07XG5cblx0XHRjb25zdCBzID0gW107XG5cdFx0aWYgKGxhbmd1YWdlICE9PSB1bmRlZmluZWQpIHMucHVzaChsYW5ndWFnZSk7XG5cdFx0aWYgKHNjcmlwdCAhPT0gdW5kZWZpbmVkKSBzLnB1c2goc2NyaXB0KTtcblx0XHRpZiAocmVnaW9uICE9PSB1bmRlZmluZWQpIHMucHVzaChyZWdpb24pO1xuXHRcdGlmICh2YXJpYW50cyAhPT0gdW5kZWZpbmVkKSBzLnB1c2godmFyaWFudHMpO1xuXHRcdGlmIChleHRsYW5nICE9PSB1bmRlZmluZWQpIHMucHVzaChleHRsYW5nKTtcblx0XHRpZiAocHJpdmF0ZVVzZSAhPT0gdW5kZWZpbmVkKSBzLnB1c2gocHJpdmF0ZVVzZSk7XG5cblx0XHRpZiAocy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGxvY2FsZVwiKTtcblx0XHR9XG5cblx0XHR0aGlzW2xvY2FsZVN0cmluZ1N5bWJvbF0gPSBzLmpvaW4oXCItXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi9sb2NhbGVAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldCBsb2NhbGVTdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXNbbG9jYWxlU3RyaW5nU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IGxhbmd1YWdlKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLmxhbmd1YWdlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgcmVnaW9uKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLnJlZ2lvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IHNjcmlwdCgpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5zY3JpcHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCB2YXJpYW50cygpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS52YXJpYW50cztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IGV4dGxhbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0uZXh0bGFuZztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IHByaXZhdGVVc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0ucHJpdmF0ZVZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiBgJHt0aGlzLmxvY2FsZVN0cmluZ31gO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBzdHJ1Y3R1cmUgaGFzIHRoZSBmb2xsb3dpbmc6IGxhbmd1YWdlLCBzY3JpcHQsIHJlZ2lvbiwgdmFyaWFudHMsIGV4dGxhbmcsIHByaXZhdGVVc2Vcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5JMThuLkxvY2FsZU1hcH1cblx0ICovXG5cdGdldE1hcCgpIHtcblx0XHRyZXR1cm4gY2xvbmUodGhpc1twcm9wZXJ0aWVzU3ltYm9sXSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMb2NhbGVNYXBcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYW5ndWFnZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNjcmlwdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlZ2lvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhcmlhbnRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZXh0bGFuZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHByaXZhdGVVc2VcbiAqL1xuXG4vKipcbiAqIFBhcnNlIGxvY2FsIGFjY29yZGluZyB0byByZmM0NjQ2IHN0YW5kYXJkXG4gKlxuICogTGltaXRhdGlvbnM6IFRoZSByZWdleCBjYW5ub3QgaGFuZGxlIG11bHRpcGxlIHZhcmlhbnRzIG9yIHByaXZhdGUuXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoaXMgZnVuY3Rpb24gaW5kaXZpZHVhbGx5OlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7Y3JlYXRlTG9jYWxlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9pMThuL2xvY2FsZS5tanMnO1xuICogY3JlYXRlTG9jYWxlKClcbiAqIGBgYFxuICpcbiAqIFJGQ1xuICpcbiAqIGBgYFxuICogICBUaGUgc3ludGF4IG9mIHRoZSBsYW5ndWFnZSB0YWcgaW4gQUJORiBbUkZDNDIzNF0gaXM6XG4gKlxuICogICBMYW5ndWFnZS1UYWcgID0gbGFuZ3RhZ1xuICogICAgICAgICAgICAgICAgIC8gcHJpdmF0ZXVzZSAgICAgICAgICAgICA7IHByaXZhdGUgdXNlIHRhZ1xuICogICAgICAgICAgICAgICAgIC8gZ3JhbmRmYXRoZXJlZCAgICAgICAgICA7IGdyYW5kZmF0aGVyZWQgcmVnaXN0cmF0aW9uc1xuICpcbiAqICAgbGFuZ3RhZyAgICAgICA9IChsYW5ndWFnZVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiBzY3JpcHRdXG4gKiAgICAgICAgICAgICAgICAgICAgW1wiLVwiIHJlZ2lvbl1cbiAqICAgICAgICAgICAgICAgICAgICAqKFwiLVwiIHZhcmlhbnQpXG4gKiAgICAgICAgICAgICAgICAgICAgKihcIi1cIiBleHRlbnNpb24pXG4gKiAgICAgICAgICAgICAgICAgICAgW1wiLVwiIHByaXZhdGV1c2VdKVxuICpcbiAqICAgbGFuZ3VhZ2UgICAgICA9ICgyKjNBTFBIQSBbIGV4dGxhbmcgXSkgOyBzaG9ydGVzdCBJU08gNjM5IGNvZGVcbiAqICAgICAgICAgICAgICAgICAvIDRBTFBIQSAgICAgICAgICAgICAgICAgOyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZVxuICogICAgICAgICAgICAgICAgIC8gNSo4QUxQSEEgICAgICAgICAgICAgICA7IHJlZ2lzdGVyZWQgbGFuZ3VhZ2Ugc3VidGFnXG4gKlxuICogICBleHRsYW5nICAgICAgID0gKjMoXCItXCIgM0FMUEhBKSAgICAgICAgIDsgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcbiAqXG4gKiAgIHNjcmlwdCAgICAgICAgPSA0QUxQSEEgICAgICAgICAgICAgICAgIDsgSVNPIDE1OTI0IGNvZGVcbiAqXG4gKiAgIHJlZ2lvbiAgICAgICAgPSAyQUxQSEEgICAgICAgICAgICAgICAgIDsgSVNPIDMxNjYgY29kZVxuICogICAgICAgICAgICAgICAgIC8gM0RJR0lUICAgICAgICAgICAgICAgICA7IFVOIE0uNDkgY29kZVxuICpcbiAqICAgdmFyaWFudCAgICAgICA9IDUqOGFscGhhbnVtICAgICAgICAgICAgOyByZWdpc3RlcmVkIHZhcmlhbnRzXG4gKiAgICAgICAgICAgICAgICAgLyAoRElHSVQgM2FscGhhbnVtKVxuICpcbiAqICAgZXh0ZW5zaW9uICAgICA9IHNpbmdsZXRvbiAxKihcIi1cIiAoMio4YWxwaGFudW0pKVxuICpcbiAqICAgc2luZ2xldG9uICAgICA9ICV4NDEtNTcgLyAleDU5LTVBIC8gJXg2MS03NyAvICV4NzktN0EgLyBESUdJVFxuICogICAgICAgICAgICAgICAgIDsgXCJhXCItXCJ3XCIgLyBcInlcIi1cInpcIiAvIFwiQVwiLVwiV1wiIC8gXCJZXCItXCJaXCIgLyBcIjBcIi1cIjlcIlxuICogICAgICAgICAgICAgICAgIDsgU2luZ2xlIGxldHRlcnM6IHgvWCBpcyByZXNlcnZlZCBmb3IgcHJpdmF0ZSB1c2VcbiAqXG4gKiAgIHByaXZhdGV1c2UgICAgPSAoXCJ4XCIvXCJYXCIpIDEqKFwiLVwiICgxKjhhbHBoYW51bSkpXG4gKlxuICogICBncmFuZGZhdGhlcmVkID0gMSozQUxQSEEgMSoyKFwiLVwiICgyKjhhbHBoYW51bSkpXG4gKiAgICAgICAgICAgICAgICAgICA7IGdyYW5kZmF0aGVyZWQgcmVnaXN0cmF0aW9uXG4gKiAgICAgICAgICAgICAgICAgICA7IE5vdGU6IGkgaXMgdGhlIG9ubHkgc2luZ2xldG9uXG4gKiAgICAgICAgICAgICAgICAgICA7IHRoYXQgc3RhcnRzIGEgZ3JhbmRmYXRoZXJlZCB0YWdcbiAqXG4gKiAgIGFscGhhbnVtICAgICAgPSAoQUxQSEEgLyBESUdJVCkgICAgICAgOyBsZXR0ZXJzIGFuZCBudW1iZXJzXG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICBGaWd1cmUgMTogTGFuZ3VhZ2UgVGFnIEFCTkZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbGVcbiAqIEByZXR1cm4ge0xvY2FsZX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgbG9jYWxlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTG9jYWxlKGxvY2FsZSkge1xuXHRsb2NhbGUgPSB2YWxpZGF0ZVN0cmluZyhsb2NhbGUpLnJlcGxhY2UoL18vZywgXCItXCIpO1xuXG5cdGxldCBsYW5ndWFnZTtcblx0bGV0IHJlZ2lvbjtcblx0bGV0IHZhcmlhbnRzO1xuXHRsZXQgcGFydHM7XG5cdGxldCBzY3JpcHQ7XG5cdGxldCBleHRsYW5nO1xuXHRjb25zdCByZWdleFJlZ3VsYXIgPVxuXHRcdFwiKGFydC1sb2piYW58Y2VsLWdhdWxpc2h8bm8tYm9rfG5vLW55bnx6aC1ndW95dXx6aC1oYWtrYXx6aC1taW58emgtbWluLW5hbnx6aC14aWFuZylcIjtcblx0Y29uc3QgcmVnZXhJcnJlZ3VsYXIgPVxuXHRcdFwiKGVuLUdCLW9lZHxpLWFtaXxpLWJubnxpLWRlZmF1bHR8aS1lbm9jaGlhbnxpLWhha3xpLWtsaW5nb258aS1sdXh8aS1taW5nb3xpLW5hdmFqb3xpLXB3bnxpLXRhb3xpLXRheXxpLXRzdXxzZ24tQkUtRlJ8c2duLUJFLU5MfHNnbi1DSC1ERSlcIjtcblx0Y29uc3QgcmVnZXhHcmFuZGZhdGhlcmVkID0gYCgke3JlZ2V4SXJyZWd1bGFyfXwke3JlZ2V4UmVndWxhcn0pYDtcblx0Y29uc3QgcmVnZXhQcml2YXRlVXNlID0gXCIoeCgtW0EtWmEtejAtOV17MSw4fSkrKVwiO1xuXHRjb25zdCByZWdleFNpbmdsZXRvbiA9IFwiWzAtOUEtV1ktWmEtd3ktel1cIjtcblx0Y29uc3QgcmVnZXhFeHRlbnNpb24gPSBgKCR7cmVnZXhTaW5nbGV0b259KC1bQS1aYS16MC05XXsyLDh9KSspYDtcblx0Y29uc3QgcmVnZXhWYXJpYW50ID0gXCIoW0EtWmEtejAtOV17NSw4fXxbMC05XVtBLVphLXowLTldezN9KVwiO1xuXHRjb25zdCByZWdleFJlZ2lvbiA9IFwiKFtBLVphLXpdezJ9fFswLTldezN9KVwiO1xuXHRjb25zdCByZWdleFNjcmlwdCA9IFwiKFtBLVphLXpdezR9KVwiO1xuXHRjb25zdCByZWdleEV4dGxhbmcgPSBcIihbQS1aYS16XXszfSgtW0EtWmEtel17M30pezAsMn0pXCI7XG5cdGNvbnN0IHJlZ2V4TGFuZ3VhZ2UgPSBgKChbQS1aYS16XXsyLDN9KC0ke3JlZ2V4RXh0bGFuZ30pPyl8W0EtWmEtel17NH18W0EtWmEtel17NSw4fSlgO1xuXHRjb25zdCByZWdleExhbmd0YWcgPSBgKCR7cmVnZXhMYW5ndWFnZX0oLSR7cmVnZXhTY3JpcHR9KT8oLSR7cmVnZXhSZWdpb259KT8oLSR7cmVnZXhWYXJpYW50fSkqKC0ke3JlZ2V4RXh0ZW5zaW9ufSkqKC0ke3JlZ2V4UHJpdmF0ZVVzZX0pPylgO1xuXHRjb25zdCByZWdleExhbmd1YWdlVGFnID0gYF4oJHtyZWdleEdyYW5kZmF0aGVyZWR9fCR7cmVnZXhMYW5ndGFnfXwke3JlZ2V4UHJpdmF0ZVVzZX0pJGA7XG5cdGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleExhbmd1YWdlVGFnKTtcblx0bGV0IG1hdGNoO1xuXG5cdGlmICgobWF0Y2ggPSByZWdleC5leGVjKGxvY2FsZSkpICE9PSBudWxsKSB7XG5cdFx0aWYgKG1hdGNoLmluZGV4ID09PSByZWdleC5sYXN0SW5kZXgpIHtcblx0XHRcdHJlZ2V4Lmxhc3RJbmRleCsrO1xuXHRcdH1cblx0fVxuXG5cdGlmIChtYXRjaCA9PT0gdW5kZWZpbmVkIHx8IG1hdGNoID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgbG9jYWxlXCIpO1xuXHR9XG5cblx0aWYgKG1hdGNoWzZdICE9PSB1bmRlZmluZWQpIHtcblx0XHRsYW5ndWFnZSA9IG1hdGNoWzZdO1xuXG5cdFx0cGFydHMgPSBsYW5ndWFnZS5zcGxpdChcIi1cIik7XG5cdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGxhbmd1YWdlID0gcGFydHNbMF07XG5cdFx0XHRleHRsYW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHR9XG5cblx0aWYgKG1hdGNoWzE0XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmVnaW9uID0gbWF0Y2hbMTRdO1xuXHR9XG5cblx0aWYgKG1hdGNoWzEyXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0c2NyaXB0ID0gbWF0Y2hbMTJdO1xuXHR9XG5cblx0aWYgKG1hdGNoWzE2XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFyaWFudHMgPSBtYXRjaFsxNl07XG5cdH1cblxuXHRyZXR1cm4gbmV3IExvY2FsZShsYW5ndWFnZSwgcmVnaW9uLCBzY3JpcHQsIHZhcmlhbnRzLCBleHRsYW5nKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBwYXJzZUxvY2FsZSB9IGZyb20gXCIuLi9pMThuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4vdXRpbC5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmV4cG9ydCB7IGdldExvY2FsZU9mRG9jdW1lbnQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgREVGQVVMVF9MQU5HVUFHRSA9IFwiZW5cIjtcblxuLyoqXG4gKiBXaXRoIHRoaXMgZnVuY3Rpb24geW91IGNhbiByZWFkIHRoZSBsYW5ndWFnZSB2ZXJzaW9uIHNldCBieSB0aGUgZG9jdW1lbnQuXG4gKiBGb3IgdGhpcyB0aGUgYXR0cmlidXRlIGBsYW5nYCBpbiB0aGUgaHRtbCB0YWcgaXMgcmVhZC4gSWYgbm8gYXR0cmlidXRlIGlzIHNldCwgYGVuYCBpcyB1c2VkIGFzIGRlZmF1bHQuXG4gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgbGFuZ3VhZ2UgdmVyc2lvbiBvZiB0aGUgYnJvd3NlciBpcyB1c2VkLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxodG1sIGxhbmc9XCJlblwiPlxuICogYGBgXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgYGdldExvY2FsZU9mRG9jdW1lbnQoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBsb2NhbGVcbiAqIEBzdW1tYXJ5IFRyaWVzIHRvIGRldGVybWluZSB0aGUgbG9jYWxlIHVzZWRcbiAqL1xuZnVuY3Rpb24gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGNvbnN0IGh0bWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKTtcblx0aWYgKGh0bWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBodG1sLmhhc0F0dHJpYnV0ZShcImxhbmdcIikpIHtcblx0XHRjb25zdCBsb2NhbGUgPSBodG1sLmdldEF0dHJpYnV0ZShcImxhbmdcIik7XG5cdFx0aWYgKGxvY2FsZSkge1xuXHRcdFx0cmV0dXJuIG5ldyBwYXJzZUxvY2FsZShsb2NhbGUpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG5hdmlnYXRvckxhbmd1YWdlID0gZ2V0TmF2aWdhdG9yTGFuZ3VhZ2UoKTtcblx0aWYgKG5hdmlnYXRvckxhbmd1YWdlKSB7XG5cdFx0cmV0dXJuIHBhcnNlTG9jYWxlKG5hdmlnYXRvckxhbmd1YWdlKTtcblx0fVxuXG5cdHJldHVybiBwYXJzZUxvY2FsZShERUZBVUxUX0xBTkdVQUdFKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZHwqfVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTmF2aWdhdG9yL2xhbmd1YWdlXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9OYXZpZ2F0b3IvbGFuZ3VhZ2VzXG4gKi9cbmNvbnN0IGdldE5hdmlnYXRvckxhbmd1YWdlID0gKCkgPT4ge1xuXHRjb25zdCBuYXZpZ2F0b3IgPSBnZXRHbG9iYWxPYmplY3QoXCJuYXZpZ2F0b3JcIik7XG5cdGlmIChuYXZpZ2F0b3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAobmF2aWdhdG9yLmhhc093blByb3BlcnR5KFwibGFuZ3VhZ2VcIikpIHtcblx0XHRjb25zdCBsYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZTtcblx0XHRpZiAodHlwZW9mIGxhbmd1YWdlID09PSBcInN0cmluZ1wiICYmIGxhbmd1YWdlLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBsYW5ndWFnZTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBsYW5ndWFnZXMgPSBuYXZpZ2F0b3I/Lmxhbmd1YWdlcztcblx0aWYgKEFycmF5LmlzQXJyYXkobGFuZ3VhZ2VzKSAmJiBsYW5ndWFnZXMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBsYW5ndWFnZXNbMF07XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IElEIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbnRlZ2VyPn1cbiAqL1xuY29uc3QgaW50ZXJuYWxDb3VudGVyID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIFdpdGggdGhlIGlkIGNsYXNzLCBzZXF1ZW5jZXMgb2YgaWRzIGNhbiBiZSBjcmVhdGVkLiBmb3IgdGhpcyBwdXJwb3NlLCBhbiBpbnRlcm5hbCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIHByZWZpeC5cbiAqIHRodXMsIHRoZSBmaXJzdCBpZCB3aXRoIHRoZSBwcmVmaXggYG15aWRgIHdpbGwgYmUgYG15aWQxYCBhbmQgdGhlIHNlY29uZCBpZCBgbXlpZDJgLlxuICogVGhlIGlkcyBhcmUgdGhlIHNhbWUgZm9yIGV2ZXJ5IGNhbGwsIGZvciBleGFtcGxlIG9uIGEgd2ViIHBhZ2UuXG4gKlxuICogU28gdGhlIGlkcyBjYW4gYWxzbyBiZSB1c2VkIGZvciBuYXZpZ2F0aW9uLiB5b3UgaGF2ZSB0byB0YWtlIGNhcmUgdGhhdCB0aGUgb3JkZXIgc3RheXMgdGhlIHNhbWUuXG4gKlxuICogQXMgb2YgdmVyc2lvbiAxLjYuMCB0aGVyZSBpcyB0aGUgbmV3IFJhbmRvbUlELiB0aGlzIElEIGNsYXNzIGlzIGNvbnRpbnVvdXMgZnJvbSBub3cgb24uXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBpZHNcbiAqL1xuY2xhc3MgSUQgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIGNyZWF0ZSBuZXcgaWQgd2l0aCBwcmVmaXhcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuXHQgKi9cblx0Y29uc3RydWN0b3IocHJlZml4KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cHJlZml4ID0gXCJpZFwiO1xuXHRcdH1cblxuXHRcdHZhbGlkYXRlU3RyaW5nKHByZWZpeCk7XG5cblx0XHRpZiAoIWludGVybmFsQ291bnRlci5oYXMocHJlZml4KSkge1xuXHRcdFx0aW50ZXJuYWxDb3VudGVyLnNldChwcmVmaXgsIDEpO1xuXHRcdH1cblxuXHRcdGxldCBjb3VudCA9IGludGVybmFsQ291bnRlci5nZXQocHJlZml4KTtcblx0XHR0aGlzLmlkID0gcHJlZml4ICsgY291bnQ7XG5cblx0XHRpbnRlcm5hbENvdW50ZXIuc2V0KHByZWZpeCwgKytjb3VudCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaWQ7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgQmFzZVdpdGhPcHRpb25zIH07XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyB3aXRoIG9wdGlvbnMgZnJvbSB3aGljaCBzb21lIG1vbnN0ZXIgY2xhc3NlcyBhcmUgZGVyaXZlZC5cbiAqXG4gKiBUaGlzIGNsYXNzIGlzIGFjdHVhbGx5IG9ubHkgdXNlZCBhcyBhIGJhc2UgY2xhc3MuXG4gKlxuICogQ2xhc3NlcyB0aGF0IHJlcXVpcmUgdGhlIHBvc3NpYmlsaXR5IG9mIG9wdGlvbnMgY2FuIGJlIGRlcml2ZWQgZGlyZWN0bHkgZnJvbSB0aGlzIGNsYXNzLlxuICogRGVyaXZlZCBjbGFzc2VzIGFsbW9zdCBhbHdheXMgb3ZlcnJpZGUgdGhlIGBkZWZhdWx0YCBnZXR0ZXIgd2l0aCB0aGVpciBvd24gdmFsdWVzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBkZXByZWNhdGVkIHNpbmNlIDMuMTUuMFxuICovXG5jbGFzcyBCYXNlV2l0aE9wdGlvbnMgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbnMgPSB7fTtcblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IGV4dGVuZCh7fSwgdGhpcy5kZWZhdWx0cywgdmFsaWRhdGVPYmplY3Qob3B0aW9ucykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZ2V0dGVyIHByb3ZpZGVzIHRoZSBvcHRpb25zLiBEZXJpdmVkIGNsYXNzZXMgb3ZlcndyaXRlXG5cdCAqIHRoaXMgZ2V0dGVyIHdpdGggdGhlaXIgb3duIHZhbHVlcy4gSXQgaXMgYSBnb29kIGthcm1hIHRvIGFsd2F5cyBpbmNsdWRlXG5cdCAqIHRoZSB2YWx1ZXMgZnJvbSB0aGUgcGFyZW50IGNsYXNzLlxuXHQgKlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIGdldCBkZWZhdWx0cygpIHtcblx0ICogICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHQgKiAgICAgICAgIG15a2V5OiB0cnVlXG5cdCAqICAgICB9KTtcblx0ICogfVxuXHQgKlxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7b2JqZWN0fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBuZXN0ZWQgb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHBhdGggYGEuYi5jYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKiBAc2luY2UgMS4xMC4wXG5cdCAqL1xuXHRnZXRPcHRpb24ocGF0aCwgZGVmYXVsdFZhbHVlKSB7XG5cdFx0bGV0IHZhbHVlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhbHVlID0gbmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0pLmdldFZpYShwYXRoKTtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0aGFzT2JqZWN0TGluayxcblx0Z2V0TGlua2VkT2JqZWN0cyxcblx0YWRkVG9PYmplY3RMaW5rLFxufSBmcm9tIFwiLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBnZXRMb2NhbGVPZkRvY3VtZW50IH0gZnJvbSBcIi4uL2RvbS9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1wiO1xuaW1wb3J0IHsgTG9jYWxlIH0gZnJvbSBcIi4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25zIH0gZnJvbSBcIi4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5leHBvcnQgeyBQcm92aWRlciwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCB9O1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjkuMFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgdHJhbnNsYXRpb25zTGlua1N5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAbGlua1wiLFxuKTtcblxuLyoqXG4gKiBBIHByb3ZpZGVyIG1ha2VzIGEgdHJhbnNsYXRpb24gb2JqZWN0IGF2YWlsYWJsZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZ9XG4gKi9cbmNsYXNzIFByb3ZpZGVyIGV4dGVuZHMgQmFzZVdpdGhPcHRpb25zIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi9wcm92aWRlckBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtMb2NhbGV8c3RyaW5nfSBsb2NhbGVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGdldFRyYW5zbGF0aW9ucyhsb2NhbGUpIHtcblx0XHRpZiAobG9jYWxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShuZXcgVHJhbnNsYXRpb25zKGxvY2FsZSkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtMb2NhbGV8c3RyaW5nfSBsb2NhbGVcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuXHQgKiBAcmV0dXJuIHtQcm92aWRlcn1cblx0ICovXG5cdGFzc2lnblRvRWxlbWVudChsb2NhbGUsIGVsZW1lbnQpIHtcblx0XHRpZiAobG9jYWxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHR9XG5cblx0XHRpZiAoIShsb2NhbGUgaW5zdGFuY2VvZiBMb2NhbGUpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJMb2NhbGUgaXMgbm90IGFuIGluc3RhbmNlIG9mIExvY2FsZVwiKTtcblx0XHR9XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHRlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIik7XG5cdFx0fVxuXG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRWxlbWVudCBpcyBub3QgYW4gSFRNTEVsZW1lbnRcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRpb25zKGxvY2FsZSkudGhlbigob2JqKSA9PiB7XG5cdFx0XHRsZXQgdHJhbnNsYXRpb25zID0gbnVsbDtcblx0XHRcdGlmIChoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wpKSB7XG5cdFx0XHRcdGNvbnN0IG9iamVjdHMgPSBnZXRMaW5rZWRPYmplY3RzKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IG8gb2Ygb2JqZWN0cykge1xuXHRcdFx0XHRcdGlmIChvIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSB7XG5cdFx0XHRcdFx0XHR0cmFuc2xhdGlvbnMgPSBvO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCEodHJhbnNsYXRpb25zIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIk9iamVjdCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVHJhbnNsYXRpb25zXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJhbnNsYXRpb25zLmFzc2lnblRyYW5zbGF0aW9ucyhvYmopO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkVG9PYmplY3RMaW5rKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wsIG9iaik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvYmo7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXRMaW5rZWRPYmplY3RzLCBoYXNPYmplY3RMaW5rIH0gZnJvbSBcIi4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX09CSkVDVExJTksgfSBmcm9tIFwiLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVJbnRlZ2VyLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVTdHJpbmcsXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IExvY2FsZSwgcGFyc2VMb2NhbGUgfSBmcm9tIFwiLi9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sIH0gZnJvbSBcIi4vcHJvdmlkZXIubWpzXCI7XG5cbmV4cG9ydCB7IFRyYW5zbGF0aW9ucywgZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMgfTtcblxuLyoqXG4gKiBXaXRoIHRoaXMgY2xhc3MgeW91IGNhbiBtYW5hZ2UgdHJhbnNsYXRpb25zIGFuZCBhY2Nlc3MgdGhlIGtleXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2kxOG4vdHJhbnNsYXRpb25zLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZcbiAqL1xuY2xhc3MgVHJhbnNsYXRpb25zIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihsb2NhbGUpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGxvY2FsZSBpbnN0YW5jZW9mIExvY2FsZSkge1xuXHRcdFx0dGhpcy5sb2NhbGUgPSBsb2NhbGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubG9jYWxlID0gcGFyc2VMb2NhbGUodmFsaWRhdGVTdHJpbmcobG9jYWxlKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9yYWdlID0gbmV3IE1hcCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi90cmFuc2xhdGlvbnNAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgYSB0ZXh0IHVzaW5nIHRoZSBzcGVjaWZpZWQga2V5LlxuXHQgKiBJZiBubyBzdWl0YWJsZSBrZXkgaXMgZm91bmQsIGBkZWZhdWx0VGV4dGAgaXMgdGFrZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBkZWZhdWx0VGV4dFxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBrZXkgbm90IGZvdW5kXG5cdCAqL1xuXHRnZXRUZXh0KGtleSwgZGVmYXVsdFRleHQpIHtcblx0XHRpZiAoIXRoaXMuc3RvcmFnZS5oYXMoa2V5KSkge1xuXHRcdFx0aWYgKGRlZmF1bHRUZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBrZXkgJHtrZXl9IG5vdCBmb3VuZGApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcoZGVmYXVsdFRleHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHIgPSB0aGlzLnN0b3JhZ2UuZ2V0KGtleSk7XG5cdFx0aWYgKGlzT2JqZWN0KHIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRQbHVyYWxSdWxlVGV4dChrZXksIFwib3RoZXJcIiwgZGVmYXVsdFRleHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnN0b3JhZ2UuZ2V0KGtleSk7XG5cdH1cblxuXHQvKipcblx0ICogQSBudW1iZXIgYGNvdW50YCBjYW4gYmUgcGFzc2VkIHRvIHRoaXMgbWV0aG9kLiBJbiBhZGRpdGlvbiB0byBhIG51bWJlciwgb25lIG9mIHRoZSBrZXl3b3JkcyBjYW4gYWxzbyBiZSBwYXNzZWQgZGlyZWN0bHkuXG5cdCAqIFwiemVyb1wiLCBcIm9uZVwiLCBcInR3b1wiLCBcImZld1wiLCBcIm1hbnlcIiBhbmQgXCJvdGhlclwiLiBSZW1lbWJlcjogbm90IGV2ZXJ5IGxhbmd1YWdlIGhhcyBhbGwgcnVsZXMuXG5cdCAqXG5cdCAqIFRoZSBhcHByb3ByaWF0ZSB0ZXh0IGZvciB0aGlzIG51bWJlciBpcyB0aGVuIHNlbGVjdGVkLiBJZiBubyBzdWl0YWJsZSBrZXkgaXMgZm91bmQsIGBkZWZhdWx0VGV4dGAgaXMgdGFrZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHtpbnRlZ2VyfHN0cmluZ30gY291bnRcblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBkZWZhdWx0VGV4dFxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXRQbHVyYWxSdWxlVGV4dChrZXksIGNvdW50LCBkZWZhdWx0VGV4dCkge1xuXHRcdGlmICghdGhpcy5zdG9yYWdlLmhhcyhrZXkpKSB7XG5cdFx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcoZGVmYXVsdFRleHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHIgPSB2YWxpZGF0ZU9iamVjdCh0aGlzLnN0b3JhZ2UuZ2V0KGtleSkpO1xuXG5cdFx0bGV0IGtleXdvcmQ7XG5cdFx0aWYgKGlzU3RyaW5nKGNvdW50KSkge1xuXHRcdFx0a2V5d29yZCA9IGNvdW50LnRvTG9jYWxlU3RyaW5nKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvdW50ID0gdmFsaWRhdGVJbnRlZ2VyKGNvdW50KTtcblx0XHRcdGlmIChjb3VudCA9PT0gMCkge1xuXHRcdFx0XHQvLyBzcGVjaWFsIGhhbmRsaW5nIGZvciB6ZXJvIGNvdW50XG5cdFx0XHRcdGlmIChyLmhhc093blByb3BlcnR5KFwiemVyb1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhyPy56ZXJvKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRrZXl3b3JkID0gbmV3IEludGwuUGx1cmFsUnVsZXModGhpcy5sb2NhbGUudG9TdHJpbmcoKSkuc2VsZWN0KFxuXHRcdFx0XHR2YWxpZGF0ZUludGVnZXIoY291bnQpLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoci5oYXNPd25Qcm9wZXJ0eShrZXl3b3JkKSkge1xuXHRcdFx0cmV0dXJuIHZhbGlkYXRlU3RyaW5nKHJba2V5d29yZF0pO1xuXHRcdH1cblxuXHRcdC8vIEBkZXByZWNhdGVkIHNpbmNlIDIwMjMtMDMtMTRcblx0XHQvLyBERUZBVUxUX0tFWSBpcyB1bmRlZmluZWRcblx0XHQvLyBpZiAoci5oYXNPd25Qcm9wZXJ0eShERUZBVUxUX0tFWSkpIHtcblx0XHQvLyAgICAgcmV0dXJuIHZhbGlkYXRlU3RyaW5nKHJbREVGQVVMVF9LRVldKTtcblx0XHQvLyB9XG5cblx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcoZGVmYXVsdFRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBhIHRleHQgZm9yIGEga2V5XG5cdCAqXG5cdCAqIGBgYFxuXHQgKiB0cmFuc2xhdGlvbnMuc2V0VGV4dChcInRleHQxXCIsIFwiTWFrZSBteSBkYXkhXCIpO1xuXHQgKiAvLyBwbHVyYWwgcnVsZXNcblx0ICogdHJhbnNsYXRpb25zLnNldFRleHQoXCJ0ZXh0NlwiLCB7XG5cdCAqICAgICBcInplcm9cIjogXCJUaGVyZSBhcmUgbm8gZmlsZXMgb24gRGlzay5cIixcblx0ICogICAgIFwib25lXCI6IFwiVGhlcmUgaXMgb25lIGZpbGUgb24gRGlzay5cIixcblx0ICogICAgIFwib3RoZXJcIjogXCJUaGVyZSBhcmUgZmlsZXMgb24gRGlzay5cIlxuXHQgKiAgICAgXCJkZWZhdWx0XCI6IFwiVGhlcmUgYXJlIGZpbGVzIG9uIERpc2suXCJcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gdGV4dFxuXHQgKiBAcmV0dXJuIHtUcmFuc2xhdGlvbnN9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nIG9yIG9iamVjdFxuXHQgKi9cblx0c2V0VGV4dChrZXksIHRleHQpIHtcblx0XHRpZiAoaXNTdHJpbmcodGV4dCkgfHwgaXNPYmplY3QodGV4dCkpIHtcblx0XHRcdHRoaXMuc3RvcmFnZS5zZXQodmFsaWRhdGVTdHJpbmcoa2V5KSwgdGV4dCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgc3RyaW5nIG9yIG9iamVjdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byB0cmFuc2ZlciBvdmVybGF5cyBmcm9tIGFuIG9iamVjdC4gVGhlIGtleXMgYXJlIHRyYW5zZmVycmVkLCBhbmQgdGhlIHZhbHVlcyBhcmUgZW50ZXJlZFxuXHQgKiBhcyB0ZXh0LlxuXHQgKlxuXHQgKiBUaGUgdmFsdWVzIGNhbiBlaXRoZXIgYmUgY2hhcmFjdGVyIHN0cmluZ3Mgb3IsIGluIHRoZSBjYXNlIG9mIHRleHRzIHdpdGggcGx1cmFsIGZvcm1zLCBvYmplY3RzLiBUaGUgcGx1cmFsIGZvcm1zXG5cdCAqIG11c3QgYmUgc3RvcmVkIGFzIHRleHQgdmlhIGEgc3RhbmRhcmQga2V5IFwiemVyb1wiLCBcIm9uZVwiLCBcInR3b1wiLCBcImZld1wiLCBcIm1hbnlcIiBhbmQgXCJvdGhlclwiLlxuXHQgKlxuXHQgKiBBZGRpdGlvbmFsbHksIHRoZSBrZXkgZGVmYXVsdCBjYW4gYmUgc3BlY2lmaWVkLCB3aGljaCB3aWxsIGJlIHVzZWQgaWYgbm8gb3RoZXIga2V5IGZpdHMuXG5cdCAqXG5cdCAqIEluIHNvbWUgbGFuZ3VhZ2VzLCBsaWtlIGZvciBleGFtcGxlIGluIEdlcm1hbiwgdGhlcmUgaXMgbm8gb3duIG1vcmUgbnVtYmVyIGF0IHRoZSB2YWx1ZSAwLiBJbiB0aGVzZSBsYW5ndWFnZXMsXG5cdCAqIHRoZSBmdW5jdGlvbiBhcHBsaWVzIGFkZGl0aW9uYWxseSB6ZXJvLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogdHJhbnNsYXRpb25zLmFzc2lnblRyYW5zbGF0aW9ucyh7XG5cdCAqICAgXCJ0ZXh0MVwiOiBcIk1ha2UgbXkgZGF5IVwiLFxuXHQgKiAgIFwidGV4dDJcIjogXCJJJ2xsIGJlIGJhY2shXCIsXG5cdCAqICAgXCJ0ZXh0NlwiOiB7XG5cdCAqICAgICBcInplcm9cIjogXCJUaGVyZSBhcmUgbm8gZmlsZXMgb24gRGlzay5cIixcblx0ICogICAgIFwib25lXCI6IFwiVGhlcmUgaXMgb25lIGZpbGUgb24gRGlzay5cIixcblx0ICogICAgIFwib3RoZXJcIjogXCJUaGVyZSBhcmUgZmlsZXMgb24gRGlzay5cIlxuXHQgKiAgICAgXCJkZWZhdWx0XCI6IFwiVGhlcmUgYXJlIGZpbGVzIG9uIERpc2suXCJcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gdHJhbnNsYXRpb25zXG5cdCAqIEByZXR1cm4ge1RyYW5zbGF0aW9uc31cblx0ICovXG5cdGFzc2lnblRyYW5zbGF0aW9ucyh0cmFuc2xhdGlvbnMpIHtcblx0XHR2YWxpZGF0ZU9iamVjdCh0cmFuc2xhdGlvbnMpO1xuXG5cdFx0aWYgKHRyYW5zbGF0aW9ucyBpbnN0YW5jZW9mIFRyYW5zbGF0aW9ucykge1xuXHRcdFx0dHJhbnNsYXRpb25zLnN0b3JhZ2UuZm9yRWFjaCgodiwgaykgPT4ge1xuXHRcdFx0XHR0aGlzLnNldFRleHQoaywgdik7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHRyYW5zbGF0aW9ucykpIHtcblx0XHRcdHRoaXMuc2V0VGV4dChrLCB2KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHRyYW5zbGF0aW9ucyBmb3IgdGhlIGN1cnJlbnQgZG9jdW1lbnQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9IFtlbGVtZW50XSAtIEVsZW1lbnQgdG8gc2VhcmNoIGZvciB0cmFuc2xhdGlvbnMuIERlZmF1bHQ6IGVsZW1lbnQgd2l0aCBvYmplY3RsaW5rIEBzY2h1a2FpL21vbnN0ZXIvaTE4bi90cmFuc2xhdGlvbnNAQGxpbmsuXG4gKiBAcmV0dXJuIHtUcmFuc2xhdGlvbnN9XG4gKiBAdGhyb3dzIHtFcnJvcn0gRWxlbWVudCBpcyBub3QgYW4gSFRNTEVsZW1lbnQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gQ2Fubm90IGZpbmQgdGhlIGVsZW1lbnQgd2l0aCB0cmFuc2xhdGlvbnMuIEFkZCB0aGUgdHJhbnNsYXRpb24gb2JqZWN0IHRvIHRoZSBkb2N1bWVudC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBUaGlzIGVsZW1lbnQgaGFzIG5vIHRyYW5zbGF0aW9ucy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBNaXNzaW5nIHRyYW5zbGF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoZWxlbWVudCkge1xuXHRjb25zdCBkID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0ZWxlbWVudCA9IGQucXVlcnlTZWxlY3Rvcihcblx0XHRcdGBbJHtBVFRSSUJVVEVfT0JKRUNUTElOS31+PVwiJHt0cmFuc2xhdGlvbnNMaW5rU3ltYm9sLnRvU3RyaW5nKCl9XCJdYCxcblx0XHQpO1xuXHRcdGlmIChlbGVtZW50ID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFwiQ2Fubm90IGZpbmQgdGhlIGVsZW1lbnQgd2l0aCB0cmFuc2xhdGlvbnMuIEFkZCB0aGUgdHJhbnNsYXRpb24gb2JqZWN0IHRvIHRoZSBkb2N1bWVudC5cIixcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkVsZW1lbnQgaXMgbm90IGFuIEhUTUxFbGVtZW50LlwiKTtcblx0fVxuXG5cdGlmICghaGFzT2JqZWN0TGluayhlbGVtZW50LCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoaXMgZWxlbWVudCBoYXMgbm8gdHJhbnNsYXRpb25zLlwiKTtcblx0fVxuXG5cdGNvbnN0IG9iaiA9IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCk7XG5cblx0Zm9yIChjb25zdCB0IG9mIG9iaikge1xuXHRcdGlmICh0IGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSB7XG5cdFx0XHRyZXR1cm4gdDtcblx0XHR9XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHRyYW5zbGF0aW9ucy5cIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9jYWxlT2ZEb2N1bWVudCB9IGZyb20gXCIuLi9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsLCBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHtcblx0Z2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMsXG5cdFRyYW5zbGF0aW9ucyxcbn0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVGdW5jdGlvbixcblx0dmFsaWRhdGVJbnRlZ2VyLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVQcmltaXRpdmUsXG5cdHZhbGlkYXRlU3RyaW5nLFxuXHR2YWxpZGF0ZUJvb2xlYW4sXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4vcGF0aGZpbmRlci5tanNcIjtcblxuZXhwb3J0IHsgVHJhbnNmb3JtZXIgfTtcblxuLyoqXG4gKiBUaGUgdHJhbnNmb3JtZXIgY2xhc3MgaXMgYSBzd2lzcyBhcm15IGtuaWZlIGZvciBtYW5pcHVsYXRpbmcgdmFsdWVzLlxuICpcbiAqIEEgc2ltcGxlIGV4YW1wbGUgaXMgdGhlIGNvbnZlcnNpb24gb2YgYWxsIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLiBmb3IgdGhpcyBwdXJwb3NlIHRoZSBjb21tYW5kIGB0b2xvd2VyYCBtdXN0IGJlIHVzZWQuXG4gKlxuICogYGBganNcbiAqIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKCd0b2xvd2VyJykucnVuKCdBQkMnKTsgLy8gXHUyMUE2IGFiY1xuICogYGBgXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2xpYnJhcmllcy90cmFuc2Zvcm1lclxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvdHJhbnNmb3JtZXIvc2ltcGxlXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIHRyYW5zZm9ybWVyIGNsYXNzIGlzIGEgc3dpc3MgYXJteSBrbmlmZSBmb3IgbWFuaXB1bGF0aW5nIHZhbHVlcy4gZXNwZWNpYWxseSBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBwaXBlLCBwcm9jZXNzaW5nIGNoYWlucyBjYW4gYmUgYnVpbHQgdXAuXG4gKi9cbmNsYXNzIFRyYW5zZm9ybWVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGVmaW5pdGlvblxuXHQgKi9cblx0Y29uc3RydWN0b3IoZGVmaW5pdGlvbikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5hcmdzID0gZGlzYXNzZW1ibGUoZGVmaW5pdGlvbik7XG5cdFx0dGhpcy5jb21tYW5kID0gdGhpcy5hcmdzLnNoaWZ0KCk7XG5cdFx0dGhpcy5jYWxsYmFja3MgPSBuZXcgTWFwKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcblx0ICogQHJldHVybiB7VHJhbnNmb3JtZXJ9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICovXG5cdHNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdFx0dmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayk7XG5cblx0XHRpZiAoY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWxpZGF0ZU9iamVjdChjb250ZXh0KTtcblx0XHR9XG5cblx0XHR0aGlzLmNhbGxiYWNrcy5zZXQobmFtZSwge1xuXHRcdFx0Y2FsbGJhY2s6IGNhbGxiYWNrLFxuXHRcdFx0Y29udGV4dDogY29udGV4dCxcblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7Kn1cblx0ICogQHRocm93cyB7RXJyb3J9IHVua25vd24gY29tbWFuZFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7RXJyb3J9IHR5cGUgbm90IHN1cHBvcnRlZFxuXHQgKi9cblx0cnVuKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRyYW5zZm9ybS5hcHBseSh0aGlzLCBbdmFsdWVdKTtcblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZFxuICogQHJldHVybiB7YXJyYXl9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkaXNhc3NlbWJsZShjb21tYW5kKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGNvbW1hbmQpO1xuXG5cdGNvbnN0IHBsYWNlaG9sZGVyID0gbmV3IE1hcCgpO1xuXHRjb25zdCByZWdleCA9IC8oKD88cGF0dGVybj5cXFxcKD88Y2hhcj4uKSl7MX0pL2dpbTtcblxuXHQvLyBUaGUgc2VwYXJhdG9yIGZvciBhcmdzIG11c3QgYmUgZXNjYXBlZFxuXHQvLyB1bmRlZmluZWQgc3RyaW5nIHdoaWNoIHNob3VsZCBub3Qgb2NjdXIgbm9ybWFsbHkgYW5kIGlzIGFsc28gbm90IGEgcmVnZXhcblx0Y29uc3QgcmVzdWx0ID0gY29tbWFuZC5tYXRjaEFsbChyZWdleCk7XG5cblx0Zm9yIChjb25zdCBtIG9mIHJlc3VsdCkge1xuXHRcdGNvbnN0IGcgPSBtPy5bXCJncm91cHNcIl07XG5cdFx0aWYgKCFpc09iamVjdChnKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcCA9IGc/LltcInBhdHRlcm5cIl07XG5cdFx0Y29uc3QgYyA9IGc/LltcImNoYXJcIl07XG5cblx0XHRpZiAocCAmJiBjKSB7XG5cdFx0XHRjb25zdCByID0gYF9fJHtuZXcgSUQoKS50b1N0cmluZygpfV9fYDtcblx0XHRcdHBsYWNlaG9sZGVyLnNldChyLCBjKTtcblx0XHRcdGNvbW1hbmQgPSBjb21tYW5kLnJlcGxhY2UocCwgcik7XG5cdFx0fVxuXHR9XG5cdGxldCBwYXJ0cyA9IGNvbW1hbmQuc3BsaXQoXCI6XCIpO1xuXG5cdHBhcnRzID0gcGFydHMubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdGxldCB2ID0gdmFsdWUudHJpbSgpO1xuXHRcdGZvciAoY29uc3QgayBvZiBwbGFjZWhvbGRlcikge1xuXHRcdFx0diA9IHYucmVwbGFjZShrWzBdLCBrWzFdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHY7XG5cdH0pO1xuXG5cdHJldHVybiBwYXJ0cztcbn1cblxuLyoqXG4gKiB0cmllcyB0byBtYWtlIGEgc3RyaW5nIG91dCBvZiB2YWx1ZSBhbmQgaWYgdGhpcyBzdWNjZWVkcyB0byByZXR1cm4gaXQgYmFja1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZyh2YWx1ZSkge1xuXHRpZiAoaXNPYmplY3QodmFsdWUpICYmIHZhbHVlLmhhc093blByb3BlcnR5KFwidG9TdHJpbmdcIikpIHtcblx0XHR2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cdH1cblxuXHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5rbm93biBjb21tYW5kXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB0eXBlIG5vdCBzdXBwb3J0ZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGtleSBwYXJhbWV0ZXJcbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtKHZhbHVlKSB7XG5cdGNvbnN0IGNvbnNvbGUgPSBnZXRHbG9iYWxPYmplY3QoXCJjb25zb2xlXCIpO1xuXG5cdGNvbnN0IGFyZ3MgPSBjbG9uZSh0aGlzLmFyZ3MpO1xuXHRsZXQga2V5O1xuXHRsZXQgZGVmYXVsdFZhbHVlO1xuXG5cdGxldCB0cmFuc2xhdGlvbnM7XG5cdGxldCBkYXRlO1xuXHRsZXQgbG9jYWxlO1xuXHRsZXQgdGltZXN0YW1wO1xuXHRsZXQgbWFwO1xuXHRsZXQga2V5VmFsdWU7XG5cblx0c3dpdGNoICh0aGlzLmNvbW1hbmQpIHtcblx0XHRjYXNlIFwic3RhdGljXCI6XG5cdFx0XHRyZXR1cm4gdGhpcy5hcmdzLmpvaW4oXCI6XCIpO1xuXG5cdFx0Y2FzZSBcInRvbG93ZXJcIjpcblx0XHRjYXNlIFwic3RydG9sb3dlclwiOlxuXHRcdGNhc2UgXCJ0b2xvd2VyY2FzZVwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0cmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRjYXNlIFwiY29udGFpbnNcIjpcblx0XHRcdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmluY2x1ZGVzKGFyZ3NbMF0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmluY2x1ZGVzKGFyZ3NbMF0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShhcmdzWzBdKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Y2FzZSBcImhhcy1lbnRyaWVzXCI6XG5cdFx0Y2FzZSBcImhhc2VudHJpZXNcIjpcblx0XHRcdGlmIChpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPiAwO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmxlbmd0aCA+IDA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdGNhc2UgXCJpc3VuZGVmaW5lZFwiOlxuXHRcdGNhc2UgXCJpcy11bmRlZmluZWRcIjpcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBcImlzbnVsbFwiOlxuXHRcdGNhc2UgXCJpcy1udWxsXCI6XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGw7XG5cblx0XHRjYXNlIFwiaXNzZXRcIjpcblx0XHRjYXNlIFwiaXMtc2V0XCI6XG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcblxuXHRcdGNhc2UgXCJpc251bWJlclwiOlxuXHRcdGNhc2UgXCJpcy1udW1iZXJcIjpcblx0XHRcdHJldHVybiBpc1ByaW1pdGl2ZSh2YWx1ZSkgJiYgIWlzTmFOKHZhbHVlKTtcblxuXHRcdGNhc2UgXCJpc2ludGVnZXJcIjpcblx0XHRjYXNlIFwiaXMtaW50ZWdlclwiOlxuXHRcdFx0cmV0dXJuIGlzUHJpbWl0aXZlKHZhbHVlKSAmJiAhaXNOYU4odmFsdWUpICYmIHZhbHVlICUgMSA9PT0gMDtcblxuXHRcdGNhc2UgXCJpc2Zsb2F0XCI6XG5cdFx0Y2FzZSBcImlzLWZsb2F0XCI6XG5cdFx0XHRyZXR1cm4gaXNQcmltaXRpdmUodmFsdWUpICYmICFpc05hTih2YWx1ZSkgJiYgdmFsdWUgJSAxICE9PSAwO1xuXG5cdFx0Y2FzZSBcImlzb2JqZWN0XCI6XG5cdFx0Y2FzZSBcImlzLW9iamVjdFwiOlxuXHRcdFx0cmV0dXJuIGlzT2JqZWN0KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJpc2FycmF5XCI6XG5cdFx0Y2FzZSBcImlzLWFycmF5XCI6XG5cdFx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG5cblx0XHRjYXNlIFwibm90XCI6XG5cdFx0XHR2YWxpZGF0ZUJvb2xlYW4odmFsdWUpO1xuXHRcdFx0cmV0dXJuICF2YWx1ZTtcblxuXHRcdGNhc2UgXCJ0b3VwcGVyXCI6XG5cdFx0Y2FzZSBcInN0cnRvdXBwZXJcIjpcblx0XHRjYXNlIFwidG91cHBlcmNhc2VcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdHJldHVybiB2YWx1ZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Y2FzZSBcInRvc3RyaW5nXCI6XG5cdFx0XHRyZXR1cm4gYCR7dmFsdWV9YDtcblxuXHRcdGNhc2UgXCJ0b2ludGVnZXJcIjpcblx0XHRcdGNvbnN0IG4gPSBwYXJzZUludCh2YWx1ZSk7XG5cdFx0XHR2YWxpZGF0ZUludGVnZXIobik7XG5cdFx0XHRyZXR1cm4gbjtcblxuXHRcdGNhc2UgXCJ0by1qc29uXCI6XG5cdFx0Y2FzZSBcInRvanNvblwiOlxuXHRcdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJmcm9tLWpzb25cIjpcblx0XHRjYXNlIFwiZnJvbWpzb25cIjpcblx0XHRcdHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcblxuXHRcdGNhc2UgXCJ0cmltXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdmFsdWUudHJpbSgpO1xuXG5cdFx0Y2FzZSBcInJhd3VybGVuY29kZVwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSlcblx0XHRcdFx0LnJlcGxhY2UoLyEvZywgXCIlMjFcIilcblx0XHRcdFx0LnJlcGxhY2UoLycvZywgXCIlMjdcIilcblx0XHRcdFx0LnJlcGxhY2UoL1xcKC9nLCBcIiUyOFwiKVxuXHRcdFx0XHQucmVwbGFjZSgvXFwpL2csIFwiJTI5XCIpXG5cdFx0XHRcdC5yZXBsYWNlKC9cXCovZywgXCIlMkFcIik7XG5cblx0XHRjYXNlIFwiY2FsbFwiOlxuXHRcdFx0LyoqXG5cdFx0XHQgKiBjYWxsYmFjay1kZWZpbml0aW9uXG5cdFx0XHQgKiBmdW5jdGlvbiBjYWxsYmFjayh2YWx1ZSwgLi4uYXJncykge1xuXHRcdFx0ICogICByZXR1cm4gdmFsdWU7XG5cdFx0XHQgKiB9XG5cdFx0XHQgKi9cblxuXHRcdFx0bGV0IGNhbGxiYWNrO1xuXHRcdFx0Y29uc3QgY2FsbGJhY2tOYW1lID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0bGV0IGNvbnRleHQgPSBnZXRHbG9iYWwoKTtcblxuXHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShjYWxsYmFja05hbWUpKSB7XG5cdFx0XHRcdGNhbGxiYWNrID0gdmFsdWVbY2FsbGJhY2tOYW1lXTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5jYWxsYmFja3MuaGFzKGNhbGxiYWNrTmFtZSkpIHtcblx0XHRcdFx0Y29uc3QgcyA9IHRoaXMuY2FsbGJhY2tzLmdldChjYWxsYmFja05hbWUpO1xuXHRcdFx0XHRjYWxsYmFjayA9IHM/LltcImNhbGxiYWNrXCJdO1xuXHRcdFx0XHRjb250ZXh0ID0gcz8uW1wiY29udGV4dFwiXTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiZcblx0XHRcdFx0d2luZG93Lmhhc093blByb3BlcnR5KGNhbGxiYWNrTmFtZSlcblx0XHRcdCkge1xuXHRcdFx0XHRjYWxsYmFjayA9IHdpbmRvd1tjYWxsYmFja05hbWVdO1xuXHRcdFx0fVxuXHRcdFx0dmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayk7XG5cblx0XHRcdGFyZ3MudW5zaGlmdCh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbChjb250ZXh0LCAuLi5hcmdzKTtcblxuXHRcdGNhc2UgXCJwbGFpblwiOlxuXHRcdGNhc2UgXCJwbGFpbnRleHRcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcodmFsdWUsIFwidGV4dC9odG1sXCIpO1xuXHRcdFx0cmV0dXJuIGRvYy5ib2R5LnRleHRDb250ZW50IHx8IFwiXCI7XG5cblx0XHRjYXNlIFwiaWZcIjpcblx0XHRjYXNlIFwiP1wiOlxuXHRcdFx0dmFsaWRhdGVQcmltaXRpdmUodmFsdWUpO1xuXG5cdFx0XHRsZXQgdHJ1ZVN0YXRlbWVudCA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgZmFsc2VTdGF0ZW1lbnQgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXG5cdFx0XHR0cnVlU3RhdGVtZW50ID0gY29udmVydFNwZWNpYWxTdHJpbmdzKHRydWVTdGF0ZW1lbnQsIHZhbHVlKTtcblx0XHRcdGZhbHNlU3RhdGVtZW50ID0gY29udmVydFNwZWNpYWxTdHJpbmdzKGZhbHNlU3RhdGVtZW50LCB2YWx1ZSk7XG5cblx0XHRcdGNvbnN0IGNvbmRpdGlvbiA9IGV2YWx1YXRlQ29uZGl0aW9uKHZhbHVlKTtcblx0XHRcdHJldHVybiBjb25kaXRpb24gPyB0cnVlU3RhdGVtZW50IDogZmFsc2VTdGF0ZW1lbnQ7XG5cblx0XHRjYXNlIFwidWNmaXJzdFwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdFx0XHRjb25zdCBmaXJzdGNoYXIgPSB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTtcblx0XHRcdHJldHVybiBmaXJzdGNoYXIgKyB2YWx1ZS5zdWJzdHIoMSk7XG5cdFx0Y2FzZSBcInVjd29yZHNcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblxuXHRcdFx0cmV0dXJuIHZhbHVlLnJlcGxhY2UoXG5cdFx0XHRcdC9eKFthLXpcXHUwMEUwLVxcdTAwRkNdKXxcXHMrKFthLXpcXHUwMEUwLVxcdTAwRkNdKS9nLFxuXHRcdFx0XHRmdW5jdGlvbiAodikge1xuXHRcdFx0XHRcdHJldHVybiB2LnRvVXBwZXJDYXNlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcImNvdW50XCI6XG5cdFx0Y2FzZSBcImxlbmd0aFwiOlxuXHRcdFx0aWYgKFxuXHRcdFx0XHQoaXNTdHJpbmcodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSB8fCBpc0FycmF5KHZhbHVlKSkgJiZcblx0XHRcdFx0dmFsdWUuaGFzT3duUHJvcGVydHkoXCJsZW5ndGhcIilcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUubGVuZ3RoO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCB0eXBlICR7dHlwZW9mIHZhbHVlfWApO1xuXG5cdFx0Y2FzZSBcInRvLWJhc2U2NFwiOlxuXHRcdGNhc2UgXCJidG9hXCI6XG5cdFx0Y2FzZSBcImJhc2U2NFwiOlxuXHRcdFx0cmV0dXJuIGJ0b2EoY29udmVydFRvU3RyaW5nKHZhbHVlKSk7XG5cblx0XHRjYXNlIFwiYXRvYlwiOlxuXHRcdGNhc2UgXCJmcm9tLWJhc2U2NFwiOlxuXHRcdFx0cmV0dXJuIGF0b2IoY29udmVydFRvU3RyaW5nKHZhbHVlKSk7XG5cblx0XHRjYXNlIFwiZW1wdHlcIjpcblx0XHRcdHJldHVybiBcIlwiO1xuXG5cdFx0Y2FzZSBcInVuZGVmaW5lZFwiOlxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGNhc2UgXCJkZWJ1Z1wiOlxuXHRcdFx0aWYgKGlzT2JqZWN0KGNvbnNvbGUpKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKHZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXG5cdFx0Y2FzZSBcInByZWZpeFwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0Y29uc3QgcHJlZml4ID0gYXJncz8uWzBdO1xuXHRcdFx0cmV0dXJuIHByZWZpeCArIHZhbHVlO1xuXG5cdFx0Y2FzZSBcInN1ZmZpeFwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0Y29uc3Qgc3VmZml4ID0gYXJncz8uWzBdO1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgc3VmZml4O1xuXG5cdFx0Y2FzZSBcInVuaXFpZFwiOlxuXHRcdFx0cmV0dXJuIG5ldyBJRCgpLnRvU3RyaW5nKCk7XG5cblx0XHRjYXNlIFwiZmlyc3Qta2V5XCI6XG5cdFx0Y2FzZSBcImxhc3Qta2V5XCI6XG5cdFx0Y2FzZSBcIm50aC1sYXN0LWtleVwiOlxuXHRcdGNhc2UgXCJudGgta2V5XCI6XG5cdFx0XHRpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG5vdCBzdXBwb3J0ZWRcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSkuc29ydCgpO1xuXG5cdFx0XHRpZiAodGhpcy5jb21tYW5kID09PSBcImZpcnN0LWtleVwiKSB7XG5cdFx0XHRcdGtleSA9IDA7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuY29tbWFuZCA9PT0gXCJsYXN0LWtleVwiKSB7XG5cdFx0XHRcdGtleSA9IGtleXMubGVuZ3RoIC0gMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGtleSA9IHZhbGlkYXRlSW50ZWdlcihwYXJzZUludChhcmdzLnNoaWZ0KCkpKTtcblxuXHRcdFx0XHRpZiAodGhpcy5jb21tYW5kID09PSBcIm50aC1sYXN0LWtleVwiKSB7XG5cdFx0XHRcdFx0a2V5ID0ga2V5cy5sZW5ndGggLSBrZXkgLSAxO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHRWYWx1ZSA9IGFyZ3Muc2hpZnQoKSB8fCBcIlwiO1xuXG5cdFx0XHRjb25zdCB1c2VLZXkgPSBrZXlzPy5ba2V5XTtcblxuXHRcdFx0aWYgKHZhbHVlPy5bdXNlS2V5XSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU/Llt1c2VLZXldO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGVmYXVsdFZhbHVlO1xuXG5cdFx0Y2FzZSBcImtleVwiOlxuXHRcdGNhc2UgXCJwcm9wZXJ0eVwiOlxuXHRcdGNhc2UgXCJpbmRleFwiOlxuXHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgTWFwKSB7XG5cdFx0XHRcdGlmICghdmFsdWUuaGFzKGtleSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZS5nZXQoa2V5KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSB8fCBpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRpZiAodmFsdWU/LltrZXldKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlPy5ba2V5XTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgbm90IHN1cHBvcnRlZFwiKTtcblxuXHRcdGNhc2UgXCJwYXRoLWV4aXN0c1wiOlxuXHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5ldyBQYXRoZmluZGVyKHZhbHVlKS5leGlzdHMoa2V5KTtcblxuXHRcdGNhc2UgXCJjb25jYXRcIjpcblx0XHRcdGNvbnN0IHBmMiA9IG5ldyBQYXRoZmluZGVyKHZhbHVlKTtcblx0XHRcdGxldCBjb25jYXQgPSBcIlwiO1xuXHRcdFx0d2hpbGUgKGFyZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGFkZCBlbXB0eSBzdHJpbmdzXG5cdFx0XHRcdGlmIChpc1N0cmluZyhrZXkpICYmIGtleS50cmltKCkgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRjb25jYXQgKz0ga2V5O1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFwZjIuZXhpc3RzKGtleSkpIHtcblx0XHRcdFx0XHRjb25jYXQgKz0ga2V5O1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHYgPSBwZjIuZ2V0VmlhKGtleSk7XG5cdFx0XHRcdGlmICghaXNQcmltaXRpdmUodikpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ2YWx1ZSBpcyBub3QgcHJpbWl0aXZlXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uY2F0ICs9IHY7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBjb25jYXQ7XG5cdFx0Y2FzZSBcInBhdGhcIjpcblx0XHRcdGtleSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGtleSBwYXJhbWV0ZXJcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHBmID0gbmV3IFBhdGhmaW5kZXIodmFsdWUpO1xuXG5cdFx0XHRpZiAoIXBmLmV4aXN0cyhrZXkpKSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBwZi5nZXRWaWEoa2V5KTtcblxuXHRcdGNhc2UgXCJzdWJzdHJpbmdcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblxuXHRcdFx0Y29uc3Qgc3RhcnQgPSBwYXJzZUludChhcmdzWzBdKSB8fCAwO1xuXHRcdFx0Y29uc3QgZW5kID0gKHBhcnNlSW50KGFyZ3NbMV0pIHx8IDApICsgc3RhcnQ7XG5cblx0XHRcdHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XG5cblx0XHRjYXNlIFwibm9wXCI6XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRjYXNlIFwiPz9cIjpcblx0XHRjYXNlIFwiZGVmYXVsdFwiOlxuXHRcdFx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZhdWx0VmFsdWUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRsZXQgZGVmYXVsdFR5cGUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoZGVmYXVsdFR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkZWZhdWx0VHlwZSA9IFwic3RyaW5nXCI7XG5cdFx0XHR9XG5cblx0XHRcdHN3aXRjaCAoZGVmYXVsdFR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcImludFwiOlxuXHRcdFx0XHRjYXNlIFwiaW50ZWdlclwiOlxuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludChkZWZhdWx0VmFsdWUpO1xuXHRcdFx0XHRjYXNlIFwiZmxvYXRcIjpcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VGbG9hdChkZWZhdWx0VmFsdWUpO1xuXHRcdFx0XHRjYXNlIFwidW5kZWZpbmVkXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0Y2FzZSBcImJvb2xcIjpcblx0XHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KGRlZmF1bHRWYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgIT09IFwiXCIgJiZcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlICE9PSBcIm9mZlwiICYmXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSAhPT0gXCJmYWxzZVwiKSB8fFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlID09PSBcIm9uXCIgfHxcblx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9PT0gXCJ0cnVlXCIgfHxcblx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9PT0gXCJ0cnVlXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRjYXNlIFwic3RyaW5nXCI6XG5cdFx0XHRcdFx0cmV0dXJuIGAke2RlZmF1bHRWYWx1ZX1gO1xuXHRcdFx0XHRjYXNlIFwib2JqZWN0XCI6XG5cdFx0XHRcdFx0cmV0dXJuIEpTT04ucGFyc2UoYXRvYihkZWZhdWx0VmFsdWUpKTtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBub3Qgc3VwcG9ydGVkXCIpO1xuXG5cdFx0Y2FzZSBcIm1hcFwiOlxuXHRcdFx0bWFwID0gbmV3IE1hcCgpO1xuXHRcdFx0d2hpbGUgKGFyZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRrZXlWYWx1ZSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdFx0aWYgKGtleVZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGtleSBwYXJhbWV0ZXJcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRrZXlWYWx1ZSA9IGtleVZhbHVlLnNwbGl0KFwiPVwiKTtcblx0XHRcdFx0bWFwLnNldChrZXlWYWx1ZVswXSwga2V5VmFsdWVbMV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWFwLmdldCh2YWx1ZSk7XG5cblx0XHRjYXNlIFwiZXF1YWxzXCI6XG5cdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyB2YWx1ZSBwYXJhbWV0ZXJcIik7XG5cdFx0XHR9XG5cblx0XHRcdHZhbGlkYXRlUHJpbWl0aXZlKHZhbHVlKTtcblxuXHRcdFx0Y29uc3QgZXF1YWxzVmFsdWUgPSBhcmdzLnNoaWZ0KCk7XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogVGhlIGhpc3Rvcnkgb2YgXHUyMDFDdHlwZW9mIG51bGxcdTIwMURcblx0XHRcdCAqIGh0dHBzOi8vMmFsaXR5LmNvbS8yMDEzLzEwL3R5cGVvZi1udWxsLmh0bWxcblx0XHRcdCAqIEluIEphdmFTY3JpcHQsIHR5cGVvZiBudWxsIGlzICdvYmplY3QnLCB3aGljaCBpbmNvcnJlY3RseSBzdWdnZXN0c1xuXHRcdFx0ICogdGhhdCBudWxsIGlzIGFuIG9iamVjdC5cblx0XHRcdCAqL1xuXHRcdFx0aWYgKHZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBlcXVhbHNWYWx1ZSA9PT0gXCJudWxsXCI7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHR5cGVPZlZhbHVlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHRzd2l0Y2ggKHR5cGVPZlZhbHVlKSB7XG5cdFx0XHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IGVxdWFsc1ZhbHVlO1xuXHRcdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSBwYXJzZUZsb2F0KGVxdWFsc1ZhbHVlKTtcblx0XHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IChlcXVhbHNWYWx1ZSA9PT0gXCJ0cnVlXCIgfHwgZXF1YWxzVmFsdWUgPT09IFwib25cIik7XG5cdFx0XHRcdGNhc2UgXCJ1bmRlZmluZWRcIjpcblx0XHRcdFx0XHRyZXR1cm4gZXF1YWxzVmFsdWUgPT09IFwidW5kZWZpbmVkXCI7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBub3Qgc3VwcG9ydGVkXCIpO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcIm1vbmV5XCI6XG5cdFx0Y2FzZSBcImN1cnJlbmN5XCI6XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsb2NhbGUgPSBnZXRMb2NhbGVPZkRvY3VtZW50KCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFZlcndlbmRlbiB2b24gUmVnRXhwLCB1bSBXXHUwMEU0aHJ1bmcgdW5kIEJldHJhZyB6dSBleHRyYWhpZXJlblxuXHRcdFx0Y29uc3QgbWF0Y2ggPSB2YWx1ZS5tYXRjaCgvXihbQS1aXXszfSlbXFxzLV0qKFxcZCsoXFwuXFxkKyk/KSQvKTtcblx0XHRcdGlmICghbWF0Y2gpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjdXJyZW5jeSBmb3JtYXRcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGN1cnJlbmN5ID0gbWF0Y2hbMV07XG5cdFx0XHRjb25zdCBhbW91bnQgPSBtYXRjaFsyXTtcblxuXHRcdFx0Y29uc3QgbWF4aW11bUZyYWN0aW9uRGlnaXRzID0gYXJncz8uWzBdIHx8IDI7XG5cdFx0XHRjb25zdCByb3VuZGluZ0luY3JlbWVudCA9IGFyZ3M/LlsxXSB8fCA1O1xuXG5cdFx0XHRjb25zdCBuZiA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NhbGUudG9TdHJpbmcoKSwge1xuXHRcdFx0XHRzdHlsZTogXCJjdXJyZW5jeVwiLFxuXHRcdFx0XHRjdXJyZW5jeTogY3VycmVuY3ksXG5cdFx0XHRcdG1heGltdW1GcmFjdGlvbkRpZ2l0czogbWF4aW11bUZyYWN0aW9uRGlnaXRzLFxuXHRcdFx0XHRyb3VuZGluZ0luY3JlbWVudDogcm91bmRpbmdJbmNyZW1lbnQsXG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIG5mLmZvcm1hdChhbW91bnQpO1xuXG5cdFx0Y2FzZSBcInRpbWVzdGFtcFwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuXHRcdFx0aWYgKGlzTmFOKHRpbWVzdGFtcCkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRpbWVzdGFtcDtcblxuXHRcdGNhc2UgXCJ0aW1lXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKGxvY2FsZS50b1N0cmluZygpLCB7XG5cdFx0XHRcdFx0aG91cjEyOiBmYWxzZSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwiZGF0ZXRpbWVmb3JtYXRcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHtcblx0XHRcdFx0ZGF0ZVN0eWxlOiBcIm1lZGl1bVwiLFxuXHRcdFx0XHR0aW1lU3R5bGU6IFwibWVkaXVtXCIsXG5cdFx0XHRcdGhvdXIxMjogZmFsc2UsXG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9wdGlvbnMuZGF0ZVN0eWxlID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9wdGlvbnMudGltZVN0eWxlID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsb2NhbGUgPSBnZXRMb2NhbGVPZkRvY3VtZW50KCkudG9TdHJpbmcoKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgb3B0aW9ucykuZm9ybWF0KGRhdGUpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvY2FsZSBvciBtaXNzaW5nIGZvcm1hdCAoJHtlLm1lc3NhZ2V9KWApO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcImRhdGV0aW1lXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLnRvU3RyaW5nKCksIHtcblx0XHRcdFx0XHRob3VyMTI6IGZhbHNlLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJkYXRlXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKGxvY2FsZS50b1N0cmluZygpLCB7XG5cdFx0XHRcdFx0eWVhcjogXCJudW1lcmljXCIsXG5cdFx0XHRcdFx0bW9udGg6IFwiMi1kaWdpdFwiLFxuXHRcdFx0XHRcdGRheTogXCIyLWRpZ2l0XCIsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvY2FsZSBvciBtaXNzaW5nIGZvcm1hdCAoJHtlLm1lc3NhZ2V9KWApO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcInllYXJcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTtcblxuXHRcdGNhc2UgXCJtb250aFwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXRNb250aCgpICsgMTtcblxuXHRcdGNhc2UgXCJkYXlcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0RGF0ZSgpO1xuXG5cdFx0Y2FzZSBcIndlZWtkYXlcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0RGF5KCk7XG5cblx0XHRjYXNlIFwiaG91clwiOlxuXHRcdGNhc2UgXCJob3Vyc1wiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xuXG5cdFx0Y2FzZSBcIm1pbnV0ZVwiOlxuXHRcdGNhc2UgXCJtaW51dGVzXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldE1pbnV0ZXMoKTtcblxuXHRcdGNhc2UgXCJzZWNvbmRcIjpcblx0XHRjYXNlIFwic2Vjb25kc1wiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXRTZWNvbmRzKCk7XG5cblx0XHRjYXNlIFwiaTE4blwiOlxuXHRcdGNhc2UgXCJ0cmFuc2xhdGlvblwiOlxuXHRcdFx0dHJhbnNsYXRpb25zID0gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoKTtcblx0XHRcdGlmICghKHRyYW5zbGF0aW9ucyBpbnN0YW5jZW9mIFRyYW5zbGF0aW9ucykpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyB0cmFuc2xhdGlvbnNcIik7XG5cdFx0XHR9XG5cblx0XHRcdGtleSA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0a2V5ID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHRWYWx1ZSA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cblx0XHRcdGRlZmF1bHRWYWx1ZSA9IGNvbnZlcnRTcGVjaWFsU3RyaW5ncyhkZWZhdWx0VmFsdWUsIHZhbHVlKTtcblxuXHRcdFx0cmV0dXJuIHRyYW5zbGF0aW9ucy5nZXRUZXh0KGtleSwgZGVmYXVsdFZhbHVlKTtcblxuXHRcdGNhc2UgXCJzZXQtdG9nZ2xlXCI6XG5cdFx0Y2FzZSBcInNldC1zZXRcIjpcblx0XHRjYXNlIFwic2V0LXJlbW92ZVwiOlxuXHRcdFx0Y29uc3QgbW9kaWZpZXIgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRsZXQgZGVsaW1pdGVyID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0aWYgKGRlbGltaXRlciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlbGltaXRlciA9IFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzZXQgPSBuZXcgU2V0KHZhbHVlLnNwbGl0KGRlbGltaXRlcikpO1xuXHRcdFx0Y29uc3QgdG9nZ2xlID0gbmV3IFNldChtb2RpZmllci5zcGxpdChkZWxpbWl0ZXIpKTtcblx0XHRcdGlmICh0aGlzLmNvbW1hbmQgPT09IFwic2V0LXRvZ2dsZVwiKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdCBvZiB0b2dnbGUpIHtcblx0XHRcdFx0XHRpZiAoc2V0Lmhhcyh0KSkge1xuXHRcdFx0XHRcdFx0c2V0LmRlbGV0ZSh0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2V0LmFkZCh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodGhpcy5jb21tYW5kID09PSBcInNldC1zZXRcIikge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHQgb2YgdG9nZ2xlKSB7XG5cdFx0XHRcdFx0c2V0LmFkZCh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNvbW1hbmQgPT09IFwic2V0LXJlbW92ZVwiKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdCBvZiB0b2dnbGUpIHtcblx0XHRcdFx0XHRzZXQuZGVsZXRlKHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gQXJyYXkuZnJvbShzZXQpLmpvaW4oZGVsaW1pdGVyKTtcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gY29tbWFuZCAke3RoaXMuY29tbWFuZH1gKTtcblx0fVxufVxuXG4vKipcbiAqIGNvbnZlcnRzIHNwZWNpYWwgc3RyaW5ncyB0byB0aGVpciB2YWx1ZXNcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gaW5wdXRcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybiB7dW5kZWZpbmVkfCp8bnVsbHxzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTcGVjaWFsU3RyaW5ncyhpbnB1dCwgdmFsdWUpIHtcblx0c3dpdGNoIChpbnB1dCkge1xuXHRcdGNhc2UgXCJ2YWx1ZVwiOlxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdGNhc2UgXCJcXFxcdmFsdWVcIjpcblx0XHRcdHJldHVybiBcInZhbHVlXCI7XG5cdFx0Y2FzZSBcIlxcXFx1bmRlZmluZWRcIjpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y2FzZSBcIlxcXFxudWxsXCI6XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGlucHV0O1xuXHR9XG59XG5cbi8qKlxuICogY2hlY2tzIGlmIGEgdmFsdWUgaXMgdHJ1ZSBvciBub3RcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZXZhbHVhdGVDb25kaXRpb24odmFsdWUpIHtcblx0Y29uc3QgbG93ZXJWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcblxuXHRyZXR1cm4gKFxuXHRcdCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHR2YWx1ZSAhPT0gbnVsbCAmJlxuXHRcdFx0dmFsdWUgIT09IFwiXCIgJiZcblx0XHRcdGxvd2VyVmFsdWUgIT09IFwib2ZmXCIgJiZcblx0XHRcdGxvd2VyVmFsdWUgIT09IFwiZmFsc2VcIiAmJlxuXHRcdFx0dmFsdWUgIT09IGZhbHNlKSB8fFxuXHRcdGxvd2VyVmFsdWUgPT09IFwib25cIiB8fFxuXHRcdGxvd2VyVmFsdWUgPT09IFwidHJ1ZVwiIHx8XG5cdFx0dmFsdWUgPT09IHRydWVcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IFRyYW5zZm9ybWVyIH0gZnJvbSBcIi4vdHJhbnNmb3JtZXIubWpzXCI7XG5cbmV4cG9ydCB7IFBpcGUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgREVMSU1JVEVSID0gXCJ8XCI7XG5cbi8qKlxuICogVGhlIHBpcGUgY2xhc3MgbWFrZXMgaXQgcG9zc2libGUgdG8gY29tYmluZSBzZXZlcmFsIHByb2Nlc3Npbmcgc3RlcHMuXG4gKlxuICogQSBwaXBlIGNvbnNpc3RzIG9mIGNvbW1hbmRzIHdob3NlIGlucHV0IGFuZCBvdXRwdXQgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBwaXBlIHN5bWJvbCBgfGAuXG4gKlxuICogV2l0aCB0aGUgUGlwZSwgcHJvY2Vzc2luZyBzdGVwcyBjYW4gYmUgY29tYmluZWQuIEhlcmUsIHRoZSB2YWx1ZSBvZiBhbiBvYmplY3QgaXMgYWNjZXNzZWQgdmlhIHRoZSBwYXRoZmluZGVyIChwYXRoIGNvbW1hbmQpLlxuICogdGhlIHdvcmQgaXMgdGhlbiBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlIGxldHRlcnMgYW5kIGEgcHJlZml4IEhlbGxvIGlzIGFkZGVkLiB0aGUgdHdvIGJhY2tzbGFzaCBzYWZlIHRoZSBzcGFjZSBjaGFyLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvcGlwZS9leGFtcGxlLTEvXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgcGlwZSBjbGFzcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb21iaW5lIHNldmVyYWwgcHJvY2Vzc2luZyBzdGVwcy5cbiAqL1xuY2xhc3MgUGlwZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBpcGUgYSBwaXBlIGNvbnNpc3RzIG9mIGNvbW1hbmRzIHdob3NlIGlucHV0IGFuZCBvdXRwdXQgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBwaXBlIHN5bWJvbCBgfGAuXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn1cblx0ICovXG5cdGNvbnN0cnVjdG9yKHBpcGUpIHtcblx0XHRzdXBlcigpO1xuXHRcdHZhbGlkYXRlU3RyaW5nKHBpcGUpO1xuXG5cdFx0dGhpcy5waXBlID0gcGlwZS5zcGxpdChERUxJTUlURVIpLm1hcCgodikgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBUcmFuc2Zvcm1lcih2KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuXHQgKiBAcmV0dXJuIHtUcmFuc2Zvcm1lcn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKi9cblx0c2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpIHtcblx0XHRmb3IgKGNvbnN0IFssIHRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucGlwZSkpIHtcblx0XHRcdHQuc2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJ1biBhIHBpcGVcblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0cnVuKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRoaXMucGlwZS5yZWR1Y2UoKGFjY3VtdWxhdG9yLCB0cmFuc2Zvcm1lciwgY3VycmVudEluZGV4LCBhcnJheSkgPT4ge1xuXHRcdFx0cmV0dXJuIHRyYW5zZm9ybWVyLnJ1bihhY2N1bXVsYXRvcik7XG5cdFx0fSwgdmFsdWUpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgUGlwZSB9IGZyb20gXCIuLi9kYXRhL3BpcGUubWpzXCI7XG5cbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgRm9ybWF0dGVyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVybmFsT2JqZWN0U3ltYm9sID0gU3ltYm9sKFwiaW50ZXJuYWxPYmplY3RcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHdhdGNoZG9nU3ltYm9sID0gU3ltYm9sKFwid2F0Y2hkb2dcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG1hcmtlck9wZW5JbmRleFN5bWJvbCA9IFN5bWJvbChcIm1hcmtlck9wZW5JbmRleFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbWFya2VyQ2xvc2VJbmRleFN5bWJvbCA9IFN5bWJvbChcIm1hcmtlcmNsb3NlSW5kZXhcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHdvcmtpbmdEYXRhU3ltYm9sID0gU3ltYm9sKFwid29ya2luZ0RhdGFcIik7XG5cbi8qKlxuICogTWVzc2FnZXMgY2FuIGJlIGZvcm1hdHRlZCB3aXRoIHRoZSBmb3JtYXR0ZXIuIFRvIGRvIHRoaXMsIGFuIG9iamVjdCB3aXRoIHRoZSB2YWx1ZXMgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIGZvcm1hdHRlci4gVGhlIG1lc3NhZ2UgY2FuIHRoZW4gY29udGFpbiBwbGFjZWhvbGRlcnMuXG4gKlxuICogTG9vayBhdCB0aGUgZXhhbXBsZSBiZWxvdy4gVGhlIHBsYWNlaG9sZGVycyB1c2UgdGhlIGxvZ2ljIG9mIFBpcGUuXG4gKlxuICogIyMgTWFya2VyIGluIG1hcmtlclxuICpcbiAqIE1hcmtlcnMgY2FuIGJlIG5lc3RlZC4gSGVyZSwgdGhlIGlubmVyIG1hcmtlciBpcyByZXNvbHZlZCBmaXJzdCBgJHtzdWJrZXl9IFx1MjFBNiAxID0gJHtteWtleTJ9YCBhbmQgdGhlbiB0aGUgb3V0ZXIgbWFya2VyIGAke215a2V5Mn1gLlxuICpcbiAqIGBgYFxuICogY29uc3QgdGV4dCA9ICcke215a2V5JHtzdWJrZXl9fSc7XG4gKiBsZXQgb2JqID0ge1xuICogIG15a2V5MjogXCIxXCIsXG4gKiAgc3Via2V5OiBcIjJcIlxuICogfTtcbiAqXG4gKiBuZXcgRm9ybWF0dGVyKG9iaikuZm9ybWF0KHRleHQpO1xuICogLy8gXHUyMUE2IDFcbiAqIGBgYFxuICpcbiAqICMjIENhbGxiYWNrc1xuICpcbiAqIFRoZSB2YWx1ZXMgaW4gYSBmb3JtYXR0ZXIgY2FuIGJlIGFkanVzdGVkIHZpYSB0aGUgY29tbWFuZHMgb2YgdGhlIGBUcmFuc2Zvcm1lcmAgb3IgdGhlYFBpcGVgLlxuICogVGhlcmUgaXMgYWxzbyB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGNhbGxiYWNrcy5cbiAqXG4gKiBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHt4OiAnMSd9LCB7XG4gKiAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAqICAgICAgICAgICAgICAgICAgICBxdW90ZTogKHZhbHVlKSA9PiB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXCInICsgdmFsdWUgKyAnXCInXG4gKiAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICB9KTtcbiAqXG4gKiBmb3JtYXR0ZXIuZm9ybWF0KCcke3ggfCBjYWxsOnF1b3RlfScpKVxuICogLy8gXHUyMUE2IFwiMVwiXG4gKlxuICogIyMgTWFya2VyIHdpdGggcGFyYW1ldGVyXG4gKlxuICogQSBzdHJpbmcgY2FuIGFsc28gYnJpbmcgaXRzIG93biB2YWx1ZXMuIFRoZXNlIG11c3QgdGhlbiBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUga2V5IGJ5IGEgc2VwYXJhdG9yIGA6OmAuXG4gKiBUaGUgdmFsdWVzIHRoZW1zZWx2ZXMgbXVzdCBiZSBzcGVjaWZpZWQgaW4ga2V5L3ZhbHVlIHBhaXJzLiBUaGUga2V5IG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlIHZhbHVlIGJ5IGEgc2VwYXJhdG9yIGA9YC5cbiAqXG4gKiBXaGVuIHVzaW5nIGEgcGlwZSwgeW91IG11c3QgcGF5IGF0dGVudGlvbiB0byB0aGUgc2VwYXJhdG9ycy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90ZXh0L2Zvcm1hdHRlci5tanMnO1xuICpcbiAqIG5ldyBGb3JtYXR0ZXIoe1xuICogICAgICAgYToge1xuICogICAgICAgICAgIGI6IHtcbiAqICAgICAgICAgICAgICAgYzogXCJIZWxsb1wiXG4gKiAgICAgICAgICAgfSxcbiAqICAgICAgICAgICBkOiBcIndvcmxkXCIsXG4gKiAgICAgICB9XG4gKiAgIH0pLmZvcm1hdChcIiR7YS5iLmN9ICR7YS5kIHwgdWNmaXJzdH0hXCIpOyAvLyB3aXRoIHBpcGVcbiAqXG4gKiAvLyBcdTIxQTYgSGVsbG8gV29ybGQhXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBGb3JtYXR0ZXIgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBtYXJrZXJzIGFyZSBgJHtgIGFuZCBgfWBcblx0ICpcblx0ICogQHBhcmFtIG9iamVjdFxuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0LCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cdFx0dGhpc1tpbnRlcm5hbE9iamVjdFN5bWJvbF0gPSBvYmplY3QgfHwge307XG5cdFx0dGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdID0gMDtcblx0XHR0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdID0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gbWFya2VyXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IG1hcmtlci5vcGVuPVtcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IG1hcmtlci5jbG9zZT1bXCIke1wiXVxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gcGFyYW1ldGVyXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuZGVsaW1pdGVyPVwiOjpcIlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcGFyYW1ldGVyLmFzc2lnbm1lbnQ9XCI9XCJcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGNhbGxiYWNrcz17fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRtYXJrZXI6IHtcblx0XHRcdFx0b3BlbjogW1wiJHtcIl0sXG5cdFx0XHRcdGNsb3NlOiBbXCJ9XCJdLFxuXHRcdFx0fSxcblx0XHRcdHBhcmFtZXRlcjoge1xuXHRcdFx0XHRkZWxpbWl0ZXI6IFwiOjpcIixcblx0XHRcdFx0YXNzaWdubWVudDogXCI9XCIsXG5cdFx0XHR9LFxuXHRcdFx0Y2FsbGJhY2tzOiB7fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbmV3IFBhcmFtZXRlciBDaGFyYWN0ZXJcblx0ICpcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBjaGFycyBhcmUgYDo6YCBhbmQgYD1gXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBmb3JtYXR0ZXIuc2V0UGFyYW1ldGVyQ2hhcnMoJyMnKTtcblx0ICogZm9ybWF0dGVyLnNldFBhcmFtZXRlckNoYXJzKCdbJywnXScpO1xuXHQgKiBmb3JtYXR0ZXIuc2V0UGFyYW1ldGVyQ2hhcnMoJ2kxOG57JywnfScpO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGRlbGltaXRlclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gYXNzaWdubWVudFxuXHQgKiBAcmV0dXJuIHtGb3JtYXR0ZXJ9XG5cdCAqIEBzaW5jZSAxLjI0LjBcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICovXG5cdHNldFBhcmFtZXRlckNoYXJzKGRlbGltaXRlciwgYXNzaWdubWVudCkge1xuXHRcdGlmIChkZWxpbWl0ZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJwYXJhbWV0ZXJcIl1bXCJkZWxpbWl0ZXJcIl0gPVxuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyhkZWxpbWl0ZXIpO1xuXHRcdH1cblxuXHRcdGlmIChhc3NpZ25tZW50ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicGFyYW1ldGVyXCJdW1wiYXNzaWdubWVudFwiXSA9XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKGFzc2lnbm1lbnQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBuZXcgTWFya2VyXG5cdCAqXG5cdCAqIERlZmF1bHQgdmFsdWVzIGZvciB0aGUgbWFya2VycyBhcmUgYCR7YCBhbmQgYH1gXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBmb3JtYXR0ZXIuc2V0TWFya2VyKCcjJyk7IC8vIG9wZW4gYW5kIGNsb3NlIGFyZSBib3RoICNcblx0ICogZm9ybWF0dGVyLnNldE1hcmtlcignWycsJ10nKTtcblx0ICogZm9ybWF0dGVyLnNldE1hcmtlcignaTE4bnsnLCd9Jyk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ30gb3BlblxuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3x1bmRlZmluZWR9IGNsb3NlXG5cdCAqIEByZXR1cm4ge0Zvcm1hdHRlcn1cblx0ICogQHNpbmNlIDEuMTIuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c2V0TWFya2VyKG9wZW4sIGNsb3NlKSB7XG5cdFx0aWYgKGNsb3NlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNsb3NlID0gb3Blbjtcblx0XHR9XG5cblx0XHRpZiAoaXNTdHJpbmcob3BlbikpIG9wZW4gPSBbb3Blbl07XG5cdFx0aWYgKGlzU3RyaW5nKGNsb3NlKSkgY2xvc2UgPSBbY2xvc2VdO1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdID0gdmFsaWRhdGVBcnJheShvcGVuKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcImNsb3NlXCJdID0gdmFsaWRhdGVBcnJheShjbG9zZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHRcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdG9vIGRlZXAgbmVzdGluZ1xuXHQgKi9cblx0Zm9ybWF0KHRleHQpIHtcblx0XHR0aGlzW3dhdGNoZG9nU3ltYm9sXSA9IDA7XG5cdFx0dGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdID0gMDtcblx0XHR0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdID0gMDtcblx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSA9IHt9O1xuXHRcdHJldHVybiBmb3JtYXQuY2FsbCh0aGlzLCB0ZXh0KTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdCh0ZXh0KSB7XG5cdHRoaXNbd2F0Y2hkb2dTeW1ib2xdKys7XG5cdGlmICh0aGlzW3dhdGNoZG9nU3ltYm9sXSA+IDIwKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidG9vIGRlZXAgbmVzdGluZ1wiKTtcblx0fVxuXG5cdGNvbnN0IG9wZW5NYXJrZXIgPVxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wib3BlblwiXT8uW3RoaXNbbWFya2VyT3BlbkluZGV4U3ltYm9sXV07XG5cdGNvbnN0IGNsb3NlTWFya2VyID1cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcImNsb3NlXCJdPy5bdGhpc1ttYXJrZXJDbG9zZUluZGV4U3ltYm9sXV07XG5cblx0Ly8gY29udGFpbnMgbm8gcGxhY2Vob2xkZXJzXG5cdGlmICh0ZXh0LmluZGV4T2Yob3Blbk1hcmtlcikgPT09IC0xIHx8IHRleHQuaW5kZXhPZihjbG9zZU1hcmtlcikgPT09IC0xKSB7XG5cdFx0cmV0dXJuIHRleHQ7XG5cdH1cblxuXHRsZXQgcmVzdWx0ID0gdG9rZW5pemUuY2FsbChcblx0XHR0aGlzLFxuXHRcdHZhbGlkYXRlU3RyaW5nKHRleHQpLFxuXHRcdG9wZW5NYXJrZXIsXG5cdFx0Y2xvc2VNYXJrZXIsXG5cdCk7XG5cblx0aWYgKFxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wib3BlblwiXT8uW3RoaXNbbWFya2VyT3BlbkluZGV4U3ltYm9sXSArIDFdXG5cdCkge1xuXHRcdHRoaXNbbWFya2VyT3BlbkluZGV4U3ltYm9sXSsrO1xuXHR9XG5cblx0aWYgKFxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wiY2xvc2VcIl0/Llt0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdICsgMV1cblx0KSB7XG5cdFx0dGhpc1ttYXJrZXJDbG9zZUluZGV4U3ltYm9sXSsrO1xuXHR9XG5cblx0cmVzdWx0ID0gZm9ybWF0LmNhbGwodGhpcywgcmVzdWx0KTtcblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEyLjBcbiAqIEBwYXJhbSB0ZXh0XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplKHRleHQsIG9wZW5NYXJrZXIsIGNsb3NlTWFya2VyKSB7XG5cdGNvbnN0IGZvcm1hdHRlZCA9IFtdO1xuXG5cdGNvbnN0IHBhcmFtZXRlckFzc2lnbm1lbnQgPSB0aGlzW2ludGVybmFsU3ltYm9sXVtcInBhcmFtZXRlclwiXVtcImFzc2lnbm1lbnRcIl07XG5cdGNvbnN0IHBhcmFtZXRlckRlbGltaXRlciA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicGFyYW1ldGVyXCJdW1wiZGVsaW1pdGVyXCJdO1xuXHRjb25zdCBjYWxsYmFja3MgPSB0aGlzW2ludGVybmFsU3ltYm9sXVtcImNhbGxiYWNrc1wiXTtcblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSB0ZXh0LmluZGV4T2Yob3Blbk1hcmtlcik7XG5cdFx0Ly8gbm8gbWFya2VyXG5cdFx0aWYgKHN0YXJ0SW5kZXggPT09IC0xKSB7XG5cdFx0XHRmb3JtYXR0ZWQucHVzaCh0ZXh0KTtcblx0XHRcdGJyZWFrO1xuXHRcdH0gZWxzZSBpZiAoc3RhcnRJbmRleCA+IDApIHtcblx0XHRcdGZvcm1hdHRlZC5wdXNoKHRleHQuc3Vic3RyaW5nKDAsIHN0YXJ0SW5kZXgpKTtcblx0XHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZyhzdGFydEluZGV4KTtcblx0XHR9XG5cblx0XHRsZXQgZW5kSW5kZXggPSB0ZXh0LnN1YnN0cmluZyhvcGVuTWFya2VyLmxlbmd0aCkuaW5kZXhPZihjbG9zZU1hcmtlcik7XG5cdFx0aWYgKGVuZEluZGV4ICE9PSAtMSkgZW5kSW5kZXggKz0gb3Blbk1hcmtlci5sZW5ndGg7XG5cdFx0bGV0IGluc2lkZVN0YXJ0SW5kZXggPSB0ZXh0XG5cdFx0XHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKVxuXHRcdFx0LmluZGV4T2Yob3Blbk1hcmtlcik7XG5cdFx0aWYgKGluc2lkZVN0YXJ0SW5kZXggIT09IC0xKSB7XG5cdFx0XHRpbnNpZGVTdGFydEluZGV4ICs9IG9wZW5NYXJrZXIubGVuZ3RoO1xuXHRcdFx0aWYgKGluc2lkZVN0YXJ0SW5kZXggPCBlbmRJbmRleCkge1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSB0b2tlbml6ZS5jYWxsKFxuXHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0dGV4dC5zdWJzdHJpbmcoaW5zaWRlU3RhcnRJbmRleCksXG5cdFx0XHRcdFx0b3Blbk1hcmtlcixcblx0XHRcdFx0XHRjbG9zZU1hcmtlcixcblx0XHRcdFx0KTtcblx0XHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGluc2lkZVN0YXJ0SW5kZXgpICsgcmVzdWx0O1xuXHRcdFx0XHRlbmRJbmRleCA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKS5pbmRleE9mKGNsb3NlTWFya2VyKTtcblx0XHRcdFx0aWYgKGVuZEluZGV4ICE9PSAtMSkgZW5kSW5kZXggKz0gb3Blbk1hcmtlci5sZW5ndGg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGVuZEluZGV4ID09PSAtMSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic3ludGF4IGVycm9yIGluIGZvcm1hdHRlciB0ZW1wbGF0ZVwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBrZXkgPSB0ZXh0LnN1YnN0cmluZyhvcGVuTWFya2VyLmxlbmd0aCwgZW5kSW5kZXgpO1xuXHRcdGNvbnN0IHBhcnRzID0ga2V5LnNwbGl0KHBhcmFtZXRlckRlbGltaXRlcik7XG5cdFx0Y29uc3QgY3VycmVudFBpcGUgPSBwYXJ0cy5zaGlmdCgpO1xuXG5cdFx0dGhpc1t3b3JraW5nRGF0YVN5bWJvbF0gPSBleHRlbmQoXG5cdFx0XHR7fSxcblx0XHRcdHRoaXNbaW50ZXJuYWxPYmplY3RTeW1ib2xdLFxuXHRcdFx0dGhpc1t3b3JraW5nRGF0YVN5bWJvbF0sXG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3Qga3Ygb2YgcGFydHMpIHtcblx0XHRcdGNvbnN0IFtrLCB2XSA9IGt2LnNwbGl0KHBhcmFtZXRlckFzc2lnbm1lbnQpO1xuXHRcdFx0dGhpc1t3b3JraW5nRGF0YVN5bWJvbF1ba10gPSB2O1xuXHRcdH1cblxuXHRcdGNvbnN0IHQxID0ga2V5LnNwbGl0KFwifFwiKS5zaGlmdCgpLnRyaW0oKTsgLy8gcGlwZSBzeW1ib2xcblx0XHRjb25zdCB0MiA9IHQxLnNwbGl0KFwiOjpcIikuc2hpZnQoKS50cmltKCk7IC8vIGtleSB2YWx1ZSBkZWxpbWl0ZXJcblx0XHRjb25zdCB0MyA9IHQyLnNwbGl0KFwiLlwiKS5zaGlmdCgpLnRyaW0oKTsgLy8gcGF0aCBkZWxpbWl0ZXJcblx0XHRjb25zdCBwcmVmaXggPSB0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXT8uW3QzXSA/IFwicGF0aDpcIiA6IFwic3RhdGljOlwiO1xuXG5cdFx0bGV0IGNvbW1hbmQgPSBcIlwiO1xuXHRcdGlmIChcblx0XHRcdHByZWZpeCAmJlxuXHRcdFx0a2V5LmluZGV4T2YocHJlZml4KSAhPT0gMCAmJlxuXHRcdFx0a2V5LmluZGV4T2YoXCJwYXRoOlwiKSAhPT0gMCAmJlxuXHRcdFx0a2V5LmluZGV4T2YoXCJzdGF0aWM6XCIpICE9PSAwXG5cdFx0KSB7XG5cdFx0XHRjb21tYW5kID0gcHJlZml4O1xuXHRcdH1cblxuXHRcdGNvbW1hbmQgKz0gY3VycmVudFBpcGU7XG5cblx0XHRjb25zdCBwaXBlID0gbmV3IFBpcGUoY29tbWFuZCk7XG5cblx0XHRpZiAoaXNPYmplY3QoY2FsbGJhY2tzKSkge1xuXHRcdFx0Zm9yIChjb25zdCBbbmFtZSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGNhbGxiYWNrcykpIHtcblx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjayk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9ybWF0dGVkLnB1c2godmFsaWRhdGVTdHJpbmcocGlwZS5ydW4odGhpc1t3b3JraW5nRGF0YVN5bWJvbF0pKSk7XG5cblx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoZW5kSW5kZXggKyBjbG9zZU1hcmtlci5sZW5ndGgpO1xuXHR9XG5cblx0cmV0dXJuIGZvcm1hdHRlZC5qb2luKFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQXJyYXksIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBNZWRpYVR5cGUsIHBhcnNlTWVkaWFUeXBlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVybmFsID0gU3ltYm9sKFwiaW50ZXJuYWxcIik7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGFyYW1ldGVyXG4gKiBAcHJvcGVydHkge3N0cmluZ30ga2V5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWVcbiAqL1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIG9iamVjdCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5NZWRpYVR5cGUoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIE1lZGlhVHlwZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN1YnR5cGVcblx0ICogQHBhcmFtIHtNb25zdGVyLlR5cGVzLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJcblx0ICovXG5cdGNvbnN0cnVjdG9yKHR5cGUsIHN1YnR5cGUsIHBhcmFtZXRlcikge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW2ludGVybmFsXSA9IHtcblx0XHRcdHR5cGU6IHZhbGlkYXRlU3RyaW5nKHR5cGUpLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRzdWJ0eXBlOiB2YWxpZGF0ZVN0cmluZyhzdWJ0eXBlKS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0cGFyYW1ldGVyOiBbXSxcblx0XHR9O1xuXG5cdFx0aWYgKHBhcmFtZXRlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsXVtcInBhcmFtZXRlclwiXSA9IHZhbGlkYXRlQXJyYXkocGFyYW1ldGVyKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL21lZGlhLXR5cGVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7U3RyaW5nfVxuXHQgKi9cblx0Z2V0IHR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxdLnR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7U3RyaW5nfVxuXHQgKi9cblx0Z2V0IHN1YnR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxdLnN1YnR5cGU7XG5cdH1cblxuXHQvLyAvKipcblx0Ly8gICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5QYXJhbWV0ZXJbXX1cblx0Ly8gICovXG5cdC8vIGdldCBwYXJhbWV0ZXIoKSB7XG5cdC8vIFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxdLnBhcmFtZXRlcjtcblx0Ly8gfVxuXG5cdC8qKlxuXHQgKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNYXB9XG5cdCAqL1xuXHRnZXQgcGFyYW1ldGVyKCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxdW1wicGFyYW1ldGVyXCJdLmZvckVhY2goKHApID0+IHtcblx0XHRcdGxldCB2YWx1ZSA9IHAudmFsdWU7XG5cblx0XHRcdC8vIGludGVybmFsbHkgc3BlY2lhbCB2YWx1ZXMgYXJlIHBhcnRseSBzdG9yZWQgd2l0aCBxdW90ZXMsIHRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGVtLlxuXHRcdFx0aWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ1wiJykgJiYgdmFsdWUuZW5kc1dpdGgoJ1wiJykpIHtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3VsdC5zZXQocC5rZXksIHZhbHVlKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0Y29uc3QgcGFyYW1ldGVyID0gW107XG5cdFx0Zm9yIChjb25zdCBhIG9mIHRoaXNbaW50ZXJuYWxdLnBhcmFtZXRlcikge1xuXHRcdFx0cGFyYW1ldGVyLnB1c2goYCR7YS5rZXl9PSR7YS52YWx1ZX1gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7dGhpc1tpbnRlcm5hbF0udHlwZX0vJHt0aGlzW2ludGVybmFsXS5zdWJ0eXBlfSR7XG5cdFx0XHRwYXJhbWV0ZXIubGVuZ3RoID4gMCA/IGA7JHtwYXJhbWV0ZXIuam9pbihcIjtcIil9YCA6IFwiXCJcblx0XHR9YDtcblx0fVxufVxuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5wYXJzZU1lZGlhVHlwZSgpYC5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtNb25zdGVyfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9tb25zdGVyLm1qcyc7XG4gKiBjb25zb2xlLmxvZyhNb25zdGVyLlR5cGVzLnBhcnNlTWVkaWFUeXBlKCkpXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWxzbyBpbnRlZ3JhdGUgdGhpcyBmdW5jdGlvbiBpbmRpdmlkdWFsbHkuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7cGFyc2VNZWRpYVR5cGV9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL2RhdGF1cmwubWpzJztcbiAqIGNvbnNvbGUubG9nKHBhcnNlTWVkaWFUeXBlKCkpXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIFNwZWNpZmljYXRpb246XG4gKlxuICogYGBgXG4gKiBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gKiBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAqIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAqIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVkaWF0eXBlXG4gKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLk1lZGlhVHlwZX1cbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMDQ1I3NlY3Rpb24tNS4xXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHRoZSBtaW1ldHlwZSBjYW4gbm90IGJlIHBhcnNlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSBibGFuayB2YWx1ZSBpcyBub3QgYWxsb3dlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSBtYWxmb3JtZWQgZGF0YSB1cmxcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZWRpYVR5cGUobWVkaWF0eXBlKSB7XG5cdGNvbnN0IHJlZ2V4ID1cblx0XHQvKD88dHlwZT5bQS1aYS16XSt8XFwqKVxcLyg/PHN1YnR5cGU+KFthLXpBLVowLTkuXFwrX1xcLV0rKXxcXCp8KSg/PHBhcmFtZXRlcj5cXHMqO1xccyooW2EtekEtWjAtOV0rKVxccyooPVxccyooXCI/W0EtWmEtejAtOV9cXC1dK1wiPykpPykqL2c7XG5cdGNvbnN0IHJlc3VsdCA9IHJlZ2V4LmV4ZWModmFsaWRhdGVTdHJpbmcobWVkaWF0eXBlKSk7XG5cblx0Y29uc3QgZ3JvdXBzID0gcmVzdWx0Py5bXCJncm91cHNcIl07XG5cdGlmIChncm91cHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgbWltZXR5cGUgY2FuIG5vdCBiZSBwYXJzZWRcIik7XG5cdH1cblxuXHRjb25zdCB0eXBlID0gZ3JvdXBzPy5bXCJ0eXBlXCJdO1xuXHRjb25zdCBzdWJ0eXBlID0gZ3JvdXBzPy5bXCJzdWJ0eXBlXCJdO1xuXHRjb25zdCBwYXJhbWV0ZXIgPSBncm91cHM/LltcInBhcmFtZXRlclwiXTtcblxuXHRpZiAoc3VidHlwZSA9PT0gXCJcIiB8fCB0eXBlID09PSBcIlwiKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcImJsYW5rIHZhbHVlIGlzIG5vdCBhbGxvd2VkXCIpO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBNZWRpYVR5cGUodHlwZSwgc3VidHlwZSwgcGFyc2VQYXJhbWV0ZXIocGFyYW1ldGVyKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTguMFxuICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtZXRlclxuICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5QYXJhbWV0ZXJbXXx1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuXHRpZiAoIWlzU3RyaW5nKHBhcmFtZXRlcikpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0cGFyYW1ldGVyLnNwbGl0KFwiO1wiKS5mb3JFYWNoKChlbnRyeSkgPT4ge1xuXHRcdGVudHJ5ID0gZW50cnkudHJpbSgpO1xuXHRcdGlmIChlbnRyeSA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGt2ID0gZW50cnkuc3BsaXQoXCI9XCIpO1xuXG5cdFx0Y29uc3Qga2V5ID0gdmFsaWRhdGVTdHJpbmcoa3Y/LlswXSkudHJpbSgpO1xuXHRcdGNvbnN0IHZhbHVlID0gdmFsaWRhdGVTdHJpbmcoa3Y/LlsxXSkudHJpbSgpO1xuXG5cdFx0Ly8gaWYgdmFsdWVzIGFyZSBxdW90ZWQsIHRoZXkgcmVtYWluIHNvIGludGVybmFsbHlcblx0XHRyZXN1bHQucHVzaCh7XG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHR9KTtcblx0fSk7XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBNZWRpYVR5cGUsIHBhcnNlTWVkaWFUeXBlIH0gZnJvbSBcIi4vbWVkaWF0eXBlLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVCb29sZWFuLFxuXHR2YWxpZGF0ZUluc3RhbmNlLFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBEYXRhVXJsLCBwYXJzZURhdGFVUkwgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWwgPSBTeW1ib2woXCJpbnRlcm5hbFwiKTtcblxuLyoqXG4gKiBZb3UgY2FuIGNyZWF0ZSBhbiBvYmplY3QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgbmV3IERhdGFVcmwoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvRGF0YV9VUklzXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjM5N1xuICovXG5jbGFzcyBEYXRhVXJsIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudFxuXHQgKiBAcGFyYW0ge1N0cmluZ3xNZWRpYVR5cGV9IG1lZGlhdHlwZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJhc2U2ND10cnVlXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihjb250ZW50LCBtZWRpYXR5cGUsIGJhc2U2NCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNTdHJpbmcobWVkaWF0eXBlKSkge1xuXHRcdFx0bWVkaWF0eXBlID0gcGFyc2VNZWRpYVR5cGUobWVkaWF0eXBlKTtcblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsXSA9IHtcblx0XHRcdGNvbnRlbnQ6IHZhbGlkYXRlU3RyaW5nKGNvbnRlbnQpLFxuXHRcdFx0bWVkaWF0eXBlOiB2YWxpZGF0ZUluc3RhbmNlKG1lZGlhdHlwZSwgTWVkaWFUeXBlKSxcblx0XHRcdGJhc2U2NDogdmFsaWRhdGVCb29sZWFuKGJhc2U2NCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGJhc2U2NCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvZGF0YS11cmxcIik7XG5cdH1cblxuXHRnZXQgY29udGVudCgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0uYmFzZTY0XG5cdFx0XHQ/IGF0b2IodGhpc1tpbnRlcm5hbF0uY29udGVudClcblx0XHRcdDogdGhpc1tpbnRlcm5hbF0uY29udGVudDtcblx0fVxuXG5cdGdldCBtZWRpYXR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxdLm1lZGlhdHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMzk3XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRsZXQgY29udGVudCA9IHRoaXNbaW50ZXJuYWxdLmNvbnRlbnQ7XG5cblx0XHRpZiAodGhpc1tpbnRlcm5hbF0uYmFzZTY0ID09PSB0cnVlKSB7XG5cdFx0XHRjb250ZW50ID0gYDtiYXNlNjQsJHtjb250ZW50fWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRlbnQgPSBgLCR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnQpfWA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGBkYXRhOiR7dGhpc1tpbnRlcm5hbF0ubWVkaWF0eXBlLnRvU3RyaW5nKCl9JHtjb250ZW50fWA7XG5cdH1cbn1cblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYHBhcnNlRGF0YVVSTCgpYC5cbiAqXG4gKiBTcGVjaWZpY2F0aW9uOlxuICpcbiAqIGBgYFxuICogZGF0YXVybCAgICA6PSBcImRhdGE6XCIgWyBtZWRpYXR5cGUgXSBbIFwiO2Jhc2U2NFwiIF0gXCIsXCIgZGF0YVxuICogbWVkaWF0eXBlICA6PSBbIHR5cGUgXCIvXCIgc3VidHlwZSBdICooIFwiO1wiIHBhcmFtZXRlciApXG4gKiBkYXRhICAgICAgIDo9ICp1cmxjaGFyXG4gKiBwYXJhbWV0ZXIgIDo9IGF0dHJpYnV0ZSBcIj1cIiB2YWx1ZVxuICogYGBgXG4gKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0Jhc2ljc19vZl9IVFRQL0RhdGFfVVJJc1xuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gaW5jb3JyZWN0IG9yIG1pc3NpbmcgZGF0YSBwcm90b2NvbFxuICogQHRocm93cyB7VHlwZUVycm9yfSBtYWxmb3JtZWQgZGF0YSB1cmxcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhdXJsXG4gKiBAcmV0dXJuIHtEYXRhVXJsfVxuICovXG5mdW5jdGlvbiBwYXJzZURhdGFVUkwoZGF0YXVybCkge1xuXHR2YWxpZGF0ZVN0cmluZyhkYXRhdXJsKTtcblxuXHRkYXRhdXJsID0gZGF0YXVybC50cmltKCk7XG5cblx0aWYgKGRhdGF1cmwuc3Vic3RyaW5nKDAsIDUpICE9PSBcImRhdGE6XCIpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW5jb3JyZWN0IG9yIG1pc3NpbmcgZGF0YSBwcm90b2NvbFwiKTtcblx0fVxuXG5cdGRhdGF1cmwgPSBkYXRhdXJsLnN1YnN0cmluZyg1KTtcblxuXHRjb25zdCBwID0gZGF0YXVybC5pbmRleE9mKFwiLFwiKTtcblx0aWYgKHAgPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcIm1hbGZvcm1lZCBkYXRhIHVybFwiKTtcblx0fVxuXG5cdGxldCBjb250ZW50ID0gZGF0YXVybC5zdWJzdHJpbmcocCArIDEpO1xuXHRjb25zdCBtZWRpYXR5cGVBbmRCYXNlNjQgPSBkYXRhdXJsLnN1YnN0cmluZygwLCBwKS50cmltKCk7XG5cdGxldCBtZWRpYXR5cGUgPSBcInRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSVwiO1xuXHRsZXQgYmFzZTY0RmxhZyA9IGZhbHNlO1xuXG5cdGlmIChtZWRpYXR5cGVBbmRCYXNlNjQgIT09IFwiXCIpIHtcblx0XHRtZWRpYXR5cGUgPSBtZWRpYXR5cGVBbmRCYXNlNjQ7XG5cdFx0aWYgKG1lZGlhdHlwZUFuZEJhc2U2NC5lbmRzV2l0aChcImJhc2U2NFwiKSkge1xuXHRcdFx0Y29uc3QgaSA9IG1lZGlhdHlwZUFuZEJhc2U2NC5sYXN0SW5kZXhPZihcIjtcIik7XG5cdFx0XHRtZWRpYXR5cGUgPSBtZWRpYXR5cGVBbmRCYXNlNjQuc3Vic3RyaW5nKDAsIGkpO1xuXHRcdFx0YmFzZTY0RmxhZyA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRlbnQgPSBkZWNvZGVVUklDb21wb25lbnQoY29udGVudCk7XG5cdFx0fVxuXG5cdFx0bWVkaWF0eXBlID0gcGFyc2VNZWRpYVR5cGUobWVkaWF0eXBlKTtcblx0fSBlbHNlIHtcblx0XHRjb250ZW50ID0gZGVjb2RlVVJJQ29tcG9uZW50KGNvbnRlbnQpO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBEYXRhVXJsKGNvbnRlbnQsIG1lZGlhdHlwZSwgYmFzZTY0RmxhZyk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFF1ZXVlIH07XG5cbi8qKlxuICogQSBxdWV1ZSBpcyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBhcmUgcHJvY2Vzc2VkIG9uZSBhZnRlciBhbm90aGVyIChmaXJzdCBpbiwgZmlyc3Qgb3V0KS5cbiAqXG4gKiBXaXRoIGEgcXVldWUgeW91IGNhbiBhZGQgaXRlbXMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBgUXVldWUuYWRkKClgIGFuZCByZW1vdmUgaXRlbXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0IGBRdWV1ZS5wb3AoKWAuXG4gKlxuICogV2l0aCBgUXVldWUucGVlaygpYCB5b3UgY2FuIGdldCB0aGUgZmlyc3QgaXRlbSB3aXRob3V0IHJlbW92aW5nIGl0IGZyb20gdGhlIGxpc3QuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhlIGluc3RhbmNlIHZpYSBgbmV3IFF1ZXVlKClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAc3VtbWFyeSBBIFF1ZXVlIChGaWZvKVxuICovXG5jbGFzcyBRdWV1ZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5kYXRhID0gW107XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL3F1ZXVlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0VtcHR5KCkge1xuXHRcdHJldHVybiB0aGlzLmRhdGEubGVuZ3RoID09PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlYWQgdGhlIGVsZW1lbnQgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZSB3aXRob3V0IHJlbW92aW5nIGl0LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0cGVlaygpIHtcblx0XHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZGF0YVswXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSBuZXcgZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZS5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICovXG5cdGFkZCh2YWx1ZSkge1xuXHRcdHRoaXMuZGF0YS5wdXNoKHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIGVudHJpZXNcblx0ICpcblx0ICogQHJldHVybiB7UXVldWV9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgdGhlIGVsZW1lbnQgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZVxuXHQgKiBJZiB0aGUgcXVldWUgaXMgZW1wdHksIHJldHVybiB1bmRlZmluZWQuXG5cdCAqXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRwb2xsKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5zaGlmdCgpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgUXVldWUgfSBmcm9tIFwiLi9xdWV1ZS5tanNcIjtcbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0IH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IFVuaXF1ZVF1ZXVlIH07XG5cbi8qKlxuICogQW4gVW5pcXVlUXVldWUgaXMgYSBxdWV1ZSB0aGF0IGNvbnRhaW5zIGl0ZW1zIG9ubHkgb25jZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgcXVldWUgZm9yIHVuaXF1ZSB2YWx1ZXNcbiAqL1xuY2xhc3MgVW5pcXVlUXVldWUgZXh0ZW5kcyBRdWV1ZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHVuaXF1ZTogbmV3IFdlYWtTZXQoKSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIG5ldyBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gdmFsdWVcblx0ICogQHJldHVybiB7UXVldWV9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqL1xuXHRhZGQodmFsdWUpIHtcblx0XHR2YWxpZGF0ZU9iamVjdCh2YWx1ZSk7XG5cblx0XHRpZiAoIXRoaXNbaW50ZXJuYWxTeW1ib2xdLnVuaXF1ZS5oYXModmFsdWUpKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS51bmlxdWUuYWRkKHZhbHVlKTtcblx0XHRcdHN1cGVyLmFkZCh2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCBlbnRyaWVzXG5cdCAqXG5cdCAqIEByZXR1cm4ge1F1ZXVlfVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0c3VwZXIuY2xlYXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS51bmlxdWUgPSBuZXcgV2Vha1NldCgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSB0aGUgZWxlbWVudCBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlXG5cdCAqIElmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgcmV0dXJuIHVuZGVmaW5lZC5cblx0ICpcblx0ICogQHJldHVybiB7b2JqZWN0fVxuXHQgKi9cblx0cG9sbCgpIHtcblx0XHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlID0gdGhpcy5kYXRhLnNoaWZ0KCk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0udW5pcXVlLmRlbGV0ZSh2YWx1ZSk7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgVG9rZW5MaXN0IH0gZnJvbSBcIi4vdG9rZW5saXN0Lm1qc1wiO1xuaW1wb3J0IHsgVW5pcXVlUXVldWUgfSBmcm9tIFwiLi91bmlxdWVxdWV1ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IE9ic2VydmVyIH07XG5cbi8qKlxuICogQW4gb2JzZXJ2ZXIgbWFuYWdlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKlxuICogVGhlIHVwZGF0ZSBtZXRob2QgaXMgY2FsbGVkIHdpdGggdGhlIHN1YmplY3Qgb2JqZWN0IGFzIHRoaXMgcG9pbnRlci4gRm9yIHRoaXMgcmVhc29uXG4gKiB0aGUgY2FsbGJhY2sgc2hvdWxkIG5vdCBiZSBhbiBhcnJvdyBmdW5jdGlvbiwgYmVjYXVzZSBpdCBnZXRzIHRoaXMgcG9pbnRlciBvZiBpdHMgb3duIGNvbnRleHQuXG4gKlxuICogSW5jbHVkZSB0aGlzIGNsYXNzIGluIHlvdXIgcHJvamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgY29kZTpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG4gKiBgYGBcbiAqXG4gKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IuXG4gKlxuICogYGBganNcbiAqIG5ldyBPYnNlcnZlcigoKT0+e1xuICogICAgIC8vIHRoaXMgaXMgbm90IHN1YmplY3RcbiAqIH0pXG4gKlxuICogbmV3IE9ic2VydmVyKGZ1bmN0aW9uKCkge1xuICogICAgIC8vIHRoaXMgaXMgc3ViamVjdFxuICogfSlcbiAqIGBgYFxuICpcbiAqIEFkZGl0aW9uYWwgYXJndW1lbnRzIGNhbiBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLiBUbyBkbyB0aGlzLCBzaW1wbHkgc3BlY2lmeSB0aGVtLlxuICpcbiAqIGBgYGpzXG4gKiBPYnNlcnZlcihmdW5jdGlvbihhLCBiLCBjKSB7XG4gKiAgICAgY29uc29sZS5sb2coYSwgYiwgYyk7IC8vIFx1MjFBNiBcImFcIiwgMiwgdHJ1ZVxuICogfSwgXCJhXCIsIDIsIHRydWUpXG4gKiBgYGBcbiAqXG4gKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gbXVzdCBoYXZlIGFzIG1hbnkgcGFyYW1ldGVycyBhcyBhcmd1bWVudHMgYXJlIGdpdmVuLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKi9cbmNsYXNzIE9ic2VydmVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0geyp9IGFyZ3Ncblx0ICovXG5cdGNvbnN0cnVjdG9yKGNhbGxiYWNrLCAuLi5hcmdzKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwib2JzZXJ2ZXIgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcblx0XHR0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7XG5cdFx0dGhpcy50YWdzID0gbmV3IFRva2VuTGlzdCgpO1xuXHRcdHRoaXMucXVldWUgPSBuZXcgVW5pcXVlUXVldWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvb2JzZXJ2ZXJcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRhZ1xuXHQgKiBAcmV0dXJuIHtPYnNlcnZlcn1cblx0ICovXG5cdGFkZFRhZyh0YWcpIHtcblx0XHR0aGlzLnRhZ3MuYWRkKHRhZyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRhZ1xuXHQgKiBAcmV0dXJuIHtPYnNlcnZlcn1cblx0ICovXG5cdHJlbW92ZVRhZyh0YWcpIHtcblx0XHR0aGlzLnRhZ3MucmVtb3ZlKHRhZyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7QXJyYXl9XG5cdCAqL1xuXHRnZXRUYWdzKCkge1xuXHRcdHJldHVybiB0aGlzLnRhZ3MuZW50cmllcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWdcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGhhc1RhZyh0YWcpIHtcblx0XHRyZXR1cm4gdGhpcy50YWdzLmNvbnRhaW5zKHRhZyk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IHN1YmplY3Rcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHVwZGF0ZShzdWJqZWN0KSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0XHRpZiAoIWlzT2JqZWN0KHN1YmplY3QpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJzdWJqZWN0IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRzZWxmLnF1ZXVlLmFkZChzdWJqZWN0KTtcblxuXHRcdFx0cXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIHRoZSBxdWV1ZSBhbmQgdGhlIGBxdWV1ZU1pY3JvdGFza2AgZW5zdXJlIHRoYXQgYW4gb2JqZWN0IGlzIG5vdFxuXHRcdFx0XHRcdC8vIGluZm9ybWVkIG9mIHRoZSBzYW1lIGNoYW5nZSBtb3JlIHRoYW4gb25jZS5cblx0XHRcdFx0XHRpZiAoc2VsZi5xdWV1ZS5pc0VtcHR5KCkpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBzID0gc2VsZi5xdWV1ZS5wb2xsKCk7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gc2VsZi5jYWxsYmFjay5hcHBseShzLCBzZWxmLmFyZ3VtZW50cyk7XG5cblx0XHRcdFx0XHRpZiAoaXNPYmplY3QocmVzdWx0KSAmJiByZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJlc29sdmUocmVzdWx0KTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4vb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IE9ic2VydmVyTGlzdCB9O1xuXG4vKipcbiAqIFdpdGggdGhlIGhlbHAgb2YgdGhlIE9ic2VydmVyTGlzdCBjbGFzcywgb2JzZXJ2ZXIgY2FuIGJlIG1hbmFnZWQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqL1xuY2xhc3MgT2JzZXJ2ZXJMaXN0IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm9ic2VydmVycyA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge09ic2VydmVyTGlzdH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgT2JzZXJ2ZXJcblx0ICovXG5cdGF0dGFjaChvYnNlcnZlcikge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2Uob2JzZXJ2ZXIsIE9ic2VydmVyKTtcblxuXHRcdHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge09ic2VydmVyTGlzdH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgT2JzZXJ2ZXJcblx0ICovXG5cdGRldGFjaChvYnNlcnZlcikge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2Uob2JzZXJ2ZXIsIE9ic2VydmVyKTtcblxuXHRcdHZhciBpID0gMDtcblx0XHR2YXIgbCA9IHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDtcblx0XHRmb3IgKDsgaSA8IGw7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMub2JzZXJ2ZXJzW2ldID09PSBvYnNlcnZlcikge1xuXHRcdFx0XHR0aGlzLm9ic2VydmVycy5zcGxpY2UoaSwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgT2JzZXJ2ZXJcblx0ICovXG5cdGNvbnRhaW5zKG9ic2VydmVyKSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShvYnNlcnZlciwgT2JzZXJ2ZXIpO1xuXHRcdHZhciBpID0gMDtcblx0XHR2YXIgbCA9IHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDtcblx0XHRmb3IgKDsgaSA8IGw7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMub2JzZXJ2ZXJzW2ldID09PSBvYnNlcnZlcikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBzdWJqZWN0XG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRub3RpZnkoc3ViamVjdCkge1xuXHRcdGNvbnN0IHBvbWlzZXMgPSBbXTtcblxuXHRcdGxldCBpID0gMDtcblx0XHRjb25zdCBsID0gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuXHRcdGZvciAoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRwb21pc2VzLnB1c2godGhpcy5vYnNlcnZlcnNbaV0udXBkYXRlKHN1YmplY3QpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocG9taXNlcyk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0LCBpc1ByaW1pdGl2ZSB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyTGlzdCB9IGZyb20gXCIuL29ic2VydmVybGlzdC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0IH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuZXhwb3J0IHsgUHJveHlPYnNlcnZlciB9O1xuXG4vKipcbiAqIEFuIG9ic2VydmVyIG1hbmFnZXMgYSBjYWxsYmFjayBmdW5jdGlvblxuICpcbiAqIFdpdGggdGhlIFByb3h5T2JzZXJ2ZXIgeW91IGNhbiBhdHRhY2ggb2JzZXJ2ZXIgZm9yIG9ic2VydmF0aW9uLlxuICogV2l0aCBlYWNoIGNoYW5nZSBhdCB0aGUgb2JqZWN0IHRvIGJlIG9ic2VydmVkLCBhbiB1cGRhdGUgdGFrZXMgcGxhY2UuXG4gKlxuICogVGhpcyBhbHNvIGFwcGxpZXMgdG8gbmVzdGVkIG9iamVjdHMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIFByb3h5T2JzZXJ2ZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3Rcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9iamVjdCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnJlYWxTdWJqZWN0ID0gdmFsaWRhdGVPYmplY3Qob2JqZWN0KTtcblx0XHR0aGlzLnN1YmplY3QgPSBuZXcgUHJveHkob2JqZWN0LCBnZXRIYW5kbGVyLmNhbGwodGhpcykpO1xuXG5cdFx0dGhpcy5vYmplY3RNYXAgPSBuZXcgV2Vha01hcCgpO1xuXHRcdHRoaXMub2JqZWN0TWFwLnNldCh0aGlzLnJlYWxTdWJqZWN0LCB0aGlzLnN1YmplY3QpO1xuXG5cdFx0dGhpcy5wcm94eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cdFx0dGhpcy5wcm94eU1hcC5zZXQodGhpcy5zdWJqZWN0LCB0aGlzLnJlYWxTdWJqZWN0KTtcblxuXHRcdHRoaXMub2JzZXJ2ZXJzID0gbmV3IE9ic2VydmVyTGlzdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9wcm94eS1vYnNlcnZlclwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRnZXRTdWJqZWN0KCkge1xuXHRcdHJldHVybiB0aGlzLnN1YmplY3Q7XG5cdH1cblxuXHQvKipcblx0ICogQHNpbmNlIDEuMjQuMFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb2JqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuUHJveHlPYnNlcnZlcn1cblx0ICovXG5cdHNldFN1YmplY3Qob2JqKSB7XG5cdFx0bGV0IGk7XG5cdFx0Y29uc3QgY2xvbmVkT2JqZWN0ID0gY2xvbmUob2JqKTtcblx0XHRjb25zdCBrID0gT2JqZWN0LmtleXModGhpcy5zdWJqZWN0KTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykge1xuXHRcdFx0ZGVsZXRlIHRoaXMuc3ViamVjdFtrW2ldXTtcblx0XHR9XG5cblx0XHR0aGlzLnN1YmplY3QgPSBleHRlbmQodGhpcy5zdWJqZWN0LCBjbG9uZWRPYmplY3QpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcmVhbCBvYmplY3Rcblx0ICpcblx0ICogQ2hhbmdlcyB0byB0aGlzIG9iamVjdCBhcmUgbm90IG5vdGljZWQgYnkgdGhlIG9ic2VydmVycywgc28geW91IGNhbiBtYWtlIGEgbGFyZ2UgbnVtYmVyIG9mIGNoYW5nZXMgYW5kIGluZm9ybSB0aGUgb2JzZXJ2ZXJzIGxhdGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRnZXRSZWFsU3ViamVjdCgpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFsU3ViamVjdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBhdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpcy5vYnNlcnZlcnMuYXR0YWNoKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBkZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzLm9ic2VydmVycy5kZXRhY2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5vdGlmeSBhbGwgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdG5vdGlmeU9ic2VydmVycygpIHtcblx0XHRyZXR1cm4gdGhpcy5vYnNlcnZlcnMubm90aWZ5KHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXMub2JzZXJ2ZXJzLmNvbnRhaW5zKG9ic2VydmVyKTtcblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcmV0dXJuIHt7ZGVmaW5lUHJvcGVydHk6IChmdW5jdGlvbigqPSwgKj0sICo9KTogKiksIHNldFByb3RvdHlwZU9mOiAoZnVuY3Rpb24oKiwgKj0pOiBib29sZWFuKSwgc2V0OiAoZnVuY3Rpb24oKiwgKiwgKiwgKik6IGJvb2xlYW4pLCBnZXQ6ICgoZnVuY3Rpb24oKj0sICo9LCAqPSk6ICh1bmRlZmluZWQpKXwqKSwgZGVsZXRlUHJvcGVydHk6ICgoZnVuY3Rpb24oKiwgKik6IChib29sZWFuKSl8Kil9fVxuICogQHByaXZhdGVcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tLy0vc25pcHBldHMvNDl9XG4gKi9cbmZ1bmN0aW9uIGdldEhhbmRsZXIoKSB7XG5cdGNvbnN0IHByb3h5ID0gdGhpcztcblxuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90c1xuXHRjb25zdCBoYW5kbGVyID0ge1xuXHRcdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzLWdldC1wLXJlY2VpdmVyXG5cdFx0Z2V0OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHJlY2VpdmVyKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IFJlZmxlY3QuZ2V0KHRhcmdldCwga2V5LCByZWNlaXZlcik7XG5cblx0XHRcdGlmICh0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzUHJpbWl0aXZlKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNldCB2YWx1ZSBhcyBwcm94eSBpZiBvYmplY3Qgb3IgYXJyYXlcblx0XHRcdGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKHByb3h5Lm9iamVjdE1hcC5oYXModmFsdWUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb3h5Lm9iamVjdE1hcC5nZXQodmFsdWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHByb3h5LnByb3h5TWFwLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgcCA9IG5ldyBQcm94eSh2YWx1ZSwgaGFuZGxlcik7XG5cdFx0XHRcdFx0cHJveHkub2JqZWN0TWFwLnNldCh2YWx1ZSwgcCk7XG5cdFx0XHRcdFx0cHJveHkucHJveHlNYXAuc2V0KHAsIHZhbHVlKTtcblx0XHRcdFx0XHRyZXR1cm4gcDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSxcblxuXHRcdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzLXNldC1wLXYtcmVjZWl2ZXJcblx0XHRzZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIHJlY2VpdmVyKSB7XG5cdFx0XHRpZiAocHJveHkucHJveHlNYXAuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IHByb3h5LnByb3h5TWFwLmdldCh2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwcm94eS5wcm94eU1hcC5oYXModGFyZ2V0KSkge1xuXHRcdFx0XHR0YXJnZXQgPSBwcm94eS5wcm94eU1hcC5nZXQodGFyZ2V0KTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IGN1cnJlbnQgPSBSZWZsZWN0LmdldCh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpO1xuXHRcdFx0aWYgKHByb3h5LnByb3h5TWFwLmhhcyhjdXJyZW50KSkge1xuXHRcdFx0XHRjdXJyZW50ID0gcHJveHkucHJveHlNYXAuZ2V0KGN1cnJlbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY3VycmVudCA9PT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGxldCByZXN1bHQ7XG5cdFx0XHRsZXQgZGVzY3JpcHRvciA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcblxuXHRcdFx0aWYgKGRlc2NyaXB0b3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkZXNjcmlwdG9yID0ge1xuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRkZXNjcmlwdG9yW1widmFsdWVcIl0gPSB2YWx1ZTtcblx0XHRcdHJlc3VsdCA9IFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpO1xuXG5cdFx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIikge1xuXHRcdFx0XHRwcm94eS5vYnNlcnZlcnMubm90aWZ5KHByb3h5KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtZGVsZXRlLXBcblx0XHRkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG5cdFx0XHRpZiAoa2V5IGluIHRhcmdldCkge1xuXHRcdFx0XHRkZWxldGUgdGFyZ2V0W2tleV07XG5cblx0XHRcdFx0aWYgKHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0XHRwcm94eS5vYnNlcnZlcnMubm90aWZ5KHByb3h5KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cblx0XHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1kZWZpbmVvd25wcm9wZXJ0eS1wLWRlc2Ncblx0XHRkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcblx0XHRcdGlmICh0eXBlb2Yga2V5ICE9PSBcInN5bWJvbFwiKSB7XG5cdFx0XHRcdHByb3h5Lm9ic2VydmVycy5ub3RpZnkocHJveHkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtc2V0cHJvdG90eXBlb2YtdlxuXHRcdHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IFJlZmxlY3Quc2V0UHJvdG90eXBlT2Yob2JqZWN0MSwga2V5KTtcblxuXHRcdFx0aWYgKHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0cHJveHkub2JzZXJ2ZXJzLm5vdGlmeShwcm94eSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSxcblx0fTtcblxuXHRyZXR1cm4gaGFuZGxlcjtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfVEhFTUVfTkFNRSwgREVGQVVMVF9USEVNRSB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IFRoZW1lLCBnZXREb2N1bWVudFRoZW1lIH07XG5cbi8qKlxuICogVGhlIFRoZW1lIGNsYXNzIHByb3ZpZGVzIHRoZSBmdW5jdGlvbmFsaXR5IGZvciB0aGUgdGhlbWUuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RvbS90aGVtZS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSB0aGVtZSBjbGFzc1xuICovXG5jbGFzcyBUaGVtZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIG5hbWVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICovXG5cdGNvbnN0cnVjdG9yKG5hbWUpIHtcblx0XHRzdXBlcigpO1xuXHRcdHZhbGlkYXRlU3RyaW5nKG5hbWUpO1xuXHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS90aGVtZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXROYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLm5hbWU7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGUgdGhlbWluZyB1c2VkIGluIHRoZSBkb2N1bWVudCBjYW4gYmUgZGVmaW5lZCB2aWEgdGhlIGh0bWwtdGFnLlxuICogVGhlIHRoZW1pbmcgaXMgc3BlY2lmaWVkIHZpYSB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZWAuXG4gKlxuICogQXMgbmFtZSBmb3IgYSB0aGVtZSBhbGwgY2hhcmFjdGVycyBhcmUgdmFsaWQsIHdoaWNoIGFyZSBhbHNvIGFsbG93ZWQgZm9yIGEgSFRNTEVsZW1lbnQtSUQuXG4gKlxuICogYGBgXG4gKiA8aHRtbCBkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZT1cIm15LXRoZW1lXCI+XG4gKiBgYGBcbiAqXG4gKiB0aGUgZGVmYXVsdCB0aGVtZSBuYW1lIGlzIGBtb25zdGVyYC5cbiAqXG4gKiBAcmV0dXJuIHtUaGVtZX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKi9cbmZ1bmN0aW9uIGdldERvY3VtZW50VGhlbWUoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0R2xvYmFsT2JqZWN0KFwiZG9jdW1lbnRcIik7XG5cdGxldCBuYW1lID0gREVGQVVMVF9USEVNRTtcblxuXHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImh0bWxcIik7XG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRjb25zdCB0aGVtZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKTtcblx0XHRpZiAodGhlbWUpIHtcblx0XHRcdG5hbWUgPSB0aGVtZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3IFRoZW1lKG5hbWUpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uLCBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnRUaGVtZSB9IGZyb20gXCIuL3RoZW1lLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzIH0gZnJvbSBcIi4vdXRpbC5tanNcIjtcblxuZXhwb3J0IHsgVGVtcGxhdGUgfTtcblxuLyoqXG4gKiBUaGUgdGVtcGxhdGUgY2xhc3MgcHJvdmlkZXMgbWV0aG9kcyBmb3IgY3JlYXRpbmcgdGVtcGxhdGVzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSB0ZW1wbGF0ZSBjbGFzc1xuICovXG5jbGFzcyBUZW1wbGF0ZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZnVuY3Rpb24gaXMgbm90IGRlZmluZWRcblx0ICovXG5cdGNvbnN0cnVjdG9yKHRlbXBsYXRlKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRjb25zdCBIVE1MVGVtcGxhdGVFbGVtZW50ID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJIVE1MVGVtcGxhdGVFbGVtZW50XCIpO1xuXHRcdHZhbGlkYXRlSW5zdGFuY2UodGVtcGxhdGUsIEhUTUxUZW1wbGF0ZUVsZW1lbnQpO1xuXHRcdHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlL3RlbXBsYXRlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hUTUxUZW1wbGF0ZUVsZW1lbnR9XG5cdCAqL1xuXHRnZXRUZW1wbGF0ZUVsZW1lbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMudGVtcGxhdGU7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7RG9jdW1lbnRGcmFnbWVudH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Zcblx0ICovXG5cdGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMudGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBsb2FkcyBhIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElEIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqIFRvIGRvIHRoaXMsIGl0IGZpcnN0IHJlYWRzIHRoZSB0aGVtZSBvZiB0aGUgZG9jdW1lbnQgYW5kIGxvb2tzIGZvciB0aGUgYGRhdGEtbW9uc3Rlci10aGVtZS1uYW1lYCBhdHRyaWJ1dGUgaW4gdGhlIEhUTUwgdGFnLlxuICpcbiAqIGBgYFxuICogPGh0bWwgZGF0YS1tb25zdGVyLXRoZW1lLW5hbWU9XCJteS10aGVtZVwiPlxuICogYGBgXG4gKlxuICogSWYgbm8gdGhlbWUgd2FzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdGhlbWUgaXMgYG1vbnN0ZXJgLlxuICpcbiAqIE5vdyBpdCBpcyBsb29rZWQgaWYgdGhlcmUgaXMgYSB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJRCBhbmQgdGhlbWUgYGlkLXRoZW1lYCBhbmQgaWYgeWVzIGl0IGlzIHJldHVybmVkLlxuICogSWYgdGhlcmUgaXMgbm8gdGVtcGxhdGUgYSBzZWFyY2ggZm9yIGEgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSUQgYGlkYCBpcyBkb25lLiBJZiB0aGlzIGlzIGFsc28gbm90IGZvdW5kLCBhbiBlcnJvciBpcyB0aHJvd24uXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5ET00uZmluZERvY3VtZW50VGVtcGxhdGUoKWAuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7ZmluZFRlbXBsYXRlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9kb20vdGVtcGxhdGUubWpzJztcbiAqIGZpbmREb2N1bWVudFRlbXBsYXRlKClcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQgeyBmaW5kRG9jdW1lbnRUZW1wbGF0ZSB9IGZyb20gXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BzY2h1a2FpL21vbnN0ZXJAbGF0ZXN0L3NvdXJjZS9kb20vdGVtcGxhdGUubWpzXCI7XG4gKlxuICogY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gKiB0ZW1wbGF0ZS5pZCA9IFwibXlUZW1wbGF0ZVwiO1xuICogdGVtcGxhdGUuaW5uZXJIVE1MID0gXCI8cD5teSBkZWZhdWx0IHRlbXBsYXRlPC9wPlwiO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7XG4gKlxuICogY29uc3QgdGhlbWVkVGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gKiB0aGVtZWRUZW1wbGF0ZS5pZCA9IFwibXlUZW1wbGF0ZS1teVRoZW1lXCI7XG4gKiB0aGVtZWRUZW1wbGF0ZS5pbm5lckhUTUwgPSBcIjxwPm15IHRoZW1lZCB0ZW1wbGF0ZTwvcD5cIjtcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhlbWVkVGVtcGxhdGUpO1xuICpcbiAqIC8vIGxvYWRzIHRoZSB0ZW1wbGUgYW5kIHNpbmNlIG5vIHRoZW1lIGlzIHNldCB0aGUgZGVmYXVsdCB0ZW1wbGF0ZVxuICogY29uc3QgdGVtcGxhdGUxID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteVRlbXBsYXRlXCIpO1xuICogY29uc29sZS5sb2codGVtcGxhdGUxLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gKiAvLyBcdTIxQTYgJzxwPm15IGRlZmF1bHQgdGVtcGxhdGU8L3A+J1xuICpcbiAqIC8vIG5vdyB3ZSBzZXQgb3VyIG93biB0aGVtZVxuICogZG9jdW1lbnRcbiAqIC5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKVxuICogLnNldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci10aGVtZS1uYW1lXCIsIFwibXlUaGVtZVwiKTtcbiAqXG4gKiAvLyBub3cgd2UgZG9uJ3QgZ2V0IHRoZSBkZWZhdWx0IHRlbXBsYXRlLFxuICogLy8gYnV0IHRoZSB0ZW1wbGF0ZSB3aXRoIHRoZSB0aGVtZSBpbiB0aGUgaWRcbiAqIGNvbnN0IHRlbXBsYXRlMiA9IGZpbmREb2N1bWVudFRlbXBsYXRlKFwibXlUZW1wbGF0ZVwiKTtcbiAqIGNvbnNvbGUubG9nKHRlbXBsYXRlMi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICogLy8gXHUyMUE2ICc8cD5teSB0aGVtZWQgdGVtcGxhdGU8L3A+J1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuICogQHBhcmFtIHtOb2RlfSBjdXJyZW50Tm9kZVxuICogQHJldHVybiB7TW9uc3Rlci5ET00uVGVtcGxhdGV9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSB0ZW1wbGF0ZSBpZCBub3QgZm91bmQuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZERvY3VtZW50VGVtcGxhdGUoaWQsIGN1cnJlbnROb2RlKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGlkKTtcblxuXHRjb25zdCBkb2N1bWVudCA9IGdldEdsb2JhbE9iamVjdChcImRvY3VtZW50XCIpO1xuXHRjb25zdCBIVE1MVGVtcGxhdGVFbGVtZW50ID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJIVE1MVGVtcGxhdGVFbGVtZW50XCIpO1xuXHRjb25zdCBEb2N1bWVudEZyYWdtZW50ID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJEb2N1bWVudEZyYWdtZW50XCIpO1xuXHRjb25zdCBEb2N1bWVudCA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiRG9jdW1lbnRcIik7XG5cblx0bGV0IHByZWZpeElEO1xuXG5cdGlmIChcblx0XHQhKFxuXHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCBjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcblx0XHQpXG5cdCkge1xuXHRcdGlmIChjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIE5vZGUpIHtcblx0XHRcdGlmIChjdXJyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1RFTVBMQVRFX1BSRUZJWCkpIHtcblx0XHRcdFx0cHJlZml4SUQgPSBjdXJyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RFTVBMQVRFX1BSRUZJWCk7XG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuZ2V0Um9vdE5vZGUoKTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHQhKFxuXHRcdFx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnQgfHxcblx0XHRcdFx0XHRjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUub3duZXJEb2N1bWVudDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHQhKFxuXHRcdFx0XHRjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50IHx8XG5cdFx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudFxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0Y3VycmVudE5vZGUgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRsZXQgdGVtcGxhdGU7XG5cdGNvbnN0IHRoZW1lID0gZ2V0RG9jdW1lbnRUaGVtZSgpO1xuXG5cdGlmIChwcmVmaXhJRCkge1xuXHRcdGNvbnN0IHRoZW1lZFByZWZpeElEID0gYCR7cHJlZml4SUR9LSR7aWR9LSR7dGhlbWUuZ2V0TmFtZSgpfWA7XG5cblx0XHR0ZW1wbGF0ZSA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjdXJyZW50Tm9kZSwgdGhlbWVkUHJlZml4SUQpO1xuXHRcdGlmICh0ZW1wbGF0ZSBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHtcblx0XHRcdHJldHVybiBuZXcgVGVtcGxhdGUodGVtcGxhdGUpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHRoZW1lZElEID0gYCR7aWR9LSR7dGhlbWUuZ2V0TmFtZSgpfWA7XG5cblx0dGVtcGxhdGUgPSBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoY3VycmVudE5vZGUsIHRoZW1lZElEKTtcblx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuXHRcdHJldHVybiBuZXcgVGVtcGxhdGUodGVtcGxhdGUpO1xuXHR9XG5cblx0dGVtcGxhdGUgPSBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoY3VycmVudE5vZGUsIGlkKTtcblx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuXHRcdHJldHVybiBuZXcgVGVtcGxhdGUodGVtcGxhdGUpO1xuXHR9XG5cblx0dGhyb3cgbmV3IEVycm9yKGB0ZW1wbGF0ZSAke2lkfSBub3QgZm91bmQuYCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB0eXBlT2YgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZW9mLm1qc1wiO1xuXG5leHBvcnQgeyBkaWZmIH07XG5cbi8qKlxuICogV2l0aCB0aGUgZGlmZiBmdW5jdGlvbiB5b3UgY2FuIHBlcmZvcm0gdGhlIGNoYW5nZSBvZiBvbmUgb2JqZWN0IHRvIGFub3RoZXIuIFRoZSByZXN1bHQgc2hvd3MgdGhlIGNoYW5nZXMgb2YgdGhlIHNlY29uZCBvYmplY3QgdG8gdGhlIGZpcnN0IG9iamVjdC5cbiAqXG4gKiBUaGUgb3BlcmF0b3IgYGFkZGAgbWVhbnMgdGhhdCBzb21ldGhpbmcgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHNlY29uZCBvYmplY3QuIGBkZWxldGVgIG1lYW5zIHRoYXQgc29tZXRoaW5nIGhhcyBiZWVuIGRlbGV0ZWQgZnJvbSB0aGUgc2Vjb25kIG9iamVjdCBjb21wYXJlZCB0byB0aGUgZmlyc3Qgb2JqZWN0LlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kYXRhL2RpZmYubWpzXG4gKiBAcGFyYW0geyp9IGZpcnN0XG4gKiBAcGFyYW0geyp9IHNlY29uZFxuICogQHJldHVybiB7YXJyYXl9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gZGlmZihmaXJzdCwgc2Vjb25kKSB7XG5cdHJldHVybiBkb0RpZmYoZmlyc3QsIHNlY29uZCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBhXG4gKiBAcGFyYW0gYlxuICogQHBhcmFtIHR5cGVcbiAqIEByZXR1cm4ge1NldDxzdHJpbmc+fFNldDxudW1iZXI+fVxuICovXG5mdW5jdGlvbiBnZXRLZXlzKGEsIGIsIHR5cGUpIHtcblx0aWYgKGlzQXJyYXkodHlwZSkpIHtcblx0XHRjb25zdCBrZXlzID1cblx0XHRcdGEubGVuZ3RoID4gYi5sZW5ndGggPyBuZXcgQXJyYXkoYS5sZW5ndGgpIDogbmV3IEFycmF5KGIubGVuZ3RoKTtcblx0XHRrZXlzLmZpbGwoMCk7XG5cdFx0cmV0dXJuIG5ldyBTZXQoa2V5cy5tYXAoKF8sIGkpID0+IGkpKTtcblx0fVxuXG5cdHJldHVybiBuZXcgU2V0KE9iamVjdC5rZXlzKGEpLmNvbmNhdChPYmplY3Qua2V5cyhiKSkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gYVxuICogQHBhcmFtIGJcbiAqIEBwYXJhbSBwYXRoXG4gKiBAcGFyYW0gZGlmZlxuICogQHJldHVybiB7YXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGRvRGlmZihhLCBiLCBwYXRoLCBkaWZmKSB7XG5cdGNvbnN0IHR5cGVBID0gdHlwZU9mKGEpO1xuXHRjb25zdCB0eXBlQiA9IHR5cGVPZihiKTtcblxuXHRjb25zdCBjdXJyUGF0aCA9IHBhdGggfHwgW107XG5cdGNvbnN0IGN1cnJEaWZmID0gZGlmZiB8fCBbXTtcblxuXHRpZiAodHlwZUEgPT09IHR5cGVCICYmICh0eXBlQSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlQSA9PT0gXCJhcnJheVwiKSkge1xuXHRcdGdldEtleXMoYSwgYiwgdHlwZUEpLmZvckVhY2goKHYpID0+IHtcblx0XHRcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIHYpKSB7XG5cdFx0XHRcdGN1cnJEaWZmLnB1c2goYnVpbGRSZXN1bHQoYVt2XSwgYlt2XSwgXCJhZGRcIiwgY3VyclBhdGguY29uY2F0KHYpKSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgdikpIHtcblx0XHRcdFx0Y3VyckRpZmYucHVzaChidWlsZFJlc3VsdChhW3ZdLCBiW3ZdLCBcImRlbGV0ZVwiLCBjdXJyUGF0aC5jb25jYXQodikpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvRGlmZihhW3ZdLCBiW3ZdLCBjdXJyUGF0aC5jb25jYXQodiksIGN1cnJEaWZmKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBvID0gZ2V0T3BlcmF0b3IoYSwgYiwgdHlwZUEsIHR5cGVCKTtcblx0XHRpZiAobyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjdXJyRGlmZi5wdXNoKGJ1aWxkUmVzdWx0KGEsIGIsIG8sIHBhdGgpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY3VyckRpZmY7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3JcbiAqIEBwYXJhbSB7YXJyYXl9IHBhdGhcbiAqIEByZXR1cm4ge3twYXRoOiBhcnJheSwgb3BlcmF0b3I6IHN0cmluZ319XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBidWlsZFJlc3VsdChhLCBiLCBvcGVyYXRvciwgcGF0aCkge1xuXHRjb25zdCByZXN1bHQgPSB7XG5cdFx0b3BlcmF0b3IsXG5cdFx0cGF0aCxcblx0fTtcblxuXHRpZiAob3BlcmF0b3IgIT09IFwiYWRkXCIpIHtcblx0XHRyZXN1bHQuZmlyc3QgPSB7XG5cdFx0XHR2YWx1ZTogYSxcblx0XHRcdHR5cGU6IHR5cGVvZiBhLFxuXHRcdH07XG5cblx0XHRpZiAoaXNPYmplY3QoYSkpIHtcblx0XHRcdGNvbnN0IG5hbWUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSk/LmNvbnN0cnVjdG9yPy5uYW1lO1xuXHRcdFx0aWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXN1bHQuZmlyc3QuaW5zdGFuY2UgPSBuYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChvcGVyYXRvciA9PT0gXCJhZGRcIiB8fCBvcGVyYXRvciA9PT0gXCJ1cGRhdGVcIikge1xuXHRcdHJlc3VsdC5zZWNvbmQgPSB7XG5cdFx0XHR2YWx1ZTogYixcblx0XHRcdHR5cGU6IHR5cGVvZiBiLFxuXHRcdH07XG5cblx0XHRpZiAoaXNPYmplY3QoYikpIHtcblx0XHRcdGNvbnN0IG5hbWUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYik/LmNvbnN0cnVjdG9yPy5uYW1lO1xuXHRcdFx0aWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXN1bHQuc2Vjb25kLmluc3RhbmNlID0gbmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNOb3RFcXVhbChhLCBiKSB7XG5cdGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdHJldHVybiBhLmdldFRpbWUoKSAhPT0gYi5nZXRUaW1lKCk7XG5cdH1cblxuXHRyZXR1cm4gYSAhPT0gYjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBhXG4gKiBAcGFyYW0geyp9IGJcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdG9yKGEsIGIpIHtcblx0LyoqXG5cdCAqIEB0eXBlIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0bGV0IG9wZXJhdG9yO1xuXG5cdC8qKlxuXHQgKiBAdHlwZSB7c3RyaW5nfVxuXHQgKi9cblx0Y29uc3QgdHlwZUEgPSB0eXBlb2YgYTtcblxuXHQvKipcblx0ICogQHR5cGUge3N0cmluZ31cblx0ICovXG5cdGNvbnN0IHR5cGVCID0gdHlwZW9mIGI7XG5cblx0aWYgKHR5cGVBID09PSBcInVuZGVmaW5lZFwiICYmIHR5cGVCICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0b3BlcmF0b3IgPSBcImFkZFwiO1xuXHR9IGVsc2UgaWYgKHR5cGVBICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVCID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0b3BlcmF0b3IgPSBcImRlbGV0ZVwiO1xuXHR9IGVsc2UgaWYgKGlzTm90RXF1YWwoYSwgYikpIHtcblx0XHRvcGVyYXRvciA9IFwidXBkYXRlXCI7XG5cdH1cblxuXHRyZXR1cm4gb3BlcmF0b3I7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyB0cmltU3BhY2VzIH07XG5cbi8qKlxuICogVGhpcyBzcGVjaWFsIHRyaW0gZnVuY3Rpb24gYWxsb3dzIHRvIHRyaW0gc3BhY2VzIHRoYXQgaGF2ZSBiZWVuIHByb3RlY3RlZCBieSBhIHNwZWNpYWwgZXNjYXBlIGNoYXJhY3Rlci5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt0cmltU3BhY2VzfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS91dGlsL3RyaW1zcGFjZXMubWpzJztcbiAqIHRyaW1TcGFjZXMoJyBoZWxsbyBcXFxcICcpXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEhpbnQ6IE9uZSBzdHJva2UgaXMgZXNjYXBlZCBieSB0aGUgamF2YXNjcmlwdCBpbnRlcnByZXRlciwgdGhlIHNlY29uZCBzdHJva2UgZXNjYXBlcyB0aGUgc3Ryb2tlLlxuICpcbiAqIGBgYHRleHRcbiAqIGFcXCBiICBcdTIxQTYgYSBiXG4gKiBhXFxcXCBiIFx1MjFBNiBhXFwgYlxuICogYGBgXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiB0cmltU3BhY2VzKHZhbHVlKSB7XG5cdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblxuXHRjb25zdCBwbGFjZWhvbGRlciA9IG5ldyBNYXAoKTtcblx0Y29uc3QgcmVnZXggPSAvKCg/PHBhdHRlcm4+XFxcXCg/PGNoYXI+LikpezF9KS9naW07XG5cblx0Ly8gVGhlIHNlcGFyYXRvciBmb3IgYXJncyBtdXN0IGJlIGVzY2FwZWRcblx0Ly8gdW5kZWZpbmVkIHN0cmluZyB3aGljaCBzaG91bGQgbm90IG9jY3VyIG5vcm1hbGx5IGFuZCBpcyBhbHNvIG5vdCBhIHJlZ2V4XG5cdGNvbnN0IHJlc3VsdCA9IHZhbHVlLm1hdGNoQWxsKHJlZ2V4KTtcblxuXHRmb3IgKGNvbnN0IG0gb2YgcmVzdWx0KSB7XG5cdFx0Y29uc3QgZyA9IG0/LltcImdyb3Vwc1wiXTtcblx0XHRpZiAoIWlzT2JqZWN0KGcpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb25zdCBwID0gZz8uW1wicGF0dGVyblwiXTtcblx0XHRjb25zdCBjID0gZz8uW1wiY2hhclwiXTtcblxuXHRcdGlmIChwICYmIGMpIHtcblx0XHRcdGNvbnN0IHIgPSBgX18ke25ldyBJRCgpLnRvU3RyaW5nKCl9X19gO1xuXHRcdFx0cGxhY2Vob2xkZXIuc2V0KHIsIGMpO1xuXHRcdFx0dmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHAsIHIpO1xuXHRcdH1cblx0fVxuXG5cdHZhbHVlID0gdmFsdWUudHJpbSgpO1xuXHRwbGFjZWhvbGRlci5mb3JFYWNoKCh2LCBrKSA9PiB7XG5cdFx0dmFsdWUgPSB2YWx1ZS5yZXBsYWNlKGssIGBcXFxcJHt2fWApO1xuXHR9KTtcblxuXHRyZXR1cm4gdmFsdWU7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4vdXRpbC5tanNcIjtcblxuZXhwb3J0IHsgZmlyZUV2ZW50LCBmaXJlQ3VzdG9tRXZlbnQsIGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH07XG5cbi8qKlxuICogVGhlIGZ1bmN0aW9uIHNlbmRzIGFuIGV2ZW50XG4gKlxuICogQHBhcmFtIHtFbGVtZW50IHwgTm9kZSB8IEhUTUxDb2xsZWN0aW9uIHwgTm9kZUxpc3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cbiAqIEBzdW1tYXJ5IENvbnN0cnVjdCBhbmQgc2VuZCBhbmQgZXZlbnRcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50KGVsZW1lbnQsIHR5cGUpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRpZiAodHlwZSA9PT0gXCJjbGlja1wiKSB7XG5cdFx0XHRlbGVtZW50LmNsaWNrKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50L0V2ZW50XG5cdFx0Y29uc3QgZXZlbnQgPSBuZXcgRXZlbnQodmFsaWRhdGVTdHJpbmcodHlwZSksIHtcblx0XHRcdGJ1YmJsZXM6IHRydWUsXG5cdFx0XHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRcdFx0Y29tcG9zZWQ6IHRydWUsXG5cdFx0fSk7XG5cblx0XHRlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQ29sbGVjdGlvbiB8fCBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxpc3QpIHtcblx0XHRmb3IgKGNvbnN0IGUgb2YgZWxlbWVudCkge1xuXHRcdFx0ZmlyZUV2ZW50KGUsIHR5cGUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XCJ2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cIixcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5ET00uZmlyZUN1c3RvbUV2ZW50KClgLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudCB8IE5vZGUgfCBIVE1MQ29sbGVjdGlvbiB8IE5vZGVMaXN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtvYmplY3R9IGRldGFpbFxuICogQHJldHVybiB7dm9pZH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50IG9yIEhUTUxDb2xsZWN0aW9uXG4gKiBAc3VtbWFyeSBDb25zdHJ1Y3QgYW5kIHNlbmQgYW5kIGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGZpcmVDdXN0b21FdmVudChlbGVtZW50LCB0eXBlLCBkZXRhaWwpIHtcblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGlmICghaXNPYmplY3QoZGV0YWlsKSkge1xuXHRcdFx0ZGV0YWlsID0geyBkZXRhaWwgfTtcblx0XHR9XG5cblx0XHRjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCh2YWxpZGF0ZVN0cmluZyh0eXBlKSwge1xuXHRcdFx0YnViYmxlczogdHJ1ZSxcblx0XHRcdGNhbmNlbGFibGU6IHRydWUsXG5cdFx0XHRjb21wb3NlZDogdHJ1ZSxcblx0XHRcdGRldGFpbCxcblx0XHR9KTtcblxuXHRcdGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uIHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlTGlzdCkge1xuXHRcdGZvciAoY29uc3QgZSBvZiBlbGVtZW50KSB7XG5cdFx0XHRmaXJlQ3VzdG9tRXZlbnQoZSwgdHlwZSwgZGV0YWlsKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFwiZWxlbWVudCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cIixcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBwYXRoIGBFdmVudC5jb21wb3NlZFBhdGgoKWAgZnJvbSBhbiBldmVudCBhbmQgdHJpZXMgdG8gZmluZCB0aGUgbmV4dCBlbGVtZW50XG4gKiB1cCB0aGUgdHJlZSBgZWxlbWVudC5jbG9zZXN0KClgIHdpdGggdGhlIGF0dHJpYnV0ZSBhbmQgdmFsdWUuIElmIG5vIHZhbHVlLCBvciBhIHZhbHVlIHRoYXQgaXMgdW5kZWZpbmVkIG9yIG51bGwsXG4gKiBpcyBzcGVjaWZpZWQsIG9ubHkgdGhlIGF0dHJpYnV0ZSBpcyBzZWFyY2hlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlTmFtZVxuICogQHBhcmFtIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IGF0dHJpYnV0ZVZhbHVlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgZXZlbnRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuICogQHN1bW1hcnkgSGVscCBmdW5jdGlvbiB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGV2ZW50LCBFdmVudCk7XG5cblx0aWYgKHR5cGVvZiBldmVudC5jb21wb3NlZFBhdGggIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGV2ZW50XCIpO1xuXHR9XG5cblx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXG5cdC8vIGNsb3Nlc3QgY2Fubm90IGJlIHVzZWQgaGVyZSwgYmVjYXVzZSBjbG9zZXN0IGlzIG5vdCBjb3JyZWN0IGZvciBzbG90dGVkIGVsZW1lbnRzXG5cdGlmIChpc0FycmF5KHBhdGgpKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBvID0gcGF0aFtpXTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRvIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XHRcdFx0by5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkgJiZcblx0XHRcdFx0KGF0dHJpYnV0ZVZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRvLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA9PT0gYXR0cmlidXRlVmFsdWUpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIG87XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBkaWZmIH0gZnJvbSBcIi4uL2RhdGEvZGlmZi5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgUGlwZSB9IGZyb20gXCIuLi9kYXRhL3BpcGUubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9CSU5ELFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9CSU5EX1RZUEUsXG5cdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVCxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSxcblx0QVRUUklCVVRFX1VQREFURVJfUkVNT1ZFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJUyxcbn0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZywgaXNJbnN0YW5jZSwgaXNJdGVyYWJsZSB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVBcnJheSwgdmFsaWRhdGVJbnN0YW5jZSB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQgeyB0cmltU3BhY2VzIH0gZnJvbSBcIi4uL3V0aWwvdHJpbXNwYWNlcy5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuLCBhZGRUb09iamVjdExpbmsgfSBmcm9tIFwiLi9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbCB9IGZyb20gXCIuL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCB9IGZyb20gXCIuL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGZpbmREb2N1bWVudFRlbXBsYXRlIH0gZnJvbSBcIi4vdGVtcGxhdGUubWpzXCI7XG5pbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBVcGRhdGVyLCBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudCB9O1xuXG4vKipcbiAqIFRoZSB1cGRhdGVyIGNsYXNzIGNvbm5lY3RzIGFuIG9iamVjdCB3aXRoIHRoZSBET00uIEluIHRoaXMgd2F5LCBzdHJ1Y3R1cmVzIGFuZCBjb250ZW50cyBpbiB0aGUgRE9NIGNhbiBiZVxuICogcHJvZ3JhbW1hdGljYWxseSBhZGFwdGVkIHZpYSBhdHRyaWJ1dGVzLlxuICpcbiAqIEZvciBleGFtcGxlLCB0byBpbmNsdWRlIGEgc3RyaW5nIGZyb20gYW4gb2JqZWN0LCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItcmVwbGFjZWAgY2FuIGJlIHVzZWQuXG4gKiBhIGZ1cnRoZXIgZXhwbGFuYXRpb24gY2FuIGJlIGZvdW5kIHVuZGVyIFttb25zdGVyanMub3JnXShodHRwczovL21vbnN0ZXJqcy5vcmcvKVxuICpcbiAqIENoYW5nZXMgdG8gYXR0cmlidXRlcyBhcmUgbWFkZSBvbmx5IHdoZW4gdGhlIGRpcmVjdCB2YWx1ZXMgYXJlIGNoYW5nZWQuIElmIHlvdSB3YW50IHRvIGFzc2lnbiBjaGFuZ2VzXG4gKiB0byBvdGhlciB2YWx1ZXMgYXMgd2VsbCwgeW91IGhhdmUgdG8gaW5zZXJ0IHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1zZWxlY3QtdGhpc2AuIFRoaXMgc2hvdWxkIGJlXG4gKiBkb25lIHdpdGggY2FyZSwgYXMgaXQgY2FuIHJlZHVjZSBwZXJmb3JtYW5jZS5cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL2RvbS91cGRhdGVyL3NpbXBsZS8gU2ltcGxlIGV4YW1wbGVcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlXG4gKiBAdGhyb3dzIHtFcnJvcn0gcGlwZXMgYXJlIG5vdCBhbGxvd2VkIHdoZW4gY2xvbmluZyBhIG5vZGUuXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gdGVtcGxhdGUgd2FzIGZvdW5kIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG1heGltdW0gZGVwdGggZm9yIHRoZSByZWN1cnNpb24gaXMgcmVhY2hlZC5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuICogQHN1bW1hcnkgVGhlIHVwZGF0ZXIgY2xhc3MgY29ubmVjdHMgYW4gb2JqZWN0IHdpdGggdGhlIGRvbVxuICovXG5jbGFzcyBVcGRhdGVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAc2luY2UgMS44LjBcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge29iamVjdHxQcm94eU9ic2VydmVyfHVuZGVmaW5lZH0gc3ViamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuXHQgKiBAc2VlIHtAbGluayBNb25zdGVyLkRPTS5maW5kRG9jdW1lbnRUZW1wbGF0ZX1cblx0ICovXG5cdGNvbnN0cnVjdG9yKGVsZW1lbnQsIHN1YmplY3QpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0LyoqXG5cdFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuXHRcdCAqL1xuXHRcdGlmIChzdWJqZWN0ID09PSB1bmRlZmluZWQpIHN1YmplY3QgPSB7fTtcblx0XHRpZiAoIWlzSW5zdGFuY2Uoc3ViamVjdCwgUHJveHlPYnNlcnZlcikpIHtcblx0XHRcdHN1YmplY3QgPSBuZXcgUHJveHlPYnNlcnZlcihzdWJqZWN0KTtcblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdGVsZW1lbnQ6IHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpLFxuXHRcdFx0bGFzdDoge30sXG5cdFx0XHRjYWxsYmFja3M6IG5ldyBNYXAoKSxcblx0XHRcdGV2ZW50VHlwZXM6IFtcImtleXVwXCIsIFwiY2xpY2tcIiwgXCJjaGFuZ2VcIiwgXCJkcm9wXCIsIFwidG91Y2hlbmRcIiwgXCJpbnB1dFwiXSxcblx0XHRcdHN1YmplY3Q6IHN1YmplY3QsXG5cdFx0fTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5zZXQoXG5cdFx0XHRcImNoZWNrc3RhdGVcIixcblx0XHRcdGdldENoZWNrU3RhdGVDYWxsYmFjay5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmF0dGFjaE9ic2VydmVyKFxuXHRcdFx0bmV3IE9ic2VydmVyKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgcyA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKTtcblxuXHRcdFx0XHRjb25zdCBkaWZmUmVzdWx0ID0gZGlmZih0aGlzW2ludGVybmFsU3ltYm9sXS5sYXN0LCBzKTtcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ubGFzdCA9IGNsb25lKHMpO1xuXG5cdFx0XHRcdGNvbnN0IHByb21pc2VzID0gW107XG5cblx0XHRcdFx0Zm9yIChjb25zdCBbLCBjaGFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKGRpZmZSZXN1bHQpKSB7XG5cdFx0XHRcdFx0cHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRcdG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0XHRcdFx0Z2V0V2luZG93KCkucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVtb3ZlRWxlbWVudC5jYWxsKHRoaXMsIGNoYW5nZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpbnNlcnRFbGVtZW50LmNhbGwodGhpcywgY2hhbmdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZUNvbnRlbnQuY2FsbCh0aGlzLCBjaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlQXR0cmlidXRlcy5jYWxsKHRoaXMsIGNoYW5nZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmF1bHRzOiAna2V5dXAnLCAnY2xpY2snLCAnY2hhbmdlJywgJ2Ryb3AnLCAndG91Y2hlbmQnXG5cdCAqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0V2ZW50c31cblx0ICogQHNpbmNlIDEuOS4wXG5cdCAqIEBwYXJhbSB7QXJyYXl9IHR5cGVzXG5cdCAqIEByZXR1cm4ge1VwZGF0ZXJ9XG5cdCAqL1xuXHRzZXRFdmVudFR5cGVzKHR5cGVzKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZXZlbnRUeXBlcyA9IHZhbGlkYXRlQXJyYXkodHlwZXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpdGggdGhpcyBtZXRob2QsIHRoZSBldmVudGxpc3RlbmVycyBhcmUgaG9va2VkIGluIGFuZCB0aGUgbWFnaWMgYmVnaW5zLlxuXHQgKlxuXHQgKiBgYGBqc1xuXHQgKiB1cGRhdGVyLnJ1bigpLnRoZW4oKCkgPT4ge1xuXHQgKiAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cdCAqIH0pO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHNpbmNlIDEuOS4wXG5cdCAqIEByZXR1cm4ge1VwZGF0ZXJ9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGhcblx0ICovXG5cdGVuYWJsZUV2ZW50UHJvY2Vzc2luZygpIHtcblx0XHR0aGlzLmRpc2FibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuXHRcdGZvciAoY29uc3QgdHlwZSBvZiB0aGlzW2ludGVybmFsU3ltYm9sXS5ldmVudFR5cGVzKSB7XG5cdFx0XHQvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudFRhcmdldC9hZGRFdmVudExpc3RlbmVyXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdGdldENvbnRyb2xFdmVudEhhbmRsZXIuY2FsbCh0aGlzKSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNhcHR1cmU6IHRydWUsXG5cdFx0XHRcdFx0cGFzc2l2ZTogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgdHVybnMgb2ZmIHRoZSBtYWdpYyBvciB3aG8gbG92ZXMgaXQgbW9yZSBwcm9mYW5lIGl0IHJlbW92ZXMgdGhlIGV2ZW50TGlzdGVuZXIuXG5cdCAqXG5cdCAqIEBzaW5jZSAxLjkuMFxuXHQgKiBAcmV0dXJuIHtVcGRhdGVyfVxuXHQgKi9cblx0ZGlzYWJsZUV2ZW50UHJvY2Vzc2luZygpIHtcblx0XHRmb3IgKGNvbnN0IHR5cGUgb2YgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZXZlbnRUeXBlcykge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuXHRcdFx0XHR0eXBlLFxuXHRcdFx0XHRnZXRDb250cm9sRXZlbnRIYW5kbGVyLmNhbGwodGhpcyksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBydW4gbWV0aG9kIG11c3QgYmUgY2FsbGVkIGZvciB0aGUgdXBkYXRlIHRvIHN0YXJ0IHdvcmtpbmcuXG5cdCAqIFRoZSBtZXRob2QgZW5zdXJlcyB0aGF0IGNoYW5nZXMgYXJlIGRldGVjdGVkLlxuXHQgKlxuXHQgKiBgYGBqc1xuXHQgKiB1cGRhdGVyLnJ1bigpLnRoZW4oKCkgPT4ge1xuXHQgKiAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cdCAqIH0pO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHN1bW1hcnkgTGV0IHRoZSBtYWdpYyBiZWdpblxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cnVuKCkge1xuXHRcdC8vIHRoZSBrZXkgX19pbml0X19oYXMgbm8gZnVydGhlciBtZWFuaW5nIGFuZCBpcyBvbmx5XG5cdFx0Ly8gdXNlZCB0byBjcmVhdGUgdGhlIGRpZmYgZm9yIGVtcHR5IG9iamVjdHMuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ubGFzdCA9IHsgX19pbml0X186IHRydWUgfTtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5ub3RpZnlPYnNlcnZlcnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2YWx1ZXMgb2YgYm91bmQgZWxlbWVudHMgYW5kIGNoYW5nZXMgdGhlbSBpbiBzdWJqZWN0XG5cdCAqXG5cdCAqIEBzaW5jZSAxLjI3LjBcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uVXBkYXRlcn1cblx0ICovXG5cdHJldHJpZXZlKCkge1xuXHRcdHJldHJpZXZlRnJvbUJpbmRpbmdzLmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogSWYgeW91IGhhdmUgcGFzc2VkIGEgUHJveHlPYnNlcnZlciBpbiB0aGUgY29uc3RydWN0b3IsIHlvdSB3aWxsIGdldCB0aGUgb2JqZWN0IHRoYXQgdGhlIFByb3h5T2JzZXJ2ZXIgbWFuYWdlcyBoZXJlLlxuXHQgKiBIb3dldmVyLCBpZiB5b3UgcGFzc2VkIGEgc2ltcGxlIG9iamVjdCwgaGVyZSB5b3Ugd2lsbCBnZXQgYSBwcm94eSBmb3IgdGhhdCBvYmplY3QuXG5cdCAqXG5cdCAqIEZvciBjaGFuZ2VzLCB0aGUgUHJveHlPYnNlcnZlciBtdXN0IGJlIHVzZWQuXG5cdCAqXG5cdCAqIEBzaW5jZSAxLjguMFxuXHQgKiBAcmV0dXJuIHtQcm94eX1cblx0ICovXG5cdGdldFN1YmplY3QoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0U3ViamVjdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHJlZ2lzdGVyIGNvbW1hbmRzIHRoYXQgY2FuIGJlIGNhbGxlZCB2aWEgY2FsbDogaW5zdHJ1Y3Rpb24uXG5cdCAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBhIHBpcGUgd2l0aCBpdHMgb3duIGZ1bmN0aW9uYWxpdHkuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEByZXR1cm4ge1RyYW5zZm9ybWVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqL1xuXHRzZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaykge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5zZXQobmFtZSwgY2FsbGJhY2spO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAcmV0dXJuIHtmdW5jdGlvblxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiBnZXRDaGVja1N0YXRlQ2FsbGJhY2soKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoY3VycmVudCkge1xuXHRcdC8vIHRoaXMgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgb2JqZWN0ICh0aGVyZWZvcmUgbm8gYXJyYXkgZnVuY3Rpb24gaGVyZSlcblx0XHRpZiAodGhpcyBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdGlmIChbXCJyYWRpb1wiLCBcImNoZWNrYm94XCJdLmluZGV4T2YodGhpcy50eXBlKSAhPT0gLTEpIHtcblx0XHRcdFx0cmV0dXJuIGAke3RoaXMudmFsdWV9YCA9PT0gYCR7Y3VycmVudH1gID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzIGluc3RhbmNlb2YgSFRNTE9wdGlvbkVsZW1lbnQpIHtcblx0XHRcdGlmIChpc0FycmF5KGN1cnJlbnQpICYmIGN1cnJlbnQuaW5kZXhPZih0aGlzLnZhbHVlKSAhPT0gLTEpIHtcblx0XHRcdFx0cmV0dXJuIFwidHJ1ZVwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBzeW1ib2wgPSBTeW1ib2woXCJAc2NodWthaS9tb25zdGVyL3VwZGF0ZXJAQEV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKiBAdGhpcyBVcGRhdGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGJpbmQgYXJndW1lbnQgbXVzdCBzdGFydCBhcyBhIHZhbHVlIHdpdGggYSBwYXRoXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRyb2xFdmVudEhhbmRsZXIoKSB7XG5cdGlmICh0aGlzW3N5bWJvbF0pIHtcblx0XHRyZXR1cm4gdGhpc1tzeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGguXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBvYmplY3Rcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbc3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1VQREFURVJfQklORCk7XG5cblx0XHRpZiAoZWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHF1ZXVlTWljcm90YXNrKCgpID0+IHtcblx0XHRcdHJldHJpZXZlQW5kU2V0VmFsdWUuY2FsbCh0aGlzLCBlbGVtZW50KTtcblx0XHR9KTtcblx0fTtcblxuXHRyZXR1cm4gdGhpc1tzeW1ib2xdO1xufVxuXG4vKipcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4gdm9pZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmV0cmlldmVBbmRTZXRWYWx1ZShlbGVtZW50KSB7XG5cdGNvbnN0IHBhdGhmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcih0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFN1YmplY3QoKSk7XG5cblx0bGV0IHBhdGggPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9CSU5EKTtcblx0aWYgKHBhdGggPT09IG51bGwpXG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGJpbmQgYXJndW1lbnQgbXVzdCBzdGFydCBhcyBhIHZhbHVlIHdpdGggYSBwYXRoXCIpO1xuXG5cdGlmIChwYXRoLmluZGV4T2YoXCJwYXRoOlwiKSAhPT0gMCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFwiKTtcblx0fVxuXG5cdHBhdGggPSBwYXRoLnN1YnN0cmluZyg1KTsgLy8gcmVtb3ZlIHBhdGg6IGZyb20gdGhlIHN0cmluZ1xuXG5cdGxldCB2YWx1ZTtcblxuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0Y2FzZSBcImNoZWNrYm94XCI6XG5cdFx0XHRcdHZhbHVlID0gZWxlbWVudC5jaGVja2VkID8gZWxlbWVudC52YWx1ZSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcblx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0Y2FzZSBcInNlbGVjdC1vbmVcIjpcblx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzZWxlY3QtbXVsdGlwbGVcIjpcblx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXG5cdFx0XHRcdGxldCBvcHRpb25zID0gZWxlbWVudD8uc2VsZWN0ZWRPcHRpb25zO1xuXHRcdFx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6c2NvcGUgb3B0aW9uOmNoZWNrZWRcIik7XG5cdFx0XHRcdHZhbHVlID0gQXJyYXkuZnJvbShvcHRpb25zKS5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpO1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdC8vIHZhbHVlcyBmcm9tIGN1c3RvbSBlbGVtZW50c1xuXHR9IGVsc2UgaWYgKFxuXHRcdChlbGVtZW50Py5jb25zdHJ1Y3Rvcj8ucHJvdG90eXBlICYmXG5cdFx0XHQhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG5cdFx0XHRcdGVsZW1lbnQuY29uc3RydWN0b3IucHJvdG90eXBlLFxuXHRcdFx0XHRcInZhbHVlXCIsXG5cdFx0XHQpPy5bXCJnZXRcIl0pIHx8XG5cdFx0ZWxlbWVudC5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpXG5cdCkge1xuXHRcdHZhbHVlID0gZWxlbWVudD8uW1widmFsdWVcIl07XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgb2JqZWN0XCIpO1xuXHR9XG5cblx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdGNvbnN0IHR5cGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9CSU5EX1RZUEUpO1xuXHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0Y2FzZSBcIm51bWJlclwiOlxuXHRcdFx0Y2FzZSBcImludFwiOlxuXHRcdFx0Y2FzZSBcImZsb2F0XCI6XG5cdFx0XHRjYXNlIFwiaW50ZWdlclwiOlxuXHRcdFx0XHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdFx0XHRcdGlmIChpc05hTih2YWx1ZSkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0Y2FzZSBcImJvb2xcIjpcblx0XHRcdGNhc2UgXCJjaGVja2JveFwiOlxuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlID09PSBcInRydWVcIiB8fCB2YWx1ZSA9PT0gXCIxXCIgfHwgdmFsdWUgPT09IFwib25cIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiYXJyYXlcIjpcblx0XHRcdGNhc2UgXCJsaXN0XCI6XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuc3BsaXQoXCIsXCIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJvYmplY3RcIjpcblx0XHRcdGNhc2UgXCJqc29uXCI6XG5cdFx0XHRcdHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgY29weSA9IGNsb25lKHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKSk7XG5cblx0Y29uc3QgcGYgPSBuZXcgUGF0aGZpbmRlcihjb3B5KTtcblx0cGYuc2V0VmlhKHBhdGgsIHZhbHVlKTtcblxuXHRjb25zdCBkaWZmUmVzdWx0ID0gZGlmZihjb3B5LCB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFJlYWxTdWJqZWN0KCkpO1xuXG5cdGlmIChkaWZmUmVzdWx0Lmxlbmd0aCA+IDApIHtcblx0XHRwYXRoZmluZGVyLnNldFZpYShwYXRoLCB2YWx1ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI3LjBcbiAqIEByZXR1cm4gdm9pZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmV0cmlldmVGcm9tQmluZGluZ3MoKSB7XG5cdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50Lm1hdGNoZXMoYFske0FUVFJJQlVURV9VUERBVEVSX0JJTkR9XWApKSB7XG5cdFx0cmV0cmlldmVBbmRTZXRWYWx1ZS5jYWxsKHRoaXMsIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQpO1xuXHR9XG5cblx0Zm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50XG5cdFx0LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0FUVFJJQlVURV9VUERBVEVSX0JJTkR9XWApXG5cdFx0LmVudHJpZXMoKSkge1xuXHRcdHJldHJpZXZlQW5kU2V0VmFsdWUuY2FsbCh0aGlzLCBlbGVtZW50KTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHBhcmFtIHtvYmplY3R9IGNoYW5nZVxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRWxlbWVudChjaGFuZ2UpIHtcblx0Zm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50XG5cdFx0LnF1ZXJ5U2VsZWN0b3JBbGwoYDpzY29wZSBbJHtBVFRSSUJVVEVfVVBEQVRFUl9SRU1PVkV9XWApXG5cdFx0LmVudHJpZXMoKSkge1xuXHRcdGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHBhcmFtIHtvYmplY3R9IGNoYW5nZVxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlXG4gKiBAdGhyb3dzIHtFcnJvcn0gcGlwZXMgYXJlIG5vdCBhbGxvd2VkIHdoZW4gY2xvbmluZyBhIG5vZGUuXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gdGVtcGxhdGUgd2FzIGZvdW5kIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG1heGltdW0gZGVwdGggZm9yIHRoZSByZWN1cnNpb24gaXMgcmVhY2hlZC5cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqL1xuZnVuY3Rpb24gaW5zZXJ0RWxlbWVudChjaGFuZ2UpIHtcblx0Y29uc3Qgc3ViamVjdCA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKTtcblxuXHRjb25zdCBtZW0gPSBuZXcgV2Vha1NldCgpO1xuXHRsZXQgd2QgPSAwO1xuXG5cdGNvbnN0IGNvbnRhaW5lciA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQ7XG5cblx0d2hpbGUgKHRydWUpIHtcblx0XHRsZXQgZm91bmQgPSBmYWxzZTtcblx0XHR3ZCsrO1xuXG5cdFx0Y29uc3QgcCA9IGNsb25lKGNoYW5nZT8uW1wicGF0aFwiXSk7XG5cdFx0aWYgKCFpc0FycmF5KHApKSByZXR1cm47XG5cblx0XHR3aGlsZSAocC5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50ID0gcC5qb2luKFwiLlwiKTtcblxuXHRcdFx0bGV0IGl0ZXJhdG9yID0gbmV3IFNldCgpO1xuXHRcdFx0Y29uc3QgcXVlcnkgPSBgWyR7QVRUUklCVVRFX1VQREFURVJfSU5TRVJUfSo9XCJwYXRoOiR7Y3VycmVudH1cIl1gO1xuXG5cdFx0XHRjb25zdCBlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpO1xuXG5cdFx0XHRpZiAoZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGl0ZXJhdG9yID0gbmV3IFNldChbLi4uZV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY29udGFpbmVyLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRcdGl0ZXJhdG9yLmFkZChjb250YWluZXIpO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IFssIGNvbnRhaW5lckVsZW1lbnRdIG9mIGl0ZXJhdG9yLmVudHJpZXMoKSkge1xuXHRcdFx0XHRpZiAobWVtLmhhcyhjb250YWluZXJFbGVtZW50KSkgY29udGludWU7XG5cdFx0XHRcdG1lbS5hZGQoY29udGFpbmVyRWxlbWVudCk7XG5cblx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXG5cdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBjb250YWluZXJFbGVtZW50LmdldEF0dHJpYnV0ZShcblx0XHRcdFx0XHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlQsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChhdHRyaWJ1dGVzID09PSBudWxsKSBjb250aW51ZTtcblxuXHRcdFx0XHRjb25zdCBkZWYgPSB0cmltU3BhY2VzKGF0dHJpYnV0ZXMpO1xuXHRcdFx0XHRjb25zdCBpID0gZGVmLmluZGV4T2YoXCIgXCIpO1xuXHRcdFx0XHRjb25zdCBrZXkgPSB0cmltU3BhY2VzKGRlZi5zdWJzdHIoMCwgaSkpO1xuXHRcdFx0XHRjb25zdCByZWZQcmVmaXggPSBgJHtrZXl9LWA7XG5cdFx0XHRcdGNvbnN0IGNtZCA9IHRyaW1TcGFjZXMoZGVmLnN1YnN0cihpKSk7XG5cblx0XHRcdFx0Ly8gdGhpcyBjYXNlIGlzIGFjdHVhbGx5IGV4Y2x1ZGVkIGJ5IHRoZSBxdWVyeSBidXQgaXMgbmV2ZXJ0aGVsZXNzIGNoZWNrZWQgYWdhaW4gaGVyZVxuXHRcdFx0XHRpZiAoY21kLmluZGV4T2YoXCJ8XCIpID4gMCkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInBpcGVzIGFyZSBub3QgYWxsb3dlZCB3aGVuIGNsb25pbmcgYSBub2RlLlwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZShjbWQpO1xuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5jYWxsYmFja3MuZm9yRWFjaCgoZiwgbikgPT4ge1xuXHRcdFx0XHRcdHBpcGUuc2V0Q2FsbGJhY2sobiwgZik7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGxldCB2YWx1ZTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb250YWluZXJFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFKTtcblx0XHRcdFx0XHR2YWx1ZSA9IHBpcGUucnVuKHN1YmplY3QpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0Y29udGFpbmVyRWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGRhdGFQYXRoID0gY21kLnNwbGl0KFwiOlwiKS5wb3AoKTtcblxuXHRcdFx0XHRsZXQgaW5zZXJ0UG9pbnQ7XG5cdFx0XHRcdGlmIChjb250YWluZXJFbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0XHRcdGluc2VydFBvaW50ID0gY29udGFpbmVyRWxlbWVudC5sYXN0Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIWlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIHZhbHVlIGlzIG5vdCBpdGVyYWJsZVwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGF2YWlsYWJsZSA9IG5ldyBTZXQoKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFtpXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRjb25zdCByZWYgPSByZWZQcmVmaXggKyBpO1xuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRQYXRoID0gYCR7ZGF0YVBhdGh9LiR7aX1gO1xuXG5cdFx0XHRcdFx0YXZhaWxhYmxlLmFkZChyZWYpO1xuXHRcdFx0XHRcdGNvbnN0IHJlZkVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdFx0XHRgWyR7QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRX09XCIke3JlZn1cIl1gLFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRpZiAocmVmRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRpbnNlcnRQb2ludCA9IHJlZkVsZW1lbnQ7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhcHBlbmROZXdEb2N1bWVudEZyYWdtZW50KGNvbnRhaW5lckVsZW1lbnQsIGtleSwgcmVmLCBjdXJyZW50UGF0aCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBub2RlcyA9IGNvbnRhaW5lckVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0XHRgWyR7QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRX0qPVwiJHtyZWZQcmVmaXh9XCJdYCxcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFssIG5vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGVzKSkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCFhdmFpbGFibGUuaGFzKFxuXHRcdFx0XHRcdFx0XHRub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFKSxcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5lckVsZW1lbnQucmVtb3ZlQ2hpbGQobm9kZSk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5lckVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XHRcdFx0YCR7Y29udGFpbmVyRWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSl9LCAke1xuXHRcdFx0XHRcdFx0XHRcdFx0ZS5tZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0fWAudHJpbSgpLFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRwLnBvcCgpO1xuXHRcdH1cblxuXHRcdGlmIChmb3VuZCA9PT0gZmFsc2UpIGJyZWFrO1xuXHRcdGlmICh3ZCsrID4gMjAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgbWF4aW11bSBkZXB0aCBmb3IgdGhlIHJlY3Vyc2lvbiBpcyByZWFjaGVkLlwiKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWZcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gdGVtcGxhdGUgd2FzIGZvdW5kIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZE5ld0RvY3VtZW50RnJhZ21lbnQoY29udGFpbmVyLCBrZXksIHJlZiwgcGF0aCkge1xuXHRjb25zdCB0ZW1wbGF0ZSA9IGZpbmREb2N1bWVudFRlbXBsYXRlKGtleSwgY29udGFpbmVyKTtcblxuXHRjb25zdCBub2RlcyA9IHRlbXBsYXRlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0Zm9yIChjb25zdCBbLCBub2RlXSBvZiBPYmplY3QuZW50cmllcyhub2Rlcy5jaGlsZE5vZGVzKSkge1xuXHRcdGlmIChub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGFwcGx5UmVjdXJzaXZlKG5vZGUsIGtleSwgcGF0aCk7XG5cdFx0XHRub2RlLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLCByZWYpO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZChub2RlKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiBhcHBseVJlY3Vyc2l2ZShub2RlLCBrZXksIHBhdGgpIHtcblx0aWYgKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFKSkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFKTtcblx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFLFxuXHRcdFx0XHR2YWx1ZS5yZXBsYWNlQWxsKGBwYXRoOiR7a2V5fWAsIGBwYXRoOiR7cGF0aH1gKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMpKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMpO1xuXHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMsXG5cdFx0XHRcdHZhbHVlLnJlcGxhY2VBbGwoYHBhdGg6JHtrZXl9YCwgYHBhdGg6JHtwYXRofWApLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFssIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyhub2RlLmNoaWxkTm9kZXMpKSB7XG5cdFx0XHRhcHBseVJlY3Vyc2l2ZShjaGlsZCwga2V5LCBwYXRoKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7b2JqZWN0fSBjaGFuZ2VcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRlbnQoY2hhbmdlKSB7XG5cdGNvbnN0IHN1YmplY3QgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFJlYWxTdWJqZWN0KCk7XG5cblx0Y29uc3QgcCA9IGNsb25lKGNoYW5nZT8uW1wicGF0aFwiXSk7XG5cdHJ1blVwZGF0ZUNvbnRlbnQuY2FsbCh0aGlzLCB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LCBwLCBzdWJqZWN0KTtcblxuXHRjb25zdCBzbG90cyA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcInNsb3RcIik7XG5cdGlmIChzbG90cy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBbLCBzbG90XSBvZiBPYmplY3QuZW50cmllcyhzbG90cykpIHtcblx0XHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdC5hc3NpZ25lZE5vZGVzKCkpKSB7XG5cdFx0XHRcdHJ1blVwZGF0ZUNvbnRlbnQuY2FsbCh0aGlzLCBlbGVtZW50LCBwLCBzdWJqZWN0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICogQHBhcmFtIHthcnJheX0gcGFydHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiBydW5VcGRhdGVDb250ZW50KGNvbnRhaW5lciwgcGFydHMsIHN1YmplY3QpIHtcblx0aWYgKCFpc0FycmF5KHBhcnRzKSkgcmV0dXJuO1xuXHRpZiAoIShjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybjtcblx0cGFydHMgPSBjbG9uZShwYXJ0cyk7XG5cblx0Y29uc3QgbWVtID0gbmV3IFdlYWtTZXQoKTtcblxuXHR3aGlsZSAocGFydHMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSBwYXJ0cy5qb2luKFwiLlwiKTtcblx0XHRwYXJ0cy5wb3AoKTtcblxuXHRcdC8vIFVuZm9ydHVuYXRlbHksIHN0YXRpYyBkYXRhIGlzIGFsd2F5cyBjaGFuZ2VkIGFzIHdlbGwsIHNpbmNlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byByZWFjdCB0byBjaGFuZ2VzIGhlcmUuXG5cdFx0Y29uc3QgcXVlcnkgPSBgWyR7QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRX1ePVwicGF0aDoke2N1cnJlbnR9XCJdLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFfV49XCJzdGF0aWM6XCJdLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFfV49XCJpMThuOlwiXWA7XG5cdFx0Y29uc3QgZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAke3F1ZXJ5fWApO1xuXG5cdFx0Y29uc3QgaXRlcmF0b3IgPSBuZXcgU2V0KFsuLi5lXSk7XG5cblx0XHRpZiAoY29udGFpbmVyLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRpdGVyYXRvci5hZGQoY29udGFpbmVyKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG5cdFx0ICovXG5cdFx0Zm9yIChjb25zdCBbZWxlbWVudF0gb2YgaXRlcmF0b3IuZW50cmllcygpKSB7XG5cdFx0XHRpZiAobWVtLmhhcyhlbGVtZW50KSkgcmV0dXJuO1xuXHRcdFx0bWVtLmFkZChlbGVtZW50KTtcblxuXHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UpO1xuXHRcdFx0Y29uc3QgY21kID0gdHJpbVNwYWNlcyhhdHRyaWJ1dGVzKTtcblxuXHRcdFx0Y29uc3QgcGlwZSA9IG5ldyBQaXBlKGNtZCk7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5jYWxsYmFja3MuZm9yRWFjaCgoZiwgbikgPT4ge1xuXHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKG4sIGYpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGxldCB2YWx1ZTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpO1xuXHRcdFx0XHR2YWx1ZSA9IHBpcGUucnVuKHN1YmplY3QpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHR3aGlsZSAoZWxlbWVudC5maXJzdENoaWxkKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50LmZpcnN0Q2hpbGQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRlbGVtZW50LmFwcGVuZENoaWxkKHZhbHVlKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XHRcdGAke2VsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpfSwgJHtcblx0XHRcdFx0XHRcdFx0ZS5tZXNzYWdlXG5cdFx0XHRcdFx0XHR9YC50cmltKCksXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiB1cGRhdGVBdHRyaWJ1dGVzKGNoYW5nZSkge1xuXHRjb25zdCBzdWJqZWN0ID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXHRjb25zdCBwID0gY2xvbmUoY2hhbmdlPy5bXCJwYXRoXCJdKTtcblx0cnVuVXBkYXRlQXR0cmlidXRlcy5jYWxsKHRoaXMsIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQsIHAsIHN1YmplY3QpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXJcbiAqIEBwYXJhbSB7YXJyYXl9IHBhcnRzXG4gKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqL1xuZnVuY3Rpb24gcnVuVXBkYXRlQXR0cmlidXRlcyhjb250YWluZXIsIHBhcnRzLCBzdWJqZWN0KSB7XG5cdGlmICghaXNBcnJheShwYXJ0cykpIHJldHVybjtcblx0cGFydHMgPSBjbG9uZShwYXJ0cyk7XG5cblx0Y29uc3QgbWVtID0gbmV3IFdlYWtTZXQoKTtcblxuXHR3aGlsZSAocGFydHMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSBwYXJ0cy5qb2luKFwiLlwiKTtcblx0XHRwYXJ0cy5wb3AoKTtcblxuXHRcdGxldCBpdGVyYXRvciA9IG5ldyBTZXQoKTtcblxuXHRcdGNvbnN0IHF1ZXJ5ID0gYFske0FUVFJJQlVURV9VUERBVEVSX1NFTEVDVF9USElTfV1bJHtBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTfV0sIFske0FUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVN9Kj1cInBhdGg6JHtjdXJyZW50fVwiXSwgWyR7QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFU31ePVwic3RhdGljOlwiXSwgWyR7QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFU31ePVwiaTE4bjpcIl1gO1xuXG5cdFx0Y29uc3QgZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KTtcblxuXHRcdGlmIChlLmxlbmd0aCA+IDApIHtcblx0XHRcdGl0ZXJhdG9yID0gbmV3IFNldChbLi4uZV0pO1xuXHRcdH1cblxuXHRcdGlmIChjb250YWluZXIubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdGl0ZXJhdG9yLmFkZChjb250YWluZXIpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgW2VsZW1lbnRdIG9mIGl0ZXJhdG9yLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKG1lbS5oYXMoZWxlbWVudCkpIHJldHVybjtcblx0XHRcdG1lbS5hZGQoZWxlbWVudCk7XG5cblx0XHRcdC8vIHRoaXMgY2FzZSBvY2N1cnMgd2hlbiB0aGUgQVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVMgYXR0cmlidXRlIGlzIHNldFxuXHRcdFx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTKSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMpO1xuXG5cdFx0XHRmb3IgKGxldCBbLCBkZWZdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMuc3BsaXQoXCIsXCIpKSkge1xuXHRcdFx0XHRkZWYgPSB0cmltU3BhY2VzKGRlZik7XG5cdFx0XHRcdGNvbnN0IGkgPSBkZWYuaW5kZXhPZihcIiBcIik7XG5cdFx0XHRcdGNvbnN0IG5hbWUgPSB0cmltU3BhY2VzKGRlZi5zdWJzdHIoMCwgaSkpO1xuXHRcdFx0XHRjb25zdCBjbWQgPSB0cmltU3BhY2VzKGRlZi5zdWJzdHIoaSkpO1xuXG5cdFx0XHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZShjbWQpO1xuXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5mb3JFYWNoKChmLCBuKSA9PiB7XG5cdFx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhuLCBmLCBlbGVtZW50KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0bGV0IHZhbHVlO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpO1xuXHRcdFx0XHRcdHZhbHVlID0gcGlwZS5ydW4oc3ViamVjdCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIHtcblx0XHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRoYW5kbGVJbnB1dENvbnRyb2xBdHRyaWJ1dGVVcGRhdGUuY2FsbCh0aGlzLCBlbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8Kn0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRoaXMgVXBkYXRlclxuICovXG5cbmZ1bmN0aW9uIGhhbmRsZUlucHV0Q29udHJvbEF0dHJpYnV0ZVVwZGF0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSB7XG5cdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdGNhc2UgXCJzZWxlY3QtbXVsdGlwbGVcIjpcblx0XHRcdFx0Zm9yIChjb25zdCBbaW5kZXgsIG9wdF0gb2YgT2JqZWN0LmVudHJpZXMoZWxlbWVudC5vcHRpb25zKSkge1xuXHRcdFx0XHRcdGlmICh2YWx1ZS5pbmRleE9mKG9wdC52YWx1ZSkgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRvcHQuc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvcHQuc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzZWxlY3Qtb25lXCI6XG5cdFx0XHRcdC8vIE9ubHkgb25lIHZhbHVlIG1heSBiZSBzZWxlY3RlZFxuXG5cdFx0XHRcdGZvciAoY29uc3QgW2luZGV4LCBvcHRdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW1lbnQub3B0aW9ucykpIHtcblx0XHRcdFx0XHRpZiAob3B0LnZhbHVlID09PSB2YWx1ZSkge1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0Y2FzZSBcInJhZGlvXCI6XG5cdFx0XHRcdGlmIChuYW1lID09PSBcImNoZWNrZWRcIikge1xuXHRcdFx0XHRcdGVsZW1lbnQuY2hlY2tlZCA9IHZhbHVlICE9PSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcImNoZWNrYm94XCI6XG5cdFx0XHRcdGlmIChuYW1lID09PSBcImNoZWNrZWRcIikge1xuXHRcdFx0XHRcdGVsZW1lbnQuY2hlY2tlZCA9IHZhbHVlICE9PSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ0ZXh0XCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAobmFtZSA9PT0gXCJ2YWx1ZVwiKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC52YWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyBcIlwiIDogdmFsdWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcblx0XHRpZiAobmFtZSA9PT0gXCJ2YWx1ZVwiKSB7XG5cdFx0XHRlbGVtZW50LnZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiB2YWx1ZTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGVMaXN0fEhUTUxFbGVtZW50fFNldDxIVE1MRWxlbWVudD59IGVsZW1lbnRzXG4gKiBAcGFyYW0ge1N5bWJvbH0gc3ltYm9sXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnXG4gKlxuICogQ29uZmlnOiBlbmFibGVFdmVudFByb2Nlc3Npbmcge2Jvb2xlYW59IC0gZGVmYXVsdDogZmFsc2UgLSBlbmFibGVzIHRoZSBldmVudCBwcm9jZXNzaW5nXG4gKlxuICogQHJldHVybiB7UHJvbWlzZVtdfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMy4wXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IGVsZW1lbnRzIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBOb2RlTGlzdCwgSFRNTEVsZW1lbnQgb3IgU2V0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gc3ltYm9sIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgU3ltYm9sXG4gKi9cbmZ1bmN0aW9uIGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50KGVsZW1lbnRzLCBzeW1ib2wsIG9iamVjdCwgY29uZmlnID0ge30pIHtcblx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcInRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFwiLFxuXHRcdCk7XG5cdH1cblxuXHRpZiAoISh0eXBlb2Ygc3ltYm9sID09PSBcInN5bWJvbFwiKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJzeW1ib2wgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBTeW1ib2xcIik7XG5cdH1cblxuXHRjb25zdCB1cGRhdGVycyA9IG5ldyBTZXQoKTtcblxuXHRpZiAoZWxlbWVudHMgaW5zdGFuY2VvZiBOb2RlTGlzdCkge1xuXHRcdGVsZW1lbnRzID0gbmV3IFNldChbLi4uZWxlbWVudHNdKTtcblx0fSBlbHNlIGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0ZWxlbWVudHMgPSBuZXcgU2V0KFtlbGVtZW50c10pO1xuXHR9IGVsc2UgaWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgU2V0KSB7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdGBlbGVtZW50cyBpcyBub3QgYSB2YWxpZCB0eXBlLiAoYWN0dWFsOiAke3R5cGVvZiBlbGVtZW50c30pYCxcblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0Y29uc3QgdXBkYXRlckNhbGxiYWNrcyA9IFtdO1xuXHRjb25zdCBjYiA9IHRoaXM/Llt1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sXTtcblx0aWYgKHRoaXMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGNvbnN0IGNhbGxiYWNrcyA9IGNiLmNhbGwodGhpcyk7XG5cdFx0aWYgKHR5cGVvZiBjYWxsYmFja3MgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGZvciAoY29uc3QgW25hbWUsIGNhbGxiYWNrXSBvZiBPYmplY3QuZW50cmllcyhjYWxsYmFja3MpKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHVwZGF0ZXJDYWxsYmFja3MucHVzaChbbmFtZSwgY2FsbGJhY2tdKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHRcdFx0YG9uVXBkYXRlclBpcGVDYWxsYmFja3M6ICR7bmFtZX0gaXMgbm90IGEgZnVuY3Rpb25gLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdGBvblVwZGF0ZXJQaXBlQ2FsbGJhY2tzIGRvIG5vdCByZXR1cm4gYW4gb2JqZWN0IHdpdGggZnVuY3Rpb25zYCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0ZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybjtcblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHJldHVybjtcblxuXHRcdGNvbnN0IHUgPSBuZXcgVXBkYXRlcihlbGVtZW50LCBvYmplY3QpO1xuXHRcdHVwZGF0ZXJzLmFkZCh1KTtcblxuXHRcdGlmICh1cGRhdGVyQ2FsbGJhY2tzLmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAoY29uc3QgW25hbWUsIGNhbGxiYWNrXSBvZiB1cGRhdGVyQ2FsbGJhY2tzKSB7XG5cdFx0XHRcdHUuc2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2spO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJlc3VsdC5wdXNoKFxuXHRcdFx0dS5ydW4oKS50aGVuKCgpID0+IHtcblx0XHRcdFx0aWYgKGNvbmZpZy5ldmVudFByb2Nlc3NpbmcgPT09IHRydWUpIHtcblx0XHRcdFx0XHR1LmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHU7XG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9KTtcblxuXHRpZiAodXBkYXRlcnMuc2l6ZSA+IDApIHtcblx0XHRhZGRUb09iamVjdExpbmsodGhpcywgc3ltYm9sLCB1cGRhdGVycyk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGdldFNsb3R0ZWRFbGVtZW50cywgZ2V0U2xvdHRlZE5vZGVzIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfHVuZGVmaW5lZH0gcXVlcnlcbiAqIEBwYXJhbSB7U3RyaW5nfHVuZGVmaW5lZHxudWxsfSBuYW1lIG5hbWUgb2YgdGhlIHNsb3QgKGlmIHRoZSBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLCBhbGwgc2xvdHMgYXJlIHNlYXJjaGVkLCBpZiB0aGUgcGFyYW1ldGVyIGhhcyB0aGUgdmFsdWUgbnVsbCwgYWxsIHNsb3RzIHdpdGhvdXQgYSBuYW1lIGFyZSBzZWFyY2hlZC4gaWYgYSBzdHJpbmcgaXMgc3BlY2lmaWVkLCB0aGUgc2xvdHMgd2l0aCB0aGlzIG5hbWUgYXJlIHNlYXJjaGVkLilcbiAqIEByZXR1cm4geyp9XG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjMzLjBcbiAqIEB0aHJvd3Mge0Vycm9yfSBxdWVyeSBtdXN0IGJlIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFNsb3R0ZWROb2RlcyhxdWVyeSwgbmFtZSkge1xuXHRjb25zdCByZXN1bHQgPSBuZXcgU2V0KCk7XG5cblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0bGV0IHNlbGVjdG9yID0gXCJzbG90XCI7XG5cdGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAobmFtZSA9PT0gbnVsbCkge1xuXHRcdFx0c2VsZWN0b3IgKz0gXCI6bm90KFtuYW1lXSlcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZWN0b3IgKz0gYFtuYW1lPSR7dmFsaWRhdGVTdHJpbmcobmFtZSl9XWA7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc2xvdHMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cblx0Zm9yIChjb25zdCBbLCBzbG90XSBvZiBPYmplY3QuZW50cmllcyhzbG90cykpIHtcblx0XHRzbG90LmFzc2lnbmVkTm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG5cdFx0XHRpZiAobm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNTdHJpbmcocXVlcnkpKSB7XG5cdFx0XHRcdG5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeSkuZm9yRWFjaChmdW5jdGlvbiAobikge1xuXHRcdFx0XHRcdHJlc3VsdC5hZGQobik7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChub2RlLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRcdFx0cmVzdWx0LmFkZChub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChxdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInF1ZXJ5IG11c3QgYmUgYSBzdHJpbmdcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQuYWRkKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfSBxdWVyeVxuICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfG51bGx9IG5hbWUgbmFtZSBvZiB0aGUgc2xvdCAoaWYgdGhlIHBhcmFtZXRlciBpcyB1bmRlZmluZWQsIGFsbCBzbG90cyBhcmUgc2VhcmNoZWQsIGlmIHRoZSBwYXJhbWV0ZXIgaGFzIHRoZSB2YWx1ZSBudWxsLCBhbGwgc2xvdHMgd2l0aG91dCBhIG5hbWUgYXJlIHNlYXJjaGVkLiBpZiBhIHN0cmluZyBpcyBzcGVjaWZpZWQsIHRoZSBzbG90cyB3aXRoIHRoaXMgbmFtZSBhcmUgc2VhcmNoZWQuKVxuICogQHJldHVybiB7Kn1cbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjMuMFxuICogQHRocm93cyB7RXJyb3J9IHF1ZXJ5IG11c3QgYmUgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0U2xvdHRlZEVsZW1lbnRzKHF1ZXJ5LCBuYW1lKSB7XG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuXHRpZiAoISh0aGlzLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRsZXQgc2VsZWN0b3IgPSBcInNsb3RcIjtcblx0aWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChuYW1lID09PSBudWxsKSB7XG5cdFx0XHRzZWxlY3RvciArPSBcIjpub3QoW25hbWVdKVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxlY3RvciArPSBgW25hbWU9JHt2YWxpZGF0ZVN0cmluZyhuYW1lKX1dYDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzbG90cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblxuXHRmb3IgKGNvbnN0IFssIHNsb3RdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RzKSkge1xuXHRcdHNsb3QuYXNzaWduZWRFbGVtZW50cygpLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0IShub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpICYmXG5cdFx0XHRcdCEobm9kZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpICYmXG5cdFx0XHRcdCEobm9kZSBpbnN0YW5jZW9mIE1hdGhNTEVsZW1lbnQpXG5cdFx0XHQpXG5cdFx0XHRcdHJldHVybjtcblxuXHRcdFx0aWYgKGlzU3RyaW5nKHF1ZXJ5KSkge1xuXHRcdFx0XHRpZiAocXVlcnkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeSkuZm9yRWFjaChmdW5jdGlvbiAobikge1xuXHRcdFx0XHRcdFx0cmVzdWx0LmFkZChuKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGlmIChub2RlLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQuYWRkKG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXN1bHQuYWRkKG5vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicXVlcnkgbXVzdCBiZSBhIHN0cmluZyBhbmQgbm90IGVtcHR5XCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0LmFkZChub2RlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuZXhwb3J0IHsgZXh0cmFjdEtleXMgfTtcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUga2V5cyBmcm9tIHRoZSBnaXZlbiBvYmplY3QgYW5kIHJldHVybnMgYSBtYXAgd2l0aCB0aGUga2V5cyBhbmQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5UHJlZml4XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5U2VwYXJhdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVTZXBhcmF0b3JcbiAqIEByZXR1cm4ge01hcDxhbnksIGFueT59XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RLZXlzKFxuXHRvYmosXG5cdGtleVByZWZpeCA9IFwiXCIsXG5cdGtleVNlcGFyYXRvciA9IFwiLVwiLFxuXHR2YWx1ZVNlcGFyYXRvciA9IFwiLlwiLFxuKSB7XG5cdGNvbnN0IHJlc3VsdE1hcCA9IG5ldyBNYXAoKTtcblxuXHRmdW5jdGlvbiBoZWxwZXIoY3VycmVudE9iaiwgY3VycmVudEtleVByZWZpeCwgY3VycmVudFZhbHVlUHJlZml4KSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gY3VycmVudE9iaikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRjdXJyZW50T2JqW2tleV0gIT09IG51bGwgJiZcblx0XHRcdFx0dHlwZW9mIGN1cnJlbnRPYmpba2V5XSA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0XHQhQXJyYXkuaXNBcnJheShjdXJyZW50T2JqW2tleV0pXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgbmV3S2V5UHJlZml4ID0gY3VycmVudEtleVByZWZpeFxuXHRcdFx0XHRcdD8gY3VycmVudEtleVByZWZpeCArIGtleVNlcGFyYXRvciArIGtleS50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdFx0OiBrZXkudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0Y29uc3QgbmV3VmFsdWVQcmVmaXggPSBjdXJyZW50VmFsdWVQcmVmaXhcblx0XHRcdFx0XHQ/IGN1cnJlbnRWYWx1ZVByZWZpeCArIHZhbHVlU2VwYXJhdG9yICsga2V5XG5cdFx0XHRcdFx0OiBrZXk7XG5cdFx0XHRcdGhlbHBlcihjdXJyZW50T2JqW2tleV0sIG5ld0tleVByZWZpeCwgbmV3VmFsdWVQcmVmaXgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZmluYWxLZXkgPSBjdXJyZW50S2V5UHJlZml4XG5cdFx0XHRcdFx0PyBjdXJyZW50S2V5UHJlZml4ICsga2V5U2VwYXJhdG9yICsga2V5LnRvTG93ZXJDYXNlKClcblx0XHRcdFx0XHQ6IGtleS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRjb25zdCBmaW5hbFZhbHVlID0gY3VycmVudFZhbHVlUHJlZml4XG5cdFx0XHRcdFx0PyBjdXJyZW50VmFsdWVQcmVmaXggKyB2YWx1ZVNlcGFyYXRvciArIGtleVxuXHRcdFx0XHRcdDoga2V5O1xuXHRcdFx0XHRyZXN1bHRNYXAuc2V0KGZpbmFsS2V5LCBmaW5hbFZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoZWxwZXIob2JqLCBrZXlQcmVmaXgsIGtleVByZWZpeCk7XG5cdHJldHVybiByZXN1bHRNYXA7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi8uLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQge1xuXHRpc0Jvb2xlYW4sXG5cdGlzU3RyaW5nLFxuXHRpc09iamVjdCxcblx0aXNBcnJheSxcblx0aXNGdW5jdGlvbixcblx0aXNJbnRlZ2VyLFxufSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBleHRyYWN0S2V5cyB9IGZyb20gXCIuL2V4dHJhY3Qta2V5cy5tanNcIjtcblxuZXhwb3J0IHsgaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyB9O1xuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSBnaXZlbiBvcHRpb25zIG9iamVjdCBiYXNlZCBvbiB0aGUgYXR0cmlidXRlcyBvZiB0aGUgY3VycmVudCBET00gZWxlbWVudC5cbiAqIFRoZSBmdW5jdGlvbiBsb29rcyBmb3IgYXR0cmlidXRlcyB3aXRoIHRoZSBwcmVmaXggJ2RhdGEtbW9uc3Rlci1vcHRpb24tJywgYW5kIG1hcHMgdGhlbSB0b1xuICogcHJvcGVydGllcyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuIEl0IHJlcGxhY2VzIHRoZSBkYXNoZXMgd2l0aCBkb3RzIHRvIGZvcm0gdGhlIHByb3BlcnR5IHBhdGguXG4gKiBGb3IgZXhhbXBsZSwgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi11cmwnIG1hcHMgdG8gdGhlICd1cmwnIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBXaXRoIHRoZSBtYXBwaW5nIHBhcmFtZXRlciwgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBjYW4gYmUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IHZhbHVlLlxuICogRm9yIGV4YW1wbGUsIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tZm9vJyBtYXBzIHRvIHRoZSAnYmFyJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKlxuICogVGhlIG1hcHBpbmcgb2JqZWN0IHdvdWxkIGxvb2sgbGlrZSB0aGlzOlxuICpcbiAqIHtcbiAqICAgICdmb28nOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAqICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbycgaXMgYXBwZW5kZWQgd2l0aCAnYmFyJ1xuICogICAgLy8gYW5kIGFzc2lnbmVkIHRvIHRoZSAnYmFyJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKiAgICAvLyBlLmcuIDxkaXYgZGF0YS1tb25zdGVyLW9wdGlvbi1mb289XCJmb29cIj48L2Rpdj5cbiAqICAgICdiYXIuYmF6JzogKHZhbHVlKSA9PiB2YWx1ZSArICdiYXInXG4gKiAgICAvLyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1iYXItYmF6JyBpcyBhcHBlbmRlZCB3aXRoICdiYXInXG4gKiAgICAvLyBhbmQgYXNzaWduZWQgdG8gdGhlICdiYXIuYmF6JyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKiAgICAvLyBlLmcuIDxkaXYgZGF0YS1tb25zdGVyLW9wdGlvbi1iYXItYmF6PVwiZm9vXCI+PC9kaXY+XG4gKiB9XG4gKlxuICogQXJyYXkgdmFsdWVzIGhhdmUgdG8gYmUgc2VwYXJhdGVkIGJ5ICc6OicuXG4gKlxuICogQHNpbmNlIDMuMzguMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBET00gZWxlbWVudCB0byBiZSB1c2VkIGFzIHRoZSBzb3VyY2Ugb2YgdGhlIGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCB0byBiZSBpbml0aWFsaXplZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXBwaW5nIC0gQSBtYXBwaW5nIGJldHdlZW4gdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhbmQgdGhlIHByb3BlcnR5IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCAtIFRoZSBwcmVmaXggb2YgdGhlIGF0dHJpYnV0ZXMgdG8gYmUgY29uc2lkZXJlZC5cbiAqIEByZXR1cm4ge09iamVjdH0gLSBUaGUgaW5pdGlhbGl6ZWQgb3B0aW9ucyBvYmplY3QuXG4gKiBAdGhpcyBIVE1MRWxlbWVudCAtIFRoZSBjb250ZXh0IG9mIHRoZSBET00gZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhcblx0ZWxlbWVudCxcblx0b3B0aW9ucyxcblx0bWFwcGluZyA9IHt9LFxuXHRwcmVmaXggPSBcImRhdGEtbW9uc3Rlci1vcHRpb24tXCIsXG4pIHtcblx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIG9wdGlvbnM7XG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpIHJldHVybiBvcHRpb25zO1xuXG5cdGNvbnN0IGtleU1hcCA9IGV4dHJhY3RLZXlzKG9wdGlvbnMpO1xuXHRjb25zdCBmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcihvcHRpb25zKTtcblxuXHRlbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzKCkuZm9yRWFjaCgobmFtZSkgPT4ge1xuXHRcdGlmICghbmFtZS5zdGFydHNXaXRoKHByZWZpeCkpIHJldHVybjtcblxuXHRcdC8vIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgbmFtZSBpcyBhIHZhbGlkIG9wdGlvbi5cblx0XHQvLyB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBhdHRyaWJ1dGUgaXMgc2ltcGxlLiBUaGUgZGFzaCBpcyByZXBsYWNlZCBieSBhIGRvdC5cblx0XHQvLyBlLmcuIGRhdGEtbW9uc3Rlci11cmwgPT4gdXJsXG5cdFx0Y29uc3Qgb3B0aW9uTmFtZSA9IGtleU1hcC5nZXQobmFtZS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCkudG9Mb3dlckNhc2UoKSk7XG5cdFx0aWYgKCFmaW5kZXIuZXhpc3RzKG9wdGlvbk5hbWUpKSByZXR1cm47XG5cblx0XHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSkpIHtcblx0XHRcdGxldCB2YWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtYXBwaW5nLmhhc093blByb3BlcnR5KG9wdGlvbk5hbWUpICYmXG5cdFx0XHRcdGlzRnVuY3Rpb24obWFwcGluZ1tvcHRpb25OYW1lXSlcblx0XHRcdCkge1xuXHRcdFx0XHR2YWx1ZSA9IG1hcHBpbmdbb3B0aW9uTmFtZV0odmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgb3B0aW9uVmFsdWUgPSBmaW5kZXIuZ2V0VmlhKG9wdGlvbk5hbWUpO1xuXHRcdFx0aWYgKG9wdGlvblZhbHVlID09PSBudWxsIHx8IG9wdGlvblZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0b3B0aW9uVmFsdWUgPSB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly9jb25zdCB0eXBlT2ZPcHRpb25WYWx1ZSA9IHR5cGVvZiBvcHRpb25WYWx1ZTtcblx0XHRcdGlmIChvcHRpb25WYWx1ZSA9PT0gbnVsbCB8fCBvcHRpb25WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhbHVlID0gbnVsbDtcblx0XHRcdH0gZWxzZSBpZiAoaXNCb29sZWFuKG9wdGlvblZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlID09PSBcInRydWVcIjtcblx0XHRcdH0gZWxzZSBpZiAoaXNJbnRlZ2VyKG9wdGlvblZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKGlzU3RyaW5nKG9wdGlvblZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKGlzT2JqZWN0KG9wdGlvblZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmIChpc0FycmF5KG9wdGlvblZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnNwbGl0KFwiOjpcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YWx1ZSA9IG9wdGlvblZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaW5kZXIuc2V0VmlhKG9wdGlvbk5hbWUsIHZhbHVlKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBvcHRpb25zO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sIH0gZnJvbSBcIi4uL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBleHRyYWN0S2V5cyB9IGZyb20gXCIuL2V4dHJhY3Qta2V5cy5tanNcIjtcblxuZXhwb3J0IHsgc2V0T3B0aW9uRnJvbUF0dHJpYnV0ZSB9O1xuXG4vKipcbiAqIFNldCB0aGUgZ2l2ZW4gb3B0aW9ucyBvYmplY3QgYmFzZWQgb24gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGN1cnJlbnQgRE9NIGVsZW1lbnQuXG4gKiBUaGUgZnVuY3Rpb24gbG9va3MgZm9yIGF0dHJpYnV0ZXMgd2l0aCB0aGUgcHJlZml4ICdkYXRhLW1vbnN0ZXItb3B0aW9uLScsIGFuZCBtYXBzIHRoZW0gdG9cbiAqIHByb3BlcnRpZXMgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LiBJdCByZXBsYWNlcyB0aGUgZGFzaGVzIHdpdGggZG90cyB0byBmb3JtIHRoZSBwcm9wZXJ0eSBwYXRoLlxuICogRm9yIGV4YW1wbGUsIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJyBtYXBzIHRvIHRoZSAndXJsJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKlxuICogV2l0aCB0aGUgbWFwcGluZyBwYXJhbWV0ZXIsIHRoZSBhdHRyaWJ1dGUgdmFsdWUgY2FuIGJlIG1hcHBlZCB0byBhIGRpZmZlcmVudCB2YWx1ZS5cbiAqIEZvciBleGFtcGxlLCB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbycgbWFwcyB0byB0aGUgJ2JhcicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIFRoZSBtYXBwaW5nIG9iamVjdCB3b3VsZCBsb29rIGxpa2UgdGhpczpcbiAqIHtcbiAqICAgICdmb28nOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAqICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbycgaXMgYXBwZW5kZWQgd2l0aCAnYmFyJ1xuICogICAgLy8gYW5kIGFzc2lnbmVkIHRvIHRoZSAnYmFyJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKiAgICAvLyBlLmcuIDxkaXYgZGF0YS1tb25zdGVyLW9wdGlvbi1mb289XCJmb29cIj48L2Rpdj5cbiAqICAgICdiYXIuYmF6JzogKHZhbHVlKSA9PiB2YWx1ZSArICdiYXInXG4gKiAgICAvLyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1iYXItYmF6JyBpcyBhcHBlbmRlZCB3aXRoICdiYXInXG4gKiAgICAvLyBhbmQgYXNzaWduZWQgdG8gdGhlICdiYXIuYmF6JyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKiAgICAvLyBlLmcuIDxkaXYgZGF0YS1tb25zdGVyLW9wdGlvbi1iYXItYmF6PVwiZm9vXCI+PC9kaXY+XG4gKiB9XG4gKlxuICogQHNpbmNlIDMuNDUuMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBET00gZWxlbWVudCB0byBiZSB1c2VkIGFzIHRoZSBzb3VyY2Ugb2YgdGhlIGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gbmFtZSAtIFRoZSBhdHRyaWJ1dGUgb2JqZWN0IHRvIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBvZiB0aGUgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHRvIGJlIGluaXRpYWxpemVkLlxuICogQHBhcmFtIHtPYmplY3R9IG1hcHBpbmcgLSBBIG1hcHBpbmcgYmV0d2VlbiB0aGUgYXR0cmlidXRlIHZhbHVlIGFuZCB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IC0gVGhlIHByZWZpeCBvZiB0aGUgYXR0cmlidXRlcyB0byBiZSBjb25zaWRlcmVkLlxuICogQHJldHVybiB7T2JqZWN0fSAtIFRoZSBpbml0aWFsaXplZCBvcHRpb25zIG9iamVjdC5cbiAqIEB0aGlzIEhUTUxFbGVtZW50IC0gVGhlIGNvbnRleHQgb2YgdGhlIERPTSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBzZXRPcHRpb25Gcm9tQXR0cmlidXRlKFxuXHRlbGVtZW50LFxuXHRuYW1lLFxuXHRvcHRpb25zLFxuXHRtYXBwaW5nID0ge30sXG5cdHByZWZpeCA9IFwiZGF0YS1tb25zdGVyLW9wdGlvbi1cIixcbikge1xuXHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gb3B0aW9ucztcblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgcmV0dXJuIG9wdGlvbnM7XG5cblx0Y29uc3Qga2V5TWFwID0gZXh0cmFjdEtleXMob3B0aW9ucyk7XG5cdGNvbnN0IGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKG9wdGlvbnMpO1xuXG5cdC8vIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgbmFtZSBpcyBhIHZhbGlkIG9wdGlvbi5cblx0Ly8gdGhlIG1hcHBpbmcgYmV0d2VlbiB0aGUgYXR0cmlidXRlIGlzIHNpbXBsZS4gVGhlIGRhc2ggaXMgcmVwbGFjZWQgYnkgYSBkb3QuXG5cdC8vIGUuZy4gZGF0YS1tb25zdGVyLXVybCA9PiB1cmxcblx0Y29uc3Qgb3B0aW9uTmFtZSA9IGtleU1hcC5nZXQobmFtZS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCkudG9Mb3dlckNhc2UoKSk7XG5cdGlmICghZmluZGVyLmV4aXN0cyhvcHRpb25OYW1lKSkgcmV0dXJuO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSkpIHtcblx0XHRyZXR1cm4gb3B0aW9ucztcblx0fVxuXG5cdGxldCB2YWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXHRpZiAobWFwcGluZy5oYXNPd25Qcm9wZXJ0eShvcHRpb25OYW1lKSAmJiBpc0Z1bmN0aW9uKG1hcHBpbmdbb3B0aW9uTmFtZV0pKSB7XG5cdFx0dmFsdWUgPSBtYXBwaW5nW29wdGlvbk5hbWVdKHZhbHVlKTtcblx0fVxuXG5cdGNvbnN0IHR5cGVPZk9wdGlvblZhbHVlID0gdHlwZW9mIGZpbmRlci5nZXRWaWEob3B0aW9uTmFtZSk7XG5cdGlmICh0eXBlT2ZPcHRpb25WYWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHR2YWx1ZSA9IHZhbHVlID09PSBcInRydWVcIjtcblx0fSBlbHNlIGlmICh0eXBlT2ZPcHRpb25WYWx1ZSA9PT0gXCJudW1iZXJcIikge1xuXHRcdHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblx0fSBlbHNlIGlmICh0eXBlT2ZPcHRpb25WYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0fSBlbHNlIGlmICh0eXBlT2ZPcHRpb25WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cdH1cblxuXHRmaW5kZXIuc2V0VmlhKG9wdGlvbk5hbWUsIHZhbHVlKTtcblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5cbmltcG9ydCB7IHBhcnNlRGF0YVVSTCB9IGZyb20gXCIuLi90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzRnVuY3Rpb24sXG5cdGlzSXRlcmFibGUsXG5cdGlzT2JqZWN0LFxuXHRpc1N0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUZ1bmN0aW9uLFxuXHR2YWxpZGF0ZUluc3RhbmNlLFxuXHR2YWxpZGF0ZU9iamVjdCxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuLFxuXHRnZXRMaW5rZWRPYmplY3RzLFxuXHRoYXNPYmplY3RMaW5rLFxufSBmcm9tIFwiLi9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0RJU0FCTEVELFxuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfT1BUSU9OUyxcblx0QVRUUklCVVRFX0lOSVRfQ0FMTEJBQ0ssXG5cdEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SLFxuXHRBVFRSSUJVVEVfU0NSSVBUX0hPU1QsXG5cdGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCxcblx0aW5pdENvbnRyb2xDYWxsYmFja05hbWUsXG59IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGZpbmREb2N1bWVudFRlbXBsYXRlLCBUZW1wbGF0ZSB9IGZyb20gXCIuL3RlbXBsYXRlLm1qc1wiO1xuaW1wb3J0IHsgYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQgfSBmcm9tIFwiLi91cGRhdGVyLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBnZXRTbG90dGVkRWxlbWVudHMgfSBmcm9tIFwiLi9zbG90dGVkLm1qc1wiO1xuaW1wb3J0IHsgaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyB9IGZyb20gXCIuL3V0aWwvaW5pdC1vcHRpb25zLWZyb20tYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IHNldE9wdGlvbkZyb21BdHRyaWJ1dGUgfSBmcm9tIFwiLi91dGlsL3NldC1vcHRpb24tZnJvbS1hdHRyaWJ1dGUubWpzXCI7XG5cbmV4cG9ydCB7XG5cdEN1c3RvbUVsZW1lbnQsXG5cdGluaXRNZXRob2RTeW1ib2wsXG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG5cdHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wsXG59O1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGluaXRNZXRob2RTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBpbml0TWV0aG9kU3ltYm9sXCIpO1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGFzc2VtYmxlTWV0aG9kU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RvbS9AQGFzc2VtYmxlTWV0aG9kU3ltYm9sXCIsXG4pO1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbFwiLFxuKTtcblxuLyoqXG4gKiB0aGlzIHN5bWJvbCBob2xkcyB0aGUgYXR0cmlidXRlIG9ic2VydmVyIGNhbGxiYWNrcy4gVGhlIGtleSBpcyB0aGUgYXR0cmlidXRlIG5hbWUuXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBhdHRyaWJ1dGVPYnNlcnZlclwiLFxuKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXR0cmlidXRlTXV0YXRpb25PYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcblx0XCJAc2NodWthaS9tb25zdGVyL2RvbS9AQG11dGF0aW9uT2JzZXJ2ZXJcIixcbik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHVwZGF0ZUNsb25lRGF0YVN5bWJvbCA9IFN5bWJvbChcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAdXBkYXRlQ2xvbmVEYXRhXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzY3JpcHRIb3N0RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInNjcmlwdEhvc3RFbGVtZW50XCIpO1xuXG4vKipcbiAqIFRoZSBgQ3VzdG9tRWxlbWVudGAgY2xhc3MgcHJvdmlkZXMgYSB3YXkgdG8gZGVmaW5lIGEgbmV3IEhUTUwgZWxlbWVudCB1c2luZyB0aGUgcG93ZXIgb2YgQ3VzdG9tIEVsZW1lbnRzLlxuICpcbiAqICoqSU1QT1JUQU5UOioqIEFmdGVyIGRlZmluaW5nIGEgYEN1c3RvbUVsZW1lbnRgLCB0aGUgYHJlZ2lzdGVyQ3VzdG9tRWxlbWVudGAgbWV0aG9kIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBjbGFzcyBuYW1lXG4gKiB0byBtYWtlIHRoZSB0YWcgZGVmaW5lZCB2aWEgdGhlIGBnZXRUYWdgIG1ldGhvZCBrbm93biB0byB0aGUgRE9NLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBvYmplY3QgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpYCBmdW5jdGlvbi5cbiAqXG4gKiAjIyBTdHlsaW5nXG4gKlxuICogVG8gZGlzcGxheSBjdXN0b20gZWxlbWVudHMgb3B0aW1hbGx5LCB0aGUgYDpkZWZpbmVkYCBwc2V1ZG8tY2xhc3MgY2FuIGJlIHVzZWQuIFRvIHByZXZlbnQgY3VzdG9tIGVsZW1lbnRzIGZyb20gYmVpbmcgZGlzcGxheWVkIGFuZCBmbGlja2VyaW5nIHVudGlsIHRoZSBjb250cm9sIGlzIHJlZ2lzdGVyZWQsXG4gKiBpdCBpcyByZWNvbW1lbmRlZCB0byBjcmVhdGUgYSBDU1MgZGlyZWN0aXZlLlxuICpcbiAqIEluIHRoZSBzaW1wbGVzdCBjYXNlLCB5b3UgY2FuIHNpbXBseSBoaWRlIHRoZSBjb250cm9sOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxzdHlsZT5cbiAqIG15LWN1c3RvbS1lbGVtZW50Om5vdCg6ZGVmaW5lZCkge1xuICogICAgIGRpc3BsYXk6IG5vbmU7XG4gKiB9XG4gKlxuICogbXktY3VzdG9tLWVsZW1lbnQ6ZGVmaW5lZCB7XG4gKiAgICAgZGlzcGxheTogZmxleDtcbiAqIH1cbiAqIDwvc3R5bGU+XG4gKiBgYGBcbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGRpc3BsYXkgYSBsb2FkZXI6XG4gKlxuICogYGBgY3NzXG4gKiBteS1jdXN0b20tZWxlbWVudDpub3QoOmRlZmluZWQpIHtcbiAqICAgICBkaXNwbGF5OiBmbGV4O1xuICogICAgIGJveC1zaGFkb3c6IDAgNHB4IDEwcHggMCByZ2JhKDMzLCAzMywgMzMsIDAuMTUpO1xuICogICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAqICAgICBoZWlnaHQ6IDIwMHB4O1xuICogICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAqICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICogfVxuICpcbiAqIG15LWN1c3RvbS1lbGVtZW50Om5vdCg6ZGVmaW5lZCk6OmJlZm9yZSB7XG4gKiAgICAgY29udGVudDogJyc7XG4gKiAgICAgZGlzcGxheTogYmxvY2s7XG4gKiAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICogICAgIGxlZnQ6IC0xNTBweDtcbiAqICAgICB0b3A6IDA7XG4gKiAgICAgaGVpZ2h0OiAxMDAlO1xuICogICAgIHdpZHRoOiAxNTBweDtcbiAqICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50IDAlLCAjRThFOEU4IDUwJSwgdHJhbnNwYXJlbnQgMTAwJSk7XG4gKiAgICAgYW5pbWF0aW9uOiBsb2FkIDFzIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSBpbmZpbml0ZTtcbiAqIH1cbiAqXG4gKiBAa2V5ZnJhbWVzIGxvYWQge1xuICogICAgIGZyb20ge1xuICogICAgICAgICBsZWZ0OiAtMTUwcHg7XG4gKiAgICAgfVxuICogICAgIHRvIHtcbiAqICAgICAgICAgbGVmdDogMTAwJTtcbiAqICAgICB9XG4gKiB9XG4gKlxuICogbXktY3VzdG9tLWVsZW1lbnQ6ZGVmaW5lZCB7XG4gKiAgICAgZGlzcGxheTogZmxleDtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQ3VzdG9tIEVsZW1lbnRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgW01ETiBXZWIgRG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvV2ViX0NvbXBvbmVudHMvVXNpbmdfY3VzdG9tX2VsZW1lbnRzKS5cbiAqIEFuZCBpbiB0aGUgW0hUTUwgU3RhbmRhcmRdKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2N1c3RvbS1lbGVtZW50cykgb3IgaW4gdGhlIFtXSEFUV0cgV2lraV0oaHR0cHM6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9DdXN0b21fRWxlbWVudHMpLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiYXNlIGNsYXNzIGZvciBIVE1MNSBjdXN0b20gY29udHJvbHMuXG4gKi9cbmNsYXNzIEN1c3RvbUVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBBIG5ldyBvYmplY3QgaXMgY3JlYXRlZC4gRmlyc3QsIHRoZSBgaW5pdE9wdGlvbnNgIG1ldGhvZCBpcyBjYWxsZWQuIEhlcmUgdGhlXG5cdCAqIG9wdGlvbnMgY2FuIGJlIGRlZmluZWQgaW4gZGVyaXZlZCBjbGFzc2VzLiBTdWJzZXF1ZW50bHksIHRoZSBzaGFkb3dSb290IGlzIGluaXRpYWxpemVkLlxuXHQgKlxuXHQgKiBJTVBPUlRBTlQ6IEN1c3RvbUNvbnRyb2xzIGluc3RhbmNlcyBhcmUgbm90IGNyZWF0ZWQgdmlhIHRoZSBjb25zdHJ1Y3RvciwgYnV0IGVpdGhlciB2aWEgYSB0YWcgaW4gdGhlIEhUTUwgb3IgdmlhIDxjb2RlPmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKTwvY29kZT4uXG5cdCAqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9uIGF0dHJpYnV0ZSBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgSlNPTiBkZWZpbml0aW9uLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdID0ge307XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBuZXcgUHJveHlPYnNlcnZlcih7XG5cdFx0XHRvcHRpb25zOiBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKHRoaXMsIGV4dGVuZCh7fSwgdGhpcy5kZWZhdWx0cykpLFxuXHRcdH0pO1xuXHRcdHRoaXNbaW5pdE1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0T3B0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0XHR0aGlzW3NjcmlwdEhvc3RFbGVtZW50U3ltYm9sXSA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hpY2ggYXR0cmlidXRlcyBhcmUgdG8gYmVcblx0ICogbW9uaXRvcmVkIGJ5IGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKWAuIFVuZm9ydHVuYXRlbHksIHRoaXMgbWV0aG9kIGlzIHN0YXRpYy5cblx0ICogVGhlcmVmb3JlLCB0aGUgYG9ic2VydmVkQXR0cmlidXRlc2AgcHJvcGVydHkgY2Fubm90IGJlIGNoYW5nZWQgZHVyaW5nIHJ1bnRpbWUuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ1tdfVxuXHQgKiBAc2luY2UgMS4xNS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGF0dHJpYnV0ZVxuXHQgKiBAcGFyYW0gY2FsbGJhY2tcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uQ3VzdG9tRWxlbWVudH1cblx0ICovXG5cdGFkZEF0dHJpYnV0ZU9ic2VydmVyKGF0dHJpYnV0ZSwgY2FsbGJhY2spIHtcblx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblx0XHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVthdHRyaWJ1dGVdID0gY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGF0dHJpYnV0ZVxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5DdXN0b21FbGVtZW50fVxuXHQgKi9cblx0cmVtb3ZlQXR0cmlidXRlT2JzZXJ2ZXIoYXR0cmlidXRlKSB7XG5cdFx0ZGVsZXRlIHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW2F0dHJpYnV0ZV07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBkZWZhdWx0c2AgcHJvcGVydHkgZGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGEgY29udHJvbC4gSWYgeW91IHdhbnQgdG8gb3ZlcnJpZGUgdGhlc2UsXG5cdCAqIHlvdSBjYW4gdXNlIHZhcmlvdXMgbWV0aG9kcywgd2hpY2ggYXJlIGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhdmFpbGFibGUgYXRcblx0ICoge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZ2VuZG9jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9LlxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBhcmUgbGlzdGVkIGJlbG93OlxuXHQgKlxuXHQgKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzaGFkb3dSb290IGNhbiBiZSBmb3VuZCBpbiB0aGUgW01ETiBXZWIgRG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvYXR0YWNoU2hhZG93KSxcblx0ICogaW4gdGhlIFtIVE1MIFN0YW5kYXJkXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCNjdXN0b20tZWxlbWVudHMpIG9yIGluIHRoZSBbV0hBVFdHIFdpa2ldKGh0dHBzOi8vd2lraS53aGF0d2cub3JnL3dpa2kvQ3VzdG9tX0VsZW1lbnRzKS5cblx0ICpcblx0ICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGVtcGxhdGUgZWxlbWVudCBjYW4gYmUgZm91bmQgaW4gdGhlIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZW1wbGF0ZSkuXG5cdCAqXG5cdCAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNsb3QgZWxlbWVudCBjYW4gYmUgZm91bmQgaW4gdGhlIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zbG90KS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkaXNhYmxlZD1mYWxzZSBTcGVjaWZpZXMgd2hldGhlciB0aGUgY29udHJvbCBpcyBkaXNhYmxlZC4gV2hlbiBwcmVzZW50LCBpdCBtYWtlcyB0aGUgZWxlbWVudCBub24tbXV0YWJsZSwgbm9uLWZvY3VzYWJsZSwgYW5kIG5vbi1zdWJtaXR0YWJsZSB3aXRoIHRoZSBmb3JtLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gc2hhZG93TW9kZT1vcGVuIFNwZWNpZmllcyB0aGUgbW9kZSBvZiB0aGUgc2hhZG93IHJvb3QuIFdoZW4gc2V0IHRvIGBvcGVuYCwgZWxlbWVudHMgaW4gdGhlIHNoYWRvdyByb290IGFyZSBhY2Nlc3NpYmxlIGZyb20gSmF2YVNjcmlwdCBvdXRzaWRlIHRoZSByb290LCB3aGlsZSBzZXR0aW5nIGl0IHRvIGBjbG9zZWRgIGRlbmllcyBhY2Nlc3MgdG8gdGhlIHJvb3QncyBub2RlcyBmcm9tIEphdmFTY3JpcHQgb3V0c2lkZSBpdC5cblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBkZWxlZ2F0ZXNGb2N1cz10cnVlIFNwZWNpZmllcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvbnRyb2wgd2l0aCByZXNwZWN0IHRvIGZvY3VzYWJpbGl0eS4gV2hlbiBzZXQgdG8gYHRydWVgLCBpdCBtaXRpZ2F0ZXMgY3VzdG9tIGVsZW1lbnQgaXNzdWVzIGFyb3VuZCBmb2N1c2FiaWxpdHkuIFdoZW4gYSBub24tZm9jdXNhYmxlIHBhcnQgb2YgdGhlIHNoYWRvdyBET00gaXMgY2xpY2tlZCwgdGhlIGZpcnN0IGZvY3VzYWJsZSBwYXJ0IGlzIGdpdmVuIGZvY3VzLCBhbmQgdGhlIHNoYWRvdyBob3N0IGlzIGdpdmVuIGFueSBhdmFpbGFibGUgOmZvY3VzIHN0eWxpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgU3BlY2lmaWVzIHRoZSB0ZW1wbGF0ZXMgdXNlZCBieSB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluPXVuZGVmaW5lZCBTcGVjaWZpZXMgdGhlIG1haW4gdGVtcGxhdGUgdXNlZCBieSB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlTWFwcGluZyBTcGVjaWZpZXMgdGhlIG1hcHBpbmcgb2YgdGVtcGxhdGVzLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVGb3JtYXR0ZXIgU3BlY2lmaWVzIHRoZSBmb3JtYXR0ZXIgZm9yIHRoZSB0ZW1wbGF0ZXMuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZUZvcm1hdHRlci5tYXJrZXIgU3BlY2lmaWVzIHRoZSBtYXJrZXIgZm9yIHRoZSB0ZW1wbGF0ZXMuXG5cdCAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHRlbXBsYXRlRm9ybWF0dGVyLm1hcmtlci5vcGVuPW51bGwgU3BlY2lmaWVzIHRoZSBvcGVuaW5nIG1hcmtlciBmb3IgdGhlIHRlbXBsYXRlcy5cblx0ICogQHByb3BlcnR5IHtGdW5jdGlvbn0gdGVtcGxhdGVGb3JtYXR0ZXIubWFya2VyLmNsb3NlPW51bGwgU3BlY2lmaWVzIHRoZSBjbG9zaW5nIG1hcmtlciBmb3IgdGhlIHRlbXBsYXRlcy5cblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBldmVudFByb2Nlc3Npbmc9ZmFsc2UgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGNvbnRyb2wgcHJvY2Vzc2VzIGV2ZW50cy5cblx0ICogQHNpbmNlIDEuOC4wXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGRpc2FibGVkOiBmYWxzZSxcblx0XHRcdHNoYWRvd01vZGU6IFwib3BlblwiLFxuXHRcdFx0ZGVsZWdhdGVzRm9jdXM6IHRydWUsXG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHRcdHRlbXBsYXRlTWFwcGluZzoge30sXG5cdFx0XHR0ZW1wbGF0ZUZvcm1hdHRlcjoge1xuXHRcdFx0XHRtYXJrZXI6IHtcblx0XHRcdFx0XHRvcGVuOiBudWxsLFxuXHRcdFx0XHRcdGNsb3NlOiBudWxsLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblxuXHRcdFx0ZXZlbnRQcm9jZXNzaW5nOiBmYWxzZSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGxhYmVscyBvZiB0aGUgZWxlbWVudC5cblx0ICogVGhlIGxhYmVscyBhcmUgZGVmaW5lZCBpbiB0aGUgb3B0aW9uIG9iamVjdC5cblx0ICogVGhlIGtleSBvZiB0aGUgbGFiZWwgaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgdHJhbnNsYXRpb24gZnJvbSB0aGUgZG9jdW1lbnQuXG5cdCAqIElmIHRoZSB0cmFuc2xhdGlvbiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbGFiZWwsIHRoZSBsYWJlbCBpcyB1cGRhdGVkLlxuXHQgKlxuXHQgKiBCZWZvcmUgeW91IGNhbiB1c2UgdGhpcyBtZXRob2QsIHlvdSBtdXN0IGhhdmUgbG9hZGVkIHRoZSB0cmFuc2xhdGlvbnMuXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkN1c3RvbUVsZW1lbnR9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSAgQ2Fubm90IGZpbmQgYW4gZWxlbWVudCB3aXRoIHRyYW5zbGF0aW9ucy4gQWRkIGEgdHJhbnNsYXRpb24gb2JqZWN0IHRvIHRoZSBkb2N1bWVudC5cblx0ICovXG5cdHVwZGF0ZUkxOG4oKSB7XG5cdFx0bGV0IHRyYW5zbGF0aW9ucztcblxuXHRcdHRyeSB7XG5cdFx0XHR0cmFuc2xhdGlvbnMgPSBnZXREb2N1bWVudFRyYW5zbGF0aW9ucygpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAoIXRyYW5zbGF0aW9ucykge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGFiZWxzID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHNcIik7XG5cdFx0aWYgKCEoaXNPYmplY3QobGFiZWxzKSB8fCBpc0l0ZXJhYmxlKGxhYmVscykpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiBsYWJlbHMpIHtcblx0XHRcdGNvbnN0IGRlZiA9IGxhYmVsc1trZXldO1xuXG5cdFx0XHRpZiAoaXNTdHJpbmcoZGVmKSkge1xuXHRcdFx0XHRjb25zdCB0ZXh0ID0gdHJhbnNsYXRpb25zLmdldFRleHQoa2V5LCBkZWYpO1xuXHRcdFx0XHRpZiAodGV4dCAhPT0gZGVmKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYGxhYmVscy4ke2tleX1gLCB0ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH0gZWxzZSBpZiAoaXNPYmplY3QoZGVmKSkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGsgaW4gZGVmKSB7XG5cdFx0XHRcdFx0Y29uc3QgZCA9IGRlZltrXTtcblxuXHRcdFx0XHRcdGNvbnN0IHRleHQgPSB0cmFuc2xhdGlvbnMuZ2V0UGx1cmFsUnVsZVRleHQoa2V5LCBrLCBkKTtcblx0XHRcdFx0XHRpZiAoIWlzU3RyaW5nKHRleHQpKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxhYmVscyBkZWZpbml0aW9uXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGV4dCAhPT0gZCkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYGxhYmVscy4ke2tleX0uJHtrfWAsIHRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsYWJlbHMgZGVmaW5pdGlvblwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBnZXRUYWcoKWAgbWV0aG9kIHJldHVybnMgdGhlIHRhZyBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VzdG9tIGVsZW1lbnQuIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBvdmVyd3JpdHRlblxuXHQgKiBieSB0aGUgZGVyaXZlZCBjbGFzcy5cblx0ICpcblx0ICogTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGNoZWNrIG9uIHRoZSBuYW1lIG9mIHRoZSB0YWcgaW4gdGhpcyBjbGFzcy4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mXG5cdCAqIHRoZSBkZXZlbG9wZXIgdG8gYXNzaWduIGFuIGFwcHJvcHJpYXRlIHRhZyBuYW1lLiBJZiB0aGUgbmFtZSBpcyBub3QgdmFsaWQsIHRoZVxuXHQgKiBgcmVnaXN0ZXJDdXN0b21FbGVtZW50KClgIG1ldGhvZCB3aWxsIGlzc3VlIGFuIGVycm9yLlxuXHQgKlxuXHQgKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI3ZhbGlkLWN1c3RvbS1lbGVtZW50LW5hbWVcblx0ICogQHRocm93cyB7RXJyb3J9IFRoaXMgbWV0aG9kIG11c3QgYmUgb3ZlcnJpZGRlbiBieSB0aGUgZGVyaXZlZCBjbGFzcy5cblx0ICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGFnIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXN0b20gZWxlbWVudC5cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFwiVGhlIG1ldGhvZCBgZ2V0VGFnKClgIG11c3QgYmUgb3ZlcnJpZGRlbiBieSB0aGUgZGVyaXZlZCBjbGFzcy5cIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgZ2V0Q1NTU3R5bGVTaGVldCgpYCBtZXRob2QgcmV0dXJucyBhIGBDU1NTdHlsZVNoZWV0YCBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBzdHlsZXMgZm9yIHRoZSBjdXN0b20gZWxlbWVudC5cblx0ICogSWYgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIGBDU1NTdHlsZVNoZWV0YCBjb25zdHJ1Y3RvciwgdGhlbiBhbiBvYmplY3QgY2FuIGJlIGJ1aWx0IHVzaW5nIHRoZSBwcm92aWRlZCBkZXRvdXIuXG5cdCAqXG5cdCAqIElmIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLCB0aGVuIHRoZSBzaGFkb3cgcm9vdCBkb2VzIG5vdCByZWNlaXZlIGEgc3R5bGVzaGVldC5cblx0ICpcblx0ICogRXhhbXBsZSB1c2FnZTpcblx0ICpcblx0ICogYGBganNcblx0ICogY2xhc3MgTXlFbGVtZW50IGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdCAqICAgc3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdCAqICAgICAgIGNvbnN0IHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0ICogICAgICAgc2hlZXQucmVwbGFjZVN5bmMoXCJwIHsgY29sb3I6IHJlZDsgfVwiKTtcblx0ICogICAgICAgcmV0dXJuIHNoZWV0O1xuXHQgKiAgIH1cblx0ICogfVxuXHQgKiBgYGBcblx0ICpcblx0ICogSWYgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIGBDU1NTdHlsZVNoZWV0YCBjb25zdHJ1Y3Rvcixcblx0ICogeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB3b3JrYXJvdW5kIHRvIGNyZWF0ZSB0aGUgc3R5bGVzaGVldDpcblx0ICpcblx0ICogYGBganNcblx0ICogY29uc3QgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCd0aXRsZScpO1xuXHQgKiBsZXQgc3R5bGUgPSBkb2MuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuXHQgKiBzdHlsZS5pbm5lckhUTUwgPSBcInAgeyBjb2xvcjogcmVkOyB9XCI7XG5cdCAqIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpKTtcblx0ICogZG9jLmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHQgKiByZXR1cm4gZG9jLnN0eWxlU2hlZXRzWzBdO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldHxDU1NTdHlsZVNoZWV0W118c3RyaW5nfHVuZGVmaW5lZH0gQSBgQ1NTU3R5bGVTaGVldGAgb2JqZWN0IG9yIGFuIGFycmF5IG9mIHN1Y2ggb2JqZWN0cyB0aGF0IGRlZmluZSB0aGUgc3R5bGVzIGZvciB0aGUgY3VzdG9tIGVsZW1lbnQsIG9yIGB1bmRlZmluZWRgIGlmIG5vIHN0eWxlc2hlZXQgc2hvdWxkIGJlIGFwcGxpZWQuXG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIGF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogZGV0YWNoIGEgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cblx0ICovXG5cdGRldGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqIEBzaW5jZSAxLjEwLjBcblx0ICovXG5cdGdldE9wdGlvbihwYXRoLCBkZWZhdWx0VmFsdWUgPSB1bmRlZmluZWQpIHtcblx0XHRsZXQgdmFsdWU7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFsdWUgPSBuZXcgUGF0aGZpbmRlcihcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sXG5cdFx0XHQpLmdldFZpYShwYXRoKTtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBvcHRpb24gYW5kIGluZm9ybSBlbGVtZW50c1xuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICovXG5cdHNldE9wdGlvbihwYXRoLCB2YWx1ZSkge1xuXHRcdG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0pLnNldFZpYShcblx0XHRcdHBhdGgsXG5cdFx0XHR2YWx1ZSxcblx0XHQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG5cdCAqL1xuXHRzZXRPcHRpb25zKG9wdGlvbnMpIHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSBwYXJzZU9wdGlvbnNKU09OLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdFx0fVxuXHRcdC8vIDIwMjQtMDEtMjE6IHJlbW92ZSB0aGlzLmRlZmF1bHRzLCBvdGhlcndpc2UgaXQgd2lsbCBvdmVyd3JpdGVcblx0XHQvLyB0aGUgY3VycmVudCBzZXR0aW5ncyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIG1hZGUuXG5cdFx0Ly8gaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvMTM2XG5cdFx0ZXh0ZW5kKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sIG9wdGlvbnMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogSXMgY2FsbGVkIG9uY2UgdmlhIHRoZSBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuXHQgKiBAc2luY2UgMS44LjBcblx0ICovXG5cdFtpbml0TWV0aG9kU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBvYmplY3QgaXMgZXF1aXBwZWQgd2l0aCB1cGRhdGUgZm9yIHRoZSBkeW5hbWljIGNoYW5nZSBvZiB0aGUgZG9tLlxuXHQgKiBUaGUgZnVuY3Rpb25zIHJldHVybmVkIGhlcmUgY2FuIGJlIHVzZWQgYXMgcGlwZSBmdW5jdGlvbnMgaW4gdGhlIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBJbiB0aGUgZXhhbXBsZSwgdGhlIGZ1bmN0aW9uIGBteS10cmFuc2Zvcm1lcmAgaXMgZGVmaW5lZC4gSW4gdGhlIHRlbXBsYXRlLCB5b3UgY2FuIHVzZSBpdCBhcyBmb2xsb3dzOlxuXHQgKlxuXHQgKiBgYGBodG1sXG5cdCAqIDxteS1lbGVtZW50XG5cdCAqICAgZGF0YS1tb25zdGVyLW9wdGlvbi10cmFuc2Zvcm1lcj1cInBhdGg6bXktdmFsdWUgfCBjYWxsOm15LXRyYW5zZm9ybWVyXCI+XG5cdCAqIDwvbXktZWxlbWVudD5cblx0ICogYGBgXG5cdCAqXG5cdCAqIFRoZSBmdW5jdGlvbiBgbXktdHJhbnNmb3JtZXJgIGlzIGNhbGxlZCB3aXRoIHRoZSB2YWx1ZSBvZiBgbXktdmFsdWVgIGFzIGEgcGFyYW1ldGVyLlxuXHQgKlxuXHQgKiBgYGBqc1xuXHQgKiBjbGFzcyBNeUVsZW1lbnQgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0ICogW3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdKCkge1xuXHQgKiAgICByZXR1cm4ge1xuXHQgKiAgICAgICBcIm15LXRyYW5zZm9ybWVyXCI6ICh2YWx1ZSkgPT4ge1xuXHQgKiAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgV2VydCkge1xuXHQgKiAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuXHQgKiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIFwiIVwiO1xuXHQgKiAgICAgICAgICAgY2FzZSBcIlphaGxcIjpcblx0ICogICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKyAxO1xuXHQgKiAgICAgICAgICAgZGVmYXVsdDpcblx0ICogICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG5cdCAqICAgICAgICAgICB9XG5cdCAqICAgIH1cblx0ICogICAgfTtcblx0ICogIH07XG5cdCAqICB9XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqIEBzaW5jZSAyLjQzLjBcblx0ICovXG5cdFt1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUgb2JqZWN0IGlzIGluY2x1ZGVkIGluIHRoZSBET00gZm9yIHRoZSBmaXJzdCB0aW1lLiBJdCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIGFjdGlvbnM6XG5cdCAqXG5cdCAqIDxvbD5cblx0ICogPGxpPkV4dHJhY3RzIHRoZSBvcHRpb25zIGZyb20gdGhlIGF0dHJpYnV0ZXMgYW5kIHRoZSBzY3JpcHQgdGFnIG9mIHRoZSBlbGVtZW50IGFuZCBzZXRzIHRoZW0uPC9saT5cblx0ICogPGxpPkluaXRpYWxpemVzIHRoZSBzaGFkb3cgcm9vdCBhbmQgaXRzIENTUyBzdHlsZXNoZWV0IChpZiBzcGVjaWZpZWQpLjwvbGk+XG5cdCAqIDxsaT5Jbml0aWFsaXplcyB0aGUgSFRNTCBjb250ZW50IG9mIHRoZSBlbGVtZW50LjwvbGk+XG5cdCAqIDxsaT5Jbml0aWFsaXplcyB0aGUgY3VzdG9tIGVsZW1lbnRzIGluc2lkZSB0aGUgc2hhZG93IHJvb3QgYW5kIHRoZSBzbG90dGVkIGVsZW1lbnRzLjwvbGk+XG5cdCAqIDxsaT5BdHRhY2hlcyBhIG11dGF0aW9uIG9ic2VydmVyIHRvIG9ic2VydmUgY2hhbmdlcyB0byB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVudC48L2xpPlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fSAtIFRoZSB1cGRhdGVkIGN1c3RvbSBlbGVtZW50LlxuXHQgKiBAc2luY2UgMS44LjBcblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0bGV0IGVsZW1lbnRzO1xuXHRcdGxldCBub2RlTGlzdDtcblxuXHRcdC8vIEV4dHJhY3Qgb3B0aW9ucyBmcm9tIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGVtXG5cdFx0Y29uc3QgQXR0cmlidXRlT3B0aW9ucyA9IGdldE9wdGlvbnNGcm9tQXR0cmlidXRlcy5jYWxsKHRoaXMpO1xuXHRcdGlmIChcblx0XHRcdGlzT2JqZWN0KEF0dHJpYnV0ZU9wdGlvbnMpICYmXG5cdFx0XHRPYmplY3Qua2V5cyhBdHRyaWJ1dGVPcHRpb25zKS5sZW5ndGggPiAwXG5cdFx0KSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbnMoQXR0cmlidXRlT3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Ly8gRXh0cmFjdCBvcHRpb25zIGZyb20gc2NyaXB0IHRhZyBhbmQgc2V0IHRoZW1cblx0XHRjb25zdCBTY3JpcHRPcHRpb25zID0gZ2V0T3B0aW9uc0Zyb21TY3JpcHRUYWcuY2FsbCh0aGlzKTtcblx0XHRpZiAoaXNPYmplY3QoU2NyaXB0T3B0aW9ucykgJiYgT2JqZWN0LmtleXMoU2NyaXB0T3B0aW9ucykubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb25zKFNjcmlwdE9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdC8vIEluaXRpYWxpemUgdGhlIHNoYWRvdyByb290IGFuZCBpdHMgQ1NTIHN0eWxlc2hlZXRcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJzaGFkb3dNb2RlXCIsIGZhbHNlKSAhPT0gZmFsc2UpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGluaXRTaGFkb3dSb290LmNhbGwodGhpcyk7XG5cdFx0XHRcdGVsZW1lbnRzID0gdGhpcy5zaGFkb3dSb290LmNoaWxkTm9kZXM7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGluaXRDU1NTdHlsZXNoZWV0LmNhbGwodGhpcyk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIGVsZW1lbnRzIGFyZSBub3QgZm91bmQgaW5zaWRlIHRoZSBzaGFkb3cgcm9vdCwgaW5pdGlhbGl6ZSB0aGUgSFRNTCBjb250ZW50IG9mIHRoZSBlbGVtZW50XG5cdFx0aWYgKCEoZWxlbWVudHMgaW5zdGFuY2VvZiBOb2RlTGlzdCkpIHtcblx0XHRcdGluaXRIdG1sQ29udGVudC5jYWxsKHRoaXMpO1xuXHRcdFx0ZWxlbWVudHMgPSB0aGlzLmNoaWxkTm9kZXM7XG5cdFx0fVxuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgY3VzdG9tIGVsZW1lbnRzIGluc2lkZSB0aGUgc2hhZG93IHJvb3QgYW5kIHRoZSBzbG90dGVkIGVsZW1lbnRzXG5cdFx0aW5pdEZyb21DYWxsYmFja0hvc3QuY2FsbCh0aGlzKTtcblx0XHR0cnkge1xuXHRcdFx0bm9kZUxpc3QgPSBuZXcgU2V0KFsuLi5lbGVtZW50cywgLi4uZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcyldKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRub2RlTGlzdCA9IGVsZW1lbnRzO1xuXHRcdH1cblxuXHRcdHRoaXNbdXBkYXRlQ2xvbmVEYXRhU3ltYm9sXSA9IGNsb25lKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sXG5cdFx0KTtcblxuXHRcdGNvbnN0IGNmZyA9IHt9O1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImV2ZW50UHJvY2Vzc2luZ1wiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Y2ZnLmV2ZW50UHJvY2Vzc2luZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0YWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQuY2FsbChcblx0XHRcdHRoaXMsXG5cdFx0XHRub2RlTGlzdCxcblx0XHRcdGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCxcblx0XHRcdHRoaXNbdXBkYXRlQ2xvbmVEYXRhU3ltYm9sXSxcblx0XHRcdGNmZyxcblx0XHQpO1xuXG5cdFx0Ly8gQXR0YWNoIGEgbXV0YXRpb24gb2JzZXJ2ZXIgdG8gb2JzZXJ2ZSBjaGFuZ2VzIHRvIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBlbGVtZW50XG5cdFx0YXR0YWNoQXR0cmlidXRlQ2hhbmdlTXV0YXRpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogWW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nPyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgZm9yIGFkdmFuY2VkIHVzZXJzLlxuXHQgKiBUaGUgcmVzdWx0IGlzIGEgY2xvbmUgb2YgdGhlIGludGVybmFsIGRhdGEuXG5cdCAqXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRnZXRJbnRlcm5hbFVwZGF0ZUNsb25lRGF0YSgpIHtcblx0XHRyZXR1cm4gY2xvbmUodGhpc1t1cGRhdGVDbG9uZURhdGFTeW1ib2xdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZXZlcnkgdGltZSB0aGUgZWxlbWVudCBpcyBpbnNlcnRlZCBpbnRvIHRoZSBET00uIEl0IGNoZWNrcyBpZiB0aGUgY3VzdG9tIGVsZW1lbnRcblx0ICogaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZCBhbmQgaWYgbm90LCBjYWxscyB0aGUgYXNzZW1ibGVNZXRob2QgdG8gaW5pdGlhbGl6ZSBpdC5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvY29ubmVjdGVkQ2FsbGJhY2tcblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdC8vIENoZWNrIGlmIHRoZSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZFxuXHRcdGlmICghaGFzT2JqZWN0TGluayh0aGlzLCBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wpKSB7XG5cdFx0XHQvLyBJZiBub3QsIGNhbGwgdGhlIGFzc2VtYmxlTWV0aG9kIHRvIGluaXRpYWxpemUgdGhlIG9iamVjdFxuXHRcdFx0dGhpc1thc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00uIFVzZWZ1bCBmb3IgcnVubmluZyBjbGVhbiB1cCBjb2RlLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKiBAc2luY2UgMS43LjBcblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge31cblxuXHQvKipcblx0ICogVGhlIGN1c3RvbSBlbGVtZW50IGhhcyBiZWVuIG1vdmVkIGludG8gYSBuZXcgZG9jdW1lbnQgKGUuZy4gc29tZW9uZSBjYWxsZWQgZG9jdW1lbnQuYWRvcHROb2RlKGVsKSkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqIEBzaW5jZSAxLjcuMFxuXHQgKi9cblx0YWRvcHRlZENhbGxiYWNrKCkge31cblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gYW4gb2JzZXJ2ZWQgYXR0cmlidXRlIGhhcyBiZWVuIGFkZGVkLCByZW1vdmVkLCB1cGRhdGVkLCBvciByZXBsYWNlZC4gQWxzbyBjYWxsZWQgZm9yIGluaXRpYWxcblx0ICogdmFsdWVzIHdoZW4gYW4gZWxlbWVudCBpcyBjcmVhdGVkIGJ5IHRoZSBwYXJzZXIsIG9yIHVwZ3JhZGVkLiBOb3RlOiBvbmx5IGF0dHJpYnV0ZXMgbGlzdGVkIGluIHRoZSBvYnNlcnZlZEF0dHJpYnV0ZXNcblx0ICogcHJvcGVydHkgd2lsbCByZWNlaXZlIHRoaXMgY2FsbGJhY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyTmFtZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gb2xkVmFsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuZXdWYWxcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICogQHNpbmNlIDEuMTUuMFxuXHQgKi9cblx0YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKGF0dHJOYW1lLCBvbGRWYWwsIG5ld1ZhbCkge1xuXHRcdGlmIChhdHRyTmFtZS5zdGFydHNXaXRoKFwiZGF0YS1tb25zdGVyLW9wdGlvbi1cIikpIHtcblx0XHRcdHNldE9wdGlvbkZyb21BdHRyaWJ1dGUoXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdGF0dHJOYW1lLFxuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBjYWxsYmFjayA9IHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdPy5bYXR0ck5hbWVdO1xuXHRcdGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y2FsbGJhY2suY2FsbCh0aGlzLCBuZXdWYWwsIG9sZFZhbCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKiBAc2luY2UgMS4xOS4wXG5cdCAqL1xuXHRoYXNOb2RlKG5vZGUpIHtcblx0XHRpZiAoY29udGFpbkNoaWxkTm9kZS5jYWxsKHRoaXMsIHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSkpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoISh0aGlzLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb250YWluQ2hpbGROb2RlLmNhbGwodGhpcy5zaGFkb3dSb290LCBub2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxscyBhIGNhbGxiYWNrIGZ1bmN0aW9uIGlmIGl0IGV4aXN0cy5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHsqfSBhcmdzXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRjYWxsQ2FsbGJhY2sobmFtZSwgYXJncykge1xuXHRcdHJldHVybiBjYWxsQ29udHJvbENhbGxiYWNrLmNhbGwodGhpcywgbmFtZSwgLi4uYXJncyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2FsbEJhY2tGdW5jdGlvbk5hbWVcbiAqIEBwYXJhbSB7Kn0gIGFyZ3NcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZnVuY3Rpb24gY2FsbENvbnRyb2xDYWxsYmFjayhjYWxsQmFja0Z1bmN0aW9uTmFtZSwgLi4uYXJncykge1xuXHRpZiAoIWlzU3RyaW5nKGNhbGxCYWNrRnVuY3Rpb25OYW1lKSB8fCBjYWxsQmFja0Z1bmN0aW9uTmFtZSA9PT0gXCJcIikge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmIChjYWxsQmFja0Z1bmN0aW9uTmFtZSBpbiB0aGlzKSB7XG5cdFx0cmV0dXJuIHRoaXNbY2FsbEJhY2tGdW5jdGlvbk5hbWVdKHRoaXMsIC4uLmFyZ3MpO1xuXHR9XG5cblx0aWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfU0NSSVBUX0hPU1QpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXNbc2NyaXB0SG9zdEVsZW1lbnRTeW1ib2xdLmxlbmd0aCA9PT0gMCkge1xuXHRcdGNvbnN0IHRhcmdldElkID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1NDUklQVF9IT1NUKTtcblx0XHRpZiAoIXRhcmdldElkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdCA9IHRhcmdldElkLnNwbGl0KFwiLFwiKTtcblx0XHRmb3IgKGNvbnN0IGlkIG9mIGxpc3QpIHtcblx0XHRcdGNvbnN0IGhvc3QgPSBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHModGhpcywgdGFyZ2V0SWQpO1xuXHRcdFx0aWYgKCEoaG9zdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0ucHVzaChob3N0KTtcblx0XHR9XG5cdH1cblxuXHRmb3IgKGNvbnN0IGhvc3Qgb2YgdGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0pIHtcblx0XHRpZiAoY2FsbEJhY2tGdW5jdGlvbk5hbWUgaW4gaG9zdCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIGhvc3RbY2FsbEJhY2tGdW5jdGlvbk5hbWVdKHRoaXMsIC4uLmFyZ3MpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdHRoaXMsXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRgY2FsbGJhY2sgJHtjYWxsQmFja0Z1bmN0aW9uTmFtZX0gbm90IGZvdW5kYCxcblx0KTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyB0aGUgY3VzdG9tIGVsZW1lbnQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgYXR0YWNoZWQgdG8gdGhlIERPTS4gSXQgY2hlY2tzIGlmIHRoZVxuICogYGRhdGEtbW9uc3Rlci1vcHRpb24tY2FsbGJhY2tgIGF0dHJpYnV0ZSBpcyBzZXQsIGFuZCBpZiBub3QsIHRoZSBkZWZhdWx0IGNhbGxiYWNrXG4gKiBgaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFja2AgaXMgY2FsbGVkLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgc2VhcmNoZWQgZm9yIGluIHRoaXNcbiAqIGVsZW1lbnQgYW5kIGluIHRoZSBob3N0IGVsZW1lbnQuIElmIHRoZSBjYWxsYmFjayBpcyBmb3VuZCwgaXQgaXMgY2FsbGVkIHdpdGggdGhlIGVsZW1lbnRcbiAqIGFzIGEgcGFyYW1ldGVyLlxuICpcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS9kZWZpbmUjcHJvdmlkaW5nX2FfY29uc3RydWN0aW9uX2NhbGxiYWNrXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuZnVuY3Rpb24gaW5pdEZyb21DYWxsYmFja0hvc3QoKSB7XG5cdC8vIFNldCB0aGUgZGVmYXVsdCBjYWxsYmFjayBmdW5jdGlvbiBuYW1lXG5cdGxldCBjYWxsQmFja0Z1bmN0aW9uTmFtZSA9IGluaXRDb250cm9sQ2FsbGJhY2tOYW1lO1xuXG5cdC8vIElmIHRoZSBgZGF0YS1tb25zdGVyLW9wdGlvbi1jYWxsYmFja2AgYXR0cmlidXRlIGlzIHNldCwgdXNlIGl0cyB2YWx1ZSBhcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZVxuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0lOSVRfQ0FMTEJBQ0spKSB7XG5cdFx0Y2FsbEJhY2tGdW5jdGlvbk5hbWUgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSyk7XG5cdH1cblxuXHQvLyBDYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHRoZSBlbGVtZW50IGFzIGEgcGFyYW1ldGVyIGlmIGl0IGV4aXN0c1xuXHRjYWxsQ29udHJvbENhbGxiYWNrLmNhbGwodGhpcywgY2FsbEJhY2tGdW5jdGlvbk5hbWUpO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGZpcnN0IGNyZWF0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gYXR0YWNoQXR0cmlidXRlQ2hhbmdlTXV0YXRpb25PYnNlcnZlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKHR5cGVvZiBzZWxmW2F0dHJpYnV0ZU11dGF0aW9uT2JzZXJ2ZXJTeW1ib2xdICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c2VsZlthdHRyaWJ1dGVNdXRhdGlvbk9ic2VydmVyU3ltYm9sXSA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuXHRcdGZ1bmN0aW9uIChtdXRhdGlvbnMsIG9ic2VydmVyKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuXHRcdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJhdHRyaWJ1dGVzXCIpIHtcblx0XHRcdFx0XHRzZWxmLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhcblx0XHRcdFx0XHRcdG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUsXG5cdFx0XHRcdFx0XHRtdXRhdGlvbi5vbGRWYWx1ZSxcblx0XHRcdFx0XHRcdG11dGF0aW9uLnRhcmdldC5nZXRBdHRyaWJ1dGUobXV0YXRpb24uYXR0cmlidXRlTmFtZSksXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdCk7XG5cblx0dHJ5IHtcblx0XHRzZWxmW2F0dHJpYnV0ZU11dGF0aW9uT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUoc2VsZiwge1xuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGF0dHJpYnV0ZU9sZFZhbHVlOiB0cnVlLFxuXHRcdH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0fVxufVxuXG4vKipcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5DaGlsZE5vZGUobm9kZSkge1xuXHRpZiAodGhpcy5jb250YWlucyhub2RlKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Zm9yIChjb25zdCBbLCBlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNoaWxkTm9kZXMpKSB7XG5cdFx0aWYgKGUuY29udGFpbnMobm9kZSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5DaGlsZE5vZGUuY2FsbChlLCBub2RlKTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE1LjBcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25PYnNlcnZlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0bGV0IGxhc3REaXNhYmxlZFZhbHVlID0gdW5kZWZpbmVkO1xuXHRzZWxmLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zdCBmbGFnID0gc2VsZi5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKTtcblxuXHRcdFx0aWYgKGZsYWcgPT09IGxhc3REaXNhYmxlZFZhbHVlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0bGFzdERpc2FibGVkVmFsdWUgPSBmbGFnO1xuXG5cdFx0XHRpZiAoIShzZWxmLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHF1ZXJ5ID1cblx0XHRcdFx0XCJidXR0b24sIGNvbW1hbmQsIGZpZWxkc2V0LCBrZXlnZW4sIG9wdGdyb3VwLCBvcHRpb24sIHNlbGVjdCwgdGV4dGFyZWEsIGlucHV0LCBbZGF0YS1tb25zdGVyLW9iamVjdGxpbmtdXCI7XG5cdFx0XHRjb25zdCBlbGVtZW50cyA9IHNlbGYuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KTtcblxuXHRcdFx0bGV0IG5vZGVMaXN0O1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bm9kZUxpc3QgPSBuZXcgU2V0KFtcblx0XHRcdFx0XHQuLi5lbGVtZW50cyxcblx0XHRcdFx0XHQuLi5nZXRTbG90dGVkRWxlbWVudHMuY2FsbChzZWxmLCBxdWVyeSksXG5cdFx0XHRcdF0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRub2RlTGlzdCA9IGVsZW1lbnRzO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgWy4uLm5vZGVMaXN0XSkge1xuXHRcdFx0XHRpZiAoZmxhZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ESVNBQkxFRCwgXCJcIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVEKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pLFxuXHQpO1xuXG5cdHNlbGYuYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0bmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblx0XHRcdC8vIG5vdCBpbml0aWFsaXNlZFxuXHRcdFx0aWYgKCFoYXNPYmplY3RMaW5rKHNlbGYsIGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gaW5mb3JtIGV2ZXJ5IGVsZW1lbnRcblx0XHRcdGNvbnN0IHVwZGF0ZXJzID0gZ2V0TGlua2VkT2JqZWN0cyhzZWxmLCBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGxpc3Qgb2YgdXBkYXRlcnMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB1cGRhdGVyIG9mIGxpc3QpIHtcblx0XHRcdFx0XHRjb25zdCBkID0gY2xvbmUoc2VsZltpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0pO1xuXHRcdFx0XHRcdE9iamVjdC5hc3NpZ24odXBkYXRlci5nZXRTdWJqZWN0KCksIGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSksXG5cdCk7XG5cblx0Ly8gZGlzYWJsZWRcblx0c2VsZlthdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX0RJU0FCTEVEXSA9ICgpID0+IHtcblx0XHRpZiAoc2VsZi5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVEKSkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb24oQVRUUklCVVRFX0RJU0FCTEVELCB0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZi5zZXRPcHRpb24oQVRUUklCVVRFX0RJU0FCTEVELCB1bmRlZmluZWQpO1xuXHRcdH1cblx0fTtcblxuXHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRzZWxmW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfT1BUSU9OU10gPSAoKSA9PiB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnNGcm9tQXR0cmlidXRlcy5jYWxsKHNlbGYpO1xuXHRcdGlmIChpc09iamVjdChvcHRpb25zKSAmJiBPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRzZWxmLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yXG5cdHNlbGZbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SXSA9ICgpID0+IHtcblx0XHRjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9uc0Zyb21TY3JpcHRUYWcuY2FsbChzZWxmKTtcblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykgJiYgT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID4gMCkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZ2V0T3B0aW9uc0Zyb21TY3JpcHRUYWcoKSB7XG5cdGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IpKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0Y29uc3Qgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0dGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IpLFxuXHQpO1xuXHRpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTFNjcmlwdEVsZW1lbnQpKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHR0aGlzLFxuXHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdGB0aGUgc2VsZWN0b3IgJHtBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUn0gZm9yIG9wdGlvbnMgd2FzIHNwZWNpZmllZCAoJHt0aGlzLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0QVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IsXG5cdFx0XHQpfSkgYnV0IG5vdCBmb3VuZC5gLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0bGV0IG9iaiA9IHt9O1xuXG5cdHRyeSB7XG5cdFx0b2JqID0gcGFyc2VPcHRpb25zSlNPTi5jYWxsKHRoaXMsIG5vZGUudGV4dENvbnRlbnQudHJpbSgpKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0dGhpcyxcblx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRgd2hlbiBhbmFseXppbmcgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgc2NyaXB0IHRhZyB0aGVyZSB3YXMgYW4gZXJyb3IuICR7ZX1gLFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldE9wdGlvbnNGcm9tQXR0cmlidXRlcygpIHtcblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TKSkge1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gcGFyc2VPcHRpb25zSlNPTi5jYWxsKHRoaXMsIHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TKSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdGB0aGUgb3B0aW9ucyBhdHRyaWJ1dGUgJHtBVFRSSUJVVEVfT1BUSU9OU30gZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvbiAoYWN0dWFsOiAke3RoaXMuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdEFUVFJJQlVURV9PUFRJT05TLFxuXHRcdFx0XHQpfSkuJHtlfWAsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7fTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGdpdmVuIEpTT04gZGF0YSBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgVGhlIEpTT04gZGF0YSB0byBiZSBwYXJzZWQuXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBwYXJzZWQgb2JqZWN0LlxuICogQHRocm93cyB7ZXJyb3J9IFRocm93cyBhbiBlcnJvciBpZiB0aGUgSlNPTiBkYXRhIGlzIG5vdCB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VPcHRpb25zSlNPTihkYXRhKSB7XG5cdGxldCBvYmogPSB7fTtcblxuXHRpZiAoIWlzU3RyaW5nKGRhdGEpKSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdC8vIHRoZSBjb25maWd1cmF0aW9uIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBkYXRhIHVybC5cblx0dHJ5IHtcblx0XHRjb25zdCBkYXRhVXJsID0gcGFyc2VEYXRhVVJMKGRhdGEpO1xuXHRcdGRhdGEgPSBkYXRhVXJsLmNvbnRlbnQ7XG5cdH0gY2F0Y2ggKGUpIHt9XG5cblx0dHJ5IHtcblx0XHRvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0dGhyb3cgZTtcblx0fVxuXG5cdHJldHVybiB2YWxpZGF0ZU9iamVjdChvYmopO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtpbml0SHRtbENvbnRlbnR9XG4gKi9cbmZ1bmN0aW9uIGluaXRIdG1sQ29udGVudCgpIHtcblx0dHJ5IHtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IGZpbmREb2N1bWVudFRlbXBsYXRlKHRoaXMuY29uc3RydWN0b3IuZ2V0VGFnKCkpO1xuXHRcdHRoaXMuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGxldCBodG1sID0gdGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZXMubWFpblwiLCBcIlwiKTtcblx0XHRpZiAoaXNTdHJpbmcoaHRtbCkgJiYgaHRtbC5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBtYXBwaW5nID0gdGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZU1hcHBpbmdcIiwge30pO1xuXHRcdFx0aWYgKGlzT2JqZWN0KG1hcHBpbmcpKSB7XG5cdFx0XHRcdGh0bWwgPSBuZXcgRm9ybWF0dGVyKG1hcHBpbmcsIHt9KS5mb3JtYXQoaHRtbCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmlubmVySFRNTCA9IGh0bWw7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE2LjBcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG4gKi9cbmZ1bmN0aW9uIGluaXRDU1NTdHlsZXNoZWV0KCkge1xuXHRpZiAoISh0aGlzLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3Qgc3R5bGVTaGVldCA9IHRoaXMuY29uc3RydWN0b3IuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXG5cdGlmIChzdHlsZVNoZWV0IGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCkge1xuXHRcdGlmIChzdHlsZVNoZWV0LmNzc1J1bGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHMgPSBbc3R5bGVTaGVldF07XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzQXJyYXkoc3R5bGVTaGVldCkpIHtcblx0XHRjb25zdCBhc3NpZ24gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHMgb2Ygc3R5bGVTaGVldCkge1xuXHRcdFx0aWYgKGlzU3RyaW5nKHMpKSB7XG5cdFx0XHRcdGNvbnN0IHRyaW1lZFN0eWxlU2hlZXQgPSBzLnRyaW0oKTtcblx0XHRcdFx0aWYgKHRyaW1lZFN0eWxlU2hlZXQgIT09IFwiXCIpIHtcblx0XHRcdFx0XHRjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblx0XHRcdFx0XHRzdHlsZS5pbm5lckhUTUwgPSB0cmltZWRTdHlsZVNoZWV0O1xuXHRcdFx0XHRcdHRoaXMuc2hhZG93Um9vdC5wcmVwZW5kKHN0eWxlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dmFsaWRhdGVJbnN0YW5jZShzLCBDU1NTdHlsZVNoZWV0KTtcblxuXHRcdFx0aWYgKHMuY3NzUnVsZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRhc3NpZ24ucHVzaChzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYXNzaWduLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHMgPSBhc3NpZ247XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzU3RyaW5nKHN0eWxlU2hlZXQpKSB7XG5cdFx0Y29uc3QgdHJpbWVkU3R5bGVTaGVldCA9IHN0eWxlU2hlZXQudHJpbSgpO1xuXHRcdGlmICh0cmltZWRTdHlsZVNoZWV0ICE9PSBcIlwiKSB7XG5cdFx0XHRjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblx0XHRcdHN0eWxlLmlubmVySFRNTCA9IHN0eWxlU2hlZXQ7XG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3QucHJlcGVuZChzdHlsZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG4gKiBAdGhyb3dzIHtFcnJvcn0gaHRtbCBpcyBub3Qgc2V0LlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9hdHRhY2hTaGFkb3dcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmZ1bmN0aW9uIGluaXRTaGFkb3dSb290KCkge1xuXHRsZXQgdGVtcGxhdGU7XG5cdGxldCBodG1sO1xuXG5cdHRyeSB7XG5cdFx0dGVtcGxhdGUgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZSh0aGlzLmNvbnN0cnVjdG9yLmdldFRhZygpKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGh0bWwgPSB0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlcy5tYWluXCIsIFwiXCIpO1xuXHRcdGlmICghaXNTdHJpbmcoaHRtbCkgfHwgaHRtbCA9PT0gdW5kZWZpbmVkIHx8IGh0bWwgPT09IFwiXCIpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImh0bWwgaXMgbm90IHNldC5cIik7XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5hdHRhY2hTaGFkb3coe1xuXHRcdG1vZGU6IHRoaXMuZ2V0T3B0aW9uKFwic2hhZG93TW9kZVwiLCBcIm9wZW5cIiksXG5cdFx0ZGVsZWdhdGVzRm9jdXM6IHRoaXMuZ2V0T3B0aW9uKFwiZGVsZWdhdGVzRm9jdXNcIiwgdHJ1ZSksXG5cdH0pO1xuXG5cdGlmICh0ZW1wbGF0ZSBpbnN0YW5jZW9mIFRlbXBsYXRlKSB7XG5cdFx0dGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKHRlbXBsYXRlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb25zdCBtYXBwaW5nID0gdGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZU1hcHBpbmdcIiwge30pO1xuXHRpZiAoaXNPYmplY3QobWFwcGluZykpIHtcblx0XHRjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKG1hcHBpbmcpO1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlRm9ybWF0dGVyLm1hcmtlci5vcGVuXCIpICE9PSBudWxsKSB7XG5cdFx0XHRmb3JtYXR0ZXIuc2V0TWFya2VyKFxuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlRm9ybWF0dGVyLm1hcmtlci5vcGVuXCIpLFxuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlRm9ybWF0dGVyLm1hcmtlci5jbG9zZVwiKSxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGh0bWwgPSBmb3JtYXR0ZXIuZm9ybWF0KGh0bWwpO1xuXHR9XG5cblx0dGhpcy5zaGFkb3dSb290LmlubmVySFRNTCA9IGh0bWw7XG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHJlZ2lzdGVycyBhIG5ldyBlbGVtZW50LiBUaGUgc3RyaW5nIHJldHVybmVkIGJ5IGBDdXN0b21FbGVtZW50LmdldFRhZygpYCBpcyB1c2VkIGFzIHRoZSB0YWcuXG4gKlxuICogQHBhcmFtIHtDdXN0b21FbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtET01FeGNlcHRpb259IEZhaWxlZCB0byBleGVjdXRlICdkZWZpbmUnIG9uICdDdXN0b21FbGVtZW50UmVnaXN0cnknOiBpcyBub3QgYSB2YWxpZCBjdXN0b20gZWxlbWVudCBuYW1lXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChlbGVtZW50KSB7XG5cdHZhbGlkYXRlRnVuY3Rpb24oZWxlbWVudCk7XG5cdGNvbnN0IGN1c3RvbUVsZW1lbnRzID0gZ2V0R2xvYmFsT2JqZWN0KFwiY3VzdG9tRWxlbWVudHNcIik7XG5cdGlmIChjdXN0b21FbGVtZW50cyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiY3VzdG9tRWxlbWVudHMgaXMgbm90IHN1cHBvcnRlZC5cIik7XG5cdH1cblxuXHRjb25zdCB0YWcgPSBlbGVtZW50Py5nZXRUYWcoKTtcblx0aWYgKCFpc1N0cmluZyh0YWcpIHx8IHRhZyA9PT0gXCJcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRhZyBpcyBub3Qgc2V0LlwiKTtcblx0fVxuXG5cdGlmIChjdXN0b21FbGVtZW50cy5nZXQodGFnKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHRhZywgZWxlbWVudCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuZXhwb3J0IHsgcmFuZG9tIH07XG5cbi8qKlxuICogdGhpcyBmdW5jdGlvbiB1c2VzIGNyeXB0IGFuZCByZXR1cm5zIGEgcmFuZG9tIG51bWJlci5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbWluIHN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBkZWZpbml0aW9uIHNldCAoZGVmYXVsdCBpcyAwKVxuICogQHBhcmFtIHtudW1iZXJ9IG1heCBlbmQgdmFsdWUgb2YgdGhlIGRlZmluaXRpb24gc2V0IChkZWZhdWx0IGlzIDEwMDAwMDAwMDApXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBjcnlwdFxuICogQHRocm93cyB7RXJyb3J9IHdlIGNhbm5vdCBnZW5lcmF0ZSBudW1iZXJzIGxhcmdlciB0aGFuIDUzIGJpdHMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGRpc3RhbmNlIGlzIHRvbyBzbWFsbCB0byBjcmVhdGUgYSByYW5kb20gbnVtYmVyLlxuXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gcmFuZG9tKG1pbiwgbWF4KSB7XG5cdGlmIChtaW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdG1pbiA9IDA7XG5cdH1cblx0aWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0bWF4ID0gTUFYO1xuXHR9XG5cblx0aWYgKG1heCA8IG1pbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm1heCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW5cIik7XG5cdH1cblxuXHRyZXR1cm4gTWF0aC5yb3VuZChjcmVhdGUobWluLCBtYXgpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgTUFYID0gMTAwMDAwMDAwMDtcblxuTWF0aC5sb2cyID1cblx0TWF0aC5sb2cyIHx8XG5cdGZ1bmN0aW9uIChuKSB7XG5cdFx0cmV0dXJuIE1hdGgubG9nKG4pIC8gTWF0aC5sb2coMik7XG5cdH07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBjcnlwdFxuICogQHRocm93cyB7RXJyb3J9IHdlIGNhbm5vdCBnZW5lcmF0ZSBudW1iZXJzIGxhcmdlciB0aGFuIDUzIGJpdHMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGRpc3RhbmNlIGlzIHRvbyBzbWFsbCB0byBjcmVhdGUgYSByYW5kb20gbnVtYmVyLlxuICovXG5mdW5jdGlvbiBjcmVhdGUobWluLCBtYXgpIHtcblx0Y29uc3QgZ2xvYmFsUmVmZXJlbmNlID0gZ2V0R2xvYmFsKCk7XG5cblx0Y29uc3QgY3J5cHQgPVxuXHRcdGdsb2JhbFJlZmVyZW5jZT8uW1wiY3J5cHRvXCJdIHx8XG5cdFx0Z2xvYmFsUmVmZXJlbmNlPy5bXCJtc0NyeXB0b1wiXSB8fFxuXHRcdGdsb2JhbFJlZmVyZW5jZT8uW1wiY3J5cHRvXCJdIHx8XG5cdFx0dW5kZWZpbmVkO1xuXG5cdGlmICh0eXBlb2YgY3J5cHQgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGNyeXB0XCIpO1xuXHR9XG5cblx0bGV0IHJ2YWwgPSAwO1xuXHRjb25zdCByYW5nZSA9IG1heCAtIG1pbjtcblx0aWYgKHJhbmdlIDwgMikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBkaXN0YW5jZSBpcyB0b28gc21hbGwgdG8gY3JlYXRlIGEgcmFuZG9tIG51bWJlci5cIik7XG5cdH1cblxuXHRjb25zdCBiaXRzTmVlZGVkID0gTWF0aC5jZWlsKE1hdGgubG9nMihyYW5nZSkpO1xuXHRpZiAoYml0c05lZWRlZCA+IDUzKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwid2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy5cIik7XG5cdH1cblx0Y29uc3QgYnl0ZXNOZWVkZWQgPSBNYXRoLmNlaWwoYml0c05lZWRlZCAvIDgpO1xuXHRjb25zdCBtYXNrID0gTWF0aC5wb3coMiwgYml0c05lZWRlZCkgLSAxO1xuXG5cdGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzTmVlZGVkKTtcblx0Y3J5cHQuZ2V0UmFuZG9tVmFsdWVzKGJ5dGVBcnJheSk7XG5cblx0bGV0IHAgPSAoYnl0ZXNOZWVkZWQgLSAxKSAqIDg7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXNOZWVkZWQ7IGkrKykge1xuXHRcdHJ2YWwgKz0gYnl0ZUFycmF5W2ldICogTWF0aC5wb3coMiwgcCk7XG5cdFx0cCAtPSA4O1xuXHR9XG5cblx0cnZhbCA9IHJ2YWwgJiBtYXNrO1xuXG5cdGlmIChydmFsID49IHJhbmdlKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZShtaW4sIG1heCk7XG5cdH1cblxuXHRpZiAocnZhbCA8IG1pbikge1xuXHRcdHJ2YWwgKz0gbWluO1xuXHR9XG5cblx0cmV0dXJuIHJ2YWw7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUZ1bmN0aW9uLCB2YWxpZGF0ZUludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IERlYWRNYW5zU3dpdGNoIH07XG5cbi8qKlxuICogVGhlIGRlYWQgbWFuJ3Mgc3dpdGNoIGFsbG93cyBzZXR0aW5nIGEgdGltZXIgd2hpY2ggY2FuIGJlIHJlc2V0IGFnYWluXG4gKiBhbmQgYWdhaW4gd2l0aGluIGEgZGVmaW5lZCBwZXJpb2Qgb2YgdGltZS5cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZS91dGlsL2RlYWRtYW5zc3dpdGNoL3NpbXBsZS8gU2ltcGxlIGV4YW1wbGVcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI5LjBcbiAqIEBzdW1tYXJ5IENsYXNzIHRvIGJlIGFibGUgdG8gZXhlY3V0ZSBmdW5jdGlvbiBjaGFpbnNcbiAqL1xuY2xhc3MgRGVhZE1hbnNTd2l0Y2ggZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIENyZWF0ZSBuZXcgZGVhZCBtYW4ncyBzd2l0Y2hcblx0ICpcblx0ICogQHBhcmFtIHtJbnRlZ2VyfSBkZWxheVxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAdGhyb3cge1R5cGVFcnJvcn0gdGhlIGFyZ3VtZW50cyBtdXN0IGJlIGVpdGhlciBpbnRlZ2VyIG9yIGZ1bmN0aW9uc1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihkZWxheSwgY2FsbGJhY2spIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aW5pdC5jYWxsKHRoaXMsIHZhbGlkYXRlSW50ZWdlcihkZWxheSksIHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2spKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gZGVsYXlcblx0ICogQHJldHVybnMge0RlYWRNYW5zU3dpdGNofVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gaGFzIGFscmVhZHkgcnVuXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhcmd1bWVudFxuXHQgKi9cblx0dG91Y2goZGVsYXkpIHtcblx0XHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJpc0FscmVhZHlSdW5cIl0gPT09IHRydWUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImhhcyBhbHJlYWR5IHJ1blwiKTtcblx0XHR9XG5cblx0XHRpZiAoaXNJbnRlZ2VyKGRlbGF5KSkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJkZWxheVwiXSA9IGRlbGF5O1xuXHRcdH0gZWxzZSBpZiAoZGVsYXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgYXJndW1lbnRcIik7XG5cdFx0fVxuXG5cdFx0Y2xlYXJUaW1lb3V0KHRoaXNbaW50ZXJuYWxTeW1ib2xdW1widGltZXJcIl0pO1xuXHRcdGluaXRDYWxsYmFjay5jYWxsKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IGhhcyBhbHJlYWR5IHJ1blxuXHQgKiBAcmV0dXJucyB7RGVhZE1hbnNTd2l0Y2h9XG5cdCAqL1xuXHRkZWZ1c2UoKSB7XG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiaXNBbHJlYWR5UnVuXCJdID09PSB0cnVlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJoYXMgYWxyZWFkeSBydW5cIik7XG5cdFx0fVxuXG5cdFx0Y2xlYXJUaW1lb3V0KHRoaXNbaW50ZXJuYWxTeW1ib2xdW1widGltZXJcIl0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdENhbGxiYWNrKCkge1xuXHR0aGlzW2ludGVybmFsU3ltYm9sXVtcInRpbWVyXCJdID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJpc0FscmVhZHlSdW5cIl0gPSB0cnVlO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiY2FsbGJhY2tcIl0oKTtcblx0fSwgdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJkZWxheVwiXSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7aW50ZWdlcn0gZGVsYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmZ1bmN0aW9uIGluaXQoZGVsYXksIGNhbGxiYWNrKSB7XG5cdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdGNhbGxiYWNrLFxuXHRcdGRlbGF5LFxuXHRcdGlzQWxyZWFkeVJ1bjogZmFsc2UsXG5cdFx0dGltZXI6IHVuZGVmaW5lZCxcblx0fTtcblxuXHRpbml0Q2FsbGJhY2suY2FsbCh0aGlzKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUZ1bmN0aW9uLCB2YWxpZGF0ZUludGVnZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IENhbGxiYWNrIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQ2FsbGJhY2sge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHBhcmFtIHtpbnR8dW5kZWZpbmVkfSB0aW1lXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Y29uc3RydWN0b3IoY2FsbGJhY2ssIHRpbWUpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdGNhbGxiYWNrOiB2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKSxcblx0XHRcdHRpbWU6IHZhbGlkYXRlSW50ZWdlcih0aW1lID8/IDApLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtICB7Kn0gZGF0YVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cnVuKGRhdGEpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Z2V0R2xvYmFsRnVuY3Rpb24oXCJzZXRUaW1lb3V0XCIpKCgpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRyZXNvbHZlKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrKGRhdGEpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgdGhpc1tpbnRlcm5hbFN5bWJvbF0udGltZSk7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc0ludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCIuLi90eXBlcy9xdWV1ZS5tanNcIjtcbmltcG9ydCB7IENhbGxiYWNrIH0gZnJvbSBcIi4vcHJvY2Vzc2luZy9jYWxsYmFjay5tanNcIjtcblxuZXhwb3J0IHsgUHJvY2Vzc2luZyB9O1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgYWxsb3dzIGV4ZWN1dGluZyBzZXZlcmFsIGZ1bmN0aW9ucyBpbiBvcmRlci5cbiAqXG4gKiBGdW5jdGlvbnMgYW5kIHRpbWVvdXRzIGNhbiBiZSBwYXNzZWQuIElmIGEgdGltZW91dCBpcyBwYXNzZWQsIGl0IGFwcGxpZXMgdG8gYWxsIGZ1cnRoZXIgZnVuY3Rpb25zLlxuICogSW4gdGhlIGV4YW1wbGVcbiAqXG4gKiBgdGltZW91dDEsIGZ1bmN0aW9uMSwgZnVuY3Rpb24yLCBmdW5jdGlvbjMsIHRpbWVvdXQyLCBmdW5jdGlvbjRgXG4gKlxuICogdGhlIHRpbWVvdXQxIGlzIHZhbGlkIGZvciB0aGUgZnVuY3Rpb25zIDEsIDIgYW5kIDMgYW5kIHRoZSB0aW1lb3V0MiBmb3IgdGhlIGZ1bmN0aW9uNC5cbiAqXG4gKiBTbyB0aGUgZXhlY3V0aW9uIHRpbWUgaXMgdGltZW91dDErdGltZW91dDErdGltZW91dDErdGltZW91dDJcbiAqXG4gKiBUaGUgcmVzdWx0IG9mIGBydW4oKWAgaXMgYSBwcm9taXNlLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvdXRpbC9wcm9jZXNzaW5nL3NpbXBsZS8gQSBzaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIxLjBcbiAqIEBzdW1tYXJ5IENsYXNzIHRvIGJlIGFibGUgdG8gZXhlY3V0ZSBmdW5jdGlvbiBjaGFpbnNcbiAqL1xuY2xhc3MgUHJvY2Vzc2luZyBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQ3JlYXRlIG5ldyBQcm9jZXNzaW5nXG5cdCAqXG5cdCAqIEZ1bmN0aW9ucyBhbmQgdGltZW91dHMgY2FuIGJlIHBhc3NlZC4gSWYgYSB0aW1lb3V0IGlzIHBhc3NlZCwgaXQgYXBwbGllcyB0byBhbGwgZnVydGhlciBmdW5jdGlvbnMuXG5cdCAqIEluIHRoZSBleGFtcGxlXG5cdCAqXG5cdCAqIGB0aW1lb3V0MSwgZnVuY3Rpb24xLCBmdW5jdGlvbjIsIGZ1bmN0aW9uMywgdGltZW91dDIsIGZ1bmN0aW9uNGBcblx0ICpcblx0ICogdGhlIHRpbWVvdXQxIGlzIHZhbGlkIGZvciB0aGUgZnVuY3Rpb25zIDEsIDIgYW5kIDMgYW5kIHRoZSB0aW1lb3V0MiBmb3IgdGhlIGZ1bmN0aW9uNC5cblx0ICpcblx0ICogU28gdGhlIGV4ZWN1dGlvbiB0aW1lIGlzIHRpbWVvdXQxK3RpbWVvdXQxK3RpbWVvdXQxK3RpbWVvdXQyXG5cdCAqXG5cdCAqIEB0aHJvdyB7VHlwZUVycm9yfSB0aGUgYXJndW1lbnRzIG11c3QgYmUgZWl0aGVyIGludGVnZXIgb3IgZnVuY3Rpb25zXG5cdCAqIEBwYXJhbSB7Li4uKGludHxmdW5jdGlvbil9IGFyZ3Ncblx0ICovXG5cdGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRxdWV1ZTogbmV3IFF1ZXVlKCksXG5cdFx0fTtcblxuXHRcdGxldCB0aW1lID0gMDtcblxuXHRcdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidGhlIGFyZ3VtZW50cyBtdXN0IGJlIGVpdGhlciBpbnRlZ2VyIG9yIGZ1bmN0aW9uc1wiKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFssIGFyZ10gb2YgT2JqZWN0LmVudHJpZXMoYXJncykpIHtcblx0XHRcdGlmIChpc0ludGVnZXIoYXJnKSAmJiBhcmcgPj0gMCkge1xuXHRcdFx0XHR0aW1lID0gYXJnO1xuXHRcdFx0fSBlbHNlIGlmIChpc0Z1bmN0aW9uKGFyZykpIHtcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ucXVldWUuYWRkKG5ldyBDYWxsYmFjayhhcmcsIHRpbWUpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcdFx0XCJ0aGUgYXJndW1lbnRzIG11c3QgYmUgZWl0aGVyIGludGVnZXIgb3IgZnVuY3Rpb25zXCIsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBmdW5jdGlvbiB3aXRoIHRoZSBkZXNpcmVkIHRpbWVvdXRcblx0ICogSWYgbm8gdGltZW91dCBpcyBzcGVjaWZpZWQsIHRoZSB0aW1lb3V0IG9mIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBpcyB1c2VkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0ge2ludHx1bmRlZmluZWR9IHRpbWVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqL1xuXHRhZGQoY2FsbGJhY2ssIHRpbWUpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5xdWV1ZS5hZGQobmV3IENhbGxiYWNrKGNhbGxiYWNrLCB0aW1lKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIGRlZmluZWQgZnVuY3Rpb25zIGluIG9yZGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGRhdGFcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHJ1bihkYXRhKSB7XG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdLnF1ZXVlLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhKTtcblx0XHR9XG5cblx0XHRjb25zdCBjYWxsYmFjayA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLnF1ZXVlLnBvbGwoKTtcblxuXHRcdGlmIChjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRhdGEpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjYWxsYmFjay5ydW4oZGF0YSkudGhlbigocmVzdWx0KSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5ydW4ocmVzdWx0KTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEFUVFJJQlVURV9QUkVGSVggfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuLyoqXG4gKiBAc2luY2UgMS4wLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyA9IFwiYmxvY2tcIjtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXVybGAgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGUgY29udHJvbC5cbiAqXG4gKiBAc2luY2UgMS4wLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX1VSTCA9IGAke0FUVFJJQlVURV9QUkVGSVh9dXJsYDtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXJlbG9hZGAgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgcmVsb2FkLlxuICpcbiAqIHZhbGlkIHZhbHVlczogb25zaG93XG4gKlxuICogQHNpbmNlIDEuMTEuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0ZPUk1fUkVMT0FEID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yZWxvYWRgO1xuXG4vKipcbiAqIGBkYXRhLW1vbnN0ZXItaW50ZW5kYFxuICpcbiAqIEBzaW5jZSAxLjkuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX1ZJU0lCSUxJVFkgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXZpc2liaWxpdHlgO1xuLyoqXG4gKiBgZGF0YS1tb25zdGVyLWludGVuZGBcbiAqXG4gKiBAc2luY2UgMS45LjBcbiAqIEBkZXByZWNhdGVkIHNpbmNlIDMuMzIuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0JVVFRPTl9DTEFTUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWNsYXNzYDtcblxuLyoqXG4gKiBgZGF0YS1tb25zdGVyLWludGVuZGBcbiAqXG4gKiBAc2luY2UgMS44LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JTlRFTkQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWludGVuZGA7XG5cbi8qKlxuICogYGRhdGEtbW9uc3Rlci1oYXMtY2hpbGRyZW5gXG4gKlxuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfSEFTX0NISUxEUkVOID0gYCR7QVRUUklCVVRFX1BSRUZJWH1oYXMtY2hpbGRyZW5gO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZWAgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIGRhdGFzb3VyY2UuXG4gKlxuICogQHNpbmNlIDEuNi4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1kYXRhc291cmNlYDtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLWRhdGFzb3VyY2UtYXJndW1lbnRzYCBjYW4gYmUgdXNlZCB0byBwYXNzIGFyZ3VtZW50cy5cbiAqXG4gKiBAc2luY2UgMS42LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0VfQVJHVU1FTlRTID0gYCR7QVRUUklCVVRFX1BSRUZJWH1kYXRhc291cmNlLWFyZ3VtZW50c2A7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1idXR0b24tbGFiZWxgIGNhbiBiZSB1c2VkIHRvIHBhc3MgbGFiZWxzLlxuICpcbiAqIEBzaW5jZSAxLjYuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0JVVFRPTl9MQUJFTCA9IGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWxhYmVsYDtcblxuZXhwb3J0IHtcblx0QVRUUklCVVRFX0JVVFRPTl9MQUJFTCxcblx0U1RZTEVfRElTUExBWV9NT0RFX0JMT0NLLFxuXHRBVFRSSUJVVEVfRk9STV9VUkwsXG5cdEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0UsXG5cdEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0VfQVJHVU1FTlRTLFxuXHRBVFRSSUJVVEVfSU5URU5ELFxuXHRBVFRSSUJVVEVfVklTSUJJTElUWSxcblx0QVRUUklCVVRFX0ZPUk1fUkVMT0FELFxuXHRBVFRSSUJVVEVfSEFTX0NISUxEUkVOLFxuXHRBVFRSSUJVVEVfQlVUVE9OX0NMQVNTLFxufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBUYWJzU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgVGFic1N0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRUYWJzU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciB0YWJzIHsgXG46YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlOlxcXCJDb25zb2xhc1xcXCIsXFxcIkNvdXJpZXIgTmV3XFxcIixcXFwiUm9ib3RvIE1vbm9cXFwiLFxcXCJTb3VyY2UgQ29kZSBQcm9cXFwiLFxcXCJGaXJhIE1vbm9cXFwiLG1vbm9zcGFjZTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTYpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoOjJweDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDozcHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweDstLW1vbnN0ZXItZHJhZ2dlci13aWR0aDoycHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoOjRweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0OjUwcHh9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLWJvcmRlci1jb2xvci0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0xKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTF7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLWNvbG9yLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMil9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLXRoZW1lLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMil9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ye2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTMpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtM3tjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLWJvcmRlci1jb2xvci00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci00KX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTR7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLWNvbG9yLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtZWxlbWVudCwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtYmFja2dyb3VuZC1pbmhlcml0e2JhY2tncm91bmQtY29sb3I6aW5oZXJpdCFpbXBvcnRhbnR9Lm1vbnN0ZXItdGhlbWUtb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1vZmZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3IpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtwYWRkaW5nOjEuMWVtO3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1bZGF0YS1wb3BwZXItYXJyb3ddLFtkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JhY2tncm91bmQ6aW5oZXJpdDtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xKnZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEqdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpfVtkYXRhLXBvcHBlci1hcnJvd117dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2NvbnRlbnQ6XFxcIlxcXCI7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7dmlzaWJpbGl0eTp2aXNpYmxlfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXRvcF0+W2RhdGEtcG9wcGVyLWFycm93XXtib3R0b206Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKS8yKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj10b3BdPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWxlZnQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci10b3A6dHJhbnNwYXJlbnR9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49Ym90dG9tXT5bZGF0YS1wb3BwZXItYXJyb3dde3RvcDpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1ib3R0b21dPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJpZ2h0OnRyYW5zcGFyZW50O2JvcmRlci10b3A6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49bGVmdF0+W2RhdGEtcG9wcGVyLWFycm93XXtyaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1sZWZ0XT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItdG9wOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXJpZ2h0XT5bZGF0YS1wb3BwZXItYXJyb3dde2xlZnQ6Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKS8yKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1yaWdodF0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItbGVmdDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmlnaHQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDp0cmFuc3BhcmVudH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfS5tb25zdGVyLWJhZGdlLXByaW1hcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXByaW1hcnksLm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnksLm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnksLm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZle3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZSwubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzc3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2VzcywubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5ne3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLC5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWVycm9ye3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1lcnJvciwubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uLmhpZGRlbntkaXNwbGF5Om5vbmV9bmF2W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl17YWxpZ24taXRlbXM6ZmxleC1lbmQ7Ym9yZGVyLWJvdHRvbS1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLWJvdHRvbS13aWR0aDp0aGluO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7bWFyZ2luLWJvdHRvbTouNzVyZW07b3ZlcmZsb3c6aGlkZGVufVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbiAucmVtb3ZlLXRhYnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7YmFja2dyb3VuZC1wb3NpdGlvbjoxMDAlIDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZToxNnB4O2ZsZXgtd3JhcDpub3dyYXA7aGVpZ2h0OjE2cHg7bWluLWhlaWdodDoxNnB4O29yZGVyOjI7d2lkdGg6MTZweH1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b24gc3BhbntkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNDt3aGl0ZS1zcGFjZTpwcmV9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9ue2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1zZWxmOnN0cmV0Y2g7Ym9yZGVyOm5vbmU7Ym9yZGVyLWJvdHRvbTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTttYXJnaW4tcmlnaHQ6Ljc1cmVtO291dGxpbmU6bm9uZTtwYWRkaW5nOi4zNzVyZW0gMDt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt0cmFuc2l0aW9uOmNvbG9yIC44czstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7Ym9yZGVyLWJvdHRvbS1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV0sW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdOm5vdChbZGlzYWJsZWRdKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWJvdHRvbS1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKSFpbXBvcnRhbnR9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXtbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV0sW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdOm5vdChbZGlzYWJsZWRdKTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMikhaW1wb3J0YW50fX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGlzYWJsZWRde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKTtjdXJzb3I6bm90LWFsbG93ZWR9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1yb2xlPXN3aXRjaF17YWxpZ24tc2VsZjpjZW50ZXI7Ym9yZGVyOjA7b3JkZXI6Mjt0b3VjaC1hY3Rpb246bm9uZX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXJvbGU9c3dpdGNoXTpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7Ym9yZGVyLWJvdHRvbS13aWR0aDowfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbiBpbWd7aGVpZ2h0OjEuM3JlbTttYXJnaW4tbGVmdDouNHJlbTt3aWR0aDoxLjNyZW19OjpzbG90dGVkKDpub3QoW3Nsb3RdKTpub3QoLmFjdGl2ZSkpe2Rpc3BsYXk6bm9uZX06OnNsb3R0ZWQoKil7YWxpZ24tc2VsZjpjZW50ZXJ9OjpzbG90dGVkKFtzbG90XSl7Ym9yZGVyLWJvdHRvbS1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9OjpzbG90dGVkKFtzbG90PXN0YXJ0XSl7bWFyZ2luLXJpZ2h0Oi43NXJlbTtvcmRlcjowfTo6c2xvdHRlZChbc2xvdD1lbmRdKXttYXJnaW4tbGVmdDouNzVyZW07b3JkZXI6M31bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uOm5vdChbZGlzYWJsZWRdKXtib3JkZXI6MDtqdXN0aWZ5LWNvbnRlbnQ6bGVmdDtwYWRkaW5nLWxlZnQ6MTVweDtwYWRkaW5nLXJpZ2h0OjE1cHg7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uOmhvdmVyLFtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV0sW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXTpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7Ym9yZGVyOjB9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXtbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdLFtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV06bm90KFtkaXNhYmxlZF0pOmhvdmVye2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpIWltcG9ydGFudH19IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZnVuY3Rpb24gZmluZFNoYWRvd1Jvb3QoZWxlbWVudCkge1xuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHJldHVybiBlbGVtZW50O1xuXHRpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkgcmV0dXJuIG51bGw7XG5cdHJldHVybiBmaW5kU2hhZG93Um9vdChlbGVtZW50LnBhcmVudE5vZGUpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgZmV0Y2ggb3B0aW9uc1xuICogQHBhcmFtIHtPYmplY3R9IGZpbHRlciBmZXRjaCBvcHRpb25zXG4gKiBAcmV0dXJuIHtQcm9taXNlPE9iamVjdD59XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gY2xpZW50IGVycm9yXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gbG9hZEFuZEFzc2lnbkNvbnRlbnQoZWxlbWVudCwgdXJsLCBvcHRpb25zLCBmaWx0ZXIpIHtcblx0cmV0dXJuIGxvYWRDb250ZW50KHVybCwgb3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHRsZXQgY29udGVudCA9IHJlc3BvbnNlLmNvbnRlbnQ7XG5cblx0XHRpZiAoaXNTdHJpbmcoZmlsdGVyKSAmJiBmaWx0ZXIgIT09IFwiXCIpIHtcblx0XHRcdGNvbnN0IHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0Y29uc3QgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRjLmlubmVySFRNTCA9IGNvbnRlbnQ7XG5cdFx0XHRmb3IgKGNvbnN0IFssIG5vZGVdIG9mIGMucXVlcnlTZWxlY3RvckFsbChmaWx0ZXIpLmVudHJpZXMoKSkge1xuXHRcdFx0XHR0LmFwcGVuZENoaWxkKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb250ZW50ID0gdC5pbm5lckhUTUw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0dC5pbm5lckhUTUwgPSBjb250ZW50O1xuXG5cdFx0Y29uc3Qgc2NyaXB0cyA9IHQucXVlcnlTZWxlY3RvckFsbChcInNjcmlwdFwiKTtcblx0XHRmb3IgKGNvbnN0IFssIHNjcmlwdF0gb2Ygc2NyaXB0cy5lbnRyaWVzKCkpIHtcblx0XHRcdGNvbnN0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXHRcdFx0cy5pbm5lckhUTUwgPSBzY3JpcHQuaW5uZXJIVE1MO1xuXHRcdFx0aWYgKHNjcmlwdC5zcmMpIHMuc3JjID0gc2NyaXB0LnNyYztcblx0XHRcdGlmIChzY3JpcHQudHlwZSkgcy50eXBlID0gc2NyaXB0LnR5cGU7XG5cdFx0XHRpZiAoc2NyaXB0LmFzeW5jKSBzLmFzeW5jID0gc2NyaXB0LmFzeW5jO1xuXHRcdFx0aWYgKHNjcmlwdC5kZWZlcikgcy5kZWZlciA9IHNjcmlwdC5kZWZlcjtcblx0XHRcdGlmIChzY3JpcHQuY3Jvc3NPcmlnaW4pIHMuY3Jvc3NPcmlnaW4gPSBzY3JpcHQuY3Jvc3NPcmlnaW47XG5cdFx0XHRpZiAoc2NyaXB0LmludGVncml0eSkgcy5pbnRlZ3JpdHkgPSBzY3JpcHQuaW50ZWdyaXR5O1xuXHRcdFx0aWYgKHNjcmlwdC5yZWZlcnJlclBvbGljeSkgcy5yZWZlcnJlclBvbGljeSA9IHNjcmlwdC5yZWZlcnJlclBvbGljeTtcblx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocyk7XG5cdFx0XHR0LnJlbW92ZUNoaWxkKHNjcmlwdCk7XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCkuaW5uZXJIVE1MID0gdC5pbm5lckhUTUw7XG5cblx0XHRjb25zdCByb290ID0gZmluZFNoYWRvd1Jvb3QoZWxlbWVudCk7XG5cdFx0aWYgKHJvb3QgIT09IG51bGwpIHtcblx0XHRcdGVsZW1lbnQgPSByb290Lmhvc3Q7XG5cdFx0fVxuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KGVsZW1lbnQsIFwibW9uc3Rlci1mZXRjaGVkXCIsIHtcblx0XHRcdHVybCxcblx0XHR9KTtcblxuXHRcdHJldHVybiByZXNwb25zZTtcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBmZXRjaCBvcHRpb25zXG4gKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gY2xpZW50IGVycm9yXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBsb2FkQ29udGVudCh1cmwsIG9wdGlvbnMpIHtcblx0aWYgKHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHR9XG5cblx0cmV0dXJuIGZldGNoKHZhbGlkYXRlU3RyaW5nKHVybCksIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0Ly8gVGhlIG9rIHJlYWQtb25seSBwcm9wZXJ0eSBvZiB0aGUgUmVzcG9uc2UgaW50ZXJmYWNlIGNvbnRhaW5zIGFcblx0XHQvLyBCb29sZWFuIHN0YXRpbmcgd2hldGhlciB0aGUgcmVzcG9uc2Ugd2FzIHN1Y2Nlc3NmdWwgKHN0YXR1cyBpbiB0aGUgcmFuZ2UgMjAwLTI5OSkgb3Igbm90LlxuXHRcdGlmIChyZXNwb25zZT8ub2sgIT09IHRydWUpIHtcblx0XHRcdC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Jlc3BvbnNlL3R5cGVcblx0XHRcdGlmIChcblx0XHRcdFx0W1wiZXJyb3JcIiwgXCJvcGFxdWVcIiwgXCJvcGFxdWVyZWRpcmVjdFwiXS5pbmRleE9mKHJlc3BvbnNlPy50eXBlKSAhPT0gLTFcblx0XHRcdCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0YHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YSAoJHtyZXNwb25zZT8udHlwZX0pYCxcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc3RhdHVzQ2xhc3MgPSBgJHtyZXNwb25zZT8uc3RhdHVzfWAuc3Vic3RyaW5nKDAsIDEpO1xuXHRcdFx0c3dpdGNoIChzdGF0dXNDbGFzcykge1xuXHRcdFx0XHRjYXNlIFwiNFwiOlxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY2xpZW50IGVycm9yICR7cmVzcG9uc2U/LnN0YXR1c1RleHR9YCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0YHVuZGVmaW5lZCBzdGF0dXMgKCR7cmVzcG9uc2U/LnN0YXR1c30gLyAke3Jlc3BvbnNlPy5zdGF0dXNUZXh0fSkgb3IgdHlwZSAoJHtyZXNwb25zZT8udHlwZX0pYCxcblx0XHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRyZXNwb25zZVxuXHRcdFx0XHQudGV4dCgpXG5cdFx0XHRcdC50aGVuKChjb250ZW50KSA9PiB7XG5cdFx0XHRcdFx0cmVzb2x2ZSh7XG5cdFx0XHRcdFx0XHRjb250ZW50LFxuXHRcdFx0XHRcdFx0dHlwZTogcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIiksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuZXhwb3J0IHsgbG9hZEFuZEFzc2lnbkNvbnRlbnQsIGxvYWRDb250ZW50IH07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgVGhlbWVTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBUaGVtZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRUaGVtZVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgdGhlbWUgeyBcbi5tb25zdGVyLXRoZW1lLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLWJvcmRlci1jb2xvci0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0xKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTF7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLWNvbG9yLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMil9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLXRoZW1lLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMil9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ye2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTMpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtM3tjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLWJvcmRlci1jb2xvci00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci00KX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTR7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLWNvbG9yLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtZWxlbWVudCwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtYmFja2dyb3VuZC1pbmhlcml0e2JhY2tncm91bmQtY29sb3I6aW5oZXJpdCFpbXBvcnRhbnR9Lm1vbnN0ZXItdGhlbWUtb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1vZmZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3IpfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVCb29sZWFuIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycywgcG9wcGVySW5zdGFuY2VTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVySW5zdGFuY2VTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJJbnN0YW5jZVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMge0N1c3RvbUVsZW1lbnR9XG4gKiBAcGFyYW0ge0Jvb2xlYW59IG1vZGVcbiAqL1xuZnVuY3Rpb24gc2V0RXZlbnRMaXN0ZW5lcnNNb2RpZmllcnMobW9kZSkge1xuXHRjb25zdCBvcHRpb25zID0gZXh0ZW5kKHt9LCB0aGlzLmdldE9wdGlvbihcInBvcHBlclwiKSk7XG5cdGNvbnN0IG1vZGlmaWVycyA9IG9wdGlvbnM/LltcIm1vZGlmaWVyc1wiXTtcblxuXHRpZiAoIWlzQXJyYXkobW9kaWZpZXJzKSkge1xuXHRcdG9wdGlvbnNbXCJtb2RpZmllcnNcIl0gPSBbXTtcblx0fVxuXG5cdGlmIChcblx0XHRvcHRpb25zW1wibW9kaWZpZXJzXCJdLmZpbHRlcigoZW50cnkpID0+IHtcblx0XHRcdGlmIChlbnRyeT8uW1wibmFtZVwiXSA9PT0gXCJldmVudExpc3RlbmVyc1wiKSB7XG5cdFx0XHRcdC8vIHBlcmZvcm1hbmNlIGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3R1dG9yaWFsLyNwZXJmb3JtYW5jZVxuXHRcdFx0XHRlbnRyeVtcImVuYWJsZWRcIl0gPSB2YWxpZGF0ZUJvb2xlYW4obW9kZSk7XG5cdFx0XHR9XG5cdFx0fSkubGVuZ3RoID09PSAwXG5cdCkge1xuXHRcdG9wdGlvbnNbXCJtb2RpZmllcnNcIl0ucHVzaCh7XG5cdFx0XHRuYW1lOiBcImV2ZW50TGlzdGVuZXJzXCIsXG5cdFx0XHRlbmFibGVkOiB2YWxpZGF0ZUJvb2xlYW4obW9kZSksXG5cdFx0fSk7XG5cdH1cblxuXHR0aGlzW3BvcHBlckluc3RhbmNlU3ltYm9sXS5zZXRPcHRpb25zKG9wdGlvbnMpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcHBlciB9IGZyb20gXCJAcG9wcGVyanMvY29yZVwiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi8uLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbixcblx0YWRkVG9PYmplY3RMaW5rLFxuXHRoYXNPYmplY3RMaW5rLFxufSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7XG5cdGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50LFxuXHRmaXJlQ3VzdG9tRXZlbnQsXG59IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyByYW5kb20gfSBmcm9tIFwiLi4vLi4vbWF0aC9yYW5kb20ubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFRva2VuTGlzdCB9IGZyb20gXCIuLi8uLi90eXBlcy90b2tlbmxpc3QubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi8uLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IFByb2Nlc3NpbmcgfSBmcm9tIFwiLi4vLi4vdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0JVVFRPTl9MQUJFTCxcblx0QVRUUklCVVRFX0ZPUk1fUkVMT0FELFxuXHRBVFRSSUJVVEVfRk9STV9VUkwsXG5cdFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyxcbn0gZnJvbSBcIi4uL2Zvcm0vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQgeyBUYWJzU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvdGFicy5tanNcIjtcbmltcG9ydCB7IGxvYWRBbmRBc3NpZ25Db250ZW50IH0gZnJvbSBcIi4uL2Zvcm0vdXRpbC9mZXRjaC5tanNcIjtcbmltcG9ydCB7IFRoZW1lU3R5bGVTaGVldCB9IGZyb20gXCIuLi9zdHlsZXNoZWV0L3RoZW1lLm1qc1wiO1xuaW1wb3J0IHtcblx0cG9wcGVySW5zdGFuY2VTeW1ib2wsXG5cdHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzLFxufSBmcm9tIFwiLi4vZm9ybS91dGlsL3BvcHBlci5tanNcIjtcblxuZXhwb3J0IHsgVGFicyB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyTmF2RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlck5hdkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG5hdkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJuYXZFbGVtZW50XCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3dpdGNoRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInN3aXRjaEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNoYW5nZVRhYkV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNoYW5nZVRhYkV2ZW50SGFuZGxlclwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlbW92ZVRhYkV2ZW50SGFuZGxlciA9IFN5bWJvbChcInJlbW92ZVRhYkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwicG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG11dGF0aW9uT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJtdXRhdGlvbk9ic2VydmVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkaW1lbnNpb25zU3ltYm9sID0gU3ltYm9sKFwiZGltZW5zaW9uc1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBBIFRhYnMgQ29udHJvbFxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2xheW91dC90YWJzL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC90YWJzLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAzLjc0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIHRhYiBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKi9cbmNsYXNzIFRhYnMgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvbGF5b3V0L3RhYnNcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsYWJlbHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5uZXctdGFiLWxhYmVsPVwiTmV3IFRhYlwiXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlc1xuXHQgKiBAcHJvcGVydHkge251bWJlcn0gZmVhdHVyZXMub3BlbkRlbGF5PTUwMCBPcGVuIGRlbGF5IGluIG1pbGxpc2Vjb25kc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2ggRmV0Y2ggW3NlZSBVc2luZyBGZXRjaCBtb3ppbGxhLm9yZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSS9Vc2luZ19GZXRjaClcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZGlyZWN0PWVycm9yXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2guaGVhZGVycz17XCJhY2NlcHRcIjpcInRleHQvaHRtbFwifX1cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHBvcHBlciBbUG9wcGVySlMgT3B0aW9uc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcG9wcGVyLnBsYWNlbWVudD1ib3R0b20gUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0W119IG1vZGlmaWVycz17bmFtZTpvZmZzZXR9IFBvcHBlckpTIHBsYWNlbWVudFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdFwibmV3LXRhYi1sYWJlbFwiOiBcIk5ldyBUYWJcIixcblx0XHRcdH0sXG5cdFx0XHRidXR0b25zOiB7XG5cdFx0XHRcdHN0YW5kYXJkOiBbXSxcblx0XHRcdFx0cG9wcGVyOiBbXSxcblx0XHRcdH0sXG5cdFx0XHRmZXRjaDoge1xuXHRcdFx0XHRyZWRpcmVjdDogXCJlcnJvclwiLFxuXHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdGFjY2VwdDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdG9wZW5EZWxheTogbnVsbCxcblx0XHRcdH0sXG5cblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xXCIsXG5cdFx0XHRcdHBvcHBlcjogXCJtb25zdGVyLXRoZW1lLXByaW1hcnktMVwiLFxuXHRcdFx0XHRuYXZpZ2F0aW9uOiBcIm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xXCIsXG5cdFx0XHR9LFxuXG5cdFx0XHRwb3BwZXI6IHtcblx0XHRcdFx0cGxhY2VtZW50OiBcImJvdHRvbVwiLFxuXHRcdFx0XHRtb2RpZmllcnM6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiBcIm9mZnNldFwiLFxuXHRcdFx0XHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRcdFx0XHRvZmZzZXQ6IFswLCAyXSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiZXZlbnRMaXN0ZW5lcnNcIixcblx0XHRcdFx0XHRcdGVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cblx0XHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdID0gbmV3IFBhdGhmaW5kZXIoeyBkYXRhOiB7fSB9KTtcblxuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdC8vIHNldHVwIHN0cnVjdHVyZVxuXHRcdGluaXRUYWJCdXR0b25zLmNhbGwodGhpcykudGhlbigoKSA9PiB7XG5cdFx0XHRpbml0UG9wcGVyU3dpdGNoLmNhbGwodGhpcyk7XG5cdFx0XHRpbml0UG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0XHRhdHRhY2hSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHRcdFx0YXR0YWNoVGFiQ2hhbmdlT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1RhYnNTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdGFic1wiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZnVuY3Rpb24gdGhhdCBhY3RpdmF0ZXMgYSB0YWIgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG5hbWUuXG5cdCAqXG5cdCAqIFRoZSB0YWJzIGhhdmUgdG8gYmUgbmFtZWQgd2l0aCB0aGUgYGRhdGEtbW9uc3Rlci1uYW1lYCBhdHRyaWJ1dGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7dHlwZX0gaWRPck5hbWUgLSB0aGUgbmFtZSBvciBpZCBvZiB0aGUgdGFiIHRvIGFjdGl2YXRlXG5cdCAqIEByZXR1cm4ge1RhYnN9IC0gVGhlIGN1cnJlbnQgaW5zdGFuY2Vcblx0ICovXG5cdGFjdGl2ZVRhYihpZE9yTmFtZSkge1xuXHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXG5cdFx0Z2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcykuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0aWYgKGZvdW5kID09PSB0cnVlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLW5hbWVcIikgPT09IGlkT3JOYW1lKSB7XG5cdFx0XHRcdHRoaXMuc2hhZG93Um9vdFxuXHRcdFx0XHRcdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XHRcdFx0YFtkYXRhLW1vbnN0ZXItdGFiLXJlZmVyZW5jZT1cIiR7bm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKX1cIl1gLFxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQuY2xpY2soKTtcblx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSA9PT0gaWRPck5hbWUpIHtcblx0XHRcdFx0dGhpcy5zaGFkb3dSb290XG5cdFx0XHRcdFx0LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdFx0XHRgW2RhdGEtbW9uc3Rlci10YWItcmVmZXJlbmNlPVwiJHtub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpfVwiXWAsXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC5jbGljaygpO1xuXHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmFtZSBvciBpZCBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSB0YWIuXG5cdCAqXG5cdCAqIFRoZSB0YWJzIGhhdmUgdG8gYmUgbmFtZWQgd2l0aCB0aGUgYGRhdGEtbW9uc3Rlci1uYW1lYCBhdHRyaWJ1dGUuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3xudWxsfVxuXHQgKi9cblx0Z2V0QWN0aXZlVGFiKCkge1xuXHRcdGNvbnN0IG5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcyk7XG5cdFx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0XHRpZiAobm9kZS5tYXRjaGVzKFwiLmFjdGl2ZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItbmFtZVwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1uYW1lXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgZG9tIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgZG9tIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRQb3BwZXJTd2l0Y2goKSB7XG5cdGNvbnN0IG5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgYFske0FUVFJJQlVURV9ST0xFfT1cInN3aXRjaFwiXWApOyAvLyBudWxsIFx1MjFBNiBvbmx5IHVubmFtZWQgc2xvdHNcblx0bGV0IHN3aXRjaEJ1dHRvbjtcblx0aWYgKG5vZGVzLnNpemUgPT09IDApIHtcblx0XHRzd2l0Y2hCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuXHRcdHN3aXRjaEJ1dHRvbi5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUsIFwic3dpdGNoXCIpO1xuXHRcdHN3aXRjaEJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJwYXJ0XCIsIFwic3dpdGNoXCIpO1xuXHRcdHN3aXRjaEJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xuXHRcdGNvbnN0IGNsYXNzTGlzdCA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5idXR0b25cIik7XG5cdFx0aWYgKGNsYXNzTGlzdCkge1xuXHRcdFx0c3dpdGNoQnV0dG9uLmNsYXNzTGlzdC5hZGQoY2xhc3NMaXN0KTtcblx0XHR9XG5cdFx0c3dpdGNoQnV0dG9uLmlubmVySFRNTCA9XG5cdFx0XHQnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj48cGF0aCBkPVwiTTkuNSAxM2ExLjUgMS41IDAgMSAxLTMgMCAxLjUgMS41IDAgMCAxIDMgMHptMC01YTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwem0wLTVhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDB6XCIvPjwvc3ZnPic7XG5cdFx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXS5wcmVwZW5kKHN3aXRjaEJ1dHRvbik7XG5cdH0gZWxzZSB7XG5cdFx0c3dpdGNoQnV0dG9uID0gbm9kZXMubmV4dCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW3BvcHBlclN3aXRjaEV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoZXZlbnQsIEFUVFJJQlVURV9ST0xFLCBcInN3aXRjaFwiKTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHtcblx0XHRcdHRvZ2dsZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdH1cblx0fTtcblxuXHRmb3IgKGNvbnN0IHR5cGUgb2YgW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkge1xuXHRcdHN3aXRjaEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbcG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyXSk7XG5cdH1cblxuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdID0gc3dpdGNoQnV0dG9uO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGhpZGVQb3BwZXIoKSB7XG5cdGlmICghdGhpc1twb3BwZXJJbnN0YW5jZVN5bWJvbF0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0Ly8gcGVyZm9ybWFuY2UgaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvdHV0b3JpYWwvI3BlcmZvcm1hbmNlXG5cdHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzLmNhbGwodGhpcywgZmFsc2UpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNob3dQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSztcblx0Ly8gcGVyZm9ybWFuY2UgaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvdHV0b3JpYWwvI3BlcmZvcm1hbmNlXG5cdHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzLmNhbGwodGhpcywgdHJ1ZSk7XG5cblx0dGhpc1twb3BwZXJJbnN0YW5jZVN5bWJvbF0udXBkYXRlKCk7XG5cblx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ2aXNpYmlsaXR5XCIpO1xuXHR9KVxuXHRcdC5ydW4odW5kZWZpbmVkKVxuXHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGVQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdGhpZGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0fSBlbHNlIHtcblx0XHRzaG93UG9wcGVyLmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhdHRhY2hSZXNpemVPYnNlcnZlcigpIHtcblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0aWYgKHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0XHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEuY2FsY3VsYXRlZFwiLCBmYWxzZSk7XG5cdFx0XHRjaGVja0FuZFJlYXJyYW5nZUJ1dHRvbnMuY2FsbCh0aGlzKTtcblx0XHR9KTtcblx0fSk7XG5cblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZSh0aGlzW25hdkVsZW1lbnRTeW1ib2xdKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhdHRhY2hUYWJDaGFuZ2VPYnNlcnZlcigpIHtcblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcblx0XHRsZXQgcnVuVXBkYXRlID0gZmFsc2U7XG5cblx0XHRmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuXHRcdFx0aWYgKG11dGF0aW9uLnR5cGUgPT09IFwiY2hpbGRMaXN0XCIpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoID4gMCB8fFxuXHRcdFx0XHRcdG11dGF0aW9uLnJlbW92ZWROb2Rlcy5sZW5ndGggPiAwXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJ1blVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocnVuVXBkYXRlID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEuY2FsY3VsYXRlZFwiLCBmYWxzZSk7XG5cdFx0XHRpbml0VGFiQnV0dG9ucy5jYWxsKHRoaXMpO1xuXHRcdH1cblx0fSkub2JzZXJ2ZSh0aGlzLCB7XG5cdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQGV4dGVybmFsIFwiZXh0ZXJuYWw6Y3JlYXRlUG9wcGVyXCJcbiAqIEBzZWUge0BsaW5rICBQbHVnaW5zfVxuICovXG5mdW5jdGlvbiBpbml0UG9wcGVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRjb25zdCBvcHRpb25zID0gZXh0ZW5kKHt9LCBzZWxmLmdldE9wdGlvbihcInBvcHBlclwiKSk7XG5cblx0c2VsZltwb3BwZXJJbnN0YW5jZVN5bWJvbF0gPSBjcmVhdGVQb3BwZXIoXG5cdFx0c2VsZltzd2l0Y2hFbGVtZW50U3ltYm9sXSxcblx0XHRzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLFxuXHRcdG9wdGlvbnMsXG5cdCk7XG5cblx0Y29uc3Qgb2JzZXJ2ZXIxID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXHRcdGxldCBydW5VcGRhdGUgPSBmYWxzZTtcblx0XHRmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuXHRcdFx0aWYgKG11dGF0aW9uLnR5cGUgPT09IFwiY2hpbGRMaXN0XCIpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoID4gMCB8fFxuXHRcdFx0XHRcdG11dGF0aW9uLnJlbW92ZWROb2Rlcy5sZW5ndGggPiAwXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJ1blVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocnVuVXBkYXRlID09PSB0cnVlKSB7XG5cdFx0XHRzZWxmW3BvcHBlckluc3RhbmNlU3ltYm9sXS51cGRhdGUoKTtcblx0XHR9XG5cdH0pO1xuXG5cdG9ic2VydmVyMS5vYnNlcnZlKHNlbGZbcG9wcGVyTmF2RWxlbWVudFN5bWJvbF0sIHtcblx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0c3VidHJlZTogdHJ1ZSxcblx0fSk7XG5cblx0cmV0dXJuIHNlbGY7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gc2hvdyhlbGVtZW50KSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGNvbnN0IHJlZmVyZW5jZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9dGFiLXJlZmVyZW5jZWApO1xuXG5cdGNvbnN0IG5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcyk7XG5cdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdGNvbnN0IGlkID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuXHRcdGlmIChpZCA9PT0gcmVmZXJlbmNlKSB7XG5cdFx0XHRub2RlLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cblx0XHRcdGNvbnN0IG9wZW5EZWxheSA9IHBhcnNlSW50KHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMub3BlbkRlbGF5XCIpLCAxMCk7XG5cblx0XHRcdGlmICghaXNOYU4ob3BlbkRlbGF5KSAmJiBvcGVuRGVsYXkgPiAwKSB7XG5cdFx0XHRcdG5vZGUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0bm9kZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XG5cdFx0XHRcdH0sIG9wZW5EZWxheSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGdldCBhbGwgZGF0YS0gZnJvbSBidXR0b24gYW5kIGZpbHRlciBvdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXMgYW5kIGRhdGEtbW9uc3Rlci1pbnNlcnRcblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRcdGNvbnN0IG1hc2sgPSBbXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXNcIixcblx0XHRcdFx0XCJkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZVwiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1zdGF0ZVwiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1idXR0b24tbGFiZWxcIixcblx0XHRcdFx0XCJkYXRhLW1vbnN0ZXItb2JqZWN0bGlua1wiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1yb2xlXCIsXG5cdFx0XHRdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IFssIGF0dHJdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUuYXR0cmlidXRlcykpIHtcblx0XHRcdFx0aWYgKGF0dHIubmFtZS5zdGFydHNXaXRoKFwiZGF0YS1cIikgJiYgbWFzay5pbmRleE9mKGF0dHIubmFtZSkgPT09IC0xKSB7XG5cdFx0XHRcdFx0ZGF0YVthdHRyLm5hbWVdID0gYXR0ci52YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKSkge1xuXHRcdFx0XHRjb25zdCB1cmwgPSBub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQhbm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKSB8fFxuXHRcdFx0XHRcdG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1JFTE9BRCkudG9Mb3dlckNhc2UoKSA9PT0gXCJvbnNob3dcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRub2RlLnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiZmV0Y2hcIiwge30pO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXIgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdGxvYWRBbmRBc3NpZ25Db250ZW50KG5vZGUsIHVybCwgb3B0aW9ucywgZmlsdGVyKVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItdGFiLWNoYW5nZWRcIiwge1xuXHRcdFx0XHRcdFx0XHRyZWZlcmVuY2UsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItdGFiLWNoYW5nZWRcIiwge1xuXHRcdFx0XHRcdHJlZmVyZW5jZSxcblx0XHRcdFx0XHRkYXRhLFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0bm9kZS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN0YW5kYXJkQnV0dG9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiKTtcblx0Zm9yIChjb25zdCBpbmRleCBpbiBzdGFuZGFyZEJ1dHRvbnMpIHtcblx0XHRjb25zdCBidXR0b24gPSBzdGFuZGFyZEJ1dHRvbnNbaW5kZXhdO1xuXHRcdGNvbnN0IHN0YXRlID0gYnV0dG9uW1wicmVmZXJlbmNlXCJdID09PSByZWZlcmVuY2UgPyBcImFjdGl2ZVwiIDogXCJpbmFjdGl2ZVwiO1xuXHRcdHRoaXMuc2V0T3B0aW9uKGBidXR0b25zLnN0YW5kYXJkLiR7aW5kZXh9LnN0YXRlYCwgc3RhdGUpO1xuXHR9XG5cblx0Y29uc3QgcG9wcGVyQnV0dG9uID0gdGhpcy5nZXRPcHRpb24oXCJidXR0b25zLnBvcHBlclwiKTtcblx0Zm9yIChjb25zdCBpbmRleCBpbiBwb3BwZXJCdXR0b24pIHtcblx0XHRjb25zdCBidXR0b24gPSBwb3BwZXJCdXR0b25baW5kZXhdO1xuXHRcdGNvbnN0IHN0YXRlID0gYnV0dG9uW1wicmVmZXJlbmNlXCJdID09PSByZWZlcmVuY2UgPyBcImFjdGl2ZVwiIDogXCJpbmFjdGl2ZVwiO1xuXHRcdHRoaXMuc2V0T3B0aW9uKGBidXR0b25zLnBvcHBlci4ke2luZGV4fS5zdGF0ZWAsIHN0YXRlKTtcblx0fVxuXG5cdGhpZGVQb3BwZXIuY2FsbCh0aGlzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbY2hhbmdlVGFiRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1JPTEUsIFwiYnV0dG9uXCIpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBlbGVtZW50LmRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRzaG93LmNhbGwodGhpcywgZWxlbWVudCk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKiBAZmlyZXMgbW9uc3Rlci10YWItcmVtb3ZlXG5cdCAqL1xuXHR0aGlzW3JlbW92ZVRhYkV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJyZW1vdmUtdGFiXCIsXG5cdFx0KTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IGJ1dHRvbiA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0XHRldmVudCxcblx0XHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcdFwiYnV0dG9uXCIsXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoYnV0dG9uIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQgJiYgYnV0dG9uLmRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRcdGNvbnN0IHJlZmVyZW5jZSA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0YCR7QVRUUklCVVRFX1BSRUZJWH10YWItcmVmZXJlbmNlYCxcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucXVlcnlTZWxlY3RvcihgW2lkPSR7cmVmZXJlbmNlfV1gKTtcblx0XHRcdFx0XHRpZiAoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGNvbnRhaW5lci5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdGluaXRUYWJCdXR0b25zLmNhbGwodGhpcyk7XG5cdFx0XHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLXRhYi1yZW1vdmVcIiwge1xuXHRcdFx0XHRcdFx0XHRyZWZlcmVuY2UsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hcIiwgdGhpc1tjaGFuZ2VUYWJFdmVudEhhbmRsZXJdKTtcblx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpc1tjaGFuZ2VUYWJFdmVudEhhbmRsZXJdKTtcblxuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaFwiLCB0aGlzW3JlbW92ZVRhYkV2ZW50SGFuZGxlcl0pO1xuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzW3JlbW92ZVRhYkV2ZW50SGFuZGxlcl0pO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHBhdGgpKSB7XG5cdFx0XHRpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGlkZVBvcHBlci5jYWxsKHRoaXMpO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb2JzZXJ2ZWROb2RlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFRhYk11dGF0aW9uT2JzZXJ2ZXIob2JzZXJ2ZWROb2RlKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmIChoYXNPYmplY3RMaW5rKG9ic2VydmVkTm9kZSwgbXV0YXRpb25PYnNlcnZlclN5bWJvbCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvKipcblx0ICogdGhpcyBjb25zdHJ1Y3QgbW9uaXRvcnMgYSBub2RlIHdoZXRoZXIgaXQgaXMgZGlzYWJsZWQgb3IgbW9kaWZpZWRcblx0ICogQHR5cGUge011dGF0aW9uT2JzZXJ2ZXJ9XG5cdCAqL1xuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcblx0XHRpZiAoaXNBcnJheShtdXRhdGlvbnMpKSB7XG5cdFx0XHRjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9ucy5wb3AoKTtcblx0XHRcdGlmIChtdXRhdGlvbiBpbnN0YW5jZW9mIE11dGF0aW9uUmVjb3JkKSB7XG5cdFx0XHRcdGluaXRUYWJCdXR0b25zLmNhbGwoc2VsZik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRvYnNlcnZlci5vYnNlcnZlKG9ic2VydmVkTm9kZSwge1xuXHRcdGNoaWxkTGlzdDogZmFsc2UsXG5cdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRzdWJ0cmVlOiBmYWxzZSxcblx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcblx0XHRcdFwiZGlzYWJsZWRcIixcblx0XHRcdEFUVFJJQlVURV9CVVRUT05fTEFCRUwsXG5cdFx0XHRgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1pY29uYCxcblx0XHRdLFxuXHR9KTtcblxuXHRhZGRUb09iamVjdExpbmsob2JzZXJ2ZWROb2RlLCBtdXRhdGlvbk9ic2VydmVyU3ltYm9sLCBvYnNlcnZlcik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRyb2xdYCxcblx0KTtcblx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBuYXZbJHtBVFRSSUJVVEVfUk9MRX09bmF2XWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXBvcHBlcl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlck5hdkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXItbmF2XWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj59XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICpcbiAqL1xuZnVuY3Rpb24gaW5pdFRhYkJ1dHRvbnMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGxldCBhY3RpdmVSZWZlcmVuY2U7XG5cblx0Y29uc3QgZGltZW5zaW9uc0NhbGN1bGF0ZWQgPSB0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShcblx0XHRcImRhdGEuY2FsY3VsYXRlZFwiLFxuXHRcdGZhbHNlLFxuXHQpO1xuXG5cdGNvbnN0IGJ1dHRvbnMgPSBbXTtcblx0Y29uc3Qgbm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzLCB1bmRlZmluZWQsIG51bGwpOyAvLyBudWxsIFx1MjFBNiBvbmx5IHVubmFtZWQgc2xvdHNcblxuXHRmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcblx0XHRpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSBjb250aW51ZTtcblx0XHRsZXQgbGFiZWwgPSBnZXRCdXR0b25MYWJlbC5jYWxsKHRoaXMsIG5vZGUpO1xuXG5cdFx0bGV0IHJlZmVyZW5jZTtcblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoXCJpZFwiKSkge1xuXHRcdFx0cmVmZXJlbmNlID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblx0XHR9XG5cblx0XHRsZXQgZGlzYWJsZWQ7XG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikgfHwgbm9kZS5kaXNhYmxlZCA9PT0gdHJ1ZSkge1xuXHRcdFx0ZGlzYWJsZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICghcmVmZXJlbmNlKSB7XG5cdFx0XHRyZWZlcmVuY2UgPSBuZXcgSUQoXCJ0YWJcIikudG9TdHJpbmcoKTtcblx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgcmVmZXJlbmNlKTtcblx0XHR9XG5cblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24taWNvbmApKSB7XG5cdFx0XHRsYWJlbCA9IGA8c3BhbiBwYXJ0PVwibGFiZWxcIj4ke2xhYmVsfTwvc3Bhbj48aW1nIHBhcnQ9XCJpY29uXCIgc3JjPVwiJHtub2RlLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0YCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24taWNvbmAsXG5cdFx0XHQpfVwiPmA7XG5cdFx0fVxuXG5cdFx0bGV0IHJlbW92ZSA9IGZhbHNlO1xuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShgJHtBVFRSSUJVVEVfUFJFRklYfXJlbW92YWJsZWApKSB7XG5cdFx0XHRyZW1vdmUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChub2RlLm1hdGNoZXMoXCIuYWN0aXZlXCIpID09PSB0cnVlICYmIGRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRub2RlLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdFx0XHRhY3RpdmVSZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3RhdGUgPSBcIlwiO1xuXHRcdGNvbnN0IGNsYXNzZXMgPSBkaW1lbnNpb25zQ2FsY3VsYXRlZCA/IFwiXCIgOiBcImludmlzaWJsZVwiO1xuXG5cdFx0YnV0dG9ucy5wdXNoKHtcblx0XHRcdHJlZmVyZW5jZSxcblx0XHRcdGxhYmVsLFxuXHRcdFx0c3RhdGUsXG5cdFx0XHRjbGFzczogY2xhc3Nlcyxcblx0XHRcdGRpc2FibGVkLFxuXHRcdFx0cmVtb3ZlLFxuXHRcdH0pO1xuXG5cdFx0YXR0YWNoVGFiTXV0YXRpb25PYnNlcnZlci5jYWxsKHRoaXMsIG5vZGUpO1xuXHR9XG5cblx0dGhpcy5zZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIsIGNsb25lKGJ1dHRvbnMpKTtcblx0dGhpcy5zZXRPcHRpb24oXCJidXR0b25zLnBvcHBlclwiLCBbXSk7XG5cdHRoaXMuc2V0T3B0aW9uKFwibWFya2VyXCIsIHJhbmRvbSgpKTtcblxuXHRyZXR1cm4gYWRqdXN0QnV0dG9uVmlzaWJpbGl0eS5jYWxsKHRoaXMpLnRoZW4oKCkgPT4ge1xuXHRcdGlmIChhY3RpdmVSZWZlcmVuY2UpIHtcblx0XHRcdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGJ1dHRvbiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XHRcdGBbJHtBVFRSSUJVVEVfUFJFRklYfXRhYi1yZWZlcmVuY2U9XCIke2FjdGl2ZVJlZmVyZW5jZX1cIl1gLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoYnV0dG9uIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQgJiYgYnV0dG9uLmRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0c2hvdy5jYWxsKHRoaXMsIGJ1dHRvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHRcdC5ydW4odW5kZWZpbmVkKVxuXHRcdFx0XHQudGhlbigoKSA9PiB7fSlcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gY2hlY2tBbmRSZWFycmFuZ2VCdXR0b25zKCkge1xuXHRpZiAodGhpc1tkaW1lbnNpb25zU3ltYm9sXS5nZXRWaWEoXCJkYXRhLmNhbGN1bGF0ZWRcIiwgZmFsc2UpICE9PSB0cnVlKSB7XG5cdFx0Y2FsY3VsYXRlTmF2aWdhdGlvbkJ1dHRvbnNEaW1lbnNpb25zLmNhbGwodGhpcyk7XG5cdH1cblxuXHRyZWFycmFuZ2VCdXR0b25zLmNhbGwodGhpcyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmZ1bmN0aW9uIGFkanVzdEJ1dHRvblZpc2liaWxpdHkoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXHRcdFx0Y29uc3QgZGVmQ291bnQgPSBzZWxmLmdldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIikubGVuZ3RoO1xuXHRcdFx0Y29uc3QgZG9tQ291bnQgPSBzZWxmW25hdkVsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0XHRcdCdidXR0b25bZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIl0nLFxuXHRcdFx0KS5sZW5ndGg7XG5cblx0XHRcdC8vIGluIGRyYXdpbmdcblx0XHRcdGlmIChkZWZDb3VudCAhPT0gZG9tQ291bnQpIHJldHVybjtcblxuXHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXG5cdFx0XHRjaGVja0FuZFJlYXJyYW5nZUJ1dHRvbnMuY2FsbChzZWxmKTtcblxuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXG5cdFx0b2JzZXJ2ZXIub2JzZXJ2ZShzZWxmW25hdkVsZW1lbnRTeW1ib2xdLCB7XG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldERpbVZhbHVlKHZhbHVlKSB7XG5cdGlmIChbdW5kZWZpbmVkLCBudWxsXS5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IHZhbHVlQXNJbnQgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuXG5cdGlmIChpc05hTih2YWx1ZUFzSW50KSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0cmV0dXJuIHZhbHVlQXNJbnQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gY2FsY0JveFdpZHRoKG5vZGUpIHtcblx0Y29uc3QgZGltID0gZ2V0R2xvYmFsKFwid2luZG93XCIpLmdldENvbXB1dGVkU3R5bGUobm9kZSk7XG5cdGNvbnN0IGJvdW5kaW5nID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRyZXR1cm4gKFxuXHRcdGdldERpbVZhbHVlKGRpbVtcImJvcmRlci1sZWZ0LXdpZHRoXCJdKSArXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wicGFkZGluZy1sZWZ0XCJdKSArXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wibWFyZ2luLWxlZnRcIl0pICtcblx0XHRnZXREaW1WYWx1ZShib3VuZGluZ1tcIndpZHRoXCJdKSArXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wiYm9yZGVyLXJpZ2h0LXdpZHRoXCJdKSArXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wibWFyZ2luLXJpZ2h0XCJdKSArXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wicGFkZGluZy1sZWZ0XCJdKVxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHJlYXJyYW5nZUJ1dHRvbnMoKSB7XG5cdGNvbnN0IHN0YW5kYXJkQnV0dG9ucyA9IFtdO1xuXHRjb25zdCBwb3BwZXJCdXR0b25zID0gW107XG5cblx0bGV0IHN1bSA9IDA7XG5cdGNvbnN0IHNwYWNlID0gdGhpc1tkaW1lbnNpb25zU3ltYm9sXS5nZXRWaWEoXCJkYXRhLnNwYWNlXCIpO1xuXG5cdGNvbnN0IGJ1dHRvbnMgPSB0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIik7XG5cdGZvciAoY29uc3QgWywgYnV0dG9uXSBvZiBidXR0b25zLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IHJlZiA9IGJ1dHRvbj8ucmVmZXJlbmNlO1xuXG5cdFx0c3VtICs9IHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uZ2V0VmlhKGBkYXRhLmJ1dHRvbi4ke3JlZn1gKTtcblxuXHRcdGlmIChzdW0gPiBzcGFjZSkge1xuXHRcdFx0cG9wcGVyQnV0dG9ucy5wdXNoKGNsb25lKGJ1dHRvbikpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdGFuZGFyZEJ1dHRvbnMucHVzaChjbG9uZShidXR0b24pKTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIiwgc3RhbmRhcmRCdXR0b25zKTtcblx0dGhpcy5zZXRPcHRpb24oXCJidXR0b25zLnBvcHBlclwiLCBwb3BwZXJCdXR0b25zKTtcblxuXHRpZiAodGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXSkge1xuXHRcdGlmIChwb3BwZXJCdXR0b25zLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZU5hdmlnYXRpb25CdXR0b25zRGltZW5zaW9ucygpIHtcblx0Y29uc3Qgd2lkdGggPSB0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXG5cdGxldCBzdGFydEVuZFdpZHRoID0gMDtcblxuXHRnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzLCB1bmRlZmluZWQsIFwic3RhcnRcIikuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdHN0YXJ0RW5kV2lkdGggKz0gY2FsY0JveFdpZHRoLmNhbGwodGhpcywgbm9kZSk7XG5cdH0pO1xuXG5cdGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIHVuZGVmaW5lZCwgXCJlbmRcIikuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdHN0YXJ0RW5kV2lkdGggKz0gY2FsY0JveFdpZHRoLmNhbGwodGhpcywgbm9kZSk7XG5cdH0pO1xuXG5cdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS5zcGFjZVwiLCB3aWR0aCAtIHN0YXJ0RW5kV2lkdGggLSAyKTtcblx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLnZpc2libGVcIiwgISh3aWR0aCA9PT0gMCkpO1xuXG5cdGNvbnN0IGJ1dHRvbnMgPSB0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIikuY29uY2F0KFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiYnV0dG9ucy5wb3BwZXJcIiksXG5cdCk7XG5cblx0Zm9yIChjb25zdCBbaSwgYnV0dG9uXSBvZiBidXR0b25zLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IHJlZiA9IGJ1dHRvbj8ucmVmZXJlbmNlO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSB0aGlzW25hdkVsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRgOnNjb3BlID4gWyR7QVRUUklCVVRFX1BSRUZJWH10YWItcmVmZXJlbmNlPVwiJHtyZWZ9XCJdYCxcblx0XHQpO1xuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkpIGNvbnRpbnVlO1xuXG5cdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXG5cdFx0XHRgZGF0YS5idXR0b24uJHtyZWZ9YCxcblx0XHRcdGNhbGNCb3hXaWR0aC5jYWxsKHRoaXMsIGVsZW1lbnQpLFxuXHRcdCk7XG5cdFx0YnV0dG9uW1wiY2xhc3NcIl0gPSBuZXcgVG9rZW5MaXN0KGJ1dHRvbltcImNsYXNzXCJdKVxuXHRcdFx0LnJlbW92ZShcImludmlzaWJsZVwiKVxuXHRcdFx0LnRvU3RyaW5nKCk7XG5cdH1cblxuXHRjb25zdCBzbG90cyA9IHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0YG5hdlske0FUVFJJQlVURV9QUkVGSVh9cm9sZT1uYXZdID4gc2xvdC5pbnZpc2libGUsIHNsb3RbJHtBVFRSSUJVVEVfUFJFRklYfXJvbGU9c2xvdF0uaW52aXNpYmxlYCxcblx0KTtcblx0Zm9yIChjb25zdCBbLCBzbG90XSBvZiBzbG90cy5lbnRyaWVzKCkpIHtcblx0XHRzbG90LmNsYXNzTGlzdC5yZW1vdmUoXCJpbnZpc2libGVcIik7XG5cdH1cblxuXHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEuY2FsY3VsYXRlZFwiLCB0cnVlKTtcblx0dGhpcy5zZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIsIGNsb25lKGJ1dHRvbnMpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRCdXR0b25MYWJlbChub2RlKSB7XG5cdGxldCBsYWJlbDtcblx0bGV0IHNldExhYmVsID0gZmFsc2U7XG5cdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMKSkge1xuXHRcdGxhYmVsID0gbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCk7XG5cdH0gZWxzZSB7XG5cdFx0bGFiZWwgPSBub2RlLmlubmVyVGV4dDtcblx0XHRzZXRMYWJlbCA9IHRydWU7XG5cdH1cblxuXHRpZiAoIWlzU3RyaW5nKGxhYmVsKSkge1xuXHRcdGxhYmVsID0gXCJcIjtcblx0fVxuXG5cdGxhYmVsID0gbGFiZWwudHJpbSgpO1xuXG5cdGlmIChsYWJlbCA9PT0gXCJcIikge1xuXHRcdGxhYmVsID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMubmV3LXRhYi1sYWJlbFwiLCBcIk5ldyBUYWJcIik7XG5cdH1cblxuXHRpZiAobGFiZWwubGVuZ3RoID4gMTAwKSB7XG5cdFx0bGFiZWwgPSBgJHtsYWJlbC5zdWJzdHJpbmcoMCwgOTkpfVx1MjAyNmA7XG5cdH1cblxuXHRpZiAoc2V0TGFiZWwgPT09IHRydWUpIHtcblx0XHRub2RlLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLCBsYWJlbCk7XG5cdH1cblxuXHRyZXR1cm4gbGFiZWw7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItc3RhdGUgcGF0aDpidXR0b25zLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCBwYXRoOmJ1dHRvbnMuZGlzYWJsZWQgfCBpZjp0cnVlLCAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci10YWItcmVmZXJlbmNlIHBhdGg6YnV0dG9ucy5yZWZlcmVuY2VcIj48c3BhblxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6YnV0dG9ucy5sYWJlbFwiPjwvc3Bhbj48c3BhbiBwYXJ0PVwicmVtb3ZlLXRhYlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6YnV0dG9ucy5yZW1vdmUgfCA/OnJlbW92ZS10YWI6aGlkZGVuIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cInJlbW92ZS10YWJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvc3Bhbj48L2J1dHRvbj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPG5hdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm5hdlwiIHBhcnQ9XCJuYXZcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1tYXJrZXIgcGF0aDptYXJrZXIsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5uYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWluc2VydD1cImJ1dHRvbnMgcGF0aDpidXR0b25zLnN0YW5kYXJkXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cInN0YXJ0XCIgY2xhc3M9XCJpbnZpc2libGVcIj48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCJcblx0XHRcdFx0XHQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMucG9wcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1wb3BwZXItYXJyb3c+PC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJwb3BwZXItbmF2XCIgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXItbmF2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiYnV0dG9ucyBwYXRoOmJ1dHRvbnMucG9wcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cInBvcHBlclwiIGNsYXNzPVwiaW52aXNpYmxlXCI+PC9zbG90PlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJlbmRcIiBjbGFzcz1cImludmlzaWJsZVwiPjwvc2xvdD5cbiAgICAgICAgICAgIDwvbmF2PlxuICAgICAgICAgICAgPHNsb3QgZGF0YS1tb25zdGVyLXJvbGU9XCJzbG90XCIgY2xhc3M9XCJpbnZpc2libGVcIj48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUYWJzKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBNZXNzYWdlU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgTWVzc2FnZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRNZXNzYWdlU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBtZXNzYWdlIHsgXG46d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0ZXh0LXNpemUtYWRqdXN0OjEwMCV9OndoZXJlKGgxKXtmb250LXNpemU6MmVtO21hcmdpbi1ibG9jay1lbmQ6LjY3ZW07bWFyZ2luLWJsb2NrLXN0YXJ0Oi42N2VtfTp3aGVyZShkbCxvbCx1bCkgOndoZXJlKGRsLG9sLHVsKXttYXJnaW4tYmxvY2stZW5kOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OjB9OndoZXJlKGhyKXtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbG9yOmluaGVyaXQ7aGVpZ2h0OjB9OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHByZSxzYW1wKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKHNtYWxsKXtmb250LXNpemU6ODAlfTp3aGVyZSh0YWJsZSl7Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcjt0ZXh0LWluZGVudDowfTp3aGVyZShidXR0b24saW5wdXQsc2VsZWN0KXttYXJnaW46MH06d2hlcmUoYnV0dG9uKXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259OndoZXJlKHByb2dyZXNzKXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06d2hlcmUoc2VsZWN0KXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZSh0ZXh0YXJlYSl7bWFyZ2luOjB9OndoZXJlKGlucHV0W3R5cGU9c2VhcmNoIGldKXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi41NH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5bGU6bm9uZTtwYWRkaW5nOjB9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6MXB4IGRvdHRlZCBCdXR0b25UZXh0fTp3aGVyZSg6LW1vei11aS1pbnZhbGlkKXtib3gtc2hhZG93Om5vbmV9OndoZXJlKGRpYWxvZyl7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjpzb2xpZDtjb2xvcjojMDAwO2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtsZWZ0OjA7bWFyZ2luOmF1dG87cGFkZGluZzoxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50fTp3aGVyZShkaWFsb2c6bm90KFtvcGVuXSkpe2Rpc3BsYXk6bm9uZX06d2hlcmUoc3VtbWFyeSl7ZGlzcGxheTpsaXN0LWl0ZW19aHRtbHtoZWlnaHQ6MTAwJX1ib2R5LGh0bWx7bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCl9Ym9keXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYXktMTojZjZmNmY2Oy0tbW9uc3Rlci1jb2xvci1ncmF5LTI6I2UyZTJlMjstLW1vbnN0ZXItY29sb3ItZ3JheS0zOiM4YjhiOGI7LS1tb25zdGVyLWNvbG9yLWdyYXktNDojNmY2ZjZmOy0tbW9uc3Rlci1jb2xvci1ncmF5LTU6IzNlM2UzZTstLW1vbnN0ZXItY29sb3ItZ3JheS02OiMyMjI7LS1tb25zdGVyLWNvbG9yLXJvc2UtMTojZmZmN2Y5Oy0tbW9uc3Rlci1jb2xvci1yb3NlLTI6I2ZmZGNlNTstLW1vbnN0ZXItY29sb3Itcm9zZS0zOiNmZjNiOGQ7LS1tb25zdGVyLWNvbG9yLXJvc2UtNDojZGIwMDcyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTU6IzgwMDA0MDstLW1vbnN0ZXItY29sb3Itcm9zZS02OiM0YzAwMjM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0xOiNmZmY4Zjg7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0yOiNmZmRkZGY7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0zOiNmZjQyNmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS00OiNkZTAwNTE7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS01OiM4MjAwMmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS02OiM1MTAwMTg7LS1tb25zdGVyLWNvbG9yLXJlZC0xOiNmZmY4ZjY7LS1tb25zdGVyLWNvbG9yLXJlZC0yOiNmZmRkZDg7LS1tb25zdGVyLWNvbG9yLXJlZC0zOiNmZjQ2NDc7LS1tb25zdGVyLWNvbG9yLXJlZC00OiNlMDAwMmI7LS1tb25zdGVyLWNvbG9yLXJlZC01OiM4MzAwMTQ7LS1tb25zdGVyLWNvbG9yLXJlZC02OiM1MzAwMDM7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xOiNmZmY4ZjU7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yOiNmZmRlZDE7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zOiNmZDRkMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS00OiNjZDNjMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS01OiM3NTIxMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS02OiM0MDE2MDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTE6I2ZmZjhmMzstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMjojZmZkZmM2Oy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0zOiNkNTczMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTQ6I2FjNWMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNTojNjMzMzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi02OiMzNzFkMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTE6I2ZmZjhlZjstLW1vbnN0ZXItY29sb3ItYW1iZXItMjojZmZlMGIyOy0tbW9uc3Rlci1jb2xvci1hbWJlci0zOiNiOTgzMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTQ6IzkyNjcwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNTojNTIzODAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci02OiMzMDIxMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0xOiNmZmY5ZTU7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0yOiNmZmU1M2U7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0zOiM5YzhiMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy00OiM3ZDZmMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy01OiM0NjNkMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy02OiMyOTIzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMTojZjdmZmFjOy0tbW9uc3Rlci1jb2xvci1saW1lLTI6I2Q1ZjIwMDstLW1vbnN0ZXItY29sb3ItbGltZS0zOiM4MTkzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNDojNjc3NjAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTU6IzM5NDEwMDstLW1vbnN0ZXItY29sb3ItbGltZS02OiMyMjI2MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMTojZTVmZmMzOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTI6Izk4ZmIwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0zOiM1YzliMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNDojNDk3YzAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTU6IzI2NDUwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS02OiMxODI2MDA7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTE6I2UwZmZkOTstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMjojNzJmZjZjOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0zOiMwMGEyMWY7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTQ6IzAwODIxNzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNTojMDA0OTA4Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi02OiMwNjI4MDA7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMTojZGNmZmU2Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTI6IzVkZmZhMjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0zOiMwMGEwNWE7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNDojMDA4MTQ3Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTU6IzAwNDgyNTstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC02OiMwMDI4MTI7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMTojZGFmZmVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTI6IzQyZmZjNjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0zOiMwMDlmNzg7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNDojMDA3ZjVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTU6IzAwNDczNDstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS02OiMwMDI4MWI7LS1tb25zdGVyLWNvbG9yLXRlYWwtMTojZDdmZmY3Oy0tbW9uc3Rlci1jb2xvci10ZWFsLTI6IzAwZmZlNDstLW1vbnN0ZXItY29sb3ItdGVhbC0zOiMwMDllOGM7LS1tb25zdGVyLWNvbG9yLXRlYWwtNDojMDA3YzZlOy0tbW9uc3Rlci1jb2xvci10ZWFsLTU6IzAwNDQzYzstLW1vbnN0ZXItY29sb3ItdGVhbC02OiMwMDI3MjI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMTojYzRmZmZlOy0tbW9uc3Rlci1jb2xvci1jeWFuLTI6IzAwZmFmYjstLW1vbnN0ZXItY29sb3ItY3lhbi0zOiMwMDk5OWE7LS1tb25zdGVyLWNvbG9yLWN5YW4tNDojMDA3YTdiOy0tbW9uc3Rlci1jb2xvci1jeWFuLTU6IzAwNDM0NDstLW1vbnN0ZXItY29sb3ItY3lhbi02OiMwMDI1MjU7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0xOiNkYWZhZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0yOiM4ZGYwZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0zOiMwMDk4YTk7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci00OiMwMDc5ODc7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci01OiMwMDQwNDg7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci02OiMwMDIyMjc7LS1tb25zdGVyLWNvbG9yLXNreS0xOiNlM2Y3ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0yOiNhZWU5ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0zOiMwMDk0YjQ7LS1tb25zdGVyLWNvbG9yLXNreS00OiMwMDc1OTA7LS1tb25zdGVyLWNvbG9yLXNreS01OiMwMDQwNGY7LS1tb25zdGVyLWNvbG9yLXNreS02OiMwMDFmMjg7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTE6I2U4ZjZmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMjojYjllM2ZmOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0zOiMwMDkyYzU7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTQ6IzAwNzQ5ZDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNTojMDAzYzU0Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi02OiMwMDFkMmE7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTE6I2U4ZjJmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMjojYzZlMGZmOy0tbW9uc3Rlci1jb2xvci1henVyZS0zOiMwMDhmZGI7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTQ6IzAwNzFhZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtNTojMDAzYjVlOy0tbW9uc3Rlci1jb2xvci1henVyZS02OiMwMDFjMzA7LS1tb25zdGVyLWNvbG9yLWJsdWUtMTojZjBmNGZmOy0tbW9uc3Rlci1jb2xvci1ibHVlLTI6I2Q0ZTBmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0zOiMwMDg5ZmM7LS1tb25zdGVyLWNvbG9yLWJsdWUtNDojMDA2ZGNhOy0tbW9uc3Rlci1jb2xvci1ibHVlLTU6IzAwMzg2ZDstLW1vbnN0ZXItY29sb3ItYmx1ZS02OiMwMDFhMzk7LS1tb25zdGVyLWNvbG9yLWluZGlnby0xOiNmM2YzZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0yOiNkZWRkZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0zOiM2NTdlZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby00OiMwMDYxZmM7LS1tb25zdGVyLWNvbG9yLWluZGlnby01OiMwMDMyOGE7LS1tb25zdGVyLWNvbG9yLWluZGlnby02OiMwMDE2NDk7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0xOiNmN2YxZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0yOiNlOGRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0zOiM5YjcwZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC00OiM3OTRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC01OiMyZDBmYmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC02OiMwYjAwNzQ7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0xOiNmZGY0ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0yOiNmN2Q5ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0zOiNkMTUwZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS00OiNiMDFmZTM7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS01OiM2NjAwODc7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS02OiMzYTAwNGY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMTojZmZmM2ZjOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTI6I2ZmZDdmNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0zOiNmOTExZTA7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNDojY2EwMGI2Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTU6Izc0MDA2ODstLW1vbnN0ZXItY29sb3ItbWFnZW50YS02OiM0NDAwM2M7LS1tb25zdGVyLWNvbG9yLXBpbmstMTojZmZmN2ZiOy0tbW9uc3Rlci1jb2xvci1waW5rLTI6I2ZmZGNlYzstLW1vbnN0ZXItY29sb3ItcGluay0zOiNmZjJmYjI7LS1tb25zdGVyLWNvbG9yLXBpbmstNDojZDIwMDhmOy0tbW9uc3Rlci1jb2xvci1waW5rLTU6Izc5MDA1MTstLW1vbnN0ZXItY29sb3ItcGluay02OiM0YjAwMzA7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0xOiNlNWI4NzU7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0yOiNkOWEzNjI7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0zOiNjMDhhNGU7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS00OiNhNzcxM2I7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS01OiM4ZjVhMjg7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS02OiMzNjA1MDU7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTE6I2Y3ZjVlZjstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMjojZTVlMmQ5Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0zOiNjYmM2YjM7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTQ6I2ExOWQ4YTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNTojN2E3NTY2Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02OiM1MTRkM2Z9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci10aGVtZS1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTEpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMXtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0yKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLWNvbG9yLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLXRoZW1lLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMyl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ze2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci10aGVtZS1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTQpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtNHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1lbGVtZW50LC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1iYWNrZ3JvdW5kLWluaGVyaXR7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0IWltcG9ydGFudH0ubW9uc3Rlci10aGVtZS1vbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tY29sb3IpfS5tb25zdGVyLXRoZW1lLW9mZntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcil9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9W2RhdGEtbW9uc3Rlci1yb2xlPW1lc3NhZ2Vde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6OHB4O3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRlbnRde2ZsZXgtZ3JvdzoyO0BtaXhpbnMgcGFyYWdyYXBofVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9Y2xvc2Vde2N1cnNvcjpwb2ludGVyO2hlaWdodDoxNnB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0xMHB4O3RvcDotNXB4O3dpZHRoOjE2cHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1jbG9zZV06YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxMDAlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0aW5pdE1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvbWVzc2FnZS5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZW1vdmVFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicmVtb3ZlRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJTeW1ib2wgPSBTeW1ib2woXCJ0aW1lclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcIm1vdXNlZW50ZXJFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG1vdXNlbGVhdmVFdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJtb3VzZWxlYXZlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZW1vdmVFdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJyZW1vdmVFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBub3RpZmljYXRpb24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvbWVzc2FnZS5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnkuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyBgPG1vbnN0ZXItbm90aWZ5LW1lc3NhZ2UgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItbm90aWZ5LW1lc3NhZ2U+PC9tb25zdGVyLW5vdGlmeS1tZXNzYWdlPlxuICogYGBgXG4gKlxuICogb3IgdXNpbmcgSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW5vdGlmeScpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW5vdGlmeS1tZXNzYWdlJyk7XG4gKiBgYGBcbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uLy4uL2V4YW1wbGUvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5tanNcbiAqIEBzdGFydHVtbCBtZXNzYWdlLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gTWVzc2FnZVxuICogQGVuZHVtbFxuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBoaWdobHkgY29uZmlndXJhYmxlIHNlbGVjdCBjb250cm9sXG4gKi9cbmNsYXNzIE1lc3NhZ2UgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0cyBjYW4gYmUgc2V0IGVpdGhlciBkaXJlY3RseSBpbiB0aGUgb2JqZWN0IG9yIHZpYSBhbiBhdHRyaWJ1dGUgaW4gdGhlIEhUTUwgdGFnLlxuXHQgKiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIGluIHRoZSBIVE1MIHRhZyBtdXN0IGJlIGEgSlNPTiBzdHJpbmcuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiA8bW9uc3Rlci1tZXNzYWdlIGRhdGEtbW9uc3Rlci1vcHRpb25zPVwie31cIj48L21vbnN0ZXItbWVzc2FnZT5cblx0ICogYGBgXG5cdCAqXG5cdCAqIFNpbmNlIDEuMTguMCB0aGUgSlNPTiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgRGF0YVVSSS5cblx0ICpcblx0ICogYGBgXG5cdCAqIG5ldyBNb25zdGVyLlR5cGVzLkRhdGFVcmwoYnRvYShKU09OLnN0cmluZ2lmeSh7XG5cdCAqICAgICAgICB0aW1lb3V0OiAzMDAwLFxuXHQgKiAgICAgICAgZmVhdHVyZXM6IHtcblx0ICogICAgICAgICAgY2xvc2U6IHRydWUsXG5cdCAqICAgICAgICAgIGRpc2FwcGVhcjogdHJ1ZVxuXHQgKiAgICAgICAgfVxuXHQgKiAgICB9KSksJ2FwcGxpY2F0aW9uL2pzb24nLHRydWUpLnRvU3RyaW5nKClcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge2ludGVnZXJ9IHRpbWVvdXQgdGltZSBpbiBtaWxsaXNlY29uZHMgdW50aWwgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIHJlbW92ZWQuIFRoZSB0aW1lb3V0IGNhbiBiZSBkaXNhYmxlZCB2aWEgdGhlIGZlYXR1cmUgYGRpc2FwcGVhcmAuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlc1xuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLmNsb3NlIHNob3cgY2xvc2UgYnV0dG9uXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuZGlzYXBwZWFyIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHRoZSBtZXNzYWdlIGFmdGVyIHRoZSB0aW1lb3V0XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHR0aW1lb3V0OiA2MDAwLFxuXHRcdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHRcdGNsb3NlOiB0cnVlLFxuXHRcdFx0XHRcdGRpc2FwcGVhcjogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0Y29udGVudDogXCI8c2xvdD48L3Nsb3Q+XCIsXG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuTm90aWZ5Lk1lc3NhZ2V9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudGhhbmRsZXIuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItbm90aWZ5LW1lc3NhZ2VcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW01lc3NhZ2VTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0W2luaXRNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2luaXRNZXRob2RTeW1ib2xdKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5kaXNhcHBlYXJcIikgPT09IHRydWUpIHtcblx0XHRcdHN0YXJ0RmFkZW91dC5jYWxsKHRoaXMpO1xuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCB0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0c3RvcEZhZGVvdXQuY2FsbCh0aGlzKTtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmRpc2FwcGVhclwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcIm1vdXNlZW50ZXJcIixcblx0XHRcdFx0dGhpc1ttb3VzZWVudGVyRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0XHRcdCk7XG5cdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFwibW91c2VlbnRlclwiLFxuXHRcdFx0XHR0aGlzW21vdXNlbGVhdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzdGFydEZhZGVvdXQoKSB7XG5cdGlmICghdGhpcz8uW3RpbWVyU3ltYm9sXSkge1xuXHRcdHRoaXNbdGltZXJTeW1ib2xdID0gc2V0VGltZW91dChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmVtb3ZlU2VsZi5jYWxsKHRoaXMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwidGltZW91dFwiLCAxMDAwKSxcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNlbGYoKSB7XG5cdHN0b3BGYWRlb3V0KCk7XG5cdHRoaXMuY2xhc3NMaXN0LmFkZChcImZhZGVvdXRcIik7XG5cblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0dGhpcy5yZW1vdmUoKTtcblx0fSwgMjAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzdG9wRmFkZW91dCgpIHtcblx0aWYgKHRoaXM/Llt0aW1lclN5bWJvbF0pIHtcblx0XHRjbGVhclRpbWVvdXQodGhpc1t0aW1lclN5bWJvbF0pO1xuXHRcdHRoaXNbdGltZXJTeW1ib2xdID0gdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMoKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuXHRjb25zdCB0aW1lb3V0ID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1BSRUZJWCArIFwidGltZW91dFwiKTtcblx0aWYgKGlzU3RyaW5nKHRpbWVvdXQpKSB7XG5cdFx0dHJ5IHtcblx0XHRcdG9wdGlvbnNbXCJ0aW1lb3V0XCJdID0gcGFyc2VJbnQodGltZW91dCwgMTApO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHR0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFICsgXCIsIFwiICsgZS50b1N0cmluZygpKSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge01lc3NhZ2V9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbXCIgKyBBVFRSSUJVVEVfUk9MRSArIFwiPWNvbnRyb2xdXCIsXG5cdCk7XG5cdHRoaXNbcmVtb3ZlRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9Y2xvc2VdXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50aGFuZGxlcigpIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFwiY29udHJvbFwiLFxuXHRcdCk7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFwibW91c2VlbnRlclwiLFxuXHRcdFx0XHR0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgdGhpc1ttb3VzZWxlYXZlRXZlbnRIYW5kbGVyU3ltYm9sXSk7XG5cdFx0XHRzdG9wRmFkZW91dC5jYWxsKHRoaXMpO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJjb250cm9sXCIsXG5cdFx0KTtcblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFwibW91c2VsZWF2ZVwiLFxuXHRcdFx0XHR0aGlzW21vdXNlbGVhdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgdGhpc1ttb3VzZWVudGVyRXZlbnRIYW5kbGVyU3ltYm9sXSk7XG5cdFx0XHRzdGFydEZhZGVvdXQuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW3JlbW92ZUV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoZXZlbnQsIEFUVFJJQlVURV9ST0xFLCBcImNsb3NlXCIpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0cmVtb3ZlU2VsZi5jYWxsKHRoaXMpO1xuXHRcdH1cblx0fTtcblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5jbG9zZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdHRoaXNbcmVtb3ZlRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFwiY2xpY2tcIixcblx0XHRcdHRoaXNbcmVtb3ZlRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0XHQpO1xuXHRcdHRoaXNbcmVtb3ZlRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFwidG91Y2hcIixcblx0XHRcdHRoaXNbcmVtb3ZlRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIGNsYXNzPVwiY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwibWVzc2FnZVwiIHBhcnQ9XCJtZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24gcGF0aDpvcmllbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIiBwYXJ0PVwiY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cInJlbW92ZVwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6ZmVhdHVyZXMuY2xvc2UgfCA/OjpoaWRkZW4gXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY2xvc2VcIiB0YWJpbmRleD1cIi0xXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE1lc3NhZ2UpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IE5vdGlmeVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IE5vdGlmeVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHROb3RpZnlTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIG5vdGlmeSB7IFxuLmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Ym9yZGVyOjA7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luOjA7bWF4LWhlaWdodDoxMDB2SDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3dpZHRoOjI1cmVtO3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXkpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPWxlZnRde2xlZnQ6MDtyaWdodDphdXRvfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPXJpZ2h0XXtsZWZ0OmF1dG87cmlnaHQ6MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj1jZW50ZXJde2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdW2RhdGEtbW9uc3Rlci1vcmllbnRhdGlvbio9Ym90dG9tXXthbGlnbi1pdGVtczpmbGV4LWVuZDtib3R0b206MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj10b3Bde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7dG9wOjB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl17d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV17YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtYm9yZGVyLWNvbG9yLHJnYmEoMCwwLDAsLjEpKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1ib3JkZXItcmFkaXVzLC4yNXJlbSk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1ib3JkZXItc3R5bGUsc29saWQpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtYm9yZGVyLXdpZHRoLDFweCk7Ym94LXNoYWRvdzowIC41cmVtIDFyZW0gcmdiYSgwLDAsMCwuMTUpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOi44NzVyZW07bWFyZ2luOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tdG9wLDE1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tcmlnaHQsNXB4KSB2YXIoLS1tb25zdGVyLW1lc3NhZ2UtbWFyZ2luLWJvdHRvbSwwKSB2YXIoLS1tb25zdGVyLW1lc3NhZ2UtbWFyZ2luLWxlZnQsMCk7bWF4LWhlaWdodDoyMDBweDttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtcGFkZGluZy10b3AsNXB4KSB2YXIoLS1tb25zdGVyLW1lc3NhZ2UtcGFkZGluZy1yaWdodCw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLWJvdHRvbSw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLWxlZnQsNXB4KTtwb2ludGVyLWV2ZW50czphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7LXdlYmtpdC11c2VyLXNlbGVjdDp0ZXh0Oy1tb3otdXNlci1zZWxlY3Q6dGV4dDt1c2VyLXNlbGVjdDp0ZXh0O3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW1lc3NhZ2VdOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH1bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV0uZmFkZW91dHtib3JkZXI6MDttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21heC1oZWlnaHQ6MDtwYWRkaW5nLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7dHJhbnNpdGlvbjphbGwgLjJzIGN1YmljLWJlemllcigxLC0uMDQsMCwxLjAzKX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gXCIuL21lc3NhZ2UubWpzXCI7XG5pbXBvcnQgeyBOb3RpZnlTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9ub3RpZnkubWpzXCI7XG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCIuLi8uLi90eXBlcy9xdWV1ZS5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBOb3RpZnkgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udGFpbmVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRhaW5lckVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHF1ZXVlU3ltYm9sID0gU3ltYm9sKFwicXVldWVcIik7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBub3RpZmljYXRpb24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvbm90aWZ5LnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci1ub3RpZnkgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItbm90aWZ5PjwvbW9uc3Rlci1ub3RpZnk+XG4gKiBgYGBcbiAqXG4gKiBvciB1c2luZyBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5Jyk7YCBtZXRob2QuXG4gKlxuICogYGBganNcbiAqIGltcG9ydCAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5LmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5Jyk7XG4gKiBgYGBcbiAqXG4gKiAjIyBFdmVudHNcbiAqXG4gKiBUaGUgQ3VzdG9tRXZlbnQgaGFzIHRoZSBwcm9wZXJ0eSBbYGRldGFpbGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DdXN0b21FdmVudC9kZXRhaWwpLlxuICpcbiAqIGBgYFxuICogbm9kZS5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLW5vdGlmeS1tZXNzYWdlJywoZSk9PmNvbnNvbGUubG9nKGUuZGV0YWlsKSlcbiAqIGBgYFxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzXG4gKiBAc3RhcnR1bWwgbm90aWZ5LnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gTm90aWZ5XG4gKiBAZW5kdW1sXG4gKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBoaWdobHkgY29uZmlndXJhYmxlIHNlbGVjdCBjb250cm9sXG4gKi9cbmNsYXNzIE5vdGlmeSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbcXVldWVTeW1ib2xdID0gbmV3IFF1ZXVlKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGRlZmF1bHRzIGNhbiBiZSBzZXQgZWl0aGVyIGRpcmVjdGx5IGluIHRoZSBvYmplY3Qgb3IgdmlhIGFuIGF0dHJpYnV0ZSBpbiB0aGUgSFRNTCB0YWcuXG5cdCAqIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgaW4gdGhlIEhUTUwgdGFnIG11c3QgYmUgYSBKU09OIHN0cmluZy5cblx0ICpcblx0ICogYGBgaHRtbFxuXHQgKiA8bW9uc3Rlci1ub3RpZnkgZGF0YS1tb25zdGVyLW9wdGlvbnM9XCJ7fVwiPjwvbW9uc3Rlci1ub3RpZnk+XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBTaW5jZSAxLjE4LjAgdGhlIEpTT04gY2FuIGJlIHNwZWNpZmllZCBhcyBhIERhdGFVUkkuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBuZXcgTW9uc3Rlci5UeXBlcy5EYXRhVXJsKGJ0b2EoSlNPTi5zdHJpbmdpZnkoe1xuXHQgKiAgICAgICAgb3JpZW50YXRpb246ICdyaWdodCB0b3AnXG5cdCAqICAgIH0pKSwnYXBwbGljYXRpb24vanNvbicsdHJ1ZSkudG9TdHJpbmcoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHRvcmllbnRhdGlvbjogXCJsZWZ0IHRvcFwiLFxuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cy5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Tm90aWZ5fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblxuXHRcdGlmICh0aGlzW2NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0XHR3aGlsZSAodGhpc1txdWV1ZVN5bWJvbF0uaXNFbXB0eSgpID09PSBmYWxzZSkge1xuXHRcdFx0XHR0aGlzLnB1c2godGhpc1txdWV1ZVN5bWJvbF0ucG9sbCgpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItbm90aWZ5XCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtOb3RpZnlTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge01vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnkuTWFzc2FnZXxTdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLk5vdGlmeS5Ob3RpZnl9XG5cdCAqL1xuXHRwdXNoKG1lc3NhZ2UpIHtcblx0XHRsZXQgbWVzc2FnZUVsZW1lbnQgPSBtZXNzYWdlO1xuXHRcdGlmICghKG1lc3NhZ2UgaW5zdGFuY2VvZiBNZXNzYWdlKSkge1xuXHRcdFx0Y29uc3QgdGV4dCA9IHZhbGlkYXRlU3RyaW5nKG1lc3NhZ2UpO1xuXHRcdFx0bWVzc2FnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibW9uc3Rlci1ub3RpZnktbWVzc2FnZVwiKTtcblx0XHRcdG1lc3NhZ2VFbGVtZW50LnNldE9wdGlvbihcImNvbnRlbnRcIiwgdGV4dCk7XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVJbnN0YW5jZShtZXNzYWdlRWxlbWVudCwgTWVzc2FnZSk7XG5cdFx0bWVzc2FnZUVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcIm1lc3NhZ2VcIik7XG5cblx0XHQvLyBpZiBub3QgY29ubmVjdGVkLCBhZGQgdG8gcXVldWVcblx0XHRpZiAoIXRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0pIHtcblx0XHRcdHRoaXNbcXVldWVTeW1ib2xdLmFkZChtZXNzYWdlRWxlbWVudCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW5vdGlmeS1tZXNzYWdlXCIsIHtcblx0XHRcdG1lc3NhZ2VFbGVtZW50LFxuXHRcdH0pO1xuXG5cdFx0dGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXS5hcHBlbmRDaGlsZChtZXNzYWdlRWxlbWVudCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIGBgYFxuICogPG1vbnN0ZXItc2VsZWN0IGRhdGEtbW9uc3Rlci11cmw9XCJodHRwczovL2V4YW1wbGUuY29tL1wiPjwvbW9uc3Rlci1zZWxlY3Q+XG4gKiBgYGBcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMoKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW1wiICsgQVRUUklCVVRFX1JPTEUgKyBcIj1jb250cm9sXVwiLFxuXHQpO1xuXHR0aGlzW2NvbnRhaW5lckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbXCIgKyBBVFRSSUJVVEVfUk9MRSArIFwiPWNvbnRhaW5lcl1cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgY2xhc3M9XCJjZW50ZXJcIlxuICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uIHBhdGg6b3JpZW50YXRpb25cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoTm90aWZ5KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBTcGxpdFBhbmVsU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgU3BsaXRQYW5lbFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRTcGxpdFBhbmVsU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBzcGxpdHBhbmVsIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtcGFuZWxde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2hlaWdodDphdXRvO21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1wYW5lbF0gLnBhbmVse2ZsZXgtZ3JvdzoxO292ZXJmbG93OmF1dG99W2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXBhbmVsXSBbZGF0YS1tb25zdGVyLXJvbGU9ZHJhZ2dlcl17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2hlaWdodDphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOnZhcigtLW1vbnN0ZXItZHJhZ2dlci13aWR0aCl9OmlzKFtkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1wYW5lbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRyYWdnZXJdKSBbZGF0YS1tb25zdGVyLXJvbGU9aGFuZGxlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0KTtsZWZ0OjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt3aWR0aDp2YXIoLS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoKTt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0uaG9yaXpvbnRhbFtkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1wYW5lbF17ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5ob3Jpem9udGFsW2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXBhbmVsXSBbZGF0YS1tb25zdGVyLXJvbGU9ZHJhZ2dlcl17aGVpZ2h0OnZhcigtLW1vbnN0ZXItZHJhZ2dlci13aWR0aCk7d2lkdGg6MTAwJX06aXMoLmhvcml6b250YWxbZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtcGFuZWxdIFtkYXRhLW1vbnN0ZXItcm9sZT1kcmFnZ2VyXSkgW2RhdGEtbW9uc3Rlci1yb2xlPWhhbmRsZV17aGVpZ2h0OnZhcigtLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGgpO3dpZHRoOnZhcigtLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0KX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IFwiLi4vbm90aWZ5L25vdGlmeS5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBTcGxpdFBhbmVsU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc3BsaXQtcGFuZWwubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFNwbGl0UGFuZWwsIFRZUEVfVkVSVElDQUwsIFRZUEVfSE9SSVpPTlRBTCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzcGxpdFNjcmVlbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRyYWdnZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZHJhZ2dlckVsZW1lbnRcIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzdGFydFBhbmVsRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInN0YXJ0UGFuZWxFbGVtZW50XCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZW5kUGFuZWxFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZW5kUGFuZWxFbGVtZW50XCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaGFuZGxlRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImhhbmRsZUVsZW1lbnRcIik7XG5cbi8qKlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFRZUEVfVkVSVElDQUwgPSBcInZlcnRpY2FsXCI7XG4vKipcbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBUWVBFX0hPUklaT05UQUwgPSBcImhvcml6b250YWxcIjtcblxuLyoqXG4gKiBBIFNwbGl0UGFuZWwgQ29udHJvbFxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2xheW91dC9zcGxpdC1wYW5lbC9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvc3BsaXQtcGFuZWwtc2ltcGxlXG4gKlxuICogQHNpbmNlIDMuNTQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBTcGxpdFBhbmVsIGNvbnRyb2wgaXMgYSBzaW1wbGUgbGF5b3V0IGNvbnRyb2wgdGhhdCBhbGxvd3MgeW91IHRvIHNwbGl0IHRoZSBzY3JlZW5cbiAqIGludG8gdHdvIHBhcnRzLiBUaGUgc3BsaXQgY2FuIGJlIGVpdGhlciB2ZXJ0aWNhbCBvciBob3Jpem9udGFsLiBUaGUgY29udHJvbCBwcm92aWRlcyBhXG4gKiBkcmFnZ2FibGUgaGFuZGxlIHRoYXQgYWxsb3dzIHlvdSB0byBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIHR3byBwYW5lbHMuXG4gKi9cbmNsYXNzIFNwbGl0UGFuZWwgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvbGF5b3V0L3NwbGl0LXBhbmVsXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gc3BsaXRUeXBlIFNwbGl0IHR5cGUgKHZlcnRpY2FsIG9yIGhvcml6b250YWwpXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkaW1lbnNpb24gRGltZW5zaW9uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkaW1lbnNpb24uaW5pdGlhbCBJbml0aWFsIGRpbWVuc2lvbiBvZiB0aGUgc3RhcnQgcGFuZWxcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGRpbWVuc2lvbi5tYXggTWF4aW11bSBkaW1lbnNpb24gb2YgdGhlIHN0YXJ0IHBhbmVsIChpbiBwZXJjZW50YWdlKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZGltZW5zaW9uLm1pbiBNaW5pbXVtIGRpbWVuc2lvbiBvZiB0aGUgc3RhcnQgcGFuZWwgKGluIHBlcmNlbnRhZ2UpXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRzcGxpdFR5cGU6IFRZUEVfVkVSVElDQUwsXG5cdFx0XHRkaW1lbnNpb246IHtcblx0XHRcdFx0aW5pdGlhbDogXCI2MCVcIixcblx0XHRcdFx0bWF4OiBcIjgwJVwiLFxuXHRcdFx0XHRtaW46IFwiMjAlXCIsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0ZnVsbFN0YXJ0U2NyZWVuKCkge1xuXHRcdHRoaXMuc2V0RGltZW5zaW9uKFwiMTAwJVwiKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGZ1bGxFbmRTY3JlZW4oKSB7XG5cdFx0dGhpcy5zZXREaW1lbnNpb24oXCIwJVwiKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGlzRnVsbFN0YXJ0U2NyZWVuKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvbiA9PT0gXCIxMDAlXCI7XG5cdH1cblxuXHRpc0Z1bGxFbmRTY3JlZW4oKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uID09PSBcIjAlXCI7XG5cdH1cblxuXHRpc0luaXRpYWxTY3JlZW4oKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uID09PVxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikuaW5pdGlhbFxuXHRcdCk7XG5cdH1cblxuXHRyZXNldFNjcmVlbigpIHtcblx0XHR0aGlzLnNldERpbWVuc2lvbih0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5pbml0aWFsKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldENvbnRlbnQoaHRtbCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwiY29udGVudFwiLCBodG1sKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5WaWV3ZXJ9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHRcdC8vYXBwbHlQYW5lbERpbWVuc2lvbnMuY2FsbCh0aGlzKTtcblx0XHR0aGlzLnNldERpbWVuc2lvbih0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5pbml0aWFsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiB0aGUgZGltZW5zaW9uIGlzIGEgcGVyY2VudGFnZSBhbmQgd2l0aGluIGEgdmFsaWQgcmFuZ2UsIHRoZW4gc2V0IHRoZSBkaW1lbnNpb24gb3B0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGltZW5zaW9uIC0gVGhlIGRpbWVuc2lvbiB0byBiZSBzZXQsIGNhbiBiZSBpbiBwZXJjZW50YWdlIG9yIGFic29sdXRlIHZhbHVlLlxuXHQgKiBAcmV0dXJuIHtPYmplY3R9IC0gUmV0dXJucyB0aGUgY3VycmVudCBvYmplY3QgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuXHQgKi9cblx0c2V0RGltZW5zaW9uKGRpbWVuc2lvbikge1xuXHRcdC8vIGNoZWNrIGlmIHBlcmNlbnQgYW5kIGdyZWF0ZXIgdGhhbjEwMFxuXHRcdGlmIChkaW1lbnNpb24uaW5jbHVkZXMoXCIlXCIpKSB7XG5cdFx0XHRpZiAocGFyc2VJbnQoZGltZW5zaW9uKSA+IDEwMCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkaW1lbnNpb24gbXVzdCBiZSBsZXNzIHRoYW4gMTAwJVwiKTtcblx0XHRcdH0gZWxzZSBpZiAocGFyc2VJbnQoZGltZW5zaW9uKSA8IDApIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZGltZW5zaW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAlXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uID0gZGltZW5zaW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1zcGxpdC1wYW5lbFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbU3BsaXRQYW5lbFN0eWxlU2hlZXRdO1xuXHR9XG59XG5cbi8qKlxuICogU2V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBwYW5lbCBiYXNlZCBvbiB0aGUgc3BsaXQgdHlwZS5cbiAqIEBmaXJlcyBtb25zdGVyLWRpbWVuc2lvbi1jaGFuZ2VkXG4gKi9cbmZ1bmN0aW9uIGFwcGx5UGFuZWxEaW1lbnNpb25zKCkge1xuXHRjb25zdCBzcGxpdFR5cGUgPSB0aGlzLmdldE9wdGlvbihcInNwbGl0VHlwZVwiKTtcblx0Y29uc3QgZGltZW5zaW9uID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmN1cnJlbnREaW1lbnNpb247XG5cblx0aWYgKHNwbGl0VHlwZSA9PT0gVFlQRV9WRVJUSUNBTCkge1xuXHRcdHRoaXNbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdLnN0eWxlLndpZHRoID0gZGltZW5zaW9uO1xuXHRcdHRoaXNbZW5kUGFuZWxFbGVtZW50U3ltYm9sXS5zdHlsZS53aWR0aCA9IGBjYWxjKDEwMCUgLSAke2RpbWVuc2lvbn0gLSA1cHgpYDtcblx0XHR0aGlzW2RyYWdnZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5jdXJzb3IgPSBcImV3LXJlc2l6ZVwiO1xuXHRcdHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwidmVydGljYWxcIik7XG5cdFx0dGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJob3Jpem9udGFsXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXNbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdLnN0eWxlLmhlaWdodCA9IGRpbWVuc2lvbjtcblx0XHR0aGlzW2VuZFBhbmVsRWxlbWVudFN5bWJvbF0uc3R5bGUuaGVpZ2h0ID1cblx0XHRcdGBjYWxjKDEwMCUgLSAke2RpbWVuc2lvbn0gLSA1cHgpYDtcblx0XHR0aGlzW2RyYWdnZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5jdXJzb3IgPSBcIm5zLXJlc2l6ZVwiO1xuXHRcdHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiaG9yaXpvbnRhbFwiKTtcblx0XHR0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcInZlcnRpY2FsXCIpO1xuXHR9XG5cblx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1kaW1lbnNpb24tY2hhbmdlZFwiLCB7XG5cdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRkaW1lbnNpb246IGRpbWVuc2lvbixcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtcGFuZWxdXCIsXG5cdCk7XG5cdHRoaXNbZHJhZ2dlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9ZHJhZ2dlcl1cIixcblx0KTtcblx0dGhpc1toYW5kbGVFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWhhbmRsZV1cIixcblx0KTtcblxuXHR0aGlzW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPXN0YXJ0UGFuZWxdXCIsXG5cdCk7XG5cdHRoaXNbZW5kUGFuZWxFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWVuZFBhbmVsXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGxldCBsYXN0RGltZW5zaW9uID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmN1cnJlbnREaW1lbnNpb247XG5cdGxldCBsYXN0VHlwZSA9IHRoaXMuZ2V0T3B0aW9uKFwic3BsaXRUeXBlXCIpO1xuXG5cdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5pc0RyYWdnaW5nID0gZmFsc2U7XG5cblx0Ly8gQHRvZG86IGFkZCBiZXR0ZXIgdG91Y2ggc3VwcG9ydFxuXHRjb25zdCBldmVudFR5cGVzID0gW1wiZGJsY2xpY2tcIiwgXCJ0b3VjaHN0YXJ0XCJdO1xuXHRmb3IgKGNvbnN0IGV2ZW50VHlwZSBvZiBldmVudFR5cGVzKSB7XG5cdFx0dGhpc1tkcmFnZ2VyRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsICgpID0+IHtcblx0XHRcdHNlbGZbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5pc0RyYWdnaW5nID0gZmFsc2U7XG5cdFx0XHRsYXN0RGltZW5zaW9uID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRsZXQgY3VycmVudERpbWVuc2lvbjtcblx0XHRcdGlmIChzZWxmLmdldE9wdGlvbihcInNwbGl0VHlwZVwiKSA9PT0gVFlQRV9WRVJUSUNBTCkge1xuXHRcdFx0XHRjb25zdCB0b3BQYW5lbCA9IHNlbGZbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdO1xuXHRcdFx0XHRjdXJyZW50RGltZW5zaW9uID0gdG9wUGFuZWwuc3R5bGUud2lkdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCB0b3BQYW5lbCA9IHNlbGZbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdO1xuXHRcdFx0XHRjdXJyZW50RGltZW5zaW9uID0gdG9wUGFuZWwuc3R5bGUuaGVpZ2h0O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY3VycmVudERpbWVuc2lvbiA9PT0gc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikuaW5pdGlhbCkge1xuXHRcdFx0XHRzZWxmLnNldERpbWVuc2lvbihzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5tYXgpO1xuXHRcdFx0fSBlbHNlIGlmIChjdXJyZW50RGltZW5zaW9uID09PSBzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5tYXgpIHtcblx0XHRcdFx0c2VsZi5zZXREaW1lbnNpb24oc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWluKTtcblx0XHRcdH0gZWxzZSBpZiAoY3VycmVudERpbWVuc2lvbiA9PT0gc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWluKSB7XG5cdFx0XHRcdHNlbGYuc2V0RGltZW5zaW9uKHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLmluaXRpYWwpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5zZXREaW1lbnNpb24oc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikuaW5pdGlhbCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHR0aGlzW2RyYWdnZXJFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsICgpID0+IHtcblx0XHRzZWxmW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuaXNEcmFnZ2luZyA9IHRydWU7XG5cblx0XHRjb25zdCBldmVudExpc3RlbmVyID0gKGUpID0+IHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0Ly8gdGhlIDVweCBhcmUgd3JvbmcgYW5kIG11c3QgYmUgY2FsYyBmcm9tIGNzcyBwcm9wZXJ0eSAtLW1vbnN0ZXItZHJhZ2dlci13aWR0aFxuXG5cdFx0XHRsZXQgZHJhZ2dlcldpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZShcblx0XHRcdFx0c2VsZltkcmFnZ2VyRWxlbWVudFN5bWJvbF0sXG5cdFx0XHQpLmdldFByb3BlcnR5VmFsdWUoXCItLW1vbnN0ZXItZHJhZ2dlci13aWR0aFwiKTtcblx0XHRcdGlmIChcblx0XHRcdFx0ZHJhZ2dlcldpZHRoID09PSBcIlwiIHx8XG5cdFx0XHRcdGRyYWdnZXJXaWR0aCA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdGRyYWdnZXJXaWR0aCA9PT0gbnVsbFxuXHRcdFx0KSB7XG5cdFx0XHRcdGRyYWdnZXJXaWR0aCA9IFwiMFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXNlbGZbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5pc0RyYWdnaW5nKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwic3BsaXRUeXBlXCIpID09PSBUWVBFX0hPUklaT05UQUwpIHtcblx0XHRcdFx0Y29uc3QgY29udGFpbmVyT2Zmc2V0VG9wID0gc2VsZltzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLm9mZnNldFRvcDtcblx0XHRcdFx0Y29uc3QgdG9wUGFuZWwgPSBzZWxmW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXTtcblx0XHRcdFx0Y29uc3QgYm90dG9tUGFuZWwgPSBzZWxmW2VuZFBhbmVsRWxlbWVudFN5bWJvbF07XG5cdFx0XHRcdGxldCBuZXdUb3BIZWlnaHQgPSBlLmNsaWVudFkgLSBjb250YWluZXJPZmZzZXRUb3A7XG5cblx0XHRcdFx0Y29uc3QgbWluID0gdGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWluO1xuXHRcdFx0XHRjb25zdCBtYXggPSB0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5tYXg7XG5cblx0XHRcdFx0Y29uc3QgdG9wQXNQZXJjZW50ID1cblx0XHRcdFx0XHQobmV3VG9wSGVpZ2h0IC8gdGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLm9mZnNldEhlaWdodCkgKiAxMDA7XG5cdFx0XHRcdGlmIChwYXJzZUludChtaW4pID4gdG9wQXNQZXJjZW50KSB7XG5cdFx0XHRcdFx0bmV3VG9wSGVpZ2h0ID0gbWluO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHBhcnNlSW50KG1heCkgPCB0b3BBc1BlcmNlbnQpIHtcblx0XHRcdFx0XHRuZXdUb3BIZWlnaHQgPSBtYXg7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmV3VG9wSGVpZ2h0ID0gdG9wQXNQZXJjZW50ICsgXCIlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBjYWxjIG5ldyB0b3AgaGVpZ2h0IHRvIHBpeGVsXG5cdFx0XHRcdGNvbnN0IG5ld1RvcEhlaWdodFB4ID1cblx0XHRcdFx0XHQocGFyc2VJbnQobmV3VG9wSGVpZ2h0KSAvIDEwMCkgKlxuXHRcdFx0XHRcdHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5vZmZzZXRIZWlnaHQ7XG5cblx0XHRcdFx0dG9wUGFuZWwuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3VG9wSGVpZ2h0UHh9cHhgO1xuXHRcdFx0XHRib3R0b21QYW5lbC5zdHlsZS5oZWlnaHQgPSBgY2FsYygxMDAlIC0gJHtuZXdUb3BIZWlnaHRQeH1weCAtICR7ZHJhZ2dlcldpZHRofSlgOyAvLyA1cHggaXMgZHJhZ2dlciBoZWlnaHRcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRhaW5lck9mZnNldExlZnQgPSBzZWxmW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0ub2Zmc2V0TGVmdDtcblx0XHRcdFx0Y29uc3QgbGVmdFBhbmVsID0gc2VsZltzdGFydFBhbmVsRWxlbWVudFN5bWJvbF07XG5cdFx0XHRcdGNvbnN0IHJpZ2h0UGFuZWwgPSBzZWxmW2VuZFBhbmVsRWxlbWVudFN5bWJvbF07XG5cdFx0XHRcdGxldCBuZXdMZWZ0V2lkdGggPSBlLmNsaWVudFggLSBjb250YWluZXJPZmZzZXRMZWZ0O1xuXG5cdFx0XHRcdGNvbnN0IG1pbiA9IHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1pbjtcblx0XHRcdFx0Y29uc3QgbWF4ID0gdGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWF4O1xuXG5cdFx0XHRcdGNvbnN0IGxlZnRBc1BlcmNlbnQgPVxuXHRcdFx0XHRcdChuZXdMZWZ0V2lkdGggLyB0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0ub2Zmc2V0V2lkdGgpICogMTAwO1xuXG5cdFx0XHRcdGlmIChwYXJzZUludChtaW4pID4gbGVmdEFzUGVyY2VudCkge1xuXHRcdFx0XHRcdG5ld0xlZnRXaWR0aCA9IG1pbjtcblx0XHRcdFx0fSBlbHNlIGlmIChwYXJzZUludChtYXgpIDwgbGVmdEFzUGVyY2VudCkge1xuXHRcdFx0XHRcdG5ld0xlZnRXaWR0aCA9IG1heDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXdMZWZ0V2lkdGggPSBsZWZ0QXNQZXJjZW50ICsgXCIlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZWZ0UGFuZWwuc3R5bGUud2lkdGggPSBgJHtuZXdMZWZ0V2lkdGh9YDtcblx0XHRcdFx0cmlnaHRQYW5lbC5zdHlsZS53aWR0aCA9IGBjYWxjKDEwMCUgLSAke25ld0xlZnRXaWR0aH0gLSAke2RyYWdnZXJXaWR0aH0pYDsgLy8gNXB4IGlzIGRyYWdnZXIgd2lkdGhcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3QgZHJhZ0V2ZW50SGFuZGxlciA9IChlKSA9PiB7XG5cdFx0XHRzZWxmW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuaXNEcmFnZ2luZyA9IGZhbHNlO1xuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBldmVudExpc3RlbmVyKTtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGV2ZW50TGlzdGVuZXIpO1xuXHRcdH07XG5cblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIGV2ZW50TGlzdGVuZXIpO1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGRyYWdFdmVudEhhbmRsZXIpO1xuXHR9KTtcblxuXHR0aGlzW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihcblx0XHRuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdFx0bGV0IGFwcGx5ID0gZmFsc2U7XG5cblx0XHRcdGlmIChcblx0XHRcdFx0bGFzdERpbWVuc2lvbiAhPT0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmN1cnJlbnREaW1lbnNpb25cblx0XHRcdCkge1xuXHRcdFx0XHRsYXN0RGltZW5zaW9uID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmN1cnJlbnREaW1lbnNpb247XG5cdFx0XHRcdGFwcGx5ID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGxhc3RUeXBlICE9PSB0aGlzLmdldE9wdGlvbihcInNwbGl0VHlwZVwiKSkge1xuXHRcdFx0XHRsYXN0VHlwZSA9IHRoaXMuZ2V0T3B0aW9uKFwic3BsaXRUeXBlXCIpO1xuXHRcdFx0XHRhcHBseSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhcHBseSkge1xuXHRcdFx0XHRhcHBseVBhbmVsRGltZW5zaW9ucy5jYWxsKHRoaXMpO1xuXHRcdFx0fVxuXHRcdH0pLFxuXHQpO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzcGxpdC1wYW5lbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhcnRQYW5lbFwiIGNsYXNzPVwicGFuZWxcIiBwYXJ0PVwic3RhcnRQYW5lbFwiPlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJzdGFydFwiPjwvc2xvdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImRyYWdnZXJcIiBwYXJ0PVwiZHJhZ2dlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJoYW5kbGVcIiBwYXJ0PVwiaGFuZGxlXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJlbmRQYW5lbFwiIGNsYXNzPVwicGFuZWxcIiBwYXJ0PVwiZW5kUGFuZWxcIj5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwiZW5kXCI+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChTcGxpdFBhbmVsKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBQYW5lbFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFBhbmVsU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdFBhbmVsU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBwYW5lbCB7IFxuOmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZTpcXFwiQ29uc29sYXNcXFwiLFxcXCJDb3VyaWVyIE5ld1xcXCIsXFxcIlJvYm90byBNb25vXFxcIixcXFwiU291cmNlIENvZGUgUHJvXFxcIixcXFwiRmlyYSBNb25vXFxcIixtb25vc3BhY2U7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTIpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6M3B4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHg7LS1tb25zdGVyLWRyYWdnZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aDo0cHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodDo1MHB4fS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLXRoZW1lLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMSl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0xe2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci1jb2xvci1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTIpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMntjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0zKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTN7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLWNvbG9yLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLXRoZW1lLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci1ib3JkZXItY29sb3ItNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItNCl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC00e2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci1jb2xvci1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS1jb250cm9sLWVsZW1lbnQsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpfS5tb25zdGVyLXRoZW1lLWJhY2tncm91bmQtaW5oZXJpdHtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQhaW1wb3J0YW50fS5tb25zdGVyLXRoZW1lLW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtb2Zme2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7cGFkZGluZzoxLjFlbTt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9W2RhdGEtcG9wcGVyLWFycm93XSxbZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtiYWNrZ3JvdW5kOmluaGVyaXQ7aGVpZ2h0OmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSp2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xKnZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKX1bZGF0YS1wb3BwZXItYXJyb3dde3Zpc2liaWxpdHk6aGlkZGVufVtkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb250ZW50OlxcXCJcXFwiO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO3Zpc2liaWxpdHk6dmlzaWJsZX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj10b3BdPltkYXRhLXBvcHBlci1hcnJvd117Ym90dG9tOmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkvMil9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49dG9wXT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1sZWZ0OnRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItdG9wOnRyYW5zcGFyZW50fWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWJvdHRvbV0+W2RhdGEtcG9wcGVyLWFycm93XXt0b3A6Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49Ym90dG9tXT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yaWdodDp0cmFuc3BhcmVudDtib3JkZXItdG9wOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWxlZnRdPltkYXRhLXBvcHBlci1hcnJvd117cmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49bGVmdF0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp0cmFuc3BhcmVudDtib3JkZXItbGVmdDp0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXRvcDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1yaWdodF0+W2RhdGEtcG9wcGVyLWFycm93XXtsZWZ0OmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkvMil9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49cmlnaHRdPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWxlZnQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJpZ2h0OnRyYW5zcGFyZW50O2JvcmRlci10b3A6dHJhbnNwYXJlbnR9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeSwubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeSwubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeSwubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmV7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLC5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1zdWNjZXNze3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLC5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXdhcm5pbmd7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXdhcm5pbmcsLm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3J7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLWVycm9yLC5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX06aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9jaztoZWlnaHQ6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTtoZWlnaHQ6ZmlsbC1hdmFpbGFibGU7aGVpZ2h0Oi1tb3otYXZhaWxhYmxlO2hlaWdodDpzdHJldGNoO292ZXJmbG93OmF1dG87d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym9yZGVyOjA7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO2hlaWdodDpmaWxsLWF2YWlsYWJsZTtoZWlnaHQ6LW1vei1hdmFpbGFibGU7aGVpZ2h0OnN0cmV0Y2g7bWFyZ2luOjA7b3V0bGluZTpub25lO292ZXJmbG93OmF1dG87cGFkZGluZzowO3Njcm9sbGJhci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO3Njcm9sbGJhci13aWR0aDp0aGluOy8vcG9zaXRpb246Zml4ZWQ7Ly90b3A6MDsvL2xlZnQ6MDsvL3JpZ2h0OjA7Ly9ib3R0b206MDsvL292ZXJmbG93OmF1dG87Ly9ib3gtc2l6aW5nOmJvcmRlci1ib3h9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5cbmltcG9ydCB7IFBhbmVsU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvcGFuZWwubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFBhbmVsIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IFBhbmVsRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIlBhbmVsRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBBIFNsaWRlclxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2xheW91dC9wYW5lbC9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvcGFuZWwtc2ltcGxlXG4gKlxuICogQHNpbmNlIDMuNTQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBQYW5lbCBjb21wb25lbnQgaXMgdXNlZCB0byBkaXNwbGF5IGEgcGFuZWwsIGlzbid0IHRoYXQgY29vbD9cbiAqL1xuY2xhc3MgUGFuZWwgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvbGF5b3V0L3BhbmVsXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaGVpZ2h0QWRqdXN0bWVudCBIZWlnaHQgYWRqdXN0bWVudFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0aGVpZ2h0QWRqdXN0bWVudDogNCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5WaWV3ZXJ9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXG5cdFx0Y2FsY0hlaWdodC5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgZG9tIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0YXR0YWNoUmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblxuXHRcdC8vIGRpc2FibGUgc2Nyb2xsaW5nIGluIHBhcmVudCBub2RlXG5cdFx0aWYgKHRoaXMucGFyZW50Tm9kZSAmJiB0aGlzLnBhcmVudE5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0dGhpcy5wYXJlbnROb2RlLnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBkb20gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItcGFuZWxcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1BhbmVsU3R5bGVTaGVldF07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjYWxjSGVpZ2h0KCkge1xuXHR0aGlzLnN0eWxlLmJveFNpemluZyA9IFwiYm9yZGVyLWJveFwiO1xuXG5cdGNvbnN0IGhlaWdodCA9IGNhbGN1bGF0ZU1heGltdW1IZWlnaHQuY2FsbCh0aGlzLCB0aGlzKTtcblx0aWYgKGhlaWdodCA8IDApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIGhlaWdodCBvZiBhbiBlbGVtZW50IGJhc2VkIG9uIHRoZSB3aW5kb3cncyBpbm5lciBoZWlnaHRcbiAqIEBwYXJhbSBlbGVtZW50XG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVNYXhpbXVtSGVpZ2h0KGVsZW1lbnQpIHtcblx0bGV0IHRvdGFsQm90dG9tQm9yZGVyID0gMDtcblx0bGV0IHRvdGFsQm90dG9tUGFkZGluZyA9IDA7XG5cdGxldCB0b3RhbEJvdHRvbU1hcmdpbiA9IDA7XG5cdGxldCB0b3RhbE91dGxpbmVIZWlnaHQgPSAwO1xuXHRsZXQgdG90YWxCb3hTaGFkb3dIZWlnaHQgPSAwO1xuXHRsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuXG5cdC8vIEdldCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgdG9wIG9mIHRoZSBlbGVtZW50IHRvIHRoZSB0b3Agb2YgdGhlIHZpZXdwb3J0XG5cdGNvbnN0IGRpc3RhbmNlRnJvbVRvcCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuXG5cdC8vIExvb3AgdGhyb3VnaCB0aGUgZWxlbWVudHMgdXAgdG8gdGhlIGJvZHkgdG8gc3VtIHVwIHRoZSBib3R0b20gYm9yZGVycywgcGFkZGluZywgYW5kIG1hcmdpblxuXHR3aGlsZSAoY3VycmVudEVsZW1lbnQgJiYgY3VycmVudEVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkpIHtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGN1cnJlbnRFbGVtZW50KTtcblxuXHRcdC8vIEJveCBzaXppbmdcblx0XHRjb25zdCBib3hTaXppbmcgPSBzdHlsZS5ib3hTaXppbmc7XG5cblx0XHQvLyBCb3JkZXJzLCBwYWRkaW5nLCBhbmQgbWFyZ2luXG5cdFx0Y29uc3QgYm9yZGVyQm90dG9tV2lkdGggPSBwYXJzZUZsb2F0KHN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKTtcblx0XHRjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nQm90dG9tKTtcblx0XHRjb25zdCBtYXJnaW5Cb3R0b20gPSBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpbkJvdHRvbSk7XG5cblx0XHQvLyBPdXRsaW5lIGFuZCBib3gtc2hhZG93XG5cdFx0Y29uc3Qgb3V0bGluZUhlaWdodCA9IHBhcnNlRmxvYXQoc3R5bGUub3V0bGluZVdpZHRoKTtcblx0XHQvLyBUaGlzIGlzIGEgc2ltcGxpZmljYXRpb247IGJveC1zaGFkb3cgaXMgbW9yZSBjb21wbGV4IHRvIHBhcnNlXG5cdFx0Y29uc3QgYm94U2hhZG93VmVydGljYWwgPSBwYXJzZUZsb2F0KHN0eWxlLmJveFNoYWRvdy5zcGxpdChcIiBcIilbM10gfHwgMCk7XG5cblx0XHQvLyBBY2N1bXVsYXRlIHZhbHVlc1xuXHRcdHRvdGFsQm90dG9tQm9yZGVyICs9IGlzTmFOKGJvcmRlckJvdHRvbVdpZHRoKSA/IDAgOiBib3JkZXJCb3R0b21XaWR0aDtcblx0XHR0b3RhbEJvdHRvbVBhZGRpbmcgKz1cblx0XHRcdGlzTmFOKHBhZGRpbmdCb3R0b20pIHx8IGJveFNpemluZyA9PT0gXCJib3JkZXItYm94XCIgPyAwIDogcGFkZGluZ0JvdHRvbTtcblx0XHR0b3RhbEJvdHRvbU1hcmdpbiArPSBpc05hTihtYXJnaW5Cb3R0b20pID8gMCA6IG1hcmdpbkJvdHRvbTtcblx0XHR0b3RhbE91dGxpbmVIZWlnaHQgKz0gaXNOYU4ob3V0bGluZUhlaWdodCkgPyAwIDogb3V0bGluZUhlaWdodDtcblx0XHR0b3RhbEJveFNoYWRvd0hlaWdodCArPSBpc05hTihib3hTaGFkb3dWZXJ0aWNhbCkgPyAwIDogYm94U2hhZG93VmVydGljYWw7XG5cblx0XHRjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUgfHwgY3VycmVudEVsZW1lbnQuaG9zdDtcblx0fVxuXG5cdC8vIENhbGN1bGF0ZSB0aGUgbWF4aW11bSBoZWlnaHQgYnkgc3VidHJhY3RpbmcgdGhlIGRpc3RhbmNlLCBib3JkZXJzLCBwYWRkaW5nLCBtYXJnaW4sIG91dGxpbmUsIGFuZCBib3gtc2hhZG93IGZyb20gdGhlIHdpbmRvdydzIGlubmVyIGhlaWdodFxuXHRjb25zdCBtYXhpbXVtSGVpZ2h0ID1cblx0XHR3aW5kb3cuaW5uZXJIZWlnaHQgLVxuXHRcdGRpc3RhbmNlRnJvbVRvcCAtXG5cdFx0dG90YWxCb3R0b21Cb3JkZXIgLVxuXHRcdHRvdGFsQm90dG9tUGFkZGluZyAtXG5cdFx0dG90YWxCb3R0b21NYXJnaW4gLVxuXHRcdHRvdGFsT3V0bGluZUhlaWdodCAtXG5cdFx0dG90YWxCb3hTaGFkb3dIZWlnaHQ7XG5cdHJldHVybiBtYXhpbXVtSGVpZ2h0ICsgdGhpcy5nZXRPcHRpb24oXCJoZWlnaHRBZGp1c3RtZW50XCIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0Y2FsY0hlaWdodC5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXMub3duZXJEb2N1bWVudC5ib2R5KTtcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZShkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbUGFuZWxFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoUGFuZWwpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRpbml0TWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0ZPUk1fUkVMT0FELCBBVFRSSUJVVEVfRk9STV9VUkwgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBsb2FkQW5kQXNzaWduQ29udGVudCB9IGZyb20gXCIuL3V0aWwvZmV0Y2gubWpzXCI7XG5cbmV4cG9ydCB7IFJlbG9hZCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkID0gU3ltYm9sKFwid2FzSW5pdGlhbGl6ZWRcIik7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIHJlbG9hZHMgdGhlIGNvbnRlbnQgb2YgYSB1cmwgYW5kIGVtYmVkcyBpdCBpbnRvIHRoZSBkb20uXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9yZWxvYWQucG5nXCI+XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyBgPG1vbnN0ZXItcmVsb2FkIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXJlbG9hZCcpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXJlbG9hZD48L21vbnN0ZXItcmVsb2FkPlxuICpcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtSZWxvYWR9IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9yZWxvYWQuanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKTtcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQSBzaW1wbGUgY29uZmlndXJhdGlvbiBjYW4gbG9vayBsaWtlIHRoaXNcbiAqXG4gKiBgYGBodG1sXG4gKiA8c2NyaXB0IGlkPVwiY29uZmlnXCJcbiAqICAgICAgICAgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIj5cbiAqICAgICB7XG4gKiAgICAgICAgIFwidXJsXCI6IFwiLi9jb250ZW50Lmh0bWxcIixcbiAqICAgICB9XG4gKiA8L3NjcmlwdD5cbiAqXG4gKiA8bW9uc3Rlci1yZWxvYWQgZGF0YS1tb25zdGVyLW9wdGlvbnMtc2VsZWN0b3I9XCIjY29uZmlnXCI+XG4gKiA8L21vbnN0ZXItcmVsb2FkPlxuICogYGBgXG4gKlxuICogSWYgeW91IHdhbnQgdG8gZGlzcGxheSBhIGxvYWRlciwgeW91IGNhbiBpbnNlcnQgYSBkaXYgd2l0aCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiYC5cbiAqIFRoZSBjb250ZW50IG9mIHRoaXMgZGl2IHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGxvYWRlZCBjb2RlLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXJlbG9hZCBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3Rvcj1cIiNjb25maWdcIj5cbiAqIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAqIExPQURFUiAuLi5cbiAqIDwvZGl2PlxuICogPC9tb25zdGVyLXJlbG9hZD5cbiAqIGBgYFxuICpcbiAqIElmIHlvdSBuZWVkIGFkZGl0aW9uYWwgc3RydWN0dXJlLCB5b3UgY2FuIHNpbXBseSBzcGVjaWZ5IGl0LlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXJlbG9hZCBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3Rvcj1cIiNjb25maWdcIj5cbiAqIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAqICAgPGRpdiBjbGFzcz1cImNvbFwiIGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCI+XG4gKiAgICAgICBMT0FERVIgLi4uXG4gKiAgIDwvZGl2PlxuICogPC9kaXY+XG4gKiA8L21vbnN0ZXItcmVsb2FkPlxuICogYGBgXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvZm9ybS9yZWxvYWQvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9yZWxvYWQtc2ltcGxlXG4gKlxuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHJlbG9hZCBjb250cm9sXG4gKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG4gKi9cbmNsYXNzIFJlbG9hZCBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS9yZWxvYWRcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmw9dW5kZWZpbmVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWxvYWQ9dW5kZWZpbmVkIGN1cnJlbnRseSB0aGUgdmFsdWVzIGRlZmluZWQgYXJlIGBvbnNob3dgIGFuZCBgYWx3YXlzYC4gVGhlIGRlZmF1bHQgYG9uc2hvd2AgcmVtb3ZlcyB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29udGVudCBpcyBvbmx5IGxvYWRlZCBvbmNlLiByZWxvYWRpbmcgb2YgdGhlIGNvbnRlbnQgZG9lcyBub3Qgb2NjdXIuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWx0ZXI9dW5kZWZpbmVkIGRvbSBzZWxlY3RvcnMgdG8gc2VhcmNoIGZvciBlbGVtZW50cywgaWYgdW5kZWZpbmVkIHRoZW4gZXZlcnl0aGluZyBpcyB0YWtlblxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlByb2Nlc3NvcltdfSBwcm9jZXNzb3JzXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaCBGZXRjaCBbc2VlIFVzaW5nIEZldGNoIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJL1VzaW5nX0ZldGNoKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gucmVkaXJlY3Q9ZXJyb3Jcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1ldGhvZD1HRVRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1vZGU9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLmNyZWRlbnRpYWxzPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaC5oZWFkZXJzPXtcImFjY2VwdFwiOlwidGV4dC9odG1sXCJ9fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUuY2FsbCh0aGlzKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0c2hhZG93TW9kZTogbnVsbCxcblx0XHRcdFx0dXJsOiBudWxsLFxuXHRcdFx0XHRyZWxvYWQ6IFwib25zaG93XCIsXG5cdFx0XHRcdGZpbHRlcjogbnVsbCxcblx0XHRcdFx0ZmV0Y2g6IHtcblx0XHRcdFx0XHRyZWRpcmVjdDogXCJlcnJvclwiLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRtb2RlOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0XHRhY2NlcHQ6IFwidGV4dC9odG1sXCIsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hpY2ggYXR0cmlidXRlcyBhcmUgdG8gYmUgbW9uaXRvcmVkIGJ5IGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKWAuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ1tdfVxuXHQgKi9cblx0c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG5cdFx0Y29uc3QgbGlzdCA9IHN1cGVyLm9ic2VydmVkQXR0cmlidXRlcztcblx0XHRsaXN0LnB1c2goQVRUUklCVVRFX0ZPUk1fVVJMKTtcblx0XHRyZXR1cm4gbGlzdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0W2luaXRNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2luaXRNZXRob2RTeW1ib2xdKCk7XG5cblx0XHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRcdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9GT1JNX1VSTF0gPSAodXJsKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKSkge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcInVybFwiLCBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJ1cmxcIiwgdW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyB1cmxcblx0ICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcblx0ICogQHRocm93cyB7RXJyb3J9IG5vdCBmb3VuZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG5cdCAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uRm9ybX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdEludGVyc2VjdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXJlbG9hZFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvYWQgY29udGVudCBmcm9tIHVybFxuXHQgKlxuXHQgKiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB0aGF0IHdpdGggdGhpcyBmdW5jdGlvbiB0aGUgbG9hZGluZyBpcyBleGVjdXRlZFxuXHQgKiBkaXJlY3RseS4gaXQgaXMgbG9hZGVkIGFzIHdlbGwgd2hlbiB0aGUgZWxlbWVudCBpcyBub3QgdmlzaWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSB1cmxcblx0ICovXG5cdGZldGNoKHVybCkge1xuXHRcdGlmIChpc1N0cmluZyh1cmwpIHx8IHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMLCBgJHt1cmx9YCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxvYWRDb250ZW50LmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIGBgYFxuICogPG1vbnN0ZXItc2VsZWN0IGRhdGEtbW9uc3Rlci11cmw9XCJodHRwczovL2V4YW1wbGUuY29tL1wiPjwvbW9uc3Rlci1zZWxlY3Q+XG4gKiBgYGBcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMoKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuXHRjb25zdCB1cmwgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpO1xuXG5cdGlmIChpc1N0cmluZyh1cmwpKSB7XG5cdFx0b3B0aW9uc1tcInVybFwiXSA9IG5ldyBVUkwodXJsLCBkb2N1bWVudC5sb2NhdGlvbikudG9TdHJpbmcoKTtcblx0fVxuXG5cdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpKSB7XG5cdFx0b3B0aW9uc1tcInJlbG9hZFwiXSA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1JFTE9BRCkudG9Mb3dlckNhc2UoKTtcblx0fVxuXG5cdHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBkZWZhdWx0IHNsb3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyB1cmxcbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcbiAqIEB0aHJvd3Mge0Vycm9yfSByZXF1ZXN0IGZhaWxlZFxuICogQHRocm93cyB7RXJyb3J9IG5vdCBmb3VuZFxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQGZpcmVzIG1vbnN0ZXItZmV0Y2hlZFxuICovXG5mdW5jdGlvbiBpbml0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSB7XG5cdGlmICh0aGlzW2ludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWRdID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpc1tpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkXSA9IHRydWU7XG5cblx0Y29uc3Qgb3B0aW9ucyA9IHtcblx0XHR0aHJlc2hvbGQ6IFswLjVdLFxuXHR9O1xuXG5cdGNvbnN0IGNhbGxiYWNrID0gKGVudHJpZXMsIG9ic2VydmVyKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBbLCBlbnRyeV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChlbnRyeS5pc0ludGVyc2VjdGluZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyB1bmRlZmluZWQgb3IgYWx3YXlzIGRvIHRoZSBzYW1lXG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcInJlbG9hZFwiKSA9PT0gXCJvbnNob3dcIikge1xuXHRcdFx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0bG9hZENvbnRlbnQuY2FsbCh0aGlzKS5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuXHRvYnNlcnZlci5vYnNlcnZlKHRoaXMpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBkZWZhdWx0IHNsb3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyB1cmxcbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcbiAqIEB0aHJvd3Mge0Vycm9yfSByZXF1ZXN0IGZhaWxlZFxuICogQHRocm93cyB7RXJyb3J9IG5vdCBmb3VuZFxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IGNsaWVudCBlcnJvclxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2ZcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5mdW5jdGlvbiBsb2FkQ29udGVudCgpIHtcblx0Y29uc3QgdXJsID0gdGhpcy5nZXRPcHRpb24oXCJ1cmxcIiwgdW5kZWZpbmVkKTtcblx0aWYgKCFpc1N0cmluZyh1cmwpIHx8IHVybCA9PT0gXCJcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgdXJsXCIpO1xuXHR9XG5cblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiZmV0Y2hcIiwge30pO1xuXG5cdGxldCBwYXJlbnROb2RlID0gdGhpcztcblx0aWYgKHRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHBhcmVudE5vZGUgPSB0aGlzLnNoYWRvd1Jvb3Q7XG5cdH1cblxuXHRsZXQgY29udGFpbmVyID0gcGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udGFpbmVyXWApO1xuXHRsZXQgY3VycmVudERpc3BsYXlNb2RlID0gY29udGFpbmVyPy5zdHlsZT8uZGlzcGxheTtcblxuXHRpZiAoY3VycmVudERpc3BsYXlNb2RlID09PSB1bmRlZmluZWQpIHtcblx0XHRjdXJyZW50RGlzcGxheU1vZGUgPSBcImluaGVyaXRcIjtcblx0fVxuXG5cdGlmICghKGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0Y29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0XHRjb250YWluZXIuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcImNvbnRhaW5lclwiKTtcblx0XHRwYXJlbnROb2RlLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cdH1cblxuXHRyZXR1cm4gbG9hZEFuZEFzc2lnbkNvbnRlbnQoY29udGFpbmVyLCB1cmwsIG9wdGlvbnMsIHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyXCIpKVxuXHRcdC50aGVuKCgpID0+IHtcblx0XHRcdGlmIChjdXJyZW50RGlzcGxheU1vZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb250YWluZXIuc3R5bGUuZGlzcGxheSA9IGN1cnJlbnREaXNwbGF5TW9kZTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0cmV0dXJuIHRoaXMuaW5uZXJIVE1MO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoUmVsb2FkKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudCwgYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wgfSBmcm9tIFwiLi9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBDdXN0b21Db250cm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGF0dGFjaGVkSW50ZXJuYWxTeW1ib2wgPSBTeW1ib2woXCJhdHRhY2hlZEludGVybmFsXCIpO1xuXG4vKipcbiAqIFRoaXMgaXMgYSBiYXNlIGNsYXNzIGZvciBjcmVhdGluZyBjdXN0b20gY29udHJvbHMgdXNpbmcgdGhlIHBvd2VyIG9mIEN1c3RvbUVsZW1lbnQuXG4gKlxuICogQWZ0ZXIgZGVmaW5pbmcgYSBgQ3VzdG9tRWxlbWVudGAsIHRoZSBgcmVnaXN0ZXJDdXN0b21FbGVtZW50YCBtZXRob2QgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IGNsYXNzIG5hbWUuIE9ubHkgdGhlblxuICogd2lsbCB0aGUgdGFnIGRlZmluZWQgdmlhIHRoZSBgZ2V0VGFnYCBtZXRob2QgYmUgbWFkZSBrbm93biB0byB0aGUgRE9NLlxuICpcbiAqIFRoaXMgY29udHJvbCB1c2VzIGBhdHRhY2hJbnRlcm5hbHMoKWAgdG8gaW50ZWdyYXRlIHRoZSBjb250cm9sIGludG8gYSBmb3JtLiBJZiB0aGUgdGFyZ2V0IGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnRcbiAqIHRoaXMgbWV0aG9kLCB0aGUgW3BvbHlmaWxsXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9lbGVtZW50LWludGVybmFscy1wb2x5ZmlsbCkgY2FuIGJlIHVzZWQuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhlIG9iamVjdCB1c2luZyB0aGUgZnVuY3Rpb24gYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKWAuXG4gKlxuICogVGhpcyBjb250cm9sIHVzZXMgYGF0dGFjaEludGVybmFscygpYCB0byBpbnRlZ3JhdGUgdGhlIGNvbnRyb2wgaW50byBhIGZvcm0uIElmIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhpcyBtZXRob2QsIHRoZSBQb2x5ZmlsbCBmb3IgYXR0YWNoSW50ZXJuYWxzKCkgY2FuIGJlIHVzZWQ6IHtAbGluayBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9lbGVtZW50LWludGVybmFscy1wb2x5ZmlsbHxlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbH0uXG4gKlxuICogTGVhcm4gbW9yZSBhYm91dCBXSUNHIFdlYiBDb21wb25lbnRzOiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvd2ViY29tcG9uZW50c3xXSUNHIFdlYiBDb21wb25lbnRzfS5cbiAqXG4gKiBSZWFkIHRoZSBIVE1MIHNwZWNpZmljYXRpb24gZm9yIEN1c3RvbSBFbGVtZW50czoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2N1c3RvbS1lbGVtZW50c3xDdXN0b20gRWxlbWVudHN9LlxuICpcbiAqIFJlYWQgdGhlIEhUTUwgc3BlY2lmaWNhdGlvbiBmb3IgQ3VzdG9tIEVsZW1lbnQgUmVhY3Rpb25zOiB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9kZXYvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnQtcmVhY3Rpb25zfEN1c3RvbSBFbGVtZW50IFJlYWN0aW9uc30uXG4gKlxuICogQHN1bW1hcnkgQSBiYXNlIGNsYXNzIGZvciBjdXN0b20gY29udHJvbHMgYmFzZWQgb24gQ3VzdG9tRWxlbWVudC5cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTQuMFxuICovXG5jbGFzcyBDdXN0b21Db250cm9sIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGUgY29uc3RydWN0b3IgbWV0aG9kIG9mIEN1c3RvbUNvbnRyb2wsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGNyZWF0aW5nIGEgbmV3IGluc3RhbmNlLlxuXHQgKiBJdCBjaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBzdXBwb3J0cyBgYXR0YWNoSW50ZXJuYWxzKClgIGFuZCBpbml0aWFsaXplcyBhbiBpbnRlcm5hbCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudFxuXHQgKiBpZiBzdXBwb3J0ZWQuIEFkZGl0aW9uYWxseSwgaXQgaW5pdGlhbGl6ZXMgYSBNdXRhdGlvbk9ic2VydmVyIHRvIHdhdGNoIGZvciBhdHRyaWJ1dGUgY2hhbmdlcy5cblx0ICpcblx0ICogU2VlIHRoZSBsaW5rcyBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcblx0ICoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2RvbS1jdXN0b21lbGVtZW50cmVnaXN0cnktZGVmaW5lfEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5kZWZpbmUoKX1cblx0ICoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2RvbS1jdXN0b21lbGVtZW50cmVnaXN0cnktZ2V0fEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5nZXQoKX1cblx0ICogYW5kIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFsc3xFbGVtZW50SW50ZXJuYWxzfVxuXHQgKlxuXHQgKiBAaW5oZXJpdGRvY1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHQvLyBjaGVjayBpZiBlbGVtZW50IHN1cHBvcnRzIGBhdHRhY2hJbnRlcm5hbHMoKWBcblx0XHRpZiAodHlwZW9mIHRoaXNbXCJhdHRhY2hJbnRlcm5hbHNcIl0gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0dGhpc1thdHRhY2hlZEludGVybmFsU3ltYm9sXSA9IHRoaXMuYXR0YWNoSW50ZXJuYWxzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGBhdHRhY2hJbnRlcm5hbHMoKWAgaXMgbm90IHN1cHBvcnRlZCwgc28gYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0XHRcdHRocm93IEVycm9yKFxuXHRcdFx0XHRcInRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XCIsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vIGluaXRpYWxpemUgYSBNdXRhdGlvbk9ic2VydmVyIHRvIHdhdGNoIGZvciBhdHRyaWJ1dGUgY2hhbmdlc1xuXHRcdGluaXRPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWNvbnRyb2xAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hpY2ggYXR0cmlidXRlcyBhcmUgdG8gYmUgbW9uaXRvcmVkIGJ5IGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKWAuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ1tdfVxuXHQgKiBAc2luY2UgMS4xNS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRyZXR1cm4gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZGluZyBhIHN0YXRpYyBgZm9ybUFzc29jaWF0ZWRgIHByb3BlcnR5LCB3aXRoIGEgdHJ1ZSB2YWx1ZSwgbWFrZXMgYW4gYXV0b25vbW91cyBjdXN0b20gZWxlbWVudCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5cblx0ICpcblx0ICogQHNlZSBbYXR0YWNoSW50ZXJuYWxzKClde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9hdHRhY2hJbnRlcm5hbHN9XG5cdCAqIEBzZWUgW0N1c3RvbSBFbGVtZW50cyBGYWNlIEV4YW1wbGVde0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2N1c3RvbS1lbGVtZW50cy1mYWNlLWV4YW1wbGV9XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRzdGF0aWMgZm9ybUFzc29jaWF0ZWQgPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdGRvY1xuXHQgKiovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cyk7XG5cdH1cblxuXHQvKipcblx0ICogTXVzdCBiZSBvdmVycmlkZGVuIGJ5IGEgZGVyaXZlZCBjbGFzcyBhbmQgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbC5cblx0ICpcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscyksIHdoaWNoIGlzIGEgcGFydCBvZiB0aGUgd2ViIHN0YW5kYXJkIGZvciBjdXN0b20gZWxlbWVudHMuXG5cdCAqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgdmFsdWUgZ2V0dGVyIG11c3QgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3Ncblx0ICovXG5cdGdldCB2YWx1ZSgpIHtcblx0XHR0aHJvdyBFcnJvcihcInRoZSB2YWx1ZSBnZXR0ZXIgbXVzdCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZGVyaXZlZCBjbGFzc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNdXN0IGJlIG92ZXJyaWRkZW4gYnkgYSBkZXJpdmVkIGNsYXNzIGFuZCBzZXQgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBBUEldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKSwgd2hpY2ggaXMgYSBwYXJ0IG9mIHRoZSB3ZWIgc3RhbmRhcmQgZm9yIGN1c3RvbSBlbGVtZW50cy5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIHZhbHVlIHNldHRlciBtdXN0IGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzXG5cdCAqL1xuXHRzZXQgdmFsdWUodmFsdWUpIHtcblx0XHR0aHJvdyBFcnJvcihcInRoZSB2YWx1ZSBzZXR0ZXIgbXVzdCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZGVyaXZlZCBjbGFzc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtOb2RlTGlzdH1cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvbGFiZWxzfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCBsYWJlbHMoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LmxhYmVscztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH1cblx0ICovXG5cdGdldCBuYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0IHR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuZ2V0VGFnKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7VmFsaWRpdHlTdGF0ZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEBzZWUgW1ZhbGlkaXR5U3RhdGVde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9WYWxpZGl0eVN0YXRlfVxuXHQgKiBAc2VlIFt2YWxpZGl0eV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL3ZhbGlkaXR5fVxuXHQgKi9cblx0Z2V0IHZhbGlkaXR5KCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy52YWxpZGl0eTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvdmFsaWRhdGlvbk1lc3NhZ2Vcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqL1xuXHRnZXQgdmFsaWRhdGlvbk1lc3NhZ2UoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LnZhbGlkYXRpb25NZXNzYWdlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvd2lsbFZhbGlkYXRlXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Z2V0IHdpbGxWYWxpZGF0ZSgpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8ud2lsbFZhbGlkYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvc3RhdGVzXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Z2V0IHN0YXRlcygpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8uc3RhdGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hUTUxGb250RWxlbWVudHxudWxsfVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL2Zvcm1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqL1xuXHRnZXQgZm9ybSgpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8uZm9ybTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBgYGBcblx0ICogLy8gVXNlIHRoZSBjb250cm9sJ3MgbmFtZSBhcyB0aGUgYmFzZSBuYW1lIGZvciBzdWJtaXR0ZWQgZGF0YVxuXHQgKiBjb25zdCBuID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ25hbWUnKTtcblx0ICogY29uc3QgZW50cmllcyA9IG5ldyBGb3JtRGF0YSgpO1xuXHQgKiBlbnRyaWVzLmFwcGVuZChuICsgJy1maXJzdC1uYW1lJywgdGhpcy5maXJzdE5hbWVfKTtcblx0ICogZW50cmllcy5hcHBlbmQobiArICctbGFzdC1uYW1lJywgdGhpcy5sYXN0TmFtZV8pO1xuXHQgKiB0aGlzLnNldEZvcm1WYWx1ZShlbnRyaWVzKTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7RmlsZXxzdHJpbmd8Rm9ybURhdGF9IHZhbHVlXG5cdCAqIEBwYXJhbSB7RmlsZXxzdHJpbmd8Rm9ybURhdGF9IHN0YXRlXG5cdCAqIEByZXR1cm4ge3VuZGVmaW5lZH1cblx0ICogQHRocm93cyB7RE9NRXhjZXB0aW9ufSBOb3RTdXBwb3J0ZWRFcnJvclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9zZXRGb3JtVmFsdWVcblx0ICovXG5cdHNldEZvcm1WYWx1ZSh2YWx1ZSwgc3RhdGUpIHtcblx0XHRnZXRJbnRlcm5hbC5jYWxsKHRoaXMpLnNldEZvcm1WYWx1ZSh2YWx1ZSwgc3RhdGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBmbGFnc1xuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IG1lc3NhZ2Vcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gYW5jaG9yXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvc2V0VmFsaWRpdHlcblx0ICogQHJldHVybiB7dW5kZWZpbmVkfVxuXHQgKiBAdGhyb3dzIHtET01FeGNlcHRpb259IE5vdFN1cHBvcnRlZEVycm9yXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0c2V0VmFsaWRpdHkoZmxhZ3MsIG1lc3NhZ2UsIGFuY2hvcikge1xuXHRcdGdldEludGVybmFsLmNhbGwodGhpcykuc2V0VmFsaWRpdHkoZmxhZ3MsIG1lc3NhZ2UsIGFuY2hvcik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9jaGVja1ZhbGlkaXR5XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gTm90U3VwcG9ydGVkRXJyb3Jcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqL1xuXHRjaGVja1ZhbGlkaXR5KCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5jaGVja1ZhbGlkaXR5KCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9yZXBvcnRWYWxpZGl0eVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICogQHRocm93cyB7RE9NRXhjZXB0aW9ufSBOb3RTdXBwb3J0ZWRFcnJvclxuXHQgKi9cblx0cmVwb3J0VmFsaWRpdHkoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LnJlcG9ydFZhbGlkaXR5KCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgYGZvcm1gIGF0dHJpYnV0ZSBvZiB0aGUgY3VzdG9tIGNvbnRyb2wgdG8gdGhlIGBpZGAgb2YgdGhlIHBhc3NlZCBmb3JtIGVsZW1lbnQuXG5cdCAqIElmIG5vIGZvcm0gZWxlbWVudCBpcyBwYXNzZWQsIHJlbW92ZXMgdGhlIGBmb3JtYCBhdHRyaWJ1dGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7SFRNTEZvcm1FbGVtZW50fSBmb3JtIC0gVGhlIGZvcm0gZWxlbWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgY29udHJvbFxuXHQgKi9cblx0Zm9ybUFzc29jaWF0ZWRDYWxsYmFjayhmb3JtKSB7XG5cdFx0aWYgKGZvcm0pIHtcblx0XHRcdGlmIChmb3JtLmlkKSB7XG5cdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKFwiZm9ybVwiLCBmb3JtLmlkKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJmb3JtXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIG9yIHJlbW92ZXMgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlIG9mIHRoZSBjdXN0b20gY29udHJvbCBiYXNlZCBvbiB0aGUgcGFzc2VkIHZhbHVlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGRpc2FibGVkIC0gV2hldGhlciBvciBub3QgdGhlIGNvbnRyb2wgc2hvdWxkIGJlIGRpc2FibGVkXG5cdCAqL1xuXHRmb3JtRGlzYWJsZWRDYWxsYmFjayhkaXNhYmxlZCkge1xuXHRcdGlmIChkaXNhYmxlZCkge1xuXHRcdFx0aWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpKSB7XG5cdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgXCJcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbW9kZVxuXHQgKi9cblx0Zm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKHN0YXRlLCBtb2RlKSB7fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Zm9ybVJlc2V0Q2FsbGJhY2soKSB7XG5cdFx0dGhpcy52YWx1ZSA9IFwiXCI7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG4gKiBAdGhpcyBDdXN0b21Db250cm9sXG4gKi9cbmZ1bmN0aW9uIGdldEludGVybmFsKCkge1xuXHRpZiAoIShhdHRhY2hlZEludGVybmFsU3ltYm9sIGluIHRoaXMpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XCIsXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiB0aGlzW2F0dGFjaGVkSW50ZXJuYWxTeW1ib2xdO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAdGhpcyBDdXN0b21Db250cm9sXG4gKi9cbmZ1bmN0aW9uIGluaXRPYnNlcnZlcigpIHtcblx0Ly8gdmFsdWVcblx0dGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bXCJ2YWx1ZVwiXSA9ICgpID0+IHtcblx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIikpO1xuXHR9O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEJ1dHRvblN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IEJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRCdXR0b25TdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGJ1dHRvbiB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja30ubW9uc3Rlci1idXR0b24tcHJpbWFyeSxidXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeSwubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH1idXR0b246YWN0aXZlLGJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWJ1dHRvbjphY3RpdmV7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9Lm1vbnN0ZXItYnV0dG9uLWJhciwubW9uc3Rlci1idXR0b24tZ3JvdXB7YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6c3RyZXRjaDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2JveC1zaXppbmc6Ym9yZGVyLWJveDtnYXA6MDttYXJnaW46MXJlbSAwfS5tb25zdGVyLWJ1dHRvbi1ncm91cD46bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkqLTEpfS5tb25zdGVyLWJ1dHRvbi1ncm91cCA6aG92ZXJ7Ym94LXNoYWRvdzpub25lfWJ1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe2J1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpSYWxld2F5O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFGSjRBQklBQUFBQXQzQUFBRklRQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHb0U4Rys0NkhJVThCbUEvVTFSQlZFUUFoUWdJZ1FvSm54UVJDQXFCdWd5Qm1uQUxoQ0lBQVRZQ0pBT0lRQVFnQllVVUJ5QU1neHdiZmFRWGFKZWZtTnowWm9sM3Y2MGNQZVpNcEc0SEpTams1cUlJTmc2Q0dNZ2xaZi8vbjNGMGpPR0dEUkExclhlSW5jSklVa05IR242OXFNUkRVOFphampzOVVic210bnFuRTN2M3ZxaVFtZlJRcExrS1c2UVp3YWw2czVJVWlKTlVTVUcvT3dvRFk2QjY3NU9qU2prRFNTTXUycGVkcHU5dkpJTFVsSmQ3MDdEK2VMSHBqWURJNGUxdURuTGpISHZ4cERYR015ZHVMTG4xcXQwRkNRT3lGc0paRTEra0pxM1QrSWU3QkpGSU5PQU5iaTl2VFV6aEk3VzRHbVVMMGxXalQvRlFRaS9tKyt4dVBQMDJvbVJIZTVwbjREZ2ZOWmZuK1I5ejk3OXRtRWVOYXExUnhScUhUalRQTkEySkZFZ3JIZG8vbnQvVy81emJnR0N4aWE2RWtWaUEyRmhZR0l0Um1FMVp2VlV2cXRTdGI3TXZyZDNXNyt0MiswWGRvVG56empZYnA3bVNITEFDa2hNV2dDVEw2czBXdjBBVW9oSmZFcUUzb3BQZDU4aWtKbktsbyszdWFlU0hZSjZmY0ljWGpkK3JLVUVzYUVsVHFsVWxWUm0vTitlLzhpUDBMNUFLb3pObEozLzlpQndzaE02djVKSVVKeWtnVDNmZHJPbXE2TGNzK1orcS9Yc0FYRnhFRWlRSVVhS29zRm43Y3RUKzdCQlM1ZHFEb2xKWHVuYmw3cnR0ekQvdjM4NExmdEphZ0ZGQUxZUEU1QTdnbk1yWkJodDRsWHFzYlpLbWJkcTBUdE9tcG1nTml1Z00yUFlCYzczTXJqcTdHTHNvWEhjVHB0OXVQdkZEejhlTjNnK3N4clBRQXc2RFRGTnAvT1pJOWlpbk5pdFpoUm1wUU9Da2RvQmRBTmpWV2xhdk1pdHdETkpYL3BZSUFrVnduT1Avdlc1eHpvTXc3U0FGQUtVK1p6L2tuUC9aOWorT2Rmckw4S2UydmRLYm1waHV4SlN1TDhFVUFnZ0hJaUJIUCs0NDRFRHp2MVBUUTNZa09jT1NsVEhtajZVc2RmbzJMKy9qcFllN0lIV2NRVWdjZ2twTEZSMVlUVzhDR0tRWDliOEdGQUFBSDl0bzRSSFE2R0x2RlJyaTREaXdUekFBRERNS0RQci9mWjNWL3FkZ1Bta0d6S1RFbVdFWGI3UTN0dGdUWXFvMm5QNi8rOTdYZitGLzlKSEFWc0lJY0FDQlp3UnlrR1Q3Z0NSOFZvaEpjVU9PU0RqaVNiQXBoTW96bTJKUnB0QnRVVzY5WGJORkczSVZ5MktMb2s0OC9MZnNtNTI3SWFxQkxNdUJiT0ZJd2VGVWQwMXZlTCtZOHhXaHR6Y3FUbTJDSVRjNWVMSndTSTRmWWxMWUZJVkhBcy8vVDUzTjQvWXgxaEtHVStIU3FFcmRwUFBuczZmcXFXSnNOYlphQ2xRdGpsT0xVTXNoY2RvQTVUUXNzNEpMYzkwU3hDT01NVUs0S1A5TnNocHpwWDR2d3hLQ2hDQVNSRVJFL0xLc1dSbEp3TktBY1RuWEFoRXkzcjFLSGNaYS9ZZFg1ODQyMC9pYVhtdEdob0NBaUlpQVIyM3YvUDkrS1RBQ0FONWhka0MzeFVDNEVMc2dndmtSMmtyRWpZU0V2MEJLU21IQ2hJdllPQ0FKa0tRZ3lZTU0yUW9VTXpDbzE2Qko4NXFBV0NDZEhlazNBQjBPREwxTHEwUGdUZTNoU3cyZmhpNFhoUHVldVFXRUg2eHRJRVFBYkcyTm01b1Y1NFFGUCt5S2dPMkQ0VDV0L3d6MlhXOTIvcnBxcExUU0lQOHFWOXZMdk9kczBOTFd5WDUxSzZvZmJ2UFpFMXBhZjd3MzE4QzladGhxN2YzMmJmdUw2NFZaSHc1MTRZc201bGdmTmJmRzdXOWxzVUE0RUd6NzIzdnh3R3pwNGZSUittUDhMczVCN0tCMmVESlhjNnh3bEc2OTAydWc3QXpMQThOWTIxQjJkQi9QNXFmT1Y4dDFvbnlMNWpaRERmUUk1Umc4RDk4RnZIc3ZjbEh1SnNyZHZzSnJwYy9Uci9ndS9FZlpKelhVenBXYURqN003K1VQOC84RWtBQVZhQVMvQ1IrWHMvSk40WWFJY08xeEhaY1VhTU1ia2xycEt5N05mUUpLUWNVUmFnb0dtQ1crSEE2RU52YmczM3NsMnBJWVJtRTliSUhiMG1BNmtrNmxONUdkeU1ONUVibVFoeEhLbHdNZ1Q1OGNndzdwZFVSejduZk1jUWZjVTN2SWN6VmtkcmhYOFhIcTQwMTJ0Rk9kN2tUL2E3cDdtODNXQTcxRjdhTzlNK2RqdmRkNmo3ZnhtK0QxUHUzejN1aXJ2bXV5emE1M3RydjkzbFRiODJSVDJLYUZWVUtNTlAzNkJ2UU1DbzBHc0Vka0w4cyt6TGcxRXhiTTBOZ0NXQXhnemY4MkRHMUtYTWZjNHJqTmNRZkhLeFNDdVJ1Qkk1QW9kREREa0dkVjhDblZWRW1FTWFpbjRTYTBBWFRJMFJCTnBPWUFMVnExYVY5dnhKaVV6SEtXQ2lzNm1wMEJ1a3gwNjlHcjc0c25WTmJzb0Nta1ZNb3A1K3BER2FXejJzTERyMmlOdCtvWk8wYjM2WVNJaldjeHZubE4weDBWaGxZb1c0VVJqWFhLeUxHM1kzcW9MZEVhekhBRUVvVnVNbDNERGVFUlZwRy9qZVRFUjBDVVpFVTFtb3RxRm9pd0pGS1VhREZpYWNTbEJKckVqU1FLSi9DU0ZTbVNLazE2MVFsa2RLZXlTWFl6c2RYS2k2STlpa05KTXRDVUtsT3VRcVVxMVZIVDF6cTYrbHpmUU5BSWE1SnBSb3ZXYUVQN1p4dU5tVGpNTEJZdXEzWFVUZ05kUkRkNlVxOUEzM2NieEF6eERET04wSXhhTlZheGQvL3MvYWp4QUU2Sm5QYkZHWmt1QzN1YU5VOEVzRFNMWlZteE9qMVBkOEhReFhTcGVka1hhd2JXNndabzgrNkRyaXVRRkZ3NUlwdm5KaDYvWmdGSks5MzBhRU0yWEozeUpCMERIb3BoYnFnMHVya3ZNSWdZbHRiR1JQY2RrZDdWai9OVjRwYkFiYSsvRTRCakNnOXA1WmVyaS9wZE0wQ0cvN3RYWk54VkUrNmJZYXZRbjZ1bVd3eTNGWGY2Z2crWG5BdEhEZ2prUE5pVWJxcG93dkRVdmJSbGNqNVhaSFl6VjhKaTRObDF2anNPaHJNYXhPSHhlRHdlanovVklISlhuNkgwd2hnNnFGT0VVcVFvMFdMRTBvaExDVEtKMHlRNUxVOXlSUXBTcFVsZlpuQVNCa1dwbENsWG9WS1Y2cWliVEJ0TW1RS1lZV0hWVVVmdEdJdDYybGRuTUgzRXBpVTBxVlFxSGJDTHhPVStFNC8xWExmQkVoektoZ1VjZ1VTaGZ4d21EejlHNUVSQUFITDdGSFJLUXlybnd1eFFmNXJoSEJFQlJJb1NMVVlzelViYzRydE1kcGwyNkZnZDU1dGdRRzh4L2ZBWjJKekl2R2JtbHJjWEFtM3dYS2E3RWxmUGNTMnR4ZnErZWdmaUhHb0RNeHlCUktIdnkzU0ozMFE2VjgrNm1kZlpzYUZWM2VPVUtzV015bmtoeUwxdTRWSTBMMVNKTEl4WHlZenBMeU5xaVd6MFhUcGthVHluMVpEdGk5MG1ZMDJ2MHRVcXR6U0NsK3FySzdySXV2MXY5UkQwc2d4cUdiSm9HR2ZFa2xFMVl6cjI4TzFsMktld1g5TjRBRGFOMWI3TDBJYVJUWE91eTl5aXU4MnBPd0hRQkMrcGxkQ3JPbUswTWcvcjF2UllFbTNEQkVjZ1VlZ21VeDAzRzQrd2l0UWdPZkVSRUNWWlVZM200dG1FSXZ3VUtVcTBHTEUwNGxJQ1R1STB5VHF0RmNsRUNsS2xTYTg2V0VaM0pKdnNGV2k3SXhLSk9Cd09oOFBoY0VUclJOM3REcGxNSnBOaFJJYWlxQWlHWVJnbWNia3N5NE5vei9yb2ZRTDdLY2FsTkQwRk9XM1JHWnVPQlIyeG1WTXhrVWdrRGwwWDd1Sml1dFM4Yk5HYUUrdi9aUU93cWU4NkdJSWVFc0N1b3ZXWWZDcTJ0dnBNT0JON016TzY4R1dYTGh0bWdXMmZmZUhwMU11N3F3WDVORHdUa3BDU2NlZkJreGR2ZmluQVJJUklVYUxGaUtVUmx4SUFpWkUwclZxNjVJb1VTWlVtdmVxVU1ycHMvejFaV0VaNVlCZ0dBQUFBQUFDQTBXWnNkMUNwK0h3K24yL2NPbGs0ckRwU2wxSzNIcjM2amcxQ1R0d3pPY051Q1hZTmdpRFlob3RIMW9nT0xSU3V4OG5pbDRyMmlZYXYwbm9yelh2WjJuWmpaTGZhS0QrVlJnSC9mZ05tcGtGYmhnaUdpVWFjR2ZYTm1LNDlGUHZZOXR2YmNUbTc1KzNmZGFtVzZZU3R3a2R6YUNIWmN2cTBDUzRpVTVabU54TFhHQmUvclFvSGpNUDEvUUVHVk1aRkpnYkRESi81VDNleUJjdkdQU3FUaW1KY0MrWVFVanFHdjJuQzdxM25CMERPcXYyRzNWdmxJaEtJVzhNUlNCUzZ5WlRpTkdGWCtSR0NESHM4UFlJZFRqZEFVQXl2UWt3U0NwcGhOZDIwbXB1TWpRWEtCUWtXSWpRcG1KUlVLWXhLWGNMRGM2a0lmSGFUS2FPTVNjNE1zVlJZUTBlelU2RkxwVnVQM3RMSHV3cHJZZnRoaXdpSEZBV2tTcG1XUnQrNm5KNlUxOEN1eUo4NWoyeDBiMGQ3TjlwaWJxMGxiNE5uVStwTzd0RVVMaWhkVU8yaHJwdGdZWENzeEJGQTNsUTJubUZjM0ZiUmpHQmdDZDZCVUg3cW5YQmJhY2pzSzk5UmZJRE1BRmtCc29PK25aZzhQMEJCZ01JQXRRRWFuOVdRRXM5TUFITkc4NTU0d2ErQXJucXZUVGpwR1M3ZS9pbFBtakFSUG1uc3hXa2RBQVJ5T0w5eUFoeW14N1NHS2xrN0doNDh2RHZOZmRnK0lUQlpwRDlnemdNSUJ3d0JrNXRta0VYSXFxTU1hRVRnL0hVZTI2b0xUVHA0dzRnOVVrWjViZ2J4RUh0Q3lUTFlQSG1KVXEzdUpwcXp2U05jdW1iQmRYWVFza3UxQzkyTjhqVHZERkVVMHJ2ODE3Z21xc0dqUGZSdU5qdmVyVERtSENFNHErcWJ6T2p1SUl2UmFEaHpaMS9WSlVwaGhpT1FLSFF3c1o1VGpndUFCOEN1S3IrWUlNS2V3SW9NTzV4eDllNEFFQlREU1lwbTJPVHk4b0lveVlvYWplalVRYjhKd0QvWEI1aVNzd1VpZ2hBc1JHaFMwQ2d6SnpYTUNUVTFYRVpIYVRBWFRDUVNpY1hiWTRWQ29SZ0xFeHN0bGRDdHhaMWFVbmx1dEdodE9RdDE4L1JVZFZwa0RCdmJTNG5Fb05Gb05CcU5GaWRYbjBXSkxKQ3JVOENVYnFxTWhaR3BtK0Y4RWJCSVVhTEZpS1VSbHhLRUVpVlZMVk55UmdwU3BVbXZ1Z0FaaEFHbHlwU3JVS2xLdGJwbUE2d3JRTGNldmZxYUU3RFRXczZZSG0wRTJkY2xpV1dzV0Uzbm1TN0c1YjZ1R1ZuUG5OdXl5V2JId3hEanBXazZNK2oyMGVZTUxRLzAzVk1tS200Wm5nbEpTTW00OCtESml6ZS9LcmRDa1ZNbEtzeUltbWVaZjBHUXl3SkJFRnhDL3JnZ0NJSWdDSUl6OTBiREV3TVRqOGZqQVVBeGRTNlZzRGNzMWc4d2ZZQ1hyTmQ5OFNIOGdhams1dnVVUHFnNFhEUDlKbTdvR1d2R1h4U2RFTExmcnNFU0VzbVdYVGNNM2NMdEhGU0diU0hCQWpjQ2lVSVhKcUhuTWxPTFJCTGFzblVLMlN1eDF6cW5NQi9aTUdPeC96UHU4b2hEQURBQU9BQUNBQW1BQWtBRFlIZ2xDa0N1TFZBaVNJS0ZDUDBraFdOS1BGVXdiZHlMK3NEQnllZ2thSjJXRU10V3JFNi80dnBXN0c2ZTRtRHcwQmZ4WmhGdDlHdmZoUEVBbXlkNGNNdFVxc1BsNGF5N0d1YWs1dDBONTJPT3dKYUJnU05Ic2syTmg3cUVXWllWcThlK2tzeGpqM0VLU1hnOExOaWxRcUZRekUxZnY1dHZwUVFGdEZJbXlMdGl2VGVXa1FDazVaUmUyUWlKMlpyTFlEVjg2TUJZV1g1eEFQdW5rMXludFoyeDZhYk5yaVhBc2hXcmNma1U2M3kvai9tK2duek44STNZdHh6ZkNlT2lBUGk3WWgxd0JCS0Z6czcyV3JsaWZXYjNuK3NPbWtTaXpYSFRYcG12QW5PZ2VhKzdTOEYxRUhQOG5VNEluRlk0UTVtV3AzQkFMbGVzYTdCejRGdU9iRTRFWFJuaXlrOGh0Q09pazh2bGNzV1lJS3I0L2NITTNYWEljY3lPRHNCWEg5UjNOSUJqVXNkMWZpZGowaWluSDVyaVpmVU9EVGlGUXVsemVheDcrakhaVnl4ZjM4VTN4TGRyK1U3dTQzSDU5S2VnSzk1SnZ3dnlxbjNJZ3hMeVVHMlk0UWdrQ3YxQlREK0l2Q01QTWcwbFZZUkJuU0lRa2FKRWl4RkxJeTRsQ0NUMmhtMHNFQWdFSlREcnFiNGdKMkpZb3pTVUtWZWhVcFhxYk5yWitaaGVqYis1ckhyR3pjY0xRaEpTTXU0OGVQTGl6YS9LelFuTUNFS3dFS0ZKWVlHeU55SzFsdEpVL0o2V21GeFVxTHNJblhTczM0czRBSm5UTlA5SlY4MVpXMDhid294d2pNb0dnKzFnUFB4d0FNZVprQkVFK1ZzdXBzeG85Y1dTNWl2bmFTVXBGSlExVEVidGV5S2pNQUxsU1FoNlJLM2dDQ1FLM2VRVTRqYkVDN3VxL0F5Q0RIdUNCUVRzY01iVnV3TVVCQlREUTl5UUZNMnd5Um55RVN4S3NxSkdVM1JpRURQWEw5RFo1RjRJcEF1U1lDRkNrOElHWlZNRkNkT2tMdUUxSUtWRmxHZ3hZbW5FTmVOQkNWU0prbkpFaitTTUZFbVZKcjNxbURLSXpHbGtTYmJkOUhMazFmeCszZStWQ3BtS29oZ2x5VUJWcWt5NUNwV3FWS2NhVUczVWxmcG9rTWJheE5Bc0xWcTFhVTlHSWxPZnZKbE1wcGpKWkRKYlJqdGFOV2svcnpXb01JSWFOV2VzYXV0MDN5TU8yUHhJSTZNQkU5MXFmb0R5eENTd2dDT1FLSFNUNlFWdURoNWhGWGxwdHJnTWp5QktzcUlhTDE3R2Nka0E1OEE4Z0NZLzMyUExid2tuQ1FCQU5tdEN3Nk5vQnJWSXF6YnRPVXNXVTQwNWxDd1oxdER4NXAxbzdURWRKQmdTR0w3NzdCRWpvOTRhbzlvanRLOWJ2NS9oQU04UmE0NlNqZ21kZUx6TkRNaGlVSG51N1FtRERCWitJVUZpVGNKb0hjbElrU3BOK21aR2NUY0g1SWNCcGNxVVIwV29WS1U2NnFaM3VzZWdGM21uK2JGbHJpcTlCbW1uVjdQYjdHMFJ0Q2FzT3dLUVpFZ2g0ODZESnkvZS9KNkpyejJydnoxMThQazhQcC9QNXkvOU5QSmlyOWdKd3lsS3JVeTVDcFdxVkVmZFZGTnRocldnVlp2MlpJU1llcmVCb0pkSEtlYWVnMEo3VUJlcVI4U08xYW4zcEZBTUtMd0l0VlNKKytGbW5pSEVzRkVRVytwZWtvTTVIcWY1MGx4QkxMdjl6Q01BWlRQUTE3bjlYNWtIRlg3YzZRMkp2YitLU0lzU0xVWXNqYmhtdkpFRVd4TEhKRFhNU0s1SWtWUnAwcXVPSUtPTHpHbGtTYmJkOUhMa3lWZWdNQlc1VUt3a0dXd3BWYVpjaFVwVnFxT21qOXA1cWxOVDMvLzF4c2lBUkNLUlNBQkFCUURBZ0VBZ0VGNGtjSFBBNHkvZjJtN1lHbzVBb3RDVlNTSWFUZVZHRkFBbHgxUklaUnZHYzVqMEpJZW9jeHp6cEt0Y2F5Y3hJMWhTeVYrNjEvR0N3dXpBTWZRTXc2TFRLZDhvc0ZBY3JOVkRQSWVGczZMSEZ4bE55dGllRGpiOEdPUVFiaFNJdGowMmdJZzhPVmJVZmdGL0d0a2FDc01NUnlCUjZENTVtY1BqTGJZa0k4SjB3SndYZi9NMW5vOWRqVFZkV2hwaUQ0TWprQ2owR1lZNmtZMU41UTRFS2dVaFdJalFwTkNqYktvU0NOT2lYb1piVkY5L3pzTGRHWUdnVmJNendKd3o4K21xVTJzalkxQnJjamwzZkcvc2Z6NnE3b2cyWTM0dmZwZFVoZS9DWjJISDh5QUEveFE4RDNteUFJRE5BVnNDQUpiWm54aTJjSDVzMmNSSndWYU9tMldXc3RQR1p4WVpBMUtJUjdtdDNBekFtdGtGVUk1aWxEY0FtMlF3b2pGWEI2cjNJc0J5VnE1bCt0TmFiY3RyRitRckFRK2xraVVXemlIR0tXYzV1MUZVZE1LTWhueGl4bkFVNGxrYUFuby9uaHVTY0VuSHJRNlFFZG9SMkZJUTRHRm5ZSGtmQmdKVHdObDQyclFIN2RWNklCS3g0R0RJUFRTUEF0WUhjdWEvVXplUDFlcFpKTmF0T0FTcUZFUWtZQ1dTaktvbWN2SjRRL2xZbVI2YldpRVdXVklGQU5hSVRPVncyWlZIenI1TXpDLzBpL0Qxa3dFV1ZEL3pUOWI2REc2MzJpSzRVcUM3VFAyVU5ibmtFWTg2NFhZaUtsVytCUzNGVUt4SERRWW8rOEI5eXoxdzRoMDdCYTRRa2t6TDBMR0pHSXJyWitjTlh1QjNQdzZjZWRwQU1VNkd6UlFxRFc3bnRCK2NXaXNGeW8zV0NtUWpMME1tWG9CcU5XUkZJWkk3Z0RYaHRTY3Q4THBCZmtIc1JRNlhwVmZJUnZaQlU4cDg1RjRoSDhFS254bUVZbXUrSzZjWVkzZ1FlMSsvVHpKQUlSRjFjS3ZObW4yUTBNOGFPV3NYalQ5anZCQ3I1MjF4cXRXVkk2YXBMcGVoS2N4WnVXOUJXTEozUUdxZjlKVGl1dnZVMHdkZ2h3LzhJQlJJWDFWdU5ReXNCcVN0Vk5QWFpEdEwrTml2Y3dpMVBnRC81TzBveW0ySis3OG9uMHJ4Z0E5T0NsYTBnTjBKRVBIWS9ZUDRuaElhd2JFSjJIbFVuUjlEYnpmV01QQXZ4a3J0QTE0eDZqckFtWVVjZ1JmUmxabm5ZeHMyeStvd0xEd2tTMlZrM2RmakFBVVZJSmV3RDA2dHorQXV3NnBJcXhUbDRkbWpvR2xZUVhETWIzMUZKUHMrNjdqOVJOZ3NIWWd3d09jWXR1Zks2VmhDTE11YzRORlRidjlwRVFqRk5qTnIwTFdBSkIzWEdIbTR4N25CUmZYbUhRaFEwYnpxbU90VlRueWVTNngxSGJDL2Fyai9YZS83cU1PbDdNMGVVbkRQZ2h5aXNGOHFJb0ZiaGZFZ3F5RDRvM28ySzVSTHJNSllDYUM1Z3JId3VwRE5zVm9YRkkzKzlXWVBhMWx3dk9wOTFmdmFuR2hvbUppcDk3dXBOSG1PSCt5YjEraExJcGRkcjIxUmlBMTNKaWI3OWs2cFRCM2RGQW83MTRwUTF5UlpiVFhNeWRBN21RRTlSRkdoTC9PeHJIamRSbm8wWGRmOXlFZTBuWEZmT2VyelkrRE8zZmlCV0JGTUFtcUZiT2Vna0FxWFRWbzVmUzY2eU9JVmxMQ1NkY3A2OHVlNHlKZWxoVVB0VTZWbTJqbk5BUHF3V2FObm52MXc3SlA2eFFaYXdTSVBsT0ZNRVVHdXpQQ0JiMmRKVXlnWTZROXdyNkpVakpyNk5aY2JFWXdML2N4WmZlYzgyTE9zTUs0OXhYNjI4UDhOcTNUREVjSUFQWnd3aEx3NThoUEtrNUpTb0RCSmdpVExFU3RQQTUwbTdTcVltTlN4NkZOdjBpU2pVMDR6bVRiTllzNENxemZKZmxtQy9ZWkpnTkJ3REFhQmk4ZUJIVDVIQWs0SVFrS3VSRVIyY2VIQ2pTdFhZaEplTU42OEVmejR3Zmp6SnhFZ2dKU2NuRXlnVUF3bEpYZGgxSnlFQytjaGdnWXBUaHhLdkhoMkVpUnlsaVNKcDJUcEtEbzZXMlRJc0ZXbVRGNnk1RUR5NUVNS0ZQQldxQkJma1JJQ0JsVm8xYXBSYXRTeVU2Zk9WdlhxK1dqUXdGZVRKbjZhdGVNd01mRm4wY0ZlcDA0QnVuVFpvbHMzcEVjUHZsNjlrRDU5K0NaTjJ1YVVVNFJPTzQxcjJqU3VPZk4yV3JCQTZFMHlaTWtNNGJ3NWh3c1duQzVhY3Joa3hlbXlOWnNyTnR5dTJ2SzRac2R0elo3SE9zd0dFd3Voa1JpTTdUZzRFQzRlbkIxbmlKQVFib3VkRUJHUkhWeUlJUkxlY0Q1OElYNzg0UHo1UXdJRTJFbE9UcVFSWEhBUTE2VTRoQzdnZ0NFQWcwWUFCd29LRHJ1RWw2K0dxYkZOUExXR0F4REEyKzJtVVNOT2lCZzd0MFNrUzMxb3hlTWtqckZuMklJakp6ak1TVWhPdWtrb0VKU2lqeUdneDJJYS85WmMwM2IrbjgrZ3FrZ1MyOHM3NTZjalVwM3p3VHIrUlBlNlNlcmxVZFQ1YWV1Z2UvQUhnQno5RjRpbndFOHErSDRPdklXMzlGYmVXcnkvQnFNdnYvS1N1cGk5SGtyVmVmRzVaNElhdmZqeVd5K3A0c1ZYeWhlVlQ1bnhJcS96YnZiam9xWFgxWmUwaGowQVlGTVFaczJCa0FnRklHRnd4SFlOQjlYZGFtd3IzczcvQ0lmZ1laaWZoVDlnYTEweXd0emRaWS9oY25lVFlhL2tpejhLQ0JvcmhGWjRnMWxYQkdHV0tBNzUyRWxJZDlhTEs0U0ZOZFYzMjliRzdSSUlLVTRHRXZoanI4TFUxd2pBMjNzOUJtZ2JHalE5N29VS3dxaU92eVBaRVJJQ0tJekE2V1RwV1F3VjZvSmxlM1ZUbGo1VHlQS09qbTROYnZPZy9UOUdWZnhOQTloRmhRRFN3L2ZSanBDRjJXOE9BNjhpQ3lUK2YySC9ERzhDNmUrbTF4L0lJODc5TkEzNXJ3QUE2OFFXQVlnbFRUQXNZQUNFcWVOKzZteTN3WW9BNEYrak5vV2NOUzhPaWFqUVFQN3lNRmF3SWpRUmdTVU1MSTBRN24xUkFYNlJGOFlLSUlKVW9aM3lnQytRMlFvc0NrdE81bHVNSEdVYUUzZUxlOFZqMGhxcFdBcElFYWxPYXBHNnJkVys3cVJBRmNDZVlpa0E0QlBUc0xoL3dVV2ZPYng5UjZVOHFmQTRTS241ZzdZQ1hBU1FDUUJZTjNrQS8vMU4xZi9rNlMvMFkvMW9Ccjc0R1h4eCsyTmYwdSsvN2d2cUMvTHp6MEVmOU9SQnFqbjFQZ0xvWlE4YisxWjBjOGdOL2wvMkRXZk5tZktwWDEwMzd6Mkx4bjNsdEJYVGJFNVo4SVB2ZkcvR0pvU0R5NDZBTXhZMkRnRWhFVEVKR1NVTVRvV2dwa2N4TURKNzI0UjMvZUgxOFNDQ1M0SWt5WFF5Wk1xU3IwQ2hJc1VNYXRTcDE2QkpNeU1UTTR0T2Ivbk5XMzd5dnYvNTJPYys4WVhmL1RzdTNMTE1lVDliZFh0MmNOZXZYdkx5YVBqRkRVK05nUmNOdU9CMXIzbkRMQklHUnlOUUdEeE95am1vVklPTGg2K1VHQXdBa29QOHdKT09oaGJKQk5VdmhwVU5MWnFEVTZKMEtWS2x5Yk9iWGc2dEVoVktsYWxTN2x1VjJyVm8xY2FxVmdkdm5hTVFDY3VXWEhIVjVjaTRXVVFtVW1VME1NQW10Z1FzQlN6dEYzUmJCQmV3RklBdzVsNDFpamNiQm1RcDZ5M0FFTnQ4MmRBa3dqeG56N1A3OFZVVURCL1ZtdUFkK3g1NmNQKyt2WHZHUmtlR2gxWXNYN1oweWVqSThPS2JGeTFjTURRNE1IL2UzRG16Ky90NmU3cTdPanZhMjNLdExkbE1PcFZzYm1yY2dXQTA3UGNlZmVUaGg3cWRkcXZadVArdWRHMjFsc1RBUCtmejZkcjFtb3ArMExKMVRFZ2dTNkN1dkM1b3lBaXViMDEzWVBNTGJZelRiT0RBVFg1WUVpWXljcFU1SVZjUGZKRGxKK29PdWRzdkxPVXlDSEEwZXBTaFJkNGR1SDRLZ0VwTUVPV1pHYjVFRmNNalZKa0JVQlVCUlprQTJaS05Sc0FOMSsxMHhLOHRpNUx2dTlDUU9jWnd4b2J0VkpZU05ZU0ZJMy9lendpTEpkUUVsVkFWcWJGZlZqN0dGWUtVd2lMMk05Y1NkZ05tOExIY3NBSWx2M3QrcFR6aWtnalM4TGhucFJBNHlEcGJPN0JjZWtoTElSdHlyc28zaE9GYmlVMjlGZ21LWTVKODJ4UmQ4cXlsc0ZXa0VIL2JhbjhsbkR2M1p5NWU0RFZHaVozT1FSREJENDY0WG5XVG1vRkRSNTJ1WEpremxmeUNSTjBqRlVMZXFaVkxOUUVYbVZFbERvdFpOT2ZpelE0UkxiaTBLM1ZmUWl1T0tPRVNNRlR2MTNUdmk2Q1Z5VTdXeE1tS1czVWJ0RG1uSTE3eVgzSGNud2pnb2ZvVTRtYVNVbExuSVBvZDB3OHl2NjZvV0lNZFNpR1BVdjJ0Z21BNEVkYTEwRnJudFFtL2VsdGhmd3VoQUhXS3MrSnMvM3pxdFR4U2ZjWmRXdk1Ca0VrbzJPV2Q1aDhWeGtsMXdRMHRXcWZYeGpuYlhUd0R3NW9tV1o1cWR2SElEYktZeHlnOTcwcEp2ekF6OG4zNU9MUmtmU2JkRFRwWmdOTTlsUUptMmlVMy9IMG5neHZIMjlkQWVZMlFEUXZ4WjR6U2hwUWJoQWpCbXdWYkk3RjdJdko3a2lOMUZKR1dOdUFuMHpNRXlSbDBoMk4xN0pDS2lnQ1BLZnk5bkhOT3R6d25JendtZ3V2WlovVE1CY1FsSEFmdzVFeEhEc1hHdUZ1U2VvM3lDSm5aUmIzVzdVZjNhTlo3M0VZSzdrT1NsVkpzd1lZeUpDdGNHTTFHcmo5OGNuSGhrRm11N1BkT3duMVd6UjBoeFRuUlU4YUJKbXhxSDl3UUlJYy9mVVdCSGo4cXJJU2piTzJoUFc3bFJJYW9ESnBLcDZXclZIYjBvbDVMbktMeUZqMlRIZ215OTZBcFo2L2xxMWlOUFk4dndES3o1Z3MrRS9DWklDUHdjYWNxY25SaXIxUnpQc25DZ1FWYWc1VU1yS0dKNnk0K3lQWVpJN3lqS1RKS1NVTjRvVVQ3R1RkaXhPMERrZmNUVWRta2FCenFQYmk1U2lLZkphSkRES1kxWmwxMnUxUkFPa3dTcDd6SG42UWthaXBOTHI2RTBwSGdtSVEwTzN4Qm5XU3lZMjBjdUgyeldZeE5RM3cybUZ3UDh4azVjS2VEc2RVYWtLbExITkpHOHM1eHp5aE50dEVCaVJETlFzY0NsMnYyWkFuMUNpdHhNRWpMTXdHOXAxZER0ZHFpd0pUTkNmTFNxUlMwQXRWdXFRUElzUUNSWkltOHg2NklOd3BUQ01KQzJ2WUhyTk1XTXc1VHhKNFZpNEhnUlJva2lnRktQVHBuNDVKWWd4cWgwYm9xZ3VIUDZJZ2tRVEtWUHA5Qm1DdHlTT0pkNmJ5RTBsUTFkbmt0bGNpR1VtcFFPOXRCbjZBQlJCdlliaC9vWGFwbkNDNzVHR0l4bDhXK1paT2pvSFVodTdOQzI1VUpvTGRvdkMxVm9BaTJGQVhwK000TjFEeUF6VVVqZVN2NXdHN1piZjlFY1Q2ak1ic0oxQnBZL0p0b2w3TjBqcFFoZ0xoY1lmWWVVWjJCWHFHVUg4NVE4UlJ0ejJmUWRuem5sbEIxOGRDRE0zQk0wUlZtTFhHUEZWUmpFZFFoTFA5RGlKdnBOem9VQXZlZzlaQUxmSWpUVmI0ZXQ1dlBNOUFVVkMxMUpZQk15RXBKb0xhd0hWczNBMENORDBjZzIveG5YSk4rSUpXNEFLZjFHU1VhM1ZCY3VNclhsVVlUdWdab096UGZXS1J1YzhxWU1tbE9NS3dsN3gwa0t0c3dsZjJaUnNyajFoZzJ5enFCYVBsQWFNbGtSQzd6RzRXYUhjOEFCcmx5MG1EVmdQaEtnNjBLSUdzbG4xRkZRR29CSFkxVEd2OUtnSnAzVm9vM09CSXVBNDg1b3JoMGMwTkcyTFg2eVNBOXNHY0JhbjJRaG9iZ25pSjZGZXR1S1NIWExwNWVjTjFGaTFvM01nTW1LZHcwSXJGaGo4MUtpVUxEdlJKREk1S1NVbEtBRklLeFZ6Q3VnVXhYcEdnWmZBZ1BFRTkwTmV6S3pweHZIYlBUVnEyZE9hcTg0MkVOOXV5VHpLMkZZdCtXZFFaRGU0VWJlQjE4c3d2bFFVQ2lGcmJMK3lDN1dxbHpaT1ViMlZwWVFadTFtUFVrVDJYeTcyNk5qMGdwVW1vRVdJZXIvRkprZ2tnYkFBTDREaC8wbG81SkRCTUM3a2cwRHR6UG9nRjBLN0xXTFhSMDZQRU4wb29ISDFsdWVKa1FEUElXVTZNWk82TGEyc2d1bkY1MDhDMmxZR1pQbGN4MlhKMXR1WEZicmU1MUNJVVdTaGI0Zm9qNkxnR2NtbGcrVUNpU2l4Y0g5cko2VFRKZEFDMjRBcEdic2E1aGEvTklyK2g5SWVhWElDaVp1OEM0Skx6V1Q3Z0tZVDc2MzkrQUFqTGxwcGRYQUxibXQvemNkWjhuZkkvc3dYTmJaZHc5bVIxU083SWZnWktDLzRNQ3dwQ3c1c0QxajQwd0l1YmR0cEJOY3NWSG11VVB2aGFrc3hNOUY4Qkxrc1EzNk0vQk9KQVF0OFRCQlNVYlNvandLMzJFWWJlUXJ6dVlHYTluV0ZoT0tUbFFCdzlDRmo5alRHNEozTmdEdmV1QWcxVU9oYjRLQXA5cEhnYU1KS2IwU2xvTDdEb2RIc0xqcHRYaGt2T2Fhb2UwQ0hqRFU2dGtLQ0I0MmdaSnpSRGNQbzJ4TmVKclpEeGNYZVYzVjI4SndrMEhKaFUwOEx0R0RRTXFLT1AzVEdvQUk2WW5iRWtSd0RSazNPNGtpNjFJbnFUODEyeEtiaWlvQk1HRTVETHBNS3JpT3BvdkZMdGJJZTl4cU1xL1NUWXN5MFpRRjV5YVphdnAvYStIN3ViRG5wU3NpQndKRmFnQk1pN3dWV2M3VUhxbG13M2ZjTHZ2bW5WUlNGWVJRRW5neG5IdnV4OFExQ1Y3QUlBdUFJRGRBSDFBK0x3ZytnSGdQNEM5UUxnQkFOYWV2T1R3b3FNSFVvTmdtVm1FeURJN0xyeExIRFhYRWs3WkFNSTl6T2JHeUNHRGJrNkc1VWduVHBQYzMralpRTWpZR1V5dU5YZytNL1RpYkkyY0J4Z0p3a2IwYmdpNGZaZjVBQkNXVDdCRFNNOFllUy9KOG5vNElzeFFZazUxd1pLbTQ0Q2p3NnBUZlFqWGpVTHY5ZWpQT1ZLSjNQaFMyaUlmdWxBSzZzTUx1elk1T24vYkh6aFpETjJHYVBoNDY2WkxVVVpFbVdKM1hSRys4QSt2NVlPT2xGSU1SRkI0K0xqV3l1U3VTT2VwM3FyUFdyTkJvUnZHRFdiZ3FjdTk3MTVrWHoyQkVNRlVaWGZodkw5VUQvT3VtNjR3ejgxSWtzU1h2WnVJT3FjWVJDcHQrRFVpZ3N1RTNRN2J2Zzh6OXFFemY4bWZlSEZuNTVzSlJVdUxZeFEzZk1IWnVPN3ZoazhNMDkxUXhMQloxU2UyaVFOVjBkakV1Q0ZUYm55amVhcU5XdERVT2JxSmVKc0J1bklRN1BLV3F2SFBQRnhFWFRNS1JqZkFEYytNOWI3NVdpdEtlTjJUVHdQTWIwUEE5cTJGVVVHU2FMaHNsakRBVUFNTUxkS1lRSFZqY3dwZ1lLb3dhVVFDMTZycmh4QkRSVS9hWmdiRW9VcytBMTBUeGtzbmtTTGpaYXl5UmErUGhLS05qQlQ4TG9TcXJxQkdpcUdTUmlGNVRCQzdoNTNDaW9lRjRXRk1WMXpLNWpEUG9iakhnUDVhOXNCREQxaU84NFdjTDk0Q281RWRjSWtIbE5mSnRmbW1BRXQrQXAxSmF0dzd2NUx4YlNVM21lS0NXczEzY29kUVVZbEpWdis4dG11ckFHb0UxbnBNaFpleFRMb1BMMGtnN1VleTJNTEV1dk0weTQ1S2x3R2xXeEFobkhmTmpaYVdOY002ckpiTWltaTArc3p2OUJCcU91dGZQVkVqSGpJYk5kNXBhYU5tYkgzRkxKdmkxdGxPeE5zb3RkaU93VDluZVBPNytlU0dGRlR6MFRhZDlZZG1BL3BKOHFGYTVnc2Zhb2lzdzYxQW50OE92aisyNDJXSzNSVnIrY3lPQ0dUWFRaN1pxM3lISlFMUitxZnVTYmdQbDRVb1VubkZNcWx1SDlBUDhSaU8xa2Fsc3hlZUhYbmt1TkllOSs2MDZ6aWgxczhPSzg2ZWtNcjZxc0JzOHJ1VXE2eEZIMGdVZlZzT1lhbjNXU3RBUmY3RjUwdjZ3ZHVLYjBZdjJic3AydkN3U3FGYU1BcnJJTHZZVjBxeC9UczZjRDkvUjB2bWI3cStVajRRSkRIZkx3cWExTDJZU2FLZTZvY1dYVDZFaCtWd3VhUnlIc3BMdGlVTWVmcEpSVVlJdmRPcDVZRisvTWhnQkIycGZ3R2prS2NjZit3U0krQlZ6T1hMR2cxY3hXNERWZjlIT2FhSGlTczAvUjNkZlNpOGhkRnhZaDdNd2xGL2p5aHdEYWdGL0NlMnowaHd3RjRYNUpiRHNGSnVBd00wTnF0anNHTURDVjZHSzE5aGpVQURiUk43eUdkaE9oOHV3SEwzMEd6cXlsbWN2N2FJZzdRb2x6UG5Md3JiamNOdjM2WEthRlp6NGk4UFZIaGVRM29RcGFxTEpESTNTRGtFWExITUNKVFphUEt5ZlFUVVdyODZxSGNXNlpUZTVvTTd2YXRORFhrRmxja1VQNkdTVVFoVldpdEYyVzcxOWZQT1pIZTdnOFdyN0ZtMjR5OGhIa1RtUmdWN3ZqUFJYUHE0ZEQ4MGEwYVpnNDNmQlY1dFd2dkk2QUJZT2dmR3V0aThpL2txeFF1TEVHb0cxbzVmVG1tNm5zV1pyZGx1RTJicjBMZ2tkU2g3RjFNUzVwRDBEWkR3OFVpdFdLRm11c3gySDIxeEQvYm03eHhzOE9IMWxpWUpTVnc0WXVqd2h4UzMwQncyNUI3YUNiR3RnSFpVTEltNnVlYXR4ZXlwclZrcStsRm5CbVJWQWQyb1VUNUNWNlBMa1hYNGthS2JkZ1RtRmhqZXNvL0tqQzhJbWxnYkx5ckdLMzhTN0pqcXQxRTVhQ01pWG93YStVUGd5M2JKNTZkb0hJZ3hQUGdid0pyZFd0bE9HSjdNQ04rMDVpNlY3VW1qaWpoU21JL2VvZFhqSTJXeFFIamFtZlZPU1B5bldEdDU4Ym95OHl2TE40cTkzSmhwTDVwV0JuUkc2bGFhMXBFVjVtL3VJQXBSTjdSWG5UaklybW5BMnNIa1pwR2NHNnlzNlplV1h6NmQ4blRUZnRaaFFPYmFCWG1MVk1WcVprZ05ERmdEaTZYbFRZbTljVTJXWWpwelNTRkFTQnRxcXNTb2xpVVBLVWZiQUQxK3BpYldaNXlhWXppL2ZtV3NIUlhpY2ovOU5wMFp6ZmladEozMTExZWRnZkF0WDhXK21tdjI1MWRmRXdGQXRxRzh0ejJ5RHpMaUR0dmFiZXJXK0pxTmJoQ3h0U2dyTTZxNHNsVEpTNDF4YUNwQkdocHBEcnJpUVFXVjdOZ2RqNEY2aFNVam1vTFNCc3RaVGR2ZGZoQVluckJqVWl6bStnd1Z1OHpxaHNXYjN4L0YrNVhFVURVVFFYUUN4d2RIeHk1dmk2WUhuczI4VWlKaDBuN3hJV0MzNWwyc0dWUXFTTEhmMUNON2dDUUtrZUdnUjhhVFdxVy9CbGY1S0NBUWdUbXVMQ3hNelJqakxJc1I0UWczVmpvNithdlh0bXNDSm9aTU9rY2J6RjFLT0hHRDdaR3lrbGNXTXhzZWlEc1NtVXdDU1JieE0rT01WWWd4S2d3dlI1Wk5NQ1I0MU9RdUhzenVRMSthNyt1ZjNnTWVQM0dSR1hITTBHT2RiR2hmZjd6SWFSRUIrT3h2VGgwOThCczNmL0RBWTNwb0R5clFVdTZURUh5VWg1ZHRjaWMrT0NoUUZqZUYrUkR6NHR2cWREOUZ0T0NpQTJrZklIdmVrMlBMUmZ0QU84ZHhZdTRlMExpejdXQnl5K3dEeFg2Wkd1clphYnJ1ekd6V29PK21DK1pGa25Hc0tUdUx6TkhDSkM1SDhnVXpGczUzV3JCVk1nSzNJbE9CRkwvQkVRV205alRtY1I4VUVrMExKL1FFTURmZ1BIVFpDcXFXRi9vS2VldjRVUjRxR1ZVUzV6eEIwTmZ5clFkblQ4d2ZkRWFMdHBjajNKaDRGYS9HVDZZYzVadUFpMkRqdXdjK0liK25PSTd3Nk1hcU8rQ3ZLYTBqemFlZjREcVFvZVVJQWtka201dTVuUE83Wm13VHpBQTVWVWZ4b3VTMkdGQUlNQWhBMVMrZllZVklwUGNYaUZMRkNqbWdlT0V3QVVkRElIdzYwUGdwSk5EMk9GUkZid0lNRWF4aHBLV1c3Mlg3bG13OE9ZV09GdzJkWnNuMmROdjhKcCtmRkk0WmhtVDl3WmNaYTlnU3VBQlRydThodzVrMG1lQ2o3U3NlOWRLZ2dKUFJSZ1VzZVVWSGFrK3h4OE1RMUZHRGhNcWF1bG1uUExuQXREWUFDUzlPVzZKZXhlMUYrNHc5dkprejVVeCtxZ1c4NWpreHd6dzV3V0FXNW1IWnlmek9SYk5NekNPYzVqZFZwaFpzVXBzZStwR2dScHhtWjQrWjg5aTlwTzN4eGhnNVJoKy80YlVDakVwaDYwT1AxL0dXWnJXb3JpN2FaV3VRaStMWkp3WXAwYk5NZWZaaHd4NDk5aW42RkpjQUs0RG1BR1RJaUZXSnhEVHp3bEhmemZ6YXZRWWQ0eVlNeURTWVBDTE5tSkN6dUZGYnBvNUV1aWlRWkptUWxySXprRXhCR21LcDJMVGppa2lQc0tmUHZGMkpkRDR2MUUvczJlMjZzeGdDcnVDQjZNeVpMYnNJUDJUZDl1bk03cnNzdFAySDZGQmdVbE9CNjBDL3pZNHEzUXkwcHJuY0FTN0paTTgxMnlZZEpaTDQ0Z0lETnU0NjJZUmFUenk1SEtxN0xqeGpGT2NieGFYWnBCMHJiWmJVUFRPYi83cXhrZlRQT2daL2RLS1JnR3o3YmZJc29RMER4djN6OTgzTE40WW92b2FibU5aMm5qT0tIblo5c1JkVEdqSnF4SU9ZTWlkbkp3UlpEcGtUMjJwcGtkSVVOWEZTQmhYS0hHdUJoK2hsMytqNWJTcjJYTU83U0IzVkthWDJCanJPTW0xNHErUnNPR0JIc3dZRk5yK2tZTHpxQU0wM25qQjk5R2pxamthRHhNZk9hTnJXNkU5Vk1sQmlsVFZ4Y1dSaUFKZXYvUCtUNGE0TmJZcUVza2RzUzRhNHJWS0xLUUpOQkpRRmJTcmZqdEJtTW9FVUtTdmpmQWxBbFlUalMwUmgxTkhVdE1XSFc0Rm4zMFlVMEk0STlBUFU5cnd0dU4rYmVubFNjdGlFVFJZbTRnNGo3dDRBSkpHb2Nlb2tPUmdRTTh6MGZIOU5MTGFTUVJFOFdjQzRGZmthc0NiWmhYNms0c1NiR1hOTkxkSXZtUUhPQkdvR1Y0dGdOSzBzOTN4ZkF2cmk3ZW1NQWhhVWdjR0l5eWZmZVhTcGJIZzkvZDhtOTV1OC90K1R1Ny90KzdhNFR4L3NvL2U1TlB3enNwdktSck5UajF6cC9rL2Ivelgyb0UvLy8yU1dlK05xdmdtUmRVMGFLandSSXYxNnBFNUZVZW56YjNvNzVBamdIRU9rSUY5K0dYSTlmRU5ZS0g5Y1JrUHlxUTFHaFBYUytMTEdubVgyZUc1OWs1VFp1eXJGWE05RG1UN0tsNExtbVJ6WVlMaTVSMmZEa3NLSWJmQzVya3hnQURiNlIydVRmZW8xL0phSlA0WjJ0UWJ2NzVpYnVHOXZRYStvTStYYXVpS2FIWnM5MXJJeVFXK3JCbUlvZ3Y0WUV6aDMxOWZkdDZlZ3I4NjVkV1Y1NjRySitKU0srRzdpVStJZWJqL2VMeGZJOWhGWE92RXhjVmROQzk1U3h4MHA5SS9hVXoyYVZZeFh2YXE1YTlqaW03Mm1TY2JzQXoyTGEwT09icjB2Q1E5WUhkaEFwTGxYYS9XTXVvdytjLytxVnYwRHlxTXBYTEptZkVMWDhFYURidTF4ditFV3RKQnZvb1QwYStrVzJPbG00MlkzQWtSbURRWVg2UHJqWld2OTJwSmtVQk5pWDZnbzJkTGhlOFlqRVFPMXd5cWN2L1AyajJ1aTVIMlB5eXRPZDNKT0FNN3UxRTIyL0ZxbmZVUnJkdmIwNGk3b1g0TkRyeWZKTFJvdURJN2FtcnZWcTl3KzdhcDAxNGpGRnhxeE4vZXFWN3I4MmFtYWM3MTI1VUN3dVVkWDYraWxBaWxrdnNXdUdBaFZxbzJPK1ZPSytkV0NmUWNaN1NxQytPcTkvcnJNUElNenVNU2E3S0cyRmpOZ2lMY2szLytvNVZ0RE4xRnhEalJwc2l4TTNqWnd5d1NrQ3NJcnhCR2xtZXhLT3V5WFNxd1gxSXdXaktuVWFOU3J4djdtenFOdVRsVVVWWnEwM2NsYSt3L0xkQk82Vzg1c1VidElLSVlWS0w2SDdIaFdVck9yNENGcVpQRHhtKy9XaDVSUEhxWDRMUk55SWdqUEYwZVVsRElUdEhPZXFyYnVuL1ZUaWZVS3dXaWhtSXBBbzE0Ti9wL2dTcXpnN2x1ajByN1dLS042T0NQeGw0WExCMUJid0tFR3ZZd3F5elViTzduTnF2ckhtN3RvZnFCTTBkTG5kcXV2ZEVMQjhtQjVuMXpQV09qYTVKQXFTRVFyWGRDSDNQRGV3bjJoK3dvSmEvV1N3c1loSzlNaldzbDA2N290M0FGRHNsWG44N2RTaGlSbnZ2bWE2Qk92OG5RT21IVVFUUnd2WFc5L0Q2clFjUzAyWGozM0RiSS92eitmWElidVNwVnZWcXZIMVhmTnZYdXVtaGczVm15K3JRaHlqVjl5WG5SYTJiMmxMZGEvakg4YmJhVXQ3TjZhNFBpbFRaYzNtYmxqSmJveXpvdmNvdTh1ei91UElORHo4ODRST2o2d1cyMTB0eU8wb3JGVW9QWFhOUWJrOVpKWEdWa3JvRzZaTXk5WFVQTGEwejZyU2dxbGdYS2xiVkJicTQwcWNYOTMvdDBQY1p2c2tWSmx0TTFPeWJodktreXRLT1lNL3VWMHNWZ1RVZUlCRldGZzJ1VU8wRGZ6RjliV0JYdGpEanZTSUhsVjI4MmtuQmxML2IvOU5qcTR3TStNQmd0bkVSZUQ1bHpXWURTMkdxMHYvMENibTZSYTEzd0g1QS9ya3R5ZkxlM1kyczhxOXJ4Yi9LdXJHSWptSEhwUS9zYTlGKzNHMWpSbE5tWW9RdzVYMDhYMmZ2clRQbUtTWkR4ZGpNdlVwTEpIcERrZEJiY3h3UlQ2QnhHQ0JzUXgxS3J0U1Rtc2VBQ1pCeDJ3a1YzamZMVFkwSUo2Z2tpN0tlUWNYdWdMK3ViUWo1WFBidERvekJtem9jdFJhK3pOMmt5UXV3WWJLWDNuY29PMFdsa1FzSS9PQ1hyY2ZiN1BHSEpmeWY0VFB2OE9WaTJ0c0p5Yll6Y2JNcmdyQk9YR0pQdS9PaG1CRUpVZmpnbmlHQzZKN3dnQ3VHQzh4eVZSRk5rVW5kNUFWcUgzTEhBeTgxd2swdVJ5SldHZGI4ajcySUMwbGM3TmIyc2dmTTI2ZVVPMllmYncrMW1LU21YMEpsUFdaR3cxVVliNkRHa3laU2xEZXNOdDFiVVhsMFo1bzZFZmU1MEFXbXhzUWQxQnBNTVlkQTR2OVB1RFF3SFhpSDk2Q2I1c01lZlNCb01oWjhTYU0vcS85QzZiTEM1TkdZMHBLZ2haTy8zMnFUMFZVQVlxSFdER3FWYUpoOFRWSDk3TjBSbmlrYXBkeWwybkJKSVpWQnFqdzFDcmpnTGE2V0F6Wm5CM2VZRWhvc3JMNUFZSVoyYTJjeHJuYkwvV1JpVVJmZGkwNE14czI2VHNHMU9sWXYvUEg0Y0FoVG9nSittYXVFSWxpZTBJQXJKTEpORG1iSE1vRTBxci82aUxuQ1NqMTRkOE5INXFhVlc5UVJBdElvdTB5N05rdHV4RVhPTFVHYzZrMjJEOS9UYzJzL2pmblJBaEpJU2hqQXUrNlcyMTREMVFNZkVCZThuZ0krUWtlY09tTkgvNytTbWRNUEdkYmlFMHlhdGd2N052R3I4S0JiQ3lJQWwwMmxvY2RFZTYydXZjYTd1czJkY3V5Zks1eUNMMXN2SmVkNjJ6THJ3UzhuUjduZGloMlJXTkJ2aFN0N29wVzRzM0tHdjlKNEk0bjhmU0tDUHVYcU5BZWFOUlVDUXZObWFWVEJCdU54amhObmN3aXhvTUdkUnpybTh6R3VEMnpTbnpaMFlidWpKV2t5bHJNL1RZZDlZZEVveW1qTjNZYmIzclZyYndYQnpwb1BXSnZCM1VlYzg3MTUrNXNiWENLWk5wa0NLNDJEZmtjNDJFd3E3UlJYNmZQbzI1b3VmNWlkR1dldDg4cDJ0a1dxS3doRmdKV0hNdFJyTTVaNXkxLzY3VDNDUlI2MXN4WDR6VXU2TXBGRGRucklidVdnZlZ6YW5mMkZ0Sktjc24vNnJNclNuS2FFemEwK2MrSENwbStyei9lY2dUUk4rLy9iVldZd3AzaGFHYzNtOWRNanRRaHhOKzJDR0lvU3BKZkhzUXdnWGp2YVJsUDN0SENBSzArZE84MnBoUUdqZVljOVo5dU80dW5hdzBVK3V3cE5TT3FMUk5iZFgwTkR1c21BOE9WVDBua0RWOUpWQUY0QUZSbk04dE5qVGh0U0ZaVG05QTJsMkJOS2EzNXFuMkV5ZElUMkowTG83N29UblFremFkLzJzeEVVU0sveHBBcmJydWxCMWdKajM1ZlZHVzIwTVdhVlk5V3VSbTNWSXhyZWJmNHRwKzVaS094NXNoUFZObkpJRXVQOGNXOFlzY1NoM3BhcEpTOXJSODhQRE9MTEVHT2pjWEViKzVhLytsWnNsL2hHOU9ndnVidkNkL2NYMmRUaFZLS0EyVjZncjVKeHdJOFp4QUNGb3A5V3V1YXZOdDJsUXphYUxxRkdxdkdoVFNna3VSOG9iK3NCWU9lL1Zkb3U5RkZNOTU2cmhROE1PWWVGTkFHWGlHZkdaVU9icE1tT1ZMdmlUNS9tTTRDYmZUclM0OGp0aTlmL25KQ2RjeDZTMnpOUG5KL0x4SHROanJxYXRmS0RLUzVNMXZaMUN2ZmY3NjUyU0lWcCtlUWJvQXZxQU1HVjZQcjUzNGRQYU5wczlVM2ljOVR4S1Z0bis4U0FNekh0bFl2dnpocnkzdkY3NVhZSG5vcTJYTEh2N0svRzdCZTRVMWc0Zi9XVlcvUmlIeEM3MC96NkNPZnY3YTV6cmgvcHovSkwxSzh3YXJhT2J0MWxmNjVBOUNjMStaSTMrVTd3R21WWVRKb2g2U2tqMWcxNWNjMlM1NWQ4L0x3dUxZUE9BZUVJQUlCTTRnTDdvV3EyTC95VGNPclBMZTVZTFU4TTdPN3RzK2ZCc21Wdko5Y05WVUVYbnE2Q25TZ0RzckVQV1JSc0RaTUpzbisrYUZXNktZaHJHVTUyb1M1UmdhNXZtVkZRdVZDOHNoZVlWWkZqQVoxRnZqOVFuSEg5TFhlS3krOWljVEV5eTZpNVd6ZWh1aCsrcTcxeHg3RmxIdFhNU0VKNlpoaGVTUTVENXovVVVWaTVTTFhJbGR1T3kreEVmTUM1RDBzUXpwcmlYVTlSYW4vVE9KcWtFdFdIZTJ6S055ZWlKKzVvN2kwVlZZMjZ6cFh3Q2x4Y2ZTWkQ5Qzc1MS9wY3lZTXZDMTR6TEpWZXhVUmgvWDRuVnFVcFVJWExkcnNBdXBWdFZ0ZnV3WnI5Z0xNUElpUk1zVmpxOWdhSnpHclZKQ1NjZW13WWpmUHhBQm5sVHFRRlFkakk1SE5vZTFDNU8wMVpLaWdZV0JMWUJkTE5Zay9aZGV4Um9WNFNCMmZMdzFjMFhDSXZtenEwcXJ5RktCU2ppVGtmb1ladlRvN3dzckFNSFpmelJBNTlZakJaVzZQMTArdnNwZWorRWVCWnJaOHVlZDA4NTZ5c0M1QkRmdysxY3VFb3BvcmFaVWw5WVZHbkxzalJCWkV4UE5KZ0tCMXNabUhsNlRhQXpZOEcxZUdXRk5HNktDYytQMUlvMHRxOUxIS1lYVWZady9mOFdSTk43M0JmaDVra2dlcWY4WldTMll2a3MzRWo3cGZxaTcxbTVvSk1nR0k2Vk4xT0Y2TW8yL3I0bHVibEFUUnQ2cEJrQk45NW50WFl6SDJUL1B6TVYrWWVpNTg1eHVUVDFZUy84MlY3ZW5OVlpyYTNWUzZPR0JnQyt5c0lWK1kzZUtYcjNBRS9BTzBzNzVsOVlZMHBTTEdxbFVCa2lvRFIveFZEcXQ1Ny9BM2FrKzFUZHVMdUc5YVdmU0F4cVhiNDdSbGpXcThZQ2JEQW0zWUJBR082K0hPUXA1bUhNZHBqRVl1MU40RDZOWEJQZ0l0b2xoQStvbWhjbW5SZEJSTndzZ211VW1mKzh5RkkySUVIbFliRzFaTVF6QjBMRGtOd0hrRTdUVzRmenUzQzB4aHpWM2IybDYxWkFuNkJtU0tlRmFLU01JR0tsa2VBOXg2NHE5K1hOZHZuNW9tWTJXcnd6MTlkY3kvdG1NZnc2MDNPS1Vyd2oxenE1VjkzQWs4NnlaUnFQRmxyUlljcUk1cFBHOGp6M1RiRFRWV0MydHYrOHFGcXNJSTdHaFp5cysrVDFMWFRQM3k0L3p5TGNhYlQ3TjdkQUUzZFR0aWJqTW96eWtWb0tlQUdZMnhxRzZzMktJZTdSSmFnM2tUT29NWmNEOGJuVkVKcVlGNFZySGE2TDdpVEpwa2JNWGMwVHFPR3pLblZHYURVMkkxb1dwelV3ZjVBTlZZTStnbXlFMDdnUk1NaDBXSXNaeVVVbWhodW5YV1pNbTVmKy9IYnZzMDhtREtyT3JjYTVhc0c1aURqN2FKYlk0MFhuT3NFWmNVcXdiRHYvbGZyRGJVZFdweVhxSGF0Y3hiWFRUVGdiZUo3OGVYRjVuM3p5TFpQRnZyT0RnbmhPQnAvdkhUYVdMV2hINlRkbjgzZlI3c3RFeS9YNXY3c3JRSzFYWHZGMk5hWVBSTnFScURCaTQwZi9uNnhRbCtMNVE3WVorNDNwa0VOOVR6QUNZbW9HdWNUeFNpT2N0WW9BM0poQlp5S1hWd2p1Y3ZCbzVHSFJxMWNpS09ML3N1Z1Q0Q0dobStndzdLOEVLeHp2U3ZQNHhCOVlKbVdVN0p5OCtJcFU2REVBMS82NFJQYzBJTlQ2M1N5TVpHd1B2MzhlUHM2NEM3RmNMYXh1MHFjNnE2dDBRNlZFQ2NFTEpjS1ZjMmd1Q0lJMnFsWjkrdS9uWjF3Y2xHQ05va3dESHhyNGVScVNIdlh6dTFPeWZwSC8vejc5aEJzeXpUMjk5YlZVNGRobDFpWWNSNUVtdkJOTkVsTkkxQWxvcTF6RVVKbEY2Uk5MTjB3RDg4TGZ2N3AwK0NiNE9iSmVxMlhOV3cxdTlvQW9OSXAvbUpYd3BLL3ptaDkzNVBnUVBaUmFOUk5KTlBwVWZ2T2ZlT05sZGhGQW8yZ3FBVzhWQ1FkbFdGMjczRFpENmFaTnlWbTZPN0ZsZkRhcnlpcnZFOG1mUTN5NUxwSGZSSEFDNGVKZEU4dXZNclRYYUdxWkRKT3JVODJzYUZ3akVYZkRwanpnbFU0Zy9kUU00SjZhMDRqei8xVUxjaitUZi9ORlRpTldYeXV2OUhVQXczQXZlQlNNSC9DRHV5elNIUjlNTGZRK0JXOHNFUXRFMkVGZ21GQXFKcGRYZmgvU3k4M1dPZXllNUxGaUhnS0VwSjNobC83V0JiNEYxcmw1T1d3WElQaktaQngxeG9YQzE4OXdkdngvaXp1RmRYanFDUEkxUFZGOENPSzk2ajRkTWRqa0JkS3JpdFNIVTduZ0ozZC8zZjd6L0oxazhFelQzenhTTkJhcGgrYjZ5MVRXMHJGcU1Lb2RjKzFTMUZIMHlMcURDQXZEcHZMZy9iVUVxdGZGZnA2cHhwdGxMK0tDRFRzQjExeDJKbDRvNEwxeXZLY205VXVNVllNY3Y2WlFja3U5V091dU9za3VyYis0Y1BwVlBudC8xNFpzYlNDZE9CZVVZNWdPM0FVZTYwU0x2dytCU3NhcGF5cmVFSjBwc1pmLzNXaE9mRkh6bzdvTit6enp2LzNsOGpNVnByc3k4d0VsV1pTcU82SVJNZHVYa1Q0OUlwV29LcUM2K3EwR3ZjUWsxSHNhbGtUd3hkc043NnZoSHJJdkFQMllSWFpMaU5MOHJIc1hmTEpsUzNNV3d0ekhjdkRjZzMrZm1ibTlUOXY1YkgzOWMzRGorekxqbDJmRVMxNlZ1dkx1b29KRFgwOFBqOUN6bWNXL3U1ZkI2dTR0Y2h4dXhSdlJ6eXhWdDhiSm9WYk91bVJVdFl4cnh4bkRNdzJFenZOeDM1M1RueU85NmREM3NXLzhsKzV6V2JKM3NLVjM4MlhMeXl3M0tXM1JmNFBvdlBrMjNNcVJjb3Z0eXZYeW41aU5jKzlHbmk4REN5V3NDOWlrakhOVGVTek1mZkZOZjdjd2NDdkVlZk5aTGU4Z2xobUZHNFBpYjRqdE5DUkVLdWJuekpWNDF1bW1ELzhGTVd6K0Z2dEdCZDNDMHB2SmQwNGN6UlRXYSs1aHhFWmRBOHhmRmM1cmpJdXhkQSt4NHo3TGN5OC8yQ0E2cERnR0g4RVBsbnByRHFzT3p2SWNiOFVaRlhxNW1OMXdkNVNMam40K2JQeHN2Y2FxSU5VUlJvL3pXMlRhOXBYamR2OWYzRmt1TldLem96d3FncXJ4U1VYYW1lUWFYcFN5TVlXVzZsN0JZb1pMRm5lSDdyMHdobTZvQ0ttN01pR0ZHYWZINmYyN3NLV2FYcGVVbDNSajFBb1dWTkdPR0Z3eFlkMGxKUUxJbi9ycXh0VE9tU3NKZDNCNTFoQm16cFJvUDJWYklWaFI5bXJSTFY5aFgzTnRvVFRGakVUV25CK25DazdsT1UydnM5U0xYWmVJaWtUcWZhSmFldndKRnhibERxdmQzdnI5RGRXNy8rNkpGQVByL3YwN3IyUTZqUWZUUWU2THpXUFBCamcrdWQvNFFoSHdkTnZVZmRLUHN0bXhadGlxcnk3S3lnYThZeHlzb2JWOUdxdHRqNEN0Z3RiT0d2aXZycU03b002eU9zbHQ1WlpoL2tzcXFod2ZBQnJVOUpFdHIzS2JGZlJGUDRjMlNtNFA1N2ZTdXFXVlI3Ti9YUlM1dWNHbnByeDVUdlFDZS84VW9SZVRxSE1qTEQ4WXIvdWFHNUhzbnV4NlJBWTkyZWJ4UGVMM1R6UktKV2U3M0R2czlIWThDd080T3Izdlk2Mm1ucGVicGJzOGRtczhVc1hFWW5vQ2NjZ1ZFajhQUVY1Q3JCS3JVTElJS2x1NDZlMmNCeUlPVzZ5WmJDclpoL1Q5MVE3NjZRZFRxY0pXYk9pbzZYMEorMUY5ZDNJR29PM1FrQjFVaElyTE50SlQxL2RmLzZ0ZDlQL245MDYrWEZja3BCd1BtT29UTzZIVStYR2NJakh3T3lMUkRIcVduRUMwdyt1ZkoxSktnZ3BFd2NqVVJqdUVhZmRiMHlmOUxJbG9VWE1DRHdMOFZMbkZZQzhUVTdxVlYraXJScnkveFdTK05MZDAxUnlCQ1VUR3Y5MmI1WFYxSlpQNS9OVHZnSFVkMVI3ZkQyNFdmRGlDcE0yM20xM054Sm1LeDl1a3JybGhGN3pDNlpydDgrMXJmdGUyNFZlNGk5SGEwYU5VSit4WExCL1dmWmZFcnlwY3RYN0hpSHo5bDVOTG1CSjdBVEhFOGZ2SXdkanZHZDMrQ1lBamFUa2tsMy96M3dCVmo4dk1tenZEQVZiYXNBZ0tHMU9mQWpJbUoyV0VQWnNGTTJJWmI1TGRzU0wrN0JNejV3cnZONlJxeFNGVEQvK1c3QWlEL1R2T0lXSnI5azh0NTVYaCsxYVgyVTZxbmx4TXpHMmFRY0x2ekdYYWZ0MG9PY0ZXdkVWMlpxUXJCdERVTzRETEt2RDhmSmlVdlArZnRoQWZraWdHUWlsTkFqdEJVWXFYNC82ZUZrcyt1QzBYSHpxZEtXMDd5TmtKVHpudTIrL1JHNkRIZ2VsYWJtM3o5YlVkNVh6cTQydGpaWTlwU1h4a3NkLzdtbHN0bUh2RytPNlhVZTJJQk16bFN6OFZ4VDhVRmtoMmVReUorM3RmL0cySkNsZUhzYnpQOTBCYlJuQ2F1OUFtdWM2WlBHQ1JYcEhQRGxOYzlTbVl6MVBLUW4xeWViaDJodk1wUXRmYkl3cnBxTkxURzFObGwyaHh2c0czcWFWOUxiYXc1K2RiR2F2UXBOMXNIT3l1MndKTGY1VksrVU9ucEhUMm9veHY0cU1vZFZXZ0pIN0JOZ1pIZU92dGZkL3N0S0lOcmNuVlN6TnhDdXBQUWtBUDM0eXNUblFObXQ3VmJaYSszVU5wWWdqNVpIakJza0tLMFFRdHR6eGRYWHB4OGRjT0RydEp2QjNZdFgzOUc2ZjFUWlkvYlZmWkUvb2lKN3NVRExsdDl0L0taRGMxNXIvZGtldU1iNHVDdVY0OVpFUXlrbjJSWU10bTlSUU4vbDNXR0FCWGtGTDZJb0hmOG42ZHZBa2hHTHloN2JlZ3ZoYzRVU0NvSWNQbmVxYWVYWHZnZ3dBZWR3dDJ3STY0NURYbksxMjFIaFlCeWpWSzA2Tks0LzQ4YUx2b1hVeTJ0NFNwZS9rVjJ6L1RZV3FxajNiQTJHakdzN1dqYm83SFlPbXJXb0NVU1BiTjJ1Q1ZSc1crRVNEWHJSdngrY2lTWkd0WDRmYjVSS3FVZDlubnRWQnArOUl4MFluRUpiVVVhS1dWTkhjWFVLOHkxblpSN2lvOURMUHlmUFN5WFRDVngxNzRucWxsNDlva2IzYXdJTEtodVBhTFdQWFhOdXp1OTJ1SEVPYUo0K2VqNXZhK05xRjVEeG1RMEtIdHl4am5qMDZwNUI5YTk0ZjNhcDZvL01WVWF2ZjB6V1BKQTdoSjhLWWVjNWVXVEF2aE02a1ZKOHNVemlJRE12S1hVYjVCK0pKVzV0OUpSbWZRb1RoK3RabjE0b29wMXRMR3RlR1o3VTlPMG1jNWx5ZFdiQXpZWGJkeDJwK3BPL0M4elNRVkdqTy9CM3RsRDdPODgzRmsyTnFWV0hwcHBXcG5FazFuL21wWm9WNmFKZEpIbU83TzlRVkpTdjBodGE3Q1U0SnR5Y2JndC9tbERyZjRVWjhFUGdLVWcvQ2NJL2dHREpmV043RWtlK3dTYjlUdVhOMWttM0NCZUM3STVudDRDb0RBbG1pNFExRE44UVhkdkFWZzQyMDd4OWZmQklyaW8vcnMvSzF4YVY2UnM5eHM3WHprb1NDM2pReW1Cb0FuYzBmTUdwQmhocHJQZXR2eDlycmRYc3ptZTRRS2dzSjhZUHIwYWFidW5xZ0F4TVFUUUR2K05QY3d4ajJPeU02ZHUvM2ZubWovR3YxMWtQUUlCZk5CY0N3S1R3M1VnUzV3RnJBQWRSeFZ3UmdXOHFRSXVoMXRIS2xPa3I5cll5MThmYW93aVcyc2c2N1lHTDFqSlpNSlV3b2NxNFR1VnlCMi83UUtLN1hRYm9QR3dCcUxXUUQ3V1FMN1hRSDZ6WVEwSUkzN282KzJnYUFINzEyM2QzN2MvUERkY0swSUFoL3ViRVhLM0NXd0hwMkV5UE95Ykg5clltZjBCMlBzaEFQTXNTSFptY2V2NEZzZnV4ZjM5eGYyelYvLzdENHNYa2JnWmh0bDhxd1lPcUlFSDFHQ2YrOEVmTDlOcU01K0d6VmYybjIvK01FZTBtVWV0WmNCZS9TSG9ja1ljY0o3NEJyeDZkUmdBb0QwNEIwNzBxY2hvellMa1dvYjY1YTV2OG1lV0ptb21BR3B3bVBJZlFCZ1c1TzhXYWpBSHZvMWR2L3lpNDhiN2Jmd1RQWjNzeEFHdi9hZW9ZUUFndmw5S0V3RHM2UjY0MGZ2MXdiSHhTOUgrVDk4OXJTck5icTNuTkwxZkhsd0ErRVJET0lBZmgxemt3UlZIV2d1UFRtRWZXSy8vM1h0TjcwY2V6cVhiUkgvL3M2RDNiMytRc3p6c2xOSms3N2Q5R3hsc1RDSHB4ekk4dSsvVDc3ODRRdFc4c29IM1ErakpCSENSOGtyNFJ5QStmNnVETXo0TWNqWVA5N1NodjlIQ25wOEtmM2lHVWd2YmcvZER1TkR4U2FJQUtNVC8yMWNaOEtEOERMM3h1VGhGY1cyaTRwOVY3aFhMVzBCVkgxeUhsNHQ3UEwyL2xRdW91emhYNzRyd2h2MGFrYktucDg5N1BOTzdGSHpqb2l1V2xGTmVzK1Avc0JiUC8yS25IZHo4dW12clBaU3hGYkxpd1Z4eURVb3hwUmszbCsvOHpNZVBoNVIxR0FjQTdzclYrNC9wQW1KWDI1VnNpNGd2QXdxeFdEVGFFRkp1eURRMkVjbldYcWxLb3BLcHVhblJBRFRBaFpPMDdYWmJLamtibG5XcDdSM1lhQU5UUGI0cEdUZHp1VU9xZFkxV2llOG1EM2pvY1QwNlV5d1FBVWxBMjBZQm9LSmxYUkFKRE1sTmtNWjd5U290WkVRalFJL0VVY2xXbGRXT1hWUm1DbGVPZ3JZV1ZJMUJMN21iKzcyZTBkTnJzTDBDNGRaczNvRUtoYXh1TnNuQkViRnhNa1NFUisrWmpMWkhZaEpWVjNteG95VlJhVVQwcWpvdnJlZ2NWZFJzWGprbWFGRnRFZUpsamVRRlZRcG1VMDRRY2JDSGpBejFpVUlhd3ZsT1hrTzZMUjZrWGVvbVhNb2paUk5WM2ZxcXgzN0hoN2ZVZWdEVkMxK1pxRXdscTY2M3pjeTkzcTU3NCtxdUFyMHR0QlVxZitKdGpGaXBjMEJhK3lsNWE4Y203WXpOcktOQStJUUZPM3BmMWZyVmJlMURTcGhOV1J0b0hlSk5oZnNYUmVleHF2c0ZxU2ZVNzU2RTFpeXJzbkJaV3hwWWFHWW1JUkt2V1M3ejdPZy83aTRnZG00SkRhUmNtaGpySzFNNk4vUmFjbU9KaEdobDlZMDRIS3hralovY0d2S0NuQXJ0ZHV3SWRLMUlSaWhXdHN2b2I1SFlXVmFoQ0w1N2laWlM5U1VxK0RUSDg5MXVBSWp5bFZlbk5hMXRTaUdiSFNuMnpYbG5wOHVxZDducW1QbW5Dd1hteDIxWDh1UEh4emdmRUl0RXk1OXR0OSt1djdMWGRsUG95NWw2NzFsNE1BSjFvNVdvS0lGMkYrNlhaMVR0NjJMTjVndXhXV1dsRXRNa3hQZmR2TnhGcllnUjEyMVJsMnZhc29EOGVnNjNzRjR0UTdsUWVHeGJQZUxNQ1RpcXIxd0RMK3ZTSmZWMis2TVhmVzljRU1QSzBMLzg3a0VpOFkycmI5VkR0K1A5R3lMdjVjQldKMW91N2NLZEV4V2VyOGpQNHd2RFNzK3o2QnVQYUdLT0wvQ21saVNhNGJ5aUx1ZyttUkJSUmZCQU43R1NaMDJDNFhIOGVwZFdyL0NCOGdiVVpVcGVTczV4TlFESU9ZVkExRW1JZWlLWFdLWlJBMVZHVENUeG9tT29nT2pRRGNmWCt6MXJsT3loblV3dEVQWmlRRFNsU1EwWEhPVjVzaTllNlozcTY5Qm50QzIrNnZQb1B2Qys0KzBWYlR0NC8xLzh3WEl4RzQ2bUU0d24wSGkzL1hBUXBpTGdBRlpnMExqNUtIKzFYQnJIUW5waFRaMHYrM09qSXArNmIwZ3M2dW9TRTdxVndqdTN0ZWg5SjlCT1hjL0N3RHkvL2FVbUZxbEZMTW1INWxVMVI5aFJVdzRTYUkzMHFGSFdBbm1tU2xxbythdHVHNFhzc1MxNXpmMVNzeWw1YlozYjRwRlg4N2F5QWNkbWNaK3pvZWh6em9YRWRhUVNaa29vTHZtVjRMbXp1eDZ2RXdXN1JWQ0V0V3QzZEFVSzNmRmlaMWFkaTZWT1FYY2g2bXpHenoyaHpqZk1LUXFUamlqMnUyYXBqaVRQcmFSR0o3N2FOalRwY2Q2Z1BKQldBUDlYdGFwY1dQOXgrakw4amRQUHphL3dxaU51ZkRBdzYzYlhLa2xybXNBZStRVThKZnlmQTJ2cUYrUlAzWW4xM2VoaDUrdTVIcmJNUklZdzlQTHRvWDh3T1lHMWtYZUM0ZWE5WjAyTTNhTWF1bno5Y255YXZYcjdMRVFQSHErcXBoaUpIeTBKZ0pnQXlzem9tejNUbGxZQkNkYkl2Uk9jVWVMZ05aTHRMT3BGcHJYMDRXS09nVjVBbGl3OWV4MmJNMndmblkrbk52TVYvaXZ1L2hPenhGSFZibEpEV2FOSjZTUmx1Vkc5c1ZxMHhyVkVYVGZVS0J1TXE2Z1BRWGRVczFJeVZ0U3dKV3h2aGQraW5YUTlJQzVLaHhITE10NGZuSm9zdXRZTXRxWEFMQnZuUUZRQm1IT1dkbFZyK0RUUHhsSWdkMkdNcThsaFA0OFJEWE91RVFNWmk4OStZaWNTa3RnSklMbm1MaDRPaDBPMGVNcXpkbzlieW9md21PMzd1aFBySklkY0w3MnNFNXg4enFpb1ZZbWt4VkZGYTUvYmxhbzNBS2doL2tFT0FtUHV4NWJETk9RcTFiSUt3VW1KaGlZSEMzQ2NtWkx2a1dGVmtRNVplam5FOWNCL3NDSWk0bFUwa1k2ZXRSVU5hWHVvUUx5dEowTm95Mm9NQ2dyTGlKQ2RRUjNEQk9mK3l4VUNqdkxmUUZiRWVhL1RsNzJTdU5PdXBsVCtuQnRhV2dybHl6TmNST3hzYlgvVEZkSnkvMmd4UGEzb1UyR3BZYkNoTDJ2NUgyYXlJTldOUUwvem1LellxVUNzclYyYXNyZVhSTDcvY2w0YVQ2N1NNVEF4RWZKTHdoT2hOaFhPSnUvcDB3Ti92Q1ZNcUN6eE9qZk41ZUxSTE9DS0ljK01yMXhlNmZBd2JGc1c0TDRjMjdtK2F0b0FkQVRicGwvTjNSSmdiQjBuZk0yNkxmdUtrUFJzRFNFQTBWTVRqZERYWTdKNGY3OCtZRi9QNCtzaFYraGNsWlRHZnlQVG05MHVWS1BSY0JodXRLNUNLV1llOXBnYThjdUNxUmpoY01vNXhOaDRRY1k2SlIzYWs1WTQxbTVTUkI0V0ZGVXRzaXFBVWpVU01CWjY3UGNNSWRCTWEyaWNGSjdVN2oxV3NmMU9heUdjcXpFekMzaUFXVWE1Q2pXYWMzaXYwN0NTSlJJbUdGUGJpZDNPcjVXQ3dMZjIrNEoyTHNiVTJVRmhWU3dUckZxRHpJYzRDbUJOakpEV2xWYlRhRFFhNG1Za1hwZHNreUozZFRVZVQxeEd0bFRJSnVGTU9HbmhPbEhLa2hORUdoSno5QmwrakFsRE1Db0RRbXFaekJXeVVWU0lQSFZjNjJRRFpnOVBITndGWlRERWtJa2xtZ1FpWUxCUWtENEhZOVZvckt0YUFvU0xLQUZwTmNaVVNobXdJTzJzbFJXVE5qV21WbEI4ZjRSUnZ1RmV4d29xUTFaa0JhdmpodUppM2dvZHlmREpLd0x6QUZEdm9oYVdoRFJpSjkyalRvd245MzZ0dXdUaTNKbFlsTXR3T0N5dDE1dkYxYUJsQW1aQTgyb3RPZElHQ3gwV1FKb094Ni8zWTFuWm9mZm5sRGxvM2IvSDlyMFNJRExtd1lPdUpjOWRhZjJ0V1JLQUxhM0RWOXBCR0x0bWJ2YTNwQzRhSjYwUjZYcWJHYTdSKy9lVC9kNVFxbitvOG9kWTlXQytwdXlWMDFoaUNId2NvMjRVcFZGMUhSMFNtdjE0SWNxVXNOQmpwWXJhWG9wQkY1SmFoNmNxT2svSmFGWG1wOGxrMEphTWdoQ2tGQnZRRFB6ckZwUXVBT0lzYVkydjkyWXdwMTBnTkZFcGNyZGg3dGFlTUxSdFRNa3hHeVV4U1ZWZ0ZTbVhaYU5Qc3hzWStJWnA4SkdreHBPYkFGOU5kMGFXMFBQd25ycjhIakNiQkN0N3BjcmROeStIMjhtNlErcFhqNDgrVU1IS0MyRk5qMlEzZWYrM2FScUh1UkQrbWIvNVNlZnc5NE1hTUxDZkdWWlpDU2Y2UzQrSmUvUGhCK1NtSzFKZk9EVTZFMVpVcTVNdDZ2V2M5emFPVTlWbGtndnE1SXpoZVhxTGhZM3A5ZE1QNzVvLy9jWGhMR2VmSGV6YUs4OHpKVjFmOC81NWk2cjY5ZVFmWlhEMzFsNzRwT2JqZXJQWmZSazNjNGZ4L0xVeGVZZ3RiTTd1dy8xcW9lOXpiWW5wK1R5TUI3ZFcwOS9CZHl6S2JxdGVLSGtzR2x5UVVGYkt4ZDdOTmR4ZEVrWkFBQkE4aWxNUEd6dlJTZ0dCRUR6WU1Ybm5VRnpSVEhVU2dOWjdWVVQ2a2VBZTI1cHFmOVFYMWY4NHNXRGlJOVBIRWJVNFpXdExZTFBFVDZWMFFObTllbDlpMExROUhlOTRRdkNsdW5JRUdpUmNSbXBQbVpRcERRbm1GNmtoQUFQeHZ4OS8zMy8vOThMSC8xdFNOS0lmQU1CYSt3OFo1QUY4UEcvOXM2SW4rZTVzRGdHZ1lBQUFFTUMvSDhnanQ2dnIvMGE5VTc3WFgwQm9LQlZDZW83ZzNZU050NnZWUTZXZDRuL3dsZXE5UWxaTlptMUl6eS8yeXVjTC9Bb0lSeTREcGZ1TVEzMndKTXJQNkNMUFVEZmg2dWVCbGxyaFJmQWI4SU41VzVlU1ZjYXBPK3JhUGkreGJ6cmZYYXpvN09kOC83TFkxUTZnLzU2bDBwZVpCQXFvL3I0dDRGOHkzK2hpQ0dlNG5rQWowK1hXVWdrdS9teWNmVjJ2eEUwWkR2cTdUK2FVdGhPVXpWZjlPSkFWV0FtQXJ5NXZ3RDRuelNPZmVZMmRwVXR0MithQWZaNnFkME5sTHNjNCs0azRKV0Z2ZjlRVHF2dEdMZVJqWmhPQzl4WjUxY0wzc0lEOVE1VWpaZHV4MndXcWtLcHRGR1VJTFpsSEx3clpJVDdGVUpjaXBCRDhmS0U5dSs4LzRpMFg4dHZidk9ZRTNCQ1BqYkhsSGp0bUl0a3h2aXNpMm9FdWZKeTBJUVlOekQyNm84K0swYkZzbDR2WS91SUpRSFlvZU44K1dRUTZkd0pQUzFpSndrK3oyRlMycHllNnJjMHRiVDNCODFMZmgyUzdoaGZVbXJGeUxxMEVvbWlJYjUzK1lLVmU3NUxNZEF3RGtKc0NjLzBTQ3NUc3hVK1lXbS9LZXVmSytXamNzRjdaWkZ6YmhURWozcG41eXhVdEQ1VldEc3N1ZUN0aWMvQzJNZGZJNTd6STlyMlFIdU5TZkwyOEp5bHo1ZGs3RW5JUlAwdnRYd3h2TzJEck12YXJ4R0pFcTVYWExMK0xGOVJ4d2VsSWRoTngwYlRIdEpvUlBSS1VUaW55bFpJRTRFOVhuYVVUUURnb3hCMk1BcEFuU2tOSzVKN3U0U3ZCdG5PL3NtZS8zdDAwQXViSi9NSGZSK2s4WkVjRnlnTUFCTkNRZnJRMkZJd0R0VHNCK2g4Y2c4TUJDSXpEb1NZSEFKYkJ0d2JFM1hzYzY5Mi9OT0RVcmpZbEdrZzdGOUpBa1U3WElLQllXNE1EM3A3ZHo5SE1NcnNDQXJBcjcwSStmb2FjM1ZlUThMWDVSSUoyUmozTUd0VnJZQ1ZHMHRBNktOV3dvZHJlT3BWYS9ualhVNnlIV0p4WnV5Yko2dTZnVTRkNHcxN2F6RUpNb1Y4cjR3RCt5a3Jrb0VaOTFGWnE1SEx4OWlYb0F3OCtIREFJTTJwcVdYRHd6b2ZYUE53YnNnMmZSKzlrNnlLRmdMc0hKa1g4UXBmbWpWY2RZbUZTZ054ZXIyT1pZZ29FRFpLQjlYMW1zbVJLRW5scklEUU5RUGxBVURZdWxTZkdXTWN4ZUllZmVxTUk2dkJDMWF4dzQ5NXZJYmZ3QldId3hWVXZVSXlXanRUd1cxVGcrY1pURGIxOWphcnArZlZWRWdwNWZYN3M0MEs4TmpucXJqbjB0WTIxRmRNYjdZb3BpVTF4VldLVlB5YXh5S2NrNWxSTmlHMkViUnZnVWlrb1RnOTFTWFNnYkJKY2JTMHdhNlFCcGlScW1VMUlwYW9rS2k1V01aR05pcnBHU3VHVVJDWlFwVFdxaEsrS2VhcUlxd281OFFLYVA1WGgwZEZXa2FseGNGdlkvUFczUXJyNnc5ZGMxM2FsSm0yN3JpdnQybHdWaFY1RklscGtwYW9CRVZaNVlWYXhFRlhhQk5hL3RwamZ4ZFplenV0dytEYytJUC9KLzR5eTROemdyZ2JJd1gwRUdiVkNaYVd3bHJTU2NqNk8vRTArSUJGaDBkMGkrNDV2MzdkbU5aWEs5VFh3R3Y4TWZQYmV0Q3g2WEwrQXBDbERXL0hqTmlLKzd2cnExU3M0MjEyOGJiRy9NdmlNYzVHbzVKYzNLbWRkWjI4bzdFVTdWckNHQlBaNE50TDg5L3RsWEYwYklZbU5Jd0JCQVE9PSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlF1aWNrc2FuZDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBREkwQUJBQUFBQUFkWEFBQURIVEFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR2x3Ym5GWWNoekFHWUQ5VFZFRlVIQUNGQUJFSUNvR3FJSUdHVmd1RUtBQUJOZ0lrQTRoTUJDQUZoVUlISUF3SEcycGdSUWRpMkRnQWFQQVpGa1d3Y1FBRm0rOFRSZGttblVqMi95bEJtekdoZGVoYlpTRjBSN3VvN2hrWkNaR1Q2aG5wb2JaVFd4eTZjT0RoMEVnLzlvMEZSK0hBOHMzSjFiM3R3NTlYb3pnY0NOd2pabXR0d0NWeFg0aExvcEVrVGFSWHQwWklZMkl0NGpmOTJYc0N2TVJMVXdqMlFvMElraGN4S2tZcTVpUXRjZm5pbXJwWjBqcUh0R25nSmJsL3REcXppaXFkcXdBem9RMFRMeDg2TXpwWDV0STVUL3p2OTY5NzVyNEFvb3NSQkRKZkJibWtXZ3NJdG9xTmJHMlhKOUNrZW9iSGJmM3pCQm1vR0ExSTVhZ3hHTzFHVGFvTkVGVE02N0l1b245Rlh2emYraXVpd1FFSy9XL2FobWlieitWZEViVlZSNFlOK1BkL2pjekNUTzdMbndXZ0lxRmw1UUFsMjFZQjJwNUtKRmxMNkpmN1plQnpmdTRjRkozcStBT0M4UVY2NnpvYld3WWhXd0QvVjVzbXZFWG96RW1FVFd2dEtHMlRQRzNoV2NwUW05blFPdlI4SkZJVmdaQmQybWJGYytJMWZZWHZ3TlFrWml2cXlQMGU5Mzg2eTFiYTlkM3pCcUdMcXdBWDNYcHpiVEg2K3RiWHpHZ2tBMnVKZlF5ZWxmV2VKU3ZnQzBKRlVGMWF4TmRUVTJIVHBTajdsSmwvbmVtcTcrOXZTTWsvNkphZEdzc3FyZ0dlZXRuYU5WUEw0eitkN3F4L3NneG5GMlQ1ZWdIU1VXeVg3QUREVk1LeG94ejBCY2h1WHhpMkFzQ2F0VFB5dmdPT05UT2JyT1NjY0d1Q1FsemhFYktCL3ZydHoxaXJIOGhzWm5hNzluSW5oeTB5UkVMQ0p5TGdXZjg2LzNBZ1REQUFBTHBqTkVnM0pOTlFaTGhzWkxveXBGdzFwazRkY3RoaDVLaWp5QWtuRU1JQlFwK3VKL2lsa2hpcHVDUEhlZytHOWxwRm9RL2EreE9LYzZIRkF4QjJ6cnAzb3pBWGFpQnV4Vk04Vm1Da1dtVjd0dDgzVXFsNmk2eHd5YXN3Q3BWOStjelU1T2Zqck1ySC9CMWJkc1NaSzdtU1cvYS90Q212S29KRWloWWpWaUtQUHJ5bUtWRGtQLzlyTU1Nc2N5MncwRkxMckxQUkRudGRjeDB6S3pNL0U2aUFwQ2o2TC9rL2FLQTNBMjhPeVZ4YUM0T2xUNWFkdVBNUFdmWkIwdkJrUnRuY1lBR2RoU3VXYmxvMjUxclQ5ZUNPQ0tMZ2ZiWUdrcUJKNlZReWE0S1RHSUhVZzVmaHFSU1lFak1IUnhJSEkrbEozRlR6dE4wcFdoN0REREZQcHRvcHVONDRKL0FJa2cxU2VPcGNpOWhQMFJUUUVpV093enhOMDBaSFUrVXBTMUdGOEJZUEVEM0FCTEYxbnFMRmZBdFNJZHM0dFpRckVKQ3o5VEt0WjJUTVVWaGF4SE9MVzNpWVN0MHBvRWNZZ29TeDQ3VkRxY3loa2drRlBZSGR2TVN4OVY5K3Q3Nk5MWnFEQjJtOVlZaG10bXY0ejBsNzFhRFgvaGN6T3dRdXhxNmsxbFVDN25tbnRHL1AzU3p6S0dRL2Z3UlVEL2NPTVFpRElwVGdqeHZ2Yi9QYndFOXNsQTZpakxJVHhia0dscDJtWGhmVTFPNUEveUhlYWJSV0l6SWRXaldaMlcwOThTM05KbXhJVXhEMEpTMklRcWg3L0RMT1ZGVVk5SS8wNzFkcUpGeTRnTjlTTnlQc0Fxa2xKR1hQYWZlTSt4YkY1cUlZYy9JQUJ4bWxtNEJjQitvUE9SejE5Q00yb3VoMm9HdEVOTjJBSkZyQ1Z6TzROb0QzZXhXU0VLRzRzak1EdE9WSlNnWUxWM29TYUxZZWU2T3JFNTlKV3RJN1hxNkZNTkI2cEJhRHptU0c3eDlQL25jb0FRQzBZTzY1QVYvOFZxUjVwQzdPMEtKUlNUaVhNSGVhanp2cThmRDZURWF0ZFNlRWRDeUp5T1A3SFMwSE5zY2puNEVVSDdJVnY1QjlOY0h0NlErUXhyNU5nSmxFWXBCYmw3aVdGVGcyU3ZzdE5McGsxd2QwRU9CL0hLT1A1MW9Ba0tIYmswY3hnYVVTbUVkenZ2UkVYZlhuVUVxeHFHZ2R4LzFwVUJuNnlTVWJpTDhia0lsQ3BPQzJIRi9ZMHg1cXB4VEw2TG1sVVBiRk9KTWpZUURlWUpJY1lBaHRLVnFmckZLSW5nbWpPSTVleCtXYlNVQXJDR053aElEaWFLUFFWMTJlemFkQTA0Q0hHODVMWW1oMmdpTUVvaGd1RkNFN1d0MlJucFpPUDBMQW16akpOSk1sMUZxUTJ3ZmJVQkpiOCtnZGZpU0dTVzFnQzF0WjB6N1FWUWRkb1RTeXNqU2Viem9sZnlvaFN0Z2dCZWVMQ0hPRGZNeW8yQk9TOGExMmhpZHIzWVVoUkRWWFRBSXhFNnh3bXMwREVnMU1SRkhBR3RHWkpMRTZDdEJabDVKMkE3dWxUUDIwTWpRWHUrRkdjUmhqQ29WWHRvd1ppdGhlQWlnYmxuT1pJUmdEQ2dZS2VqakJRb1E2aFJoMkxJYXJHV0I3eitZaXRLQXVxRU1BbDlRRElnSGM5UnNZaVV6QU5nTXNaR0xMb1VheGFra1ZyZkRveksyMTBaYkswNFpwaTZDRUJWb3NNT0FBVVZnUWl3VjJITWpCRHVLVWdKT0lneVhoRU1uc1VDbFNhYVN4dzZUcmlPbU1SVjI0V1NHL0FyMW9iOExOOU1GYWZiRm9xTnJjY0NOeTRraWpxSXdCSmxOd0JDOG1XVmdsRyt0TVordjU1T01WNEVpRjJLQ0liVlNzbEZvWk5wbUZ3ODJYV3N3b0M1NktEK3FVcm9JekttbnU0R0FaZUpaL0VBQk00UVdRUnBGcWhvVllDUWZQZHBPaEhHYVd1eDRldUZpSG51NDAwcG8xTjdDWFZNbmZLalIyWWRGaXNjV3FGcXVCZE52QWE5ZHk4dEVUUCs3MTNMd2NEUHh2RGQwYXcrOW5leWZnZC9ZMzhDRUw1c0ppV0FuciszMy93WktjUW53S2pyWGlNQUJwRHVDb2FVaWtHSVNoQ0FFRnlFRVY1SmVsRmNIQnA5TG5lL2UvYTdiTUV3OEtwUDZaWlZtVlI4UzVvYkFtVlpKV09NNXkwajhCQUJRWVFUVW1ReWFaR0VUMXg5SERDVWtNRzJNMkhFT2h1WDVIalR1QnBTcEFLd2lYT21zcUJxREFYelFVSXdaK2ZPQkh2Z1poWWhQRzMvalZ5SXZKT0RkQklDMGpLNXNLbk43NnFVeHNJNVJqdEFwaXZ3Y21lQVFLOUZZS0dzRVN0Q1FRb2c3Nkc0WmVtcVRKVEFSVzFEOHlCVklRQlZNSWhhWnUvVkg3aFNPQlJGS1JtalFrU2JrZ1FIb2lyWXpoS0ZYWDdMSUpvTEM1YWFuaTB4Z1dMZ1JnVGdsa3JPYTFXTUp3blE5WHpsY2ZtQURzaFE0SDlFb2VueTVTb3JIcldnOXRzMHBJN3YvM3NFZXdBYXpydUMrR0NQQ2Z4cmtUOUNZQTlDOWJBNUJ4U0tLM2R4MEFZSS9leWlxbXRCdUFvMHRjTnVicjgwd2w0K200TVBqOW1LYVdQL0ZKMXRsdFBkVXpPNEcvaEw5V2pwVE5zbFZ1SXlmSTZYSlh1VmllRXdxdDRkYm1majhBQ0NKelNmZG40cE1vNDNLc2tYV3lzUVZwakQ5U3dtMEY5QVBBdndPQU54MnV2Y2IyQzl1QUM5K0VDODk0enpxZkdhUDdLT2Jocm5NN3oyMEJBWUJFUUg4bmdON0s5M1oxZXVWek5QcW43VFBISXZNY2RkVjFpNjJ6M245T21XV1QrWmFhYVlrTHpqbHZnV3VJaGlSUXNHYTBtb3RnWUdSaVpoRWxXcXc0ZGc1T2laSWtTNUZtamYrdDlRQUhva0o2Yi8zZ2JqTDExa2RmT2JRM2dCaDY2bXU5c3Y2M1R1ZFRvRkNSWW1WV3VXZTFTL2FiNjdEampqamh2cHNSY1V1TkxTN2I3SGJVdU91aTMvMFJEbGZjMEJBZXY2bTExVC8rOXErRkJBeEhoU2RTQ3hBdVJLZ3drVnJRMFFzaWE4MnFwYlphT2FPTkJDN3hGS2xpVE5OZUJyZU8ydW1nazY1NjZhNkhub1lZWUtCQlBFYWJZS3h4SmhudnJJbnk1Y2lWcDhSVXBXd21SMDJFalRiWWFaY2RDQTIvRUFCb0RRQnNQOUJ5UUw4Rk1QOEE4SjhETndjQUFEWjJGYnlFaE9NVUxDV3FvcGhJaUZGR1A2L0pTYmJubkpnVXhWMUR6TFFBaENKSXVFYkJvM2d5YVNVSlJTTmRFTEhTSHRJTTNISEdzU054ZmV3RW5jZnI2Y0NnTVdsN2phYUowMGV4UXRRUjlpaUc0Q1V3OGdTaUpubndTYjJyc0FpcFJFbG54Q1lNczZjU3lJK2UyUng2RXFiK0NyR0VIbU9vTkFPRnBKU3lObEFUaEhUTlBvQjlIUU9yeDRqNVhrek9nNFFPQ1dtY1BqUnhUQzNVOFlQb3VVVTdYN3pNdnJraVdvN2RKc1puUVFBRTdubjEvdDVmWjJSRVFtbzB3ZWl1dkprTGxnK3dST2tzNXhTOE04V0xsVG9FeEtSSnVONVpsdWM5VnhtR3AzWG9oU0ZaZzYwMmgwUHBmUWpnSEhMZFU5ZFlHWkdVakY4eEdQYWZwQ2lOQnE5VjZpMDZUMDRZWXA0b0sxNG9jM2VsckNpVkVZRGMvai95UVNuUE90YUpuekhCYWFoY0EwQ2ZBQ3E4Uzc1WnRBazBwVG5LTkF1dU1RV1FiRml2dG5QVXhuTUxRT3UyZkVtTmIxWnE1NUlNYzVRWnRtcDhWeWxSK0ZCWW95bFhwWDdWQkRBbWRtSXRIVjJGUnd4cTNmNHpKb3g0dDNLWmZwc2p5OHUvVldiVWc3WjFSOU1ncGJqSjR0bTRXQURNUWs0NXdEU2tVUmd0eUVtdzJNS1JUV0RGWmROL0ZHYVJmWkhiYTdPTFlPL3VUNGlIQjRxTWNxdEg3S1Z2MGJxd09aRi90ZVkrRFE0b0hVUVloUTRPVlFvYlRXTjFTN0RCOFBYYyt6dXg2T1EzeE8xRmRtRXFBL3Z5aUszdHVhSFNSYVc0ME9ZMDhaVkFQVFdNWHdLNFpFT3hCaEM4ZlR3YXNHaHhLU3Q3eVFsQm9UNTBvcngra05xb21HK3FJTTE0VHlYVmhTSUQxMHVFSTJDY3VGT3E1NENjUXZOengvcGNmOEdvZE5ZL1MzeG1hVit6Slpzdzc5aWxlOUYvVThyaFBWQzRtUWxjTURyYm9EWVM2Q05iNEFLd3hwK1JFRlZTMVRJNlVNWnc0d1lXUU5QUVc1dE5UbkZQZE5ndzBGTStkcWdIZzgyNko4c2lWaTN1blE0VGxzaTlnYjdHNDVtV0xuZC9EeisvUm5hOFJMRWU1OW1xcHI3U2hvcXRWd1NJdmZtR2RWMnY4eXBxalU3djVqNm5yUDExMXBnc2lMeE5qZTFXSEI4Yk1qcFdKODFkdFMycGFud1Rnd25OMjMzV3F3NGJESlNaR2xCSlRTRGxIZU1ZWlhadE85ZnVsV00vZTBETjNaek5GYnpmL2RzMnVYSUxLZ3hka3dOOVdFVFp1N2xzNXJrd3dSS3d5VnVWMkZNMmVhbGZHVmFoM0xVMHI1MXRXZk01V0ZIQ0ovV01ZWVVqaFd5K2NFbzhleVdCTVhFeldDVkxreWJZamoxdnJWSmRuT1JYZXhzcmdVRExxYmFoMm9pRDg1N0VTR0xhdnRrVExKUmZtTldFOGVhRzI5MFdtNUlzWGk1VGg3V3dsTzhjM0xTbjNldWk3V1I1SDh4RFkxMkxDYkN5RXhWKzZ4NGYzdFF3VURHcjNodGxPZkFHNjMxOHhrcnptc2picXdZdEVWU1c4dlI5S0xlaFo3b0ozb2thNWpXTFZuOXBXcWNybUQyVnZHT2FKOGVuK0tpT2RVYmtQWEpRZlc1eFpiN1cyUmVEdE9KVGEwTmJOend0UkpQQVo5UnRxU2F4MHFHbExrOTJndjFEWDVPVVErKzNZNnUwVUszUFB5RFJjOGVJbG1rU2NFWnAwd1MydzZ3Y0szK0txbkozNHllTmFidkY1L1J5RFIwajc4SHc4NUhtekdWT1MwV0lnOUpBZWxnTzQ5d05rdEk3aEEwVzlrd0p1ajlDRWwyR2FCTDVxa0pYSm1nc3NTNmFnTlZ2N29vR2lBZ3hhbCszcXdUWGZUaWxyQ21sVmxvOFkwTE0yRC9BTmhmdWlTSnJOWFZzQngwV3RQYmtWa3ZOYUhsa3dnQTFjT1F0SXl5RVVnME9ISGx6ZDkxUVczcmwzVzAvczNkd25mWUswZ0NPV3p3UHRJQ0hWbk5YN2VCZ1JuUmNHUVNyaml1YzF3bndxV1VsMTZ2Ulo5VmhYU2VNSVMwa2ZKQzcyOGtQay9yMkRFZFRQSTkwR0tBSm10dVJnMHBqSGFFNVMvbG15N0hRQ1kzZ0Jxa2Jia3BEaXQ3S01QcDlMa1FRU1ovUDVJcUR3UkNlUFJ6N2QzNjBPZ2FGVGpzZU41L0RPOG1hNGxDeGw1MVdjcE84VG55ZHVGbG1maGZ6Vm10NmVjaDhMZW04bitnUUtLS2hndzJFWCtwL0Rlc2k5R0FSVmdLOWtUbE9MVGtRSWFyWE1iSlp0YUVEMDZiNWJkSTRhSitFVFgrQWlRNUpkdHVjUTFYYUR6dkRGcTFzTGFKYzN0eEtRM3RRTGV5VXF5S1dWUTNGL3EwZEZqOFlEOGs2eWRkVkZhNStWcytEU0c2dUMvbk45Y2VudUVOcWxqSi80Y290L243ZitwaVllWVVwbytGWk9sRkd4UnZWMVd5NFZFUEdLTEpwWDdBQjN1Q3RMRjJibVdhSUJpTkY2aEI5MjNHL1QybXVkdElFMWZ6NjZUVXczQWJyUXJhbHdFRmhPM1pMTFpKR3pXend6d0xqRHMrejhvWms4NGdPd29IVUFIQWdMdzhYaDJhRk1yNjZqczVTb3hrdEpZQmVUclJqWDV6bkJrZG1JOU0rLzFocmNZall0ZFpyZ2JyVlRSNmMwNm8zbXVhQ2tOWmNqcmZQc1hsaXBhak5Md2F1Zkw1RVZTS0VBSGd6bzdFTXhZSlcwL29pSnh1TnRrbzBXbVUvTzQ0TmRVV3pJdXNOa2RaZmpkZlNWbzJ4OE9ESEg2THpUSHV6MnB3T1QvT2NCRWpKMVJValI4Yjg3NU5JRUJCdW0zQnR0NnpFb2RiMWhNZG9NaHJHR3FYVTQyQjBtNzNreUx1Um9hNThSeG5HaUt4bUlId3RnTlN1dmtBcXV2UjBLTkp3djM0WWU0WTkrcHZXMzVFMHRzRkYxZ3V1alRMVTM1ZnBVOER3bEFmUG5HN0gwM3pXOFgwZEpubXZKenlZNDV4OGxoRDZnMkpBVEVSNW14L3JFdDNtTnpxM09rYVV3SnZJZkd1K2ZxNVhmQk9IamFmdlFENklvd2hoYjluUWF4VDZKRGZTYjhWa3hybVZWbnF1NXJYSTVScTdSSHlNSlJpTkpuT0h0OGttdmJnZ3pZamduVG40ZHlleGNTek8zdlF5RG9KOWxXSWp1SXNSS1I4ZmJBQVhtenZzbHZNdWJib3ZUYW1jN0syYlJVZjJIMHlSakx0SnFlVHV5QWplOFlRY0pKQTFkY2R0enVWQ2UwL0VyaFlOSXd1MFlPekV0ZWIrU2xNS09VUXNFOXV1WnV2dVFYV2JYcFhsQ2J1dkpBUlhQeUFtekZHaEkrdU9HTUJIN0RQTzBvRFV3MU03OEFOM2hKNkVCK3FvMFlSaEk1OGJCWENJVUxJbXlnaFdWc2F5c0lTUUI1NmhxQjJISXBYek96TzlFbEZzZHh1Qk9YMGlQaFN4TlA5ZVZoeVNTSXAyRXpYa2FiUjdmZlF4a2VpVEQ0TDBGWUNHR2lOek1EZElqWGhoZHpYUHplUTZzSFV3RHlnZFVzd3grdW1LaXE0OW81UXJ5NEVKUGNodlgzMm1KMUVaUHZMcko2cGNhVnVtQzNwUXFYemoyZXZYNG9wVTd2TnUyYStPVitlcnh2SWoyVWJsNkEzblJza3hrV3c5Zk5BZWpWd01JRTVSSEVTbzV4cjF4TktzN2NjTjhOdzMxTWYvOXRSQUtORExIRDdjTDY1bW1lcGFvaGtuUGVMWW5jYitaR0FWczNRbWVzNXlCR3Y0eGJKUjdSdVdqS0lXd1E2bGZDdEZ0SEFlMFdDb28xREMrU0I2SnNkbnBFbVBnQjJnU1E2SlVpOFZGb0lCaFYza2hDaGYwMll4ajlKdmVnL1RLcVR3ZzNlSFBPNXNWa1dEWXZHQ1NhQnVxSTduYUE5b05CODcyTmdvdUlRYmtFckhiODhKMmROalM2SnBEclRmVjdyaDhXcnhrcjhjQjNaaDEyS25NbUtxSG8xcE9lbmh0RjQ2YXpFOUxhODd1Y1J2M0pSMnl5UTdtSU5sZmRuR2puVUpldC9GMXVqZStxTzZTdzZ2WVNwNkRSc2lHZ0o1QmN4WFZvM1I1TFYrWVYxdXV6aHZpWEQrYWIxWkdORHgyUHg0bnJhbWFjYnRxSEtvY3l2MzBlekIyOEdya2pYZTAreEFrQndhVE16TGRZbUZPOU8vZzJHSWVIQVNWTnJUejRVeHJJOFR4S2pqVkpxcnQxWHJkSTdETSszRGUrQ1ExZlc1L1YzVFhIZGZ4b3JFd01QVGJ4cnNSYVlwbmxLSE14eFpIcytKY2ZNYjdYR3BQQldtTGZ1Q1EvZlN6ZXYyUFJhdUN6NkFsbC9CNEVDRXZ0Rm85QnJHRWRacG5JT0krTGdnbjVCYnFPd1NiamkvMWhxQmEzNG45Zko5QUQzVThpYnVhbUdHZDNXMUx1UmxOb2h6bkxrdWlQZUQxajNDRERwNVRWTkdBK0ZoZFhvYVlFeU1UMHFUeDJSbndwczhJdEI5ZkhKM3lhNUZlZ0NsZlAwclJsbDlkN0NaMzMzai9oZzNHMk10YXZNMWZCVU5Cck4xVGVGV0Ywb2M3aXdDb1F2S21lU3BoQlJlSHR5dzB5aXc5MG42eHBnQ1l5a21vTktHaG1oMElWWlk4S0JrTzBXMXBxWUlpOU1pVFZHOTRKMmpoK2N2T1MwUnNlUUs1Z1VEOEVBcVAyQ2FyOUlqVmh0VjNzd1BWTnpUQjN2d1lDa2lXQlU3cjczTjQyQkFuNk4xRzlmbDlOWC9ENUErSjNrOVI2TlVXL055YnFUclZzenc1emZPRDhObzFvdFl2WDJTZ1lOWDEwRGM1WW9QdUpMVWo2NmRUdGNPbC9QRWJZWlBocmkzK08rL0U5K045amJlYVFyT1E1Z0oxN3gwQ0oybURvWVlvTkJsVE5XTkh1enhhL0R1Zmpyd3ZyRzBvZytZWWJGQ2IwVEJELzNvN2l0ek43ZHpYR29kejdmSjM2eHNET2t5T1NBNDROOHJIUHYvK1RNYURGcEpuNDM0Tjg1TS9tY3ErQ0tvaWdoeXdkamtsVnpTOThIZzZRR0JHVitrU2FhMUswbHlSNVRrRGNETi9ZSlRwUi96ZmJ6U2trNWV2RjdSdWRGWUtKcW1JaEVpUkVpcjA3RkVCTmF6NEVLejc4MEJOM3FLOXJPYis0WW8xOHo3NThuY2tnUzZPK1BnTEhaayt2WGVyN0lidThCcXRyYnMxZjMzbXg1MkhleVpKeDNvaUc4MFh6ZGJBNVMvK0VKN0x4RWZzMmRQejRZZ2FzZWh3UlJhTEtMVGtZZ1FKWGtQUmJBaDFqcVhtU3JkenZnbWZFKzJUWi9mbTRqdHkrZGorL2ZHODBpUjI2bi82NTFqK2JPZEVlVjNlWkw3NFFVaXNJYlJyM1NKRjVUb25XeGpmaUlHZWQzeGFjdVhZSS9YQzlYdGhZQVlrRFVZM3QxRWdUTk9Sa2dFOFE0VURTZ1VRY09IRUF1Z1BKNkY5dlVaUUo0bkxkUXIvKzlWK0dnYTR2c1F4Q0ROWDc1OTV5TlhwTS9mV3hBbnA5dytDNmpOSW4yNVU1b3NxUUdyR0hYcEJPNE5qYmN1Nnk1ZmN2Sm9kckh3bnBXYUZYV0RWR0ZxWGYzWld1Tno3RjlldnRyeWpHNWhhVG9IUDdYdnhiV3phMmlGZ05sWHB1S2NIeUs2dEhMNUpraXhTKzFqdXVudXdscUQzNy9XMEYzUVRjZElMVVcwR05nM0ZjMmtwNk5LaTVsQVRtZW1vQWtJVDVyWnhYejNmZG1wK1FObUc2UkZ4eDNHNnllWGlvcFprVnpmbGRZclRmVFp6eFk5Z28yK2dZWG1ZSWhTM2NrdDZFRVBlelkyM1pIaGpHMHdQdUh0MXpzejdZc2RHZVB1WllsZU1NSXNLYTBtYlRGcnVsTUd5M3NtSmVSQ3NwZjhQdXpRNEhJUnFkYUlYTGhFODY3WWdZQmRudFhrYzM2YlUvUDR3L2twWlQ4VTlGME0wQjBob0Zub05hMHVjV3d4Rmk1MHM3VDE1d04wd3FUWmZCN3JMVjh5bWhicWJjT0YvamFkYXZVZk4yc2haMEdRMXBiNE40MmtkR24wY1ZURDkxL1dNeWNuNWVxSVJULzErZEZrYjB2VDFnT0p1VnZyQ0lmMjJVdUtwcDkzNlNGVzBxbHNxRnVtSlBXT1RDendVNzRYc0tBK1dCeG5xRE5Wa0FmQXFJM2pXcXNoeW45SE1hOTlTdlpCbUd3L0tjQjFlalF5b1BGWTVzdS9PRVBENzBUeVdvUS9pZlZSM2w4cVRTQXV2VFVYNEY0U2VZMGFORnpRQWlWUUZnM1pEN0cvMzBFS04vcGNFc0FCU2pCWFk5ZGk3NHJsWHBKYzRkVjQ4amFJQnJBeTR3ekx3SURWWnUrM1dnZnN1ME5wT2NZd3czdlhIWlFjclJDM050UXNMUEdtRU1YMUE4c0gzMFladWdCWXVqeENMdzdlKzVORFRkZFE4ZWJHQitZZzVhWDBLcHF3SXVwU0xyM3lENUpuRnhUdmZhbnA2T0cwKzErZG1GMzZJZ0dzdzlCQmNQNTNuZkhQN05uM1FaWHBzeE0rS3B4RE5uMStBcVdCNGtkamJpYVl2dlBxUDdXUTRLL0RqRFVaNzEzL0RiRjdCR0tTS0owOFgrTDFUUlJ5eCtWVzcyb092QTEzQVF1clh1MDQ5dDNOOUZLWUU0VzNjNkU5NmEwMXlZZHZpNzcrREJSWHc5bVJDLzdMUEdKbGtBKzdSNzIyMWNHUWZjV295NlVLY3JmeEF2QWZCeUQ2Y05hY3RlcUhDYWUrcENsbUxHdEdCZ21DU1A3akJIUjF0ZDBYOTR1MzYxYkQrWWwyZ1lzOTl0a29BMXVjODY0UGZCVGljYXBxZXZocVhCZmUyYlBsaStQMUhqTVpGYXU0Qkd1Vk1HbDI2SWFLRGxKNHo2OVhSOUd4eFhIczUwV2JMYmk4QTE4UlRlRXJoNTFXWlpUMWhUVEZncHg4V2o3U1BpcVQ2c2syT0tIODVyNEM2NFVzREt6cW5CR1hmVVVvYUY4OTZuVUpua1N2K21IdlJJaUtNQmhVUU9uenpHdkgwcTkrYXNtWTlhcHFacXdXYzhhR0RPTUVNbGdlUXFCU2gwVWFRRDIySTdzZWZUYXJrRmdMTm5PcEEwZUgrcXdkNmcvb2RYK1Z5V3cwQjFhMW0veUxQYzVWUVo5ejFaSk84TFhiNFlvcmJkMS9XTG1lN1VFQjdCcjEyRmNGZy9aVm8yNlhJc0E5SnRpQktkYXpsb3hGUDBRUXdPSnBRVW9Famd3OTNWc1EzcHQwckNLTm9oNm5KeVhWR2NPd3dmTWFkY1hRK1VSdkgvNTM1KzAwZVk0RWc1L1pMK3dmVXkxcEdKVWtuWk9qbmJqRW1IRVlodXdZMHAreG00eFpNMUswMncxRFdjYzhic2luTXRtaVpXTnl1Q0JaL3RuaEhZanovZ1pPcUx1c2d3QnpRVmR0UEZRWGVZRHZIbFJ4Y3d0c1IySTFqUjlTS2lkdk9iMnBrN0QwL2tpS3VPWHgzcG1EdzVGQUhSYm1YVmxaK2FsU3hlKzRIU3VkaXhmYS9QSllZNkVlbW8wa3RKcjY4aDUyWWNHS3ZzSDlEN3g5RlY3TDlTN3dkS3dLQnVYbUJXN2ZiTXRaMEJJUnpGbFBjYjFtWThudHBzWDJZZ0F1czBjTTBxeFJMUFd0MTFLeHZmY2pxcmdDOWFyRTNtOEo3ZmVKUmNRVkpBZXM4NHI2dS9tZ2JVbnFkei9nMEMydUpvVjdrazkvS1dDVkxvd1c1T1JTN2x2WjJqLzZxQ09rZXcrZjUySTJyeXFqeDQrcTI1Ly8xeVQ5dERvL215K1NsWmx6OWxyOE9kZGp1Q0hHbGRyREJuRUdFd25KWEJYbWRKN1hxK0pLdEJQbVBSZXBld21XOTRST0dWRVk5SzQ4K3I4aUVoQXpuVHhnVkdkRTlPSzBFWG5TQ0ZkeHZGOGE0S1RDMU55OFpxMjc3Qk5MaUZjQ0hNRDVIZWhZdGNoRCtoWjc4RldCb0JBTitraEx5bXl5QUlHV2NsYTdMVzgxbGdpY0NRZHRkaWE4TVBBSGRrSHlIcUczcEl1aHVldk0vYml4Z1B5c1plNFJ3cjRzNExjdkgzVzVCRThnVi82dzErUndlak16Q1IrSnY4L0c5RVc4UXorUXdlSXhaS0NqQStuWDRjNnRuOVlhZlVOZmw4VStjMVdNZHd2WEE4ZGE2WjNSUnVEc1hhZ0FWdlQwWng5UTZway9xc0NLU0F6ODF6WHRmdEZmRUROVHcvbk1iaDZRV1JaVFk0S241L09GWGZmU0FqLzc2YkJBZGlZb1JGcDdjMk1yd1hCVFp0NXBEMXNtMkdJVmNFZnd0cDIwYWRmMmlaVVhJM3dEV2xDQVZaSTVWTGY2Nm1Nd0dZQXh6Q3ZsaUdvKzd2aUwxOVlqNElLejA3Wm9zTVBXL1BxZjAvckl6cCttUC9PN0p4eEgwTHpUWjh6R3RHc08zRUlUNXg2VlRyWFcrTDlsZ2U5VU1MUDVaYmZDdk9ZbEduT2llQnBFblJTQnhOKy9lQk5mMGpidHdFRTZCYW96VnhWNHFXT0xRNys2aWtmZEcrQkt3dXhDeUkrcjJiK2cyTk10a1g3UjdjZlZES1dpL2dDRWtEMWMxS3k4c0xYaHZnZU9Qdmg0cUpaNkU4R3I3TlRiRUZQYzJ2RHNXMlc4bWxqdEZwNmNDWldvc3J5UkhLM1E5RHZSODhtMjlOa1ZuWHVyaVFJT2lTc2FEcCt2MjFNNGZsVWNMellldkJBQzlyK01WcU52b0RSQ2dWRmpjeWdOWEs3Q3hZRmpiL2xvMDdWdlpRdGwwbXpuL090ditkSjExZHRyd0hrMVVBNnRkQ3dlczNrMG5VMkxTeHN4N05NU1BaZXRzbWFNdWtKSG9QWGRDUjlINm96b3hHbXIyV1l5SlpMT1pGQWRndzJrOUJDejNYNjkzT0x5R1RzeTNxK2VlSkpzZTkyeWFJZzY3MS9mOGVnbjRQQU14UUsyWHcwTHZmZEo5QjdjK1FkU1RQU3ZsQ3JaNExoLzJocW03dGJhWERiekFsaHVkU0VvN0FldVdtcXB6eTFYS1YxeTFWQnJwS1JMcVZTNWxacWVOOXE5QnNUbU5Vb1FNV1JOSUlHR0kwWGt5c0VTY2dWWm83SGhZckEwYUFsU293bzhGVmZ1eStYRm1vcmhPRUVvbjh1NXhzRjVZSXc1Y2lvbm9NSUZoMjFYUjBzSGl1dW1EdEpmdytubjVoU1ZGV0wrVjlSVTNGWXlJRkp2U0d3MnBOVXlpZ1g4S3VjRG1qYU9PM0J2bjA2WHNRaGJmT2FVZFBibnVTRFdtaklrazUyVFlWMWFOSTNobGtoV3JLRVpQaXdER3J5UGNQYjcvSXhsejdhcEhrVGgvWVd2Zm1zc0Y2UzRraGJ2RDNxSmtRVVdYQlhuZmlDVVVraUpqUUpsOExYdEU4cWRJNmpGYmRGMko3bXUyN3lYbDQzejk3QzlnMVNOMld3RW8rRERrT2JQZWxwRUhYa2QwbTNETklrdWpWTktORjlUSWV6ZjFxeHBwZENJbWhmOE53bmFydjRQL1ZPTU0vM3dRY3c2NERJSnUzQm5qeER3SURVak4zbmFNbW9qZXptNlBERGNGeCtPbDhPNVF1dzE4R1FtNEM4YTVoL1JTejZQY0ZXNmdCVEYyVEdWeFZRcU9uR1pJYUtHWXlhZE9CVXdXaHdwRk00WTFNcFlBZ0hYcS9CdGVPK2FLYmNHSVVXZ01LS3lOU1I2Tmg5dXVnWXM3Q0NxSEN6MHdxZ3AzWWZZYkhuRWxFWmhnV2ZKUDU0M2ZkK09TNDFJTXFzekdqTTZKR21VdnZnOXRIeUVndkNJWlRLM1dFSEFSQ0xtY2lkaVI4VEIzaVFCcXoxQnFScVdKL0RBUkU4UzFKL1U0SXhMMEVXQmdiNkkrUUx4NXhlUHhyZFY1U2ZyWitGMkdFanNVWlhWTkhnYURNZE5Xa3NRTlovSEFLY05HbVUwbnZFRUJJK3pPbUUxaXh4WFBtNG0xYkJKSFQra1ZIa3dvOHBYRUFrYXNad1RXQzJBRmZSVll3MC9VWTR0THExWXFMU2paeXVhUjZqNXdKYjRBbSt5VDNHV1ZYdWMzWWdOVTgzZ2JibGM4SktzZlVqUTBMNWozcFVGY1hJR2NvQVYwQzd3K2I1cVJpSld4QkVya244WnVYZXlXQW9XZmVtbEF4ZHB2TGR3L3JocVhidmFzRVhZOHNDMWhmeUtjcEI4YjdsYnlQMVhBZTRXc2NMenhVTmJkM1gyMU5ZM1BFRnp3WHVMdHQ1UmY1aUtQU1dRSWpzSXZyL1ZyWWJ3L09DN0NMOHZNL0JUSEhaNTVZYUpNcERPdDdSdGF0cFpPZHcybjE1RGgrdExqUzhBZnVYalBSemV1YjlRQnpWdmRyWUpoUUVVSDJta3YweTQ5OEJHd25mdmlqdG9GYlUzU2RxMlgvZDBTM3RMeXpTTDkxTno4Mk9nQlBnc2F1K3lnVCt0T0FnNTFIQ2ZYZEdmeW5HcUVSVHZhOEEycVBMN1BhMk4zTHMvblpkQUs5OXk2Q2syNTY1RExXM1V4TEpSWSsydDkveHV2clBaMHRwU1diNnQwcmZWMHJTUDA5SFd1cTYxZGJ5MVRRdWlFcnhNcEpmY3ByZERGVFVQVmJORk56dFlhajFsK2RXOG41cGJYdVEwcTF1YUQ0TW5vRkNpMzkwbnVoamY5eURZdnh5eUkzU2FGMTBYeDBybEppdzYzYTNrVTZwMUsyZHdrdnl4V3h5cjFjOFRPa0ZPWFdLS3FqM2JpdklFWDJIR2JicEFZdVhEanFwRDFzRStuMVp0bmNSSnJtbWdjbmlWRE91d3ZQV1NDdXl3bm45YVk3VXYwMURONnhEVHQxcWxROWU3aFV0YmhNS1dwY0pFQlNGYjllVVlYQUpINW5xMGt2c2hEbTFGcldXMzhvN0IyOUJsejg1OVd5UFBBMStiandhcCtQeGtodGQxSUtJdzlmemx5azdWMms1TW5tdVZYc210dFVOenJIM3h0dFlINkpxak9LSzJRK2VtdjE3NVBxUTM4VCs5bTZTN3lmVThxOEQrQnhoVFJlSEN2alRuV2tBTTkxSlkyUWtiNUFHUFFxV0pxQTc2bmx3K3cvZTlPWUJpcGk0ZDJrdEllT1JPdjFCRmNXK2FnQ2hBM2VzbEVYVUdiY0lHQVJUYzRuaFQxMUJaNjZYWHpURkxGTnlaSVQ1TUxXK3J5Qm1vZFcyVnJFWERSTVpxUkQvMnF5TUw3MlhnUXBHRUxmTm96NzBndm83QmtCenhXcDZlaEFWYWNucGV0WGtONnhKR2RnaUp5aHBKaDdhQ01JZ0RNY3BSVDhxaWFMdkw3R2FOVStabjR1aWxyZ2EzWW9NK2lLc0hIcWo5R3U0bmdycEZIb1dydmxGUVBzUGNweGxqcU9Mc3ZkbW1qYnJlbXNIcmE5K3VTc0dEK29WdXBic09iN0Z4WllVNnNxeFJiZHgwbldPeGtra2l1czR2bncvSzBXQ0pSNXVJNzVYWFQzMTRCcys5RFRuQnhieVJtTkc1d3c1QmdXUFVKaG5ac2wyV1czTjUrM1VyZGlVMExpcXhJQzlmSmh1Zk5sK1dUSnF1MExjU2treFg0ekZBZTVSV1JMVmNQajVUTTFORlJ0UDViYmZrYy9ZYk5OVUlpTG5wVEJMVHNyc3BnQ01aeDJuRmFrTXZKdWNvaWp3YVVNYUtlTDdRUXVlajZLTzIzSkZsUUl0VXVqWXpPL1NZdUUwN2ZidklSTkc4TW5jcG81ZDNsNWxLMGpJam1kdTQ5WTliWDZvMjZZbFpjN1BmSGY5MHZNZG1IbHdaUVR5SEROWDFHbDVrMWo3Y1A0LzVNTkVwNDBRSnpUTTNHTGl2MEpyZkJSNHVBZmYwcUJCTVcwS1U0Vm1xMk9NcWNMTWRURGV2YVBpQ21iWTR3WXlWTDFnWk5uVlJzajRITHBhQXVlYW5xNExjQ3BsWHBSS2lreW1VNllhYzRldStFSW8rMS9ONStzOUZ3aTkwUVAyTnJnQ0tHcFRETERLV0xhUlc2a2JQYW1OM0VabUtSSVFReWRVZWJFUzArWEdxZHFoYmdNU200dUg5aGI3d0FhcU9JVjJDNEtQVXZtSUVMMUFQZkEzNEs1bG1peFYzNkc4MEtMc2JVbzFDbnVyQ3lCUkY3a2NGUys5RXNZWC96UWZmOEIvYmZkUGt5enNwTUk0cWpwbnNYcnJBbzcvMXFkZm5TMFRNM0FhUzJVVHZSOGVMVnVMZWp1d0xsSGRid25VV1haRlZtb3hobmFMTGpqQ2JOZmlaMlFKSkxnaUsyOHFPdWt5bHl4WnlldUpQM0MvcEliUTZURjJ1aFhnYWNLWldGYnZnejNHdndoNWdhR2R0SUNIWmRBUHdQYUN6SXVqYWUxZk1kT0Y5MmQ0UXdXSHZPWDJMS0RKbGoyaTZOamZvaHFzZ2hGdXVHOWhLcmFYTjBvaFYwRU9rR2FMTEx6T012dWhYRTh2VTVkYm9jc1pvRE1sTUlUTnkrVFdpMEpLSUw1RFUrMC9wZDBmMFE0bTZDWFdwOE1IUUkrVjluaG5jd1NES01jb1EvY2h6Vjc5YktjKy92dmc1L1NGd083OTA3UEQ1dS9kVXl2ZXY5RDJqWDBaWmRBZVNSaS92ZjZxODNXT3pKeGlZV2hqS0g5cDZEbUtVZHR3MzVmNFN4cXRiSDdvalNjV0hGcm5XK0Q3bFltMU5rK0htYXlyd2RQUkN2ZlltOE1zbGp4b2ZFYzJNdURYMzJ3L01NK2lsdXZ6ckRad1RjZWx0dXA5dWh0MEdsNDhkK1FuSFcwNVVzanpYYS9ubjJiTnM4M1Q5RUhab3U4bnQ0OHNGT1BzMTc4OTNDYlhiMnNOTFdUR05qcFU0QU1PVHJMaFd5NDVQWHF1VlJxeE9WUVRXU0dOV2h5cjh5QjU0OG9KV1lBUFpYY0RoemNLTzkzKzhCK081Ujh4S3FONWNtb3lrRkNvMXJoWUZZSzJvaEdlelJ0UVZqRzZwOGpuQU9sVXBqK1BxYmNTL25sSUNOV1E0QzdCRWNQMU9iOS9ZbmM2dGE0STNMbkpJVmtiN05tSGRXS2oyd3I5WnpLVGk3NXNYSzFORGU1eGRZNG9wejhyRS9RZW5IL2NzV1hZcUZkbWJjUWpYMkFmaXRwQkVHcEc3ZlBJdXZmQ3JLeFZhdjlZUVltV2tqZzQzcUFMVGZKZHR6S29VeG54RS8zZlJPbS9SaktpN3V6QW5PYWdnU0ZuWG5wYnJJSEMyTE5lV292RmwycFpxcmduLzVLTGtzakVpSU1OaS9JaEVvL1JGWlpnL2F4WURLUy9ZSlV6clU3dGdoOXVEbTdqdHBDRklXYjg5MngySTJ5cXlNU3JlYnI5SXEyUFdzSjJNWHJ3ck5TSWgzUUE1QTIvWlVJSzAxZmJ3dm1ZRUY4cUdxcEJpTEdYcVhTOGV1d1ppTEk3VjlxYVBMaGoyMFVKUDkycVZGNlY0dlVRZFlzMzhsOUJWZ1NuY1lPRzdaVmt0aXRyZmZ2dEIyYjdRSitLR21uTmV2SlVqV2V2aGlCQ3ZVaUdOUGR5R2VBWEx0MEo0ZnBDYzJHa0Y5OVhUVWtHNFYvdHFwS1hIOWVtcEJ4Vm52MnVEWFhwZkU4bXNtbU5XbE9NWTJGK3d5VkRNR1NkQ1llUG1ZbTZUb2RPeUN6blQ1bkRJTkZIUUlpWDRZblU2b1YzcTlVZ3duY3lsT0dhU1pvK1hTYVFtVmp1ekJrM0dhS1FYUnhaeHVnMUp2cy8wdzJENGYxdnh5VVFlR0JaNXZUSUQrNGRjOHNkNFQrM1F2bGZBWEIrYUk3K1V6Yzd6RkErTE9aeGY1S0M4UW0xdmY4eElBZEJvVXpsMU5LUCtSSGRGNGZpcDVsY2FtblkzZDFTMXYxYi90V1BJWWk4UmhMMms1UTVuYVVHZzhUb2ExMmlUbUZtYlVBMFVUV2gwQ1RPbVMrcGlnSGNscERoeDhHYW92U1dqTFhRcjBWSUVvaC96MUtVVHRuM1hlT2c3OURDKzVDU1U2UnJkUGVtVFgvMXNpZHY2RDVnVmFWWnNKVFBuVXpzbFY2dkZVdlhWRXVuVkhJbEVjN1ZYWnBOTGJiS3ZNYkJzYjYva3MzK0xvZVhUVjlJUXNnTU45bDBiMmdKWm5QTnBPTTd1dlo0dVdiWWQ1OVJUT1R3M0pHWHBudnFxaGJYK0cwREtWQ3RnRWwxVUxSUGYzZXJna045UEY2NEVFSFdaUnQzRTI2MjFmUFNIYWoreFNMMkhobHp3ZFQyenF2aC93WmRzQ0VqTm80b3VJTGQ3SWNlMWJSSHdmcFZXQlpoamZaaVpUQXRGTlZNTGc2Z1dNaGhxbVdoSzBSM0Vwb0t0eHl1V3pTMXE1bXJwT3dxOGVWeTNDL0ZSZVJNSUhLZVpLRUkrZVlpdW9tbDJDUG9NRmpYNnE4Qmx2MGNFM1Z1b1FrOEs1eWVNcGROSElJa3MzeGhMQ1NYbGZFOHF2M3granc5UVlwaFM0ekxITmYzenRyRW1NSjA0RzAxMlVzUFg1K3RxdWtYYlYyaEtiVWtSVEk2YytEeERmbE1oeG9zQ0ljL3pnSmhIRlV0ZGp5bHZXQ2twdUw0MmRXRGZwT2x1YXFsWjFoTkJ0TnNMZkJHUnFVSm1JU3Y5WjRGRWVrdmdqV3RzYkdyOFFlNTJJN2k5SmZnUlhnT1F2VjdiSk5hdCtPdHRZL1F3eWt1TndINGpDMWI1WlV2WnA3K3VxMkZrdXJzNG1nT2hkclcvZDlqZ1RRNjdwZ0tEcjhobS9rN285bzdzNTA2eTJDZWVZM1B1TzhGbW5ienZidFlQTGEzL1cvclpGSlo3R2dJTTM2N1h3UFlqZ01wci9FTWc0WG9EbTVHdWwxZ0hzNy9DSVNhYjN6dWdrMDRNYUEwSVZFVXZybTN1cFdEUjhEY0tobHRRTUZ5TmdpRVRJL2duZTYya1RkNmMyZGJrNVdIRHJ4N1pKSXNxY0tZdlN1SlJsSWFpb0J0RndUc29DdjZVb2dUQWRjZ0pMY2dKenlJblBJS2M4S0dVb2k5MHdmU2FSdXdBb28rb3FicVIydWNScGc0L2NqM0JUSmo5S2VaeDRHZmptbUFYNVRtV1lDbFRNTnltendRbHhXbURSOVYrL2lPY0pQWmZtQjZIbCtBR2pZMG80dFJ0MXZjSHU0YkZhbjJ5eitBYlJqTmI4bzFTVGpkR0dxTk94WDRTSVRWcHlDUFhJOHloaVQzQkFpWWUzeklWK0toazVpUkNQbWpUKzNTbGVwK3VCdm5nNURHTFFmRVhBOEVBOW5icm5Yb0FzWHd4ZTcrdUl0QUlmbzM2OFVnM1FtQnErd2pvYmZReCtnUjlpajVEbjZNdndKZmdQZWtyVXZ3YXFTSytWZDdENytEM3pBOGUydmgySXpEOXRlbnhWRDZKQzQ1MTJ4dDhsajVIZlQ5UGZ4cCtvczRIdEFWZHdZektuS3ErUXN6eGV4bzNyR3dMY3JkMlZkUVFOMW1YeDFQY3dDMXU0c1BiekJORUx2MkxhTERkVXRQMm9iUXhLOGF6SG9PNFczaUQzVDQ5ZldlVTJlZlIzZjcveUxGWVptRFFYdmM5SzlsYWdVVUFNZUxlZnhhc0FqQ0hmVmdBWkI2SWRZczUwWHUxM2JxTEY5YjI0STlaRDJzRGJpMTQvejhneTFpeGx0amd2T1VCNUxvQWdCWFl6YWxKZ3NhTXJSMXRYWWRSUmxHSDlSUWRzRSs2eG1SZzh5SWVvOG94UnVNUUJTb1B1TU9NWU1MZHM0eEdDSitIMlNNaTVhYnVzL3dDVlk1dE5BMFhtMHk5eEdNMEp0QU9xMXBnSzBCZEtBZjdES0d2ME1mb3k5Ri9aR2xhbE52bHdubENjaGd0Ukw5bFc2QXI0S04rb1NkZ0l4WHBJSnlGMjdnTzJPL05BbGgxVlhlTk95UGQ5LzNTSUtBL1ZDazM5WTRFUFlpdUhlTUJISnBXa20zUWVKRUxQRVlMMFc5Z2daS2E5ekdIenY4Ykk3REhlLzRZYmhmZTJFOWlvTzlKTTMyM2J1YnNTa1F2aU13K24zUU5KVWU4dE90cnp5NXYyRWE2N0EyeFZaVHM0dTh5MWpqbnU1M05DM2tFYmlFL1pqc2l1bE9qMjBRNjhVNllFaW10eGt1dUMzdkw4WVpMbzJzRkVhZFF4dXZHOWxFMGV0Nitsays3TVFIb04wUFlsc2FYYit2YU4zdHIxeTQyZFZta2ZTYlY1eGkzQmJWMXUxMU05d0QwbE96TFhuWUNSOTB0NHd0K3JpdW9LQTE5eXV3RDJwTEFKd1E3WjN5K2NJbmk4a2c2MThuVVNBVDJPNlZLLzNXQklhMWhUMmV3N0VvRlNyYU1JaitUV0UwKzk0cmFIQUp3RVQ5K1o3cGxYRWpxM3hESDNRRGc1SUdPKzVMOEwyK0ovK2l3enhQTXhnRWlCZ0FJL2l5Wm9IQW1NUDAvZUU1azl5NmlOZTFrNnc3V3o0dWNycVRweHlaM0JlVUp2MlJ5cDNYRlRQWWR5TDdKSXdSNFJranpON2F6WGkyQ0lNRTBwVFhvZFpjN0lTamQrckw0Rkh4R0V5M0FSSFVBeDFWL0xadmlqbDh3V1YybTFmU0NmK3N3YzBXMDZPcWE1bTZTS3p5dFJuaFFWYWdNNk1jaFJna0pNWFlFOFloQjl1bUtvb1RwR1JxTmtLNGZ4NE9XK3UrNENyY0dZcmdUWjV2bUc5VFVqdGZuaXFZWlVXVDZVZzBlRTNoa2lVRzVuQnBnakYxNERYYm8rRFFSYmZwVjEzek1wbElKQ3VjK1ZMSnhHZ2F6eEZ3V0kzWkxuajY1WDUwMHhCMDNvWjBNTDRhU1A2R3ZRWEtidVBNclVxdm1hUWgzVUdaclJVWk5pWW85dFhUUlU3eEdsZFN5cFk0NWJBckxVTE16dEFiNjVpbWRJT2FSRFlwSVVGNUJzSW83S1E2L1V6U3d0STJTZWRTMWs3UW9JWFBTYzBHVEY0dXpXaHhMeHZ3TnhGN2g5cjEyTExZWElkOUZENXNyTy9TMzJiS2VXelpQSnFYL0FNM1FoMXB1ZlN0NzZqaVF2WUVsMW1NMGVNN1RNa3dBQTN0OVNEbTc2WmFYS0xaNTY1dnBPMGl4dmZReUNJMmo1Qk9oVi9rMlBpVjNzUnQ0S3FGbC9tRHVEblV6Nm03VnY3OFJQYjNJMWpQTVhWQ3FWWWlmK0VURkhuVzNyY2hNYjUxZTF1dVZwekwwbGdHVElBVU1hUlVGY0tBRHNJRUUwUUlabUtmeURVbEZaWWNvMmE2LzQzUURDYVhza2NNR09LMnM1S0Z6cVB5aTdzamZKOVM4TlZvamo4b1gxTWp1eWZFRVFJQ1BjV2ltQVdnakxCd2tKcTBPSmppZEhaejJpWTNPWnpzRWtkbnJFTmx5blNOWVlsNXloREtYWWc4ajFicVRDQWhzbkM3eTVLdFFLSnRYbG1JeWhVdThOTExCQlppeXVRT1V5RGJKZEVVbXlEV1pyTDlDZWFhWlloSUg3VVMwdUpYbWViVElpalpCY3JGODAyODZKeWV2N0V5MXhFUU9xc21UdzduS3RkQVVaZXp5VGVEbGt5M1hCR1VaNDNMS3BoN1FISzd4cWVBUWV2dG9jV1JsRXRKbEEwMVJaTXBSS1RWRlhlcnB4VnhGeGI2OG5GN2pzcTdHYmRVMjBCdWVJVkpPd3NmRnE0VFBCSVVTT0xpNEpNclFWejk5ZFpNaGFQQzRXVHNZeWdFblpxczRtcndZS2R4ZXVQbFlLVExKcURTL1Y0bzRoQ28rRHZOUWIvUUkrdkhvcmVmZ01UUE1tNFk1dTA3NVA2SklYaEgvZTEveW53RUEpIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9Ym9keSxodG1se2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9aHRtbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItcGFyYWdyYXBoLHB7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNjt0ZXh0LWFsaWduOmp1c3RpZnl9Lm1vbnN0ZXItaDEsaDF7Zm9udC1zaXplOjNyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTU7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDIsaDJ7Zm9udC1zaXplOjIuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yO21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI1O21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNCxoNHtmb250LXNpemU6MS41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg1LGg1e2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6Ym9sZGVyO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDYsaDZ7Zm9udC1zaXplOjEuM3JlbTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX1wK2gxe21hcmdpbi10b3A6My43NXJlbX1wK2gye21hcmdpbi10b3A6M3JlbX1wK2gze21hcmdpbi10b3A6Mi4yNXJlbX1wK2g0e21hcmdpbi10b3A6MS41cmVtfXAraDV7bWFyZ2luLXRvcDouNzVyZW19ZGl2K2gxLGRpditoMixkaXYraDMsZGl2K2g0LGRpditoNSxkaXYraDYscCtoNnttYXJnaW4tdG9wOjB9LmRlY297YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7dGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50fTo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX06OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfWtiZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtib3JkZXItcmFkaXVzOjEwcmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3BhZGRpbmc6LjI1ZW0gLjZlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9ZGV0YWlsc3ttYXJnaW4tYm90dG9tOjFyZW19c3VtbWFyeXtjdXJzb3I6cG9pbnRlcjtmb250LWZlYXR1cmUtc2V0dGluZ3M6XFxcInRudW1cXFwiO2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMWVtO3BhZGRpbmc6LjZyZW0gMXJlbX1kZXRhaWxzW29wZW5de3BhZGRpbmc6LjZyZW0gMXJlbSAuNzVyZW19ZGV0YWlsc1tvcGVuXSBzdW1tYXJ5e21hcmdpbi1ib3R0b206LjVyZW07cGFkZGluZzowfS5tb25zdGVyLW5vLXVzZXItc2VsZWN0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1Aa2V5ZnJhbWVzIGRldGFpbHMtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41ZW0pfX1kZXRhaWxzW29wZW5dPjpub3Qoc3VtbWFyeSl7YW5pbWF0aW9uOmRldGFpbHMtc2hvdyAuMTVzIGVhc2UtaW4tb3V0fWRldGFpbHNbb3Blbl0+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tb25vc3BhY2V7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2UpfTpob3N0KG1vbnN0ZXItYnV0dG9uKXtkaXNwbGF5OmZsZXh9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZGlzcGxheTpmbGV4fWJ1dHRvbnt3aWR0aDoxMDAlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBSaXBwbGVTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBSaXBwbGVTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0UmlwcGxlU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciByaXBwbGUgeyBcbnNwYW4ubW9uc3Rlci1meC1yaXBwbGV7YW5pbWF0aW9uOm1vbnN0ZXItZngtcmlwcGxlIC42cyBsaW5lYXI7YmFja2dyb3VuZC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNyk7Ym9yZGVyLXJhZGl1czo1MCU7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnNjYWxlKDApfUBrZXlmcmFtZXMgbW9uc3Rlci1meC1yaXBwbGV7dG97b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSg0KX19IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udHJvbCB9IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tY29udHJvbC5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9CVVRUT05fQ0xBU1MgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCdXR0b25TdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBSaXBwbGVTdHlsZVNoZWV0IH0gZnJvbSBcIi4uL3N0eWxlc2hlZXQvcmlwcGxlLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5cbmV4cG9ydCB7IEJ1dHRvbiB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5leHBvcnQgY29uc3QgYnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQSBidXR0b25cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL2J1dHRvbi9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL2J1dHRvbi1zaW1wbGVcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vYnV0dG9uLXdpdGgtY2xpY2stZXZlbnRcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgYnV0dG9uIHRoYXQgY2FuIG1ha2UgeW91ciBsaWZlIGVhc2llciBhbmQgYWxzbyBsb29rcyBnb29kLlxuICogQGZpcmVzIG1vbnN0ZXItYnV0dG9uLWNsaWNrZWQgdGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuIEl0IGNvbnRhaW5zIHRoZSBmaWVsZCB7YnV0dG9ufSB3aXRoIHRoZSBidXR0b24gaW5zdGFuY2UuXG4gKi9cbmNsYXNzIEJ1dHRvbiBleHRlbmRzIEN1c3RvbUNvbnRyb2wge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5pbnN0YW5jZW9mPC9jb2RlPiBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL2J1dHRvbkBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7QnV0dG9ufVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIDxjb2RlPkJ1dHRvbi5jbGljaygpPC9jb2RlPiBtZXRob2Qgc2ltdWxhdGVzIGEgY2xpY2sgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9jbGlja31cblx0ICovXG5cdGNsaWNrKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmZvY3VzKCkgbWV0aG9kIHNldHMgZm9jdXMgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9mb2N1c31cblx0ICovXG5cdGZvY3VzKG9wdGlvbnMpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMob3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uYmx1cigpIG1ldGhvZCByZW1vdmVzIGZvY3VzIGZyb20gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKi9cblx0Ymx1cigpIHtcblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cilcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIGF0dHJpYnV0ZXMgYXJlIHRvIGJlIG1vbml0b3JlZCBieSBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKClgLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmdbXX1cblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdFx0YXR0cmlidXRlcy5wdXNoKEFUVFJJQlVURV9CVVRUT05fQ0xBU1MpO1xuXHRcdHJldHVybiBhdHRyaWJ1dGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9hdHRhY2hJbnRlcm5hbHN9XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IGZvcm1Bc3NvY2lhdGVkKCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBidXR0b24uXG5cdCAqXG5cdCAqIGBgYGphdmFzY3JpcHRcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItYnV0dG9uJyk7XG5cdCAqIGNvbnNvbGUubG9nKGUudmFsdWUpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB2YWx1ZSBvZiB0aGUgYnV0dG9uXG5cdCAqL1xuXHRnZXQgdmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSB2YWx1ZSBvZiB0aGUgYnV0dG9uLlxuXHQgKlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLWJ1dHRvbicpO1xuXHQgKiBlLnZhbHVlPTFcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKi9cblx0c2V0IHZhbHVlKHZhbHVlKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB2YWx1ZSk7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXM/LnNldEZvcm1WYWx1ZSh0aGlzLnZhbHVlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVscyBMYWJlbHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5idXR0b249XCI8c2xvdD48L3Nsb3Q+XCIgQnV0dG9uIGxhYmVsXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBhY3Rpb25zIENhbGxiYWNrc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYWN0aW9ucy5jbGljaz1cInRocm93IEVycm9yXCIgQ2FsbGJhY2sgd2hlbiBjbGlja2VkXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjbGFzc2VzIENTUyBjbGFzc2VzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLmJ1dHRvbj1cIm1vbnN0ZXItYnV0dG9uLXByaW1hcnlcIiBDU1MgY2xhc3MgZm9yIHRoZSBidXR0b25cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkaXNhYmxlZD1mYWxzZSBEaXNhYmxlZCBzdGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZWZmZWN0cyBFZmZlY3RzXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZWZmZWN0cy5yaXBwbGU9dHJ1ZSBSaXBwbGUgZWZmZWN0XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlPVwiYnV0dG9uXCIgVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIGJ1dHRvbi4gUG9zc2libGUgdmFsdWVzIGFyZTogc3VibWl0LCByZXNldCwgYnV0dG9uXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdH0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJtb25zdGVyLWJ1dHRvbi1wcmltYXJ5XCIsXG5cdFx0XHR9LFxuXHRcdFx0ZGlzYWJsZWQ6IGZhbHNlLFxuXHRcdFx0YWN0aW9uczoge1xuXHRcdFx0XHRjbGljazogKCkgPT4ge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBjbGljayBhY3Rpb24gaXMgbm90IGRlZmluZWRcIik7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0ZWZmZWN0czoge1xuXHRcdFx0XHRyaXBwbGU6IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0dmFsdWU6IG51bGwsXG5cdFx0XHR0eXBlOiBcImJ1dHRvblwiLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1idXR0b25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1JpcHBsZVN0eWxlU2hlZXQsIEJ1dHRvblN0eWxlU2hlZXRdO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2luaXRFdmVudEhhbmRsZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRjb25zdCBidXR0b24gPSB0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdO1xuXG5cdGNvbnN0IHR5cGUgPSBcImNsaWNrXCI7XG5cblx0YnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBzZWxmLmdldE9wdGlvbihcImFjdGlvbnMuY2xpY2tcIik7XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLWJ1dHRvbi1jbGlja2VkXCIsIHtcblx0XHRcdGJ1dHRvbjogc2VsZixcblx0XHR9KTtcblxuXHRcdGlmICghaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJjb250cm9sXCIsXG5cdFx0KTtcblxuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlICYmIHNlbGYuaGFzTm9kZShlbGVtZW50KSkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjYWxsYmFjay5jYWxsKHNlbGYsIGV2ZW50KTtcblx0fSk7XG5cblx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwiZWZmZWN0cy5yaXBwbGVcIikpIHtcblx0XHRidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNyZWF0ZVJpcHBsZS5iaW5kKHNlbGYpKTtcblx0fVxuXG5cdC8vIGRhdGEtbW9uc3Rlci1vcHRpb25zXG5cdHNlbGZbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9CVVRUT05fQ0xBU1NdID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0c2VsZi5zZXRPcHRpb24oXCJjbGFzc2VzLmJ1dHRvblwiLCB2YWx1ZSk7XG5cdH07XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1idXR0b25dYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGlzYWJsZWQgcGF0aDpkaXNhYmxlZCB8IGlmOnRydWUsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgcGF0aDp0eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUmlwcGxlKGV2ZW50KSB7XG5cdGNvbnN0IGJ1dHRvbiA9IHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF07XG5cblx0Y29uc3QgY2lyY2xlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG5cdGNvbnN0IGRpYW1ldGVyID0gTWF0aC5tYXgoYnV0dG9uLmNsaWVudFdpZHRoLCBidXR0b24uY2xpZW50SGVpZ2h0KTtcblx0Y29uc3QgcmFkaXVzID0gZGlhbWV0ZXIgLyAyO1xuXG5cdGNpcmNsZS5zdHlsZS53aWR0aCA9IGNpcmNsZS5zdHlsZS5oZWlnaHQgPSBgJHtkaWFtZXRlcn1weGA7XG5cdGNpcmNsZS5zdHlsZS5sZWZ0ID0gYCR7ZXZlbnQuY2xpZW50WCAtIGJ1dHRvbi5vZmZzZXRMZWZ0IC0gcmFkaXVzfXB4YDtcblx0Y2lyY2xlLnN0eWxlLnRvcCA9IGAke2V2ZW50LmNsaWVudFkgLSBidXR0b24ub2Zmc2V0VG9wIC0gcmFkaXVzfXB4YDtcblx0Y2lyY2xlLmNsYXNzTGlzdC5hZGQoXCJtb25zdGVyLWZ4LXJpcHBsZVwiKTtcblxuXHRjb25zdCByaXBwbGVzID0gYnV0dG9uLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJtb25zdGVyLWZ4LXJpcHBsZVwiKTtcblx0Zm9yIChjb25zdCByaXBwbGUgb2YgcmlwcGxlcykge1xuXHRcdHJpcHBsZS5yZW1vdmUoKTtcblx0fVxuXG5cdGJ1dHRvbi5hcHBlbmRDaGlsZChjaXJjbGUpO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoQnV0dG9uKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFN0YXRlQnV0dG9uU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdFN0YXRlQnV0dG9uU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBzdGF0ZWJ1dHRvbiB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja30ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYXktMTojZjZmNmY2Oy0tbW9uc3Rlci1jb2xvci1ncmF5LTI6I2UyZTJlMjstLW1vbnN0ZXItY29sb3ItZ3JheS0zOiM4YjhiOGI7LS1tb25zdGVyLWNvbG9yLWdyYXktNDojNmY2ZjZmOy0tbW9uc3Rlci1jb2xvci1ncmF5LTU6IzNlM2UzZTstLW1vbnN0ZXItY29sb3ItZ3JheS02OiMyMjI7LS1tb25zdGVyLWNvbG9yLXJvc2UtMTojZmZmN2Y5Oy0tbW9uc3Rlci1jb2xvci1yb3NlLTI6I2ZmZGNlNTstLW1vbnN0ZXItY29sb3Itcm9zZS0zOiNmZjNiOGQ7LS1tb25zdGVyLWNvbG9yLXJvc2UtNDojZGIwMDcyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTU6IzgwMDA0MDstLW1vbnN0ZXItY29sb3Itcm9zZS02OiM0YzAwMjM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0xOiNmZmY4Zjg7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0yOiNmZmRkZGY7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0zOiNmZjQyNmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS00OiNkZTAwNTE7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS01OiM4MjAwMmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS02OiM1MTAwMTg7LS1tb25zdGVyLWNvbG9yLXJlZC0xOiNmZmY4ZjY7LS1tb25zdGVyLWNvbG9yLXJlZC0yOiNmZmRkZDg7LS1tb25zdGVyLWNvbG9yLXJlZC0zOiNmZjQ2NDc7LS1tb25zdGVyLWNvbG9yLXJlZC00OiNlMDAwMmI7LS1tb25zdGVyLWNvbG9yLXJlZC01OiM4MzAwMTQ7LS1tb25zdGVyLWNvbG9yLXJlZC02OiM1MzAwMDM7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xOiNmZmY4ZjU7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yOiNmZmRlZDE7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zOiNmZDRkMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS00OiNjZDNjMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS01OiM3NTIxMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS02OiM0MDE2MDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTE6I2ZmZjhmMzstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMjojZmZkZmM2Oy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0zOiNkNTczMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTQ6I2FjNWMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNTojNjMzMzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi02OiMzNzFkMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTE6I2ZmZjhlZjstLW1vbnN0ZXItY29sb3ItYW1iZXItMjojZmZlMGIyOy0tbW9uc3Rlci1jb2xvci1hbWJlci0zOiNiOTgzMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTQ6IzkyNjcwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNTojNTIzODAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci02OiMzMDIxMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0xOiNmZmY5ZTU7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0yOiNmZmU1M2U7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0zOiM5YzhiMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy00OiM3ZDZmMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy01OiM0NjNkMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy02OiMyOTIzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMTojZjdmZmFjOy0tbW9uc3Rlci1jb2xvci1saW1lLTI6I2Q1ZjIwMDstLW1vbnN0ZXItY29sb3ItbGltZS0zOiM4MTkzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNDojNjc3NjAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTU6IzM5NDEwMDstLW1vbnN0ZXItY29sb3ItbGltZS02OiMyMjI2MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMTojZTVmZmMzOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTI6Izk4ZmIwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0zOiM1YzliMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNDojNDk3YzAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTU6IzI2NDUwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS02OiMxODI2MDA7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTE6I2UwZmZkOTstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMjojNzJmZjZjOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0zOiMwMGEyMWY7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTQ6IzAwODIxNzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNTojMDA0OTA4Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi02OiMwNjI4MDA7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMTojZGNmZmU2Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTI6IzVkZmZhMjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0zOiMwMGEwNWE7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNDojMDA4MTQ3Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTU6IzAwNDgyNTstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC02OiMwMDI4MTI7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMTojZGFmZmVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTI6IzQyZmZjNjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0zOiMwMDlmNzg7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNDojMDA3ZjVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTU6IzAwNDczNDstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS02OiMwMDI4MWI7LS1tb25zdGVyLWNvbG9yLXRlYWwtMTojZDdmZmY3Oy0tbW9uc3Rlci1jb2xvci10ZWFsLTI6IzAwZmZlNDstLW1vbnN0ZXItY29sb3ItdGVhbC0zOiMwMDllOGM7LS1tb25zdGVyLWNvbG9yLXRlYWwtNDojMDA3YzZlOy0tbW9uc3Rlci1jb2xvci10ZWFsLTU6IzAwNDQzYzstLW1vbnN0ZXItY29sb3ItdGVhbC02OiMwMDI3MjI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMTojYzRmZmZlOy0tbW9uc3Rlci1jb2xvci1jeWFuLTI6IzAwZmFmYjstLW1vbnN0ZXItY29sb3ItY3lhbi0zOiMwMDk5OWE7LS1tb25zdGVyLWNvbG9yLWN5YW4tNDojMDA3YTdiOy0tbW9uc3Rlci1jb2xvci1jeWFuLTU6IzAwNDM0NDstLW1vbnN0ZXItY29sb3ItY3lhbi02OiMwMDI1MjU7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0xOiNkYWZhZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0yOiM4ZGYwZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0zOiMwMDk4YTk7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci00OiMwMDc5ODc7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci01OiMwMDQwNDg7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci02OiMwMDIyMjc7LS1tb25zdGVyLWNvbG9yLXNreS0xOiNlM2Y3ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0yOiNhZWU5ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0zOiMwMDk0YjQ7LS1tb25zdGVyLWNvbG9yLXNreS00OiMwMDc1OTA7LS1tb25zdGVyLWNvbG9yLXNreS01OiMwMDQwNGY7LS1tb25zdGVyLWNvbG9yLXNreS02OiMwMDFmMjg7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTE6I2U4ZjZmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMjojYjllM2ZmOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0zOiMwMDkyYzU7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTQ6IzAwNzQ5ZDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNTojMDAzYzU0Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi02OiMwMDFkMmE7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTE6I2U4ZjJmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMjojYzZlMGZmOy0tbW9uc3Rlci1jb2xvci1henVyZS0zOiMwMDhmZGI7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTQ6IzAwNzFhZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtNTojMDAzYjVlOy0tbW9uc3Rlci1jb2xvci1henVyZS02OiMwMDFjMzA7LS1tb25zdGVyLWNvbG9yLWJsdWUtMTojZjBmNGZmOy0tbW9uc3Rlci1jb2xvci1ibHVlLTI6I2Q0ZTBmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0zOiMwMDg5ZmM7LS1tb25zdGVyLWNvbG9yLWJsdWUtNDojMDA2ZGNhOy0tbW9uc3Rlci1jb2xvci1ibHVlLTU6IzAwMzg2ZDstLW1vbnN0ZXItY29sb3ItYmx1ZS02OiMwMDFhMzk7LS1tb25zdGVyLWNvbG9yLWluZGlnby0xOiNmM2YzZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0yOiNkZWRkZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0zOiM2NTdlZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby00OiMwMDYxZmM7LS1tb25zdGVyLWNvbG9yLWluZGlnby01OiMwMDMyOGE7LS1tb25zdGVyLWNvbG9yLWluZGlnby02OiMwMDE2NDk7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0xOiNmN2YxZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0yOiNlOGRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0zOiM5YjcwZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC00OiM3OTRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC01OiMyZDBmYmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC02OiMwYjAwNzQ7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0xOiNmZGY0ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0yOiNmN2Q5ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0zOiNkMTUwZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS00OiNiMDFmZTM7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS01OiM2NjAwODc7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS02OiMzYTAwNGY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMTojZmZmM2ZjOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTI6I2ZmZDdmNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0zOiNmOTExZTA7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNDojY2EwMGI2Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTU6Izc0MDA2ODstLW1vbnN0ZXItY29sb3ItbWFnZW50YS02OiM0NDAwM2M7LS1tb25zdGVyLWNvbG9yLXBpbmstMTojZmZmN2ZiOy0tbW9uc3Rlci1jb2xvci1waW5rLTI6I2ZmZGNlYzstLW1vbnN0ZXItY29sb3ItcGluay0zOiNmZjJmYjI7LS1tb25zdGVyLWNvbG9yLXBpbmstNDojZDIwMDhmOy0tbW9uc3Rlci1jb2xvci1waW5rLTU6Izc5MDA1MTstLW1vbnN0ZXItY29sb3ItcGluay02OiM0YjAwMzA7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0xOiNlNWI4NzU7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0yOiNkOWEzNjI7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0zOiNjMDhhNGU7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS00OiNhNzcxM2I7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS01OiM4ZjVhMjg7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS02OiMzNjA1MDU7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTE6I2Y3ZjVlZjstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMjojZTVlMmQ5Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0zOiNjYmM2YjM7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTQ6I2ExOWQ4YTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNTojN2E3NTY2Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02OiM1MTRkM2Z9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpSYWxld2F5O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFGSjRBQklBQUFBQXQzQUFBRklRQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHb0U4Rys0NkhJVThCbUEvVTFSQlZFUUFoUWdJZ1FvSm54UVJDQXFCdWd5Qm1uQUxoQ0lBQVRZQ0pBT0lRQVFnQllVVUJ5QU1neHdiZmFRWGFKZWZtTnowWm9sM3Y2MGNQZVpNcEc0SEpTams1cUlJTmc2Q0dNZ2xaZi8vbjNGMGpPR0dEUkExclhlSW5jSklVa05IR242OXFNUkRVOFphampzOVVic210bnFuRTN2M3ZxaVFtZlJRcExrS1c2UVp3YWw2czVJVWlKTlVTVUcvT3dvRFk2QjY3NU9qU2prRFNTTXUycGVkcHU5dkpJTFVsSmQ3MDdEK2VMSHBqWURJNGUxdURuTGpISHZ4cERYR015ZHVMTG4xcXQwRkNRT3lGc0paRTEra0pxM1QrSWU3QkpGSU5PQU5iaTl2VFV6aEk3VzRHbVVMMGxXalQvRlFRaS9tKyt4dVBQMDJvbVJIZTVwbjREZ2ZOWmZuK1I5ejk3OXRtRWVOYXExUnhScUhUalRQTkEySkZFZ3JIZG8vbnQvVy81emJnR0N4aWE2RWtWaUEyRmhZR0l0Um1FMVp2VlV2cXRTdGI3TXZyZDNXNyt0MiswWGRvVG56empZYnA3bVNITEFDa2hNV2dDVEw2czBXdjBBVW9oSmZFcUUzb3BQZDU4aWtKbktsbyszdWFlU0hZSjZmY0ljWGpkK3JLVUVzYUVsVHFsVWxWUm0vTitlLzhpUDBMNUFLb3pObEozLzlpQndzaE02djVKSVVKeWtnVDNmZHJPbXE2TGNzK1orcS9Yc0FYRnhFRWlRSVVhS29zRm43Y3RUKzdCQlM1ZHFEb2xKWHVuYmw3cnR0ekQvdjM4NExmdEphZ0ZGQUxZUEU1QTdnbk1yWkJodDRsWHFzYlpLbWJkcTBUdE9tcG1nTml1Z00yUFlCYzczTXJqcTdHTHNvWEhjVHB0OXVQdkZEejhlTjNnK3N4clBRQXc2RFRGTnAvT1pJOWlpbk5pdFpoUm1wUU9Da2RvQmRBTmpWV2xhdk1pdHdETkpYL3BZSUFrVnduT1Avdlc1eHpvTXc3U0FGQUtVK1p6L2tuUC9aOWorT2Rmckw4S2UydmRLYm1waHV4SlN1TDhFVUFnZ0hJaUJIUCs0NDRFRHp2MVBUUTNZa09jT1NsVEhtajZVc2RmbzJMKy9qcFllN0lIV2NRVWdjZ2twTEZSMVlUVzhDR0tRWDliOEdGQUFBSDl0bzRSSFE2R0x2RlJyaTREaXdUekFBRERNS0RQci9mWjNWL3FkZ1Bta0d6S1RFbVdFWGI3UTN0dGdUWXFvMm5QNi8rOTdYZitGLzlKSEFWc0lJY0FDQlp3UnlrR1Q3Z0NSOFZvaEpjVU9PU0RqaVNiQXBoTW96bTJKUnB0QnRVVzY5WGJORkczSVZ5MktMb2s0OC9MZnNtNTI3SWFxQkxNdUJiT0ZJd2VGVWQwMXZlTCtZOHhXaHR6Y3FUbTJDSVRjNWVMSndTSTRmWWxMWUZJVkhBcy8vVDUzTjQvWXgxaEtHVStIU3FFcmRwUFBuczZmcXFXSnNOYlphQ2xRdGpsT0xVTXNoY2RvQTVUUXNzNEpMYzkwU3hDT01NVUs0S1A5TnNocHpwWDR2d3hLQ2hDQVNSRVJFL0xLc1dSbEp3TktBY1RuWEFoRXkzcjFLSGNaYS9ZZFg1ODQyMC9pYVhtdEdob0NBaUlpQVIyM3YvUDkrS1RBQ0FONWhka0MzeFVDNEVMc2dndmtSMmtyRWpZU0V2MEJLU21IQ2hJdllPQ0FKa0tRZ3lZTU0yUW9VTXpDbzE2Qko4NXFBV0NDZEhlazNBQjBPREwxTHEwUGdUZTNoU3cyZmhpNFhoUHVldVFXRUg2eHRJRVFBYkcyTm01b1Y1NFFGUCt5S2dPMkQ0VDV0L3d6MlhXOTIvcnBxcExUU0lQOHFWOXZMdk9kczBOTFd5WDUxSzZvZmJ2UFpFMXBhZjd3MzE4QzladGhxN2YzMmJmdUw2NFZaSHc1MTRZc201bGdmTmJmRzdXOWxzVUE0RUd6NzIzdnh3R3pwNGZSUittUDhMczVCN0tCMmVESlhjNnh3bEc2OTAydWc3QXpMQThOWTIxQjJkQi9QNXFmT1Y4dDFvbnlMNWpaRERmUUk1Umc4RDk4RnZIc3ZjbEh1SnNyZHZzSnJwYy9Uci9ndS9FZlpKelhVenBXYURqN003K1VQOC84RWtBQVZhQVMvQ1IrWHMvSk40WWFJY08xeEhaY1VhTU1ia2xycEt5N05mUUpLUWNVUmFnb0dtQ1crSEE2RU52YmczM3NsMnBJWVJtRTliSUhiMG1BNmtrNmxONUdkeU1ONUVibVFoeEhLbHdNZ1Q1OGNndzdwZFVSejduZk1jUWZjVTN2SWN6VmtkcmhYOFhIcTQwMTJ0Rk9kN2tUL2E3cDdtODNXQTcxRjdhTzlNK2RqdmRkNmo3ZnhtK0QxUHUzejN1aXJ2bXV5emE1M3RydjkzbFRiODJSVDJLYUZWVUtNTlAzNkJ2UU1DbzBHc0Vka0w4cyt6TGcxRXhiTTBOZ0NXQXhnemY4MkRHMUtYTWZjNHJqTmNRZkhLeFNDdVJ1Qkk1QW9kREREa0dkVjhDblZWRW1FTWFpbjRTYTBBWFRJMFJCTnBPWUFMVnExYVY5dnhKaVV6SEtXQ2lzNm1wMEJ1a3gwNjlHcjc0c25WTmJzb0Nta1ZNb3A1K3BER2FXejJzTERyMmlOdCtvWk8wYjM2WVNJaldjeHZubE4weDBWaGxZb1c0VVJqWFhLeUxHM1kzcW9MZEVhekhBRUVvVnVNbDNERGVFUlZwRy9qZVRFUjBDVVpFVTFtb3RxRm9pd0pGS1VhREZpYWNTbEJKckVqU1FLSi9DU0ZTbVNLazE2MVFsa2RLZXlTWFl6c2RYS2k2STlpa05KTXRDVUtsT3VRcVVxMVZIVDF6cTYrbHpmUU5BSWE1SnBSb3ZXYUVQN1p4dU5tVGpNTEJZdXEzWFVUZ05kUkRkNlVxOUEzM2NieEF6eERET04wSXhhTlZheGQvL3MvYWp4QUU2Sm5QYkZHWmt1QzN1YU5VOEVzRFNMWlZteE9qMVBkOEhReFhTcGVka1hhd2JXNndabzgrNkRyaXVRRkZ3NUlwdm5KaDYvWmdGSks5MzBhRU0yWEozeUpCMERIb3BoYnFnMHVya3ZNSWdZbHRiR1JQY2RrZDdWai9OVjRwYkFiYSsvRTRCakNnOXA1WmVyaS9wZE0wQ0cvN3RYWk54VkUrNmJZYXZRbjZ1bVd3eTNGWGY2Z2crWG5BdEhEZ2prUE5pVWJxcG93dkRVdmJSbGNqNVhaSFl6VjhKaTRObDF2anNPaHJNYXhPSHhlRHdlanovVklISlhuNkgwd2hnNnFGT0VVcVFvMFdMRTBvaExDVEtKMHlRNUxVOXlSUXBTcFVsZlpuQVNCa1dwbENsWG9WS1Y2cWliVEJ0TW1RS1lZV0hWVVVmdEdJdDYybGRuTUgzRXBpVTBxVlFxSGJDTHhPVStFNC8xWExmQkVoektoZ1VjZ1VTaGZ4d21EejlHNUVSQUFITDdGSFJLUXlybnd1eFFmNXJoSEJFQlJJb1NMVVlzelViYzRydE1kcGwyNkZnZDU1dGdRRzh4L2ZBWjJKekl2R2JtbHJjWEFtM3dYS2E3RWxmUGNTMnR4ZnErZWdmaUhHb0RNeHlCUktIdnkzU0ozMFE2VjgrNm1kZlpzYUZWM2VPVUtzV015bmtoeUwxdTRWSTBMMVNKTEl4WHlZenBMeU5xaVd6MFhUcGthVHluMVpEdGk5MG1ZMDJ2MHRVcXR6U0NsK3FySzdySXV2MXY5UkQwc2d4cUdiSm9HR2ZFa2xFMVl6cjI4TzFsMktld1g5TjRBRGFOMWI3TDBJYVJUWE91eTl5aXU4MnBPd0hRQkMrcGxkQ3JPbUswTWcvcjF2UllFbTNEQkVjZ1VlZ21VeDAzRzQrd2l0UWdPZkVSRUNWWlVZM200dG1FSXZ3VUtVcTBHTEUwNGxJQ1R1STB5VHF0RmNsRUNsS2xTYTg2V0VaM0pKdnNGV2k3SXhLSk9Cd09oOFBoY0VUclJOM3REcGxNSnBOaFJJYWlxQWlHWVJnbWNia3N5NE5vei9yb2ZRTDdLY2FsTkQwRk9XM1JHWnVPQlIyeG1WTXhrVWdrRGwwWDd1Sml1dFM4Yk5HYUUrdi9aUU93cWU4NkdJSWVFc0N1b3ZXWWZDcTJ0dnBNT0JON016TzY4R1dYTGh0bWdXMmZmZUhwMU11N3F3WDVORHdUa3BDU2NlZkJreGR2ZmluQVJJUklVYUxGaUtVUmx4SUFpWkUwclZxNjVJb1VTWlVtdmVxVU1ycHMvejFaV0VaNVlCZ0dBQUFBQUFDQTBXWnNkMUNwK0h3K24yL2NPbGs0ckRwU2wxSzNIcjM2amcxQ1R0d3pPY051Q1hZTmdpRFlob3RIMW9nT0xSU3V4OG5pbDRyMmlZYXYwbm9yelh2WjJuWmpaTGZhS0QrVlJnSC9mZ05tcGtGYmhnaUdpVWFjR2ZYTm1LNDlGUHZZOXR2YmNUbTc1KzNmZGFtVzZZU3R3a2R6YUNIWmN2cTBDUzRpVTVabU54TFhHQmUvclFvSGpNUDEvUUVHVk1aRkpnYkRESi81VDNleUJjdkdQU3FUaW1KY0MrWVFVanFHdjJuQzdxM25CMERPcXYyRzNWdmxJaEtJVzhNUlNCUzZ5WlRpTkdGWCtSR0NESHM4UFlJZFRqZEFVQXl2UWt3U0NwcGhOZDIwbXB1TWpRWEtCUWtXSWpRcG1KUlVLWXhLWGNMRGM2a0lmSGFUS2FPTVNjNE1zVlJZUTBlelU2RkxwVnVQM3RMSHV3cHJZZnRoaXdpSEZBV2tTcG1XUnQrNm5KNlUxOEN1eUo4NWoyeDBiMGQ3TjlwaWJxMGxiNE5uVStwTzd0RVVMaWhkVU8yaHJwdGdZWENzeEJGQTNsUTJubUZjM0ZiUmpHQmdDZDZCVUg3cW5YQmJhY2pzSzk5UmZJRE1BRmtCc29PK25aZzhQMEJCZ01JQXRRRWFuOVdRRXM5TUFITkc4NTU0d2ErQXJucXZUVGpwR1M3ZS9pbFBtakFSUG1uc3hXa2RBQVJ5T0w5eUFoeW14N1NHS2xrN0doNDh2RHZOZmRnK0lUQlpwRDlnemdNSUJ3d0JrNXRta0VYSXFxTU1hRVRnL0hVZTI2b0xUVHA0dzRnOVVrWjViZ2J4RUh0Q3lUTFlQSG1KVXEzdUpwcXp2U05jdW1iQmRYWVFza3UxQzkyTjhqVHZERkVVMHJ2ODE3Z21xc0dqUGZSdU5qdmVyVERtSENFNHErcWJ6T2p1SUl2UmFEaHpaMS9WSlVwaGhpT1FLSFF3c1o1VGpndUFCOEN1S3IrWUlNS2V3SW9NTzV4eDllNEFFQlREU1lwbTJPVHk4b0lveVlvYWplalVRYjhKd0QvWEI1aVNzd1VpZ2hBc1JHaFMwQ2d6SnpYTUNUVTFYRVpIYVRBWFRDUVNpY1hiWTRWQ29SZ0xFeHN0bGRDdHhaMWFVbmx1dEdodE9RdDE4L1JVZFZwa0RCdmJTNG5Fb05Gb05CcU5GaWRYbjBXSkxKQ3JVOENVYnFxTWhaR3BtK0Y4RWJCSVVhTEZpS1VSbHhLRUVpVlZMVk55UmdwU3BVbXZ1Z0FaaEFHbHlwU3JVS2xLdGJwbUE2d3JRTGNldmZxYUU3RFRXczZZSG0wRTJkY2xpV1dzV0Uzbm1TN0c1YjZ1R1ZuUG5OdXl5V2JId3hEanBXazZNK2oyMGVZTUxRLzAzVk1tS200Wm5nbEpTTW00OCtESml6ZS9LcmRDa1ZNbEtzeUltbWVaZjBHUXl3SkJFRnhDL3JnZ0NJSWdDSUl6OTBiREV3TVRqOGZqQVVBeGRTNlZzRGNzMWc4d2ZZQ1hyTmQ5OFNIOGdhams1dnVVUHFnNFhEUDlKbTdvR1d2R1h4U2RFTExmcnNFU0VzbVdYVGNNM2NMdEhGU0diU0hCQWpjQ2lVSVhKcUhuTWxPTFJCTGFzblVLMlN1eDF6cW5NQi9aTUdPeC96UHU4b2hEQURBQU9BQUNBQW1BQWtBRFlIZ2xDa0N1TFZBaVNJS0ZDUDBraFdOS1BGVXdiZHlMK3NEQnllZ2thSjJXRU10V3JFNi80dnBXN0c2ZTRtRHcwQmZ4WmhGdDlHdmZoUEVBbXlkNGNNdFVxc1BsNGF5N0d1YWs1dDBONTJPT3dKYUJnU05Ic2syTmg3cUVXWllWcThlK2tzeGpqM0VLU1hnOExOaWxRcUZRekUxZnY1dHZwUVFGdEZJbXlMdGl2VGVXa1FDazVaUmUyUWlKMlpyTFlEVjg2TUJZV1g1eEFQdW5rMXludFoyeDZhYk5yaVhBc2hXcmNma1U2M3kvai9tK2duek44STNZdHh6ZkNlT2lBUGk3WWgxd0JCS0Z6czcyV3JsaWZXYjNuK3NPbWtTaXpYSFRYcG12QW5PZ2VhKzdTOEYxRUhQOG5VNEluRlk0UTVtV3AzQkFMbGVzYTdCejRGdU9iRTRFWFJuaXlrOGh0Q09pazh2bGNzV1lJS3I0L2NITTNYWEljY3lPRHNCWEg5UjNOSUJqVXNkMWZpZGowaWluSDVyaVpmVU9EVGlGUXVsemVheDcrakhaVnl4ZjM4VTN4TGRyK1U3dTQzSDU5S2VnSzk1SnZ3dnlxbjNJZ3hMeVVHMlk0UWdrQ3YxQlREK0l2Q01QTWcwbFZZUkJuU0lRa2FKRWl4RkxJeTRsQ0NUMmhtMHNFQWdFSlREcnFiNGdKMkpZb3pTVUtWZWhVcFhxYk5yWitaaGVqYis1ckhyR3pjY0xRaEpTTXU0OGVQTGl6YS9LelFuTUNFS3dFS0ZKWVlHeU55SzFsdEpVL0o2V21GeFVxTHNJblhTczM0czRBSm5UTlA5SlY4MVpXMDhid294d2pNb0dnKzFnUFB4d0FNZVprQkVFK1ZzdXBzeG85Y1dTNWl2bmFTVXBGSlExVEVidGV5S2pNQUxsU1FoNlJLM2dDQ1FLM2VRVTRqYkVDN3VxL0F5Q0RIdUNCUVRzY01iVnV3TVVCQlREUTl5UUZNMnd5Um55RVN4S3NxSkdVM1JpRURQWEw5RFo1RjRJcEF1U1lDRkNrOElHWlZNRkNkT2tMdUUxSUtWRmxHZ3hZbW5FTmVOQkNWU0prbkpFaitTTUZFbVZKcjNxbURLSXpHbGtTYmJkOUhMazFmeCszZStWQ3BtS29oZ2x5VUJWcWt5NUNwV3FWS2NhVUczVWxmcG9rTWJheE5Bc0xWcTFhVTlHSWxPZnZKbE1wcGpKWkRKYlJqdGFOV2svcnpXb01JSWFOV2VzYXV0MDN5TU8yUHhJSTZNQkU5MXFmb0R5eENTd2dDT1FLSFNUNlFWdURoNWhGWGxwdHJnTWp5QktzcUlhTDE3R2Nka0E1OEE4Z0NZLzMyUExid2tuQ1FCQU5tdEN3Nk5vQnJWSXF6YnRPVXNXVTQwNWxDd1oxdER4NXAxbzdURWRKQmdTR0w3NzdCRWpvOTRhbzlvanRLOWJ2NS9oQU04UmE0NlNqZ21kZUx6TkRNaGlVSG51N1FtRERCWitJVUZpVGNKb0hjbElrU3BOK21aR2NUY0g1SWNCcGNxVVIwV29WS1U2NnFaM3VzZWdGM21uK2JGbHJpcTlCbW1uVjdQYjdHMFJ0Q2FzT3dLUVpFZ2g0ODZESnkvZS9KNkpyejJydnoxMThQazhQcC9QNXkvOU5QSmlyOWdKd3lsS3JVeTVDcFdxVkVmZFZGTnRocldnVlp2MlpJU1llcmVCb0pkSEtlYWVnMEo3VUJlcVI4U08xYW4zcEZBTUtMd0l0VlNKKytGbW5pSEVzRkVRVytwZWtvTTVIcWY1MGx4QkxMdjl6Q01BWlRQUTE3bjlYNWtIRlg3YzZRMkp2YitLU0lzU0xVWXNqYmhtdkpFRVd4TEhKRFhNU0s1SWtWUnAwcXVPSUtPTHpHbGtTYmJkOUhMa3lWZWdNQlc1VUt3a0dXd3BWYVpjaFVwVnFxT21qOXA1cWxOVDMvLzF4c2lBUkNLUlNBQkFCUURBZ0VBZ0VGNGtjSFBBNHkvZjJtN1lHbzVBb3RDVlNTSWFUZVZHRkFBbHgxUklaUnZHYzVqMEpJZW9jeHp6cEt0Y2F5Y3hJMWhTeVYrNjEvR0N3dXpBTWZRTXc2TFRLZDhvc0ZBY3JOVkRQSWVGczZMSEZ4bE55dGllRGpiOEdPUVFiaFNJdGowMmdJZzhPVmJVZmdGL0d0a2FDc01NUnlCUjZENTVtY1BqTGJZa0k4SjB3SndYZi9NMW5vOWRqVFZkV2hwaUQ0TWprQ2owR1lZNmtZMU41UTRFS2dVaFdJalFwTkNqYktvU0NOT2lYb1piVkY5L3pzTGRHWUdnVmJNendKd3o4K21xVTJzalkxQnJjamwzZkcvc2Z6NnE3b2cyWTM0dmZwZFVoZS9DWjJISDh5QUEveFE4RDNteUFJRE5BVnNDQUpiWm54aTJjSDVzMmNSSndWYU9tMldXc3RQR1p4WVpBMUtJUjdtdDNBekFtdGtGVUk1aWxEY0FtMlF3b2pGWEI2cjNJc0J5VnE1bCt0TmFiY3RyRitRckFRK2xraVVXemlIR0tXYzV1MUZVZE1LTWhueGl4bkFVNGxrYUFuby9uaHVTY0VuSHJRNlFFZG9SMkZJUTRHRm5ZSGtmQmdKVHdObDQyclFIN2RWNklCS3g0R0RJUFRTUEF0WUhjdWEvVXplUDFlcFpKTmF0T0FTcUZFUWtZQ1dTaktvbWN2SjRRL2xZbVI2YldpRVdXVklGQU5hSVRPVncyWlZIenI1TXpDLzBpL0Qxa3dFV1ZEL3pUOWI2REc2MzJpSzRVcUM3VFAyVU5ibmtFWTg2NFhZaUtsVytCUzNGVUt4SERRWW8rOEI5eXoxdzRoMDdCYTRRa2t6TDBMR0pHSXJyWitjTlh1QjNQdzZjZWRwQU1VNkd6UlFxRFc3bnRCK2NXaXNGeW8zV0NtUWpMME1tWG9CcU5XUkZJWkk3Z0RYaHRTY3Q4THBCZmtIc1JRNlhwVmZJUnZaQlU4cDg1RjRoSDhFS254bUVZbXUrSzZjWVkzZ1FlMSsvVHpKQUlSRjFjS3ZObW4yUTBNOGFPV3NYalQ5anZCQ3I1MjF4cXRXVkk2YXBMcGVoS2N4WnVXOUJXTEozUUdxZjlKVGl1dnZVMHdkZ2h3LzhJQlJJWDFWdU5ReXNCcVN0Vk5QWFpEdEwrTml2Y3dpMVBnRC81TzBveW0ySis3OG9uMHJ4Z0E5T0NsYTBnTjBKRVBIWS9ZUDRuaElhd2JFSjJIbFVuUjlEYnpmV01QQXZ4a3J0QTE0eDZqckFtWVVjZ1JmUmxabm5ZeHMyeStvd0xEd2tTMlZrM2RmakFBVVZJSmV3RDA2dHorQXV3NnBJcXhUbDRkbWpvR2xZUVhETWIzMUZKUHMrNjdqOVJOZ3NIWWd3d09jWXR1Zks2VmhDTE11YzRORlRidjlwRVFqRk5qTnIwTFdBSkIzWEdIbTR4N25CUmZYbUhRaFEwYnpxbU90VlRueWVTNngxSGJDL2Fyai9YZS83cU1PbDdNMGVVbkRQZ2h5aXNGOHFJb0ZiaGZFZ3F5RDRvM28ySzVSTHJNSllDYUM1Z3JId3VwRE5zVm9YRkkzKzlXWVBhMWx3dk9wOTFmdmFuR2hvbUppcDk3dXBOSG1PSCt5YjEraExJcGRkcjIxUmlBMTNKaWI3OWs2cFRCM2RGQW83MTRwUTF5UlpiVFhNeWRBN21RRTlSRkdoTC9PeHJIamRSbm8wWGRmOXlFZTBuWEZmT2VyelkrRE8zZmlCV0JGTUFtcUZiT2Vna0FxWFRWbzVmUzY2eU9JVmxMQ1NkY3A2OHVlNHlKZWxoVVB0VTZWbTJqbk5BUHF3V2FObm52MXc3SlA2eFFaYXdTSVBsT0ZNRVVHdXpQQ0JiMmRKVXlnWTZROXdyNkpVakpyNk5aY2JFWXdML2N4WmZlYzgyTE9zTUs0OXhYNjI4UDhOcTNUREVjSUFQWnd3aEx3NThoUEtrNUpTb0RCSmdpVExFU3RQQTUwbTdTcVltTlN4NkZOdjBpU2pVMDR6bVRiTllzNENxemZKZmxtQy9ZWkpnTkJ3REFhQmk4ZUJIVDVIQWs0SVFrS3VSRVIyY2VIQ2pTdFhZaEplTU42OEVmejR3Zmp6SnhFZ2dKU2NuRXlnVUF3bEpYZGgxSnlFQytjaGdnWXBUaHhLdkhoMkVpUnlsaVNKcDJUcEtEbzZXMlRJc0ZXbVRGNnk1RUR5NUVNS0ZQQldxQkJma1JJQ0JsVm8xYXBSYXRTeVU2Zk9WdlhxK1dqUXdGZVRKbjZhdGVNd01mRm4wY0ZlcDA0QnVuVFpvbHMzcEVjUHZsNjlrRDU5K0NaTjJ1YVVVNFJPTzQxcjJqU3VPZk4yV3JCQTZFMHlaTWtNNGJ3NWh3c1duQzVhY3Joa3hlbXlOWnNyTnR5dTJ2SzRac2R0elo3SE9zd0dFd3Voa1JpTTdUZzRFQzRlbkIxbmlKQVFib3VkRUJHUkhWeUlJUkxlY0Q1OElYNzg0UHo1UXdJRTJFbE9UcVFSWEhBUTE2VTRoQzdnZ0NFQWcwWUFCd29LRHJ1RWw2K0dxYkZOUExXR0F4REEyKzJtVVNOT2lCZzd0MFNrUzMxb3hlTWtqckZuMklJakp6ak1TVWhPdWtrb0VKU2lqeUdneDJJYS85WmMwM2IrbjgrZ3FrZ1MyOHM3NTZjalVwM3p3VHIrUlBlNlNlcmxVZFQ1YWV1Z2UvQUhnQno5RjRpbndFOHErSDRPdklXMzlGYmVXcnkvQnFNdnYvS1N1cGk5SGtyVmVmRzVaNElhdmZqeVd5K3A0c1ZYeWhlVlQ1bnhJcS96YnZiam9xWFgxWmUwaGowQVlGTVFaczJCa0FnRklHRnd4SFlOQjlYZGFtd3IzczcvQ0lmZ1laaWZoVDlnYTEweXd0emRaWS9oY25lVFlhL2tpejhLQ0JvcmhGWjRnMWxYQkdHV0tBNzUyRWxJZDlhTEs0U0ZOZFYzMjliRzdSSUlLVTRHRXZoanI4TFUxd2pBMjNzOUJtZ2JHalE5N29VS3dxaU92eVBaRVJJQ0tJekE2V1RwV1F3VjZvSmxlM1ZUbGo1VHlQS09qbTROYnZPZy9UOUdWZnhOQTloRmhRRFN3L2ZSanBDRjJXOE9BNjhpQ3lUK2YySC9ERzhDNmUrbTF4L0lJODc5TkEzNXJ3QUE2OFFXQVlnbFRUQXNZQUNFcWVOKzZteTN3WW9BNEYrak5vV2NOUzhPaWFqUVFQN3lNRmF3SWpRUmdTVU1MSTBRN24xUkFYNlJGOFlLSUlKVW9aM3lnQytRMlFvc0NrdE81bHVNSEdVYUUzZUxlOFZqMGhxcFdBcElFYWxPYXBHNnJkVys3cVJBRmNDZVlpa0E0QlBUc0xoL3dVV2ZPYng5UjZVOHFmQTRTS241ZzdZQ1hBU1FDUUJZTjNrQS8vMU4xZi9rNlMvMFkvMW9Ccjc0R1h4eCsyTmYwdSsvN2d2cUMvTHp6MEVmOU9SQnFqbjFQZ0xvWlE4YisxWjBjOGdOL2wvMkRXZk5tZktwWDEwMzd6Mkx4bjNsdEJYVGJFNVo4SVB2ZkcvR0pvU0R5NDZBTXhZMkRnRWhFVEVKR1NVTVRvV2dwa2N4TURKNzI0UjMvZUgxOFNDQ1M0SWt5WFF5Wk1xU3IwQ2hJc1VNYXRTcDE2QkpNeU1UTTR0T2Ivbk5XMzd5dnYvNTJPYys4WVhmL1RzdTNMTE1lVDliZFh0MmNOZXZYdkx5YVBqRkRVK05nUmNOdU9CMXIzbkRMQklHUnlOUUdEeE95am1vVklPTGg2K1VHQXdBa29QOHdKT09oaGJKQk5VdmhwVU5MWnFEVTZKMEtWS2x5Yk9iWGc2dEVoVktsYWxTN2x1VjJyVm8xY2FxVmdkdm5hTVFDY3VXWEhIVjVjaTRXVVFtVW1VME1NQW10Z1FzQlN6dEYzUmJCQmV3RklBdzVsNDFpamNiQm1RcDZ5M0FFTnQ4MmRBa3dqeG56N1A3OFZVVURCL1ZtdUFkK3g1NmNQKyt2WHZHUmtlR2gxWXNYN1oweWVqSThPS2JGeTFjTURRNE1IL2UzRG16Ky90NmU3cTdPanZhMjNLdExkbE1PcFZzYm1yY2dXQTA3UGNlZmVUaGg3cWRkcXZadVArdWRHMjFsc1RBUCtmejZkcjFtb3ArMExKMVRFZ2dTNkN1dkM1b3lBaXViMDEzWVBNTGJZelRiT0RBVFg1WUVpWXljcFU1SVZjUGZKRGxKK29PdWRzdkxPVXlDSEEwZXBTaFJkNGR1SDRLZ0VwTUVPV1pHYjVFRmNNalZKa0JVQlVCUlprQTJaS05Sc0FOMSsxMHhLOHRpNUx2dTlDUU9jWnd4b2J0VkpZU05ZU0ZJMy9lendpTEpkUUVsVkFWcWJGZlZqN0dGWUtVd2lMMk05Y1NkZ05tOExIY3NBSWx2M3QrcFR6aWtnalM4TGhucFJBNHlEcGJPN0JjZWtoTElSdHlyc28zaE9GYmlVMjlGZ21LWTVKODJ4UmQ4cXlsc0ZXa0VIL2JhbjhsbkR2M1p5NWU0RFZHaVozT1FSREJENDY0WG5XVG1vRkRSNTJ1WEpremxmeUNSTjBqRlVMZXFaVkxOUUVYbVZFbERvdFpOT2ZpelE0UkxiaTBLM1ZmUWl1T0tPRVNNRlR2MTNUdmk2Q1Z5VTdXeE1tS1czVWJ0RG1uSTE3eVgzSGNud2pnb2ZvVTRtYVNVbExuSVBvZDB3OHl2NjZvV0lNZFNpR1BVdjJ0Z21BNEVkYTEwRnJudFFtL2VsdGhmd3VoQUhXS3MrSnMvM3pxdFR4U2ZjWmRXdk1Ca0VrbzJPV2Q1aDhWeGtsMXdRMHRXcWZYeGpuYlhUd0R3NW9tV1o1cWR2SElEYktZeHlnOTcwcEp2ekF6OG4zNU9MUmtmU2JkRFRwWmdOTTlsUUptMmlVMy9IMG5neHZIMjlkQWVZMlFEUXZ4WjR6U2hwUWJoQWpCbXdWYkk3RjdJdko3a2lOMUZKR1dOdUFuMHpNRXlSbDBoMk4xN0pDS2lnQ1BLZnk5bkhOT3R6d25JendtZ3V2WlovVE1CY1FsSEFmdzVFeEhEc1hHdUZ1U2VvM3lDSm5aUmIzVzdVZjNhTlo3M0VZSzdrT1NsVkpzd1lZeUpDdGNHTTFHcmo5OGNuSGhrRm11N1BkT3duMVd6UjBoeFRuUlU4YUJKbXhxSDl3UUlJYy9mVVdCSGo4cXJJU2piTzJoUFc3bFJJYW9ESnBLcDZXclZIYjBvbDVMbktMeUZqMlRIZ215OTZBcFo2L2xxMWlOUFk4dndES3o1Z3MrRS9DWklDUHdjYWNxY25SaXIxUnpQc25DZ1FWYWc1VU1yS0dKNnk0K3lQWVpJN3lqS1RKS1NVTjRvVVQ3R1RkaXhPMERrZmNUVWRta2FCenFQYmk1U2lLZkphSkRES1kxWmwxMnUxUkFPa3dTcDd6SG42UWthaXBOTHI2RTBwSGdtSVEwTzN4Qm5XU3lZMjBjdUgyeldZeE5RM3cybUZ3UDh4azVjS2VEc2RVYWtLbExITkpHOHM1eHp5aE50dEVCaVJETlFzY0NsMnYyWkFuMUNpdHhNRWpMTXdHOXAxZER0ZHFpd0pUTkNmTFNxUlMwQXRWdXFRUElzUUNSWkltOHg2NklOd3BUQ01KQzJ2WUhyTk1XTXc1VHhKNFZpNEhnUlJva2lnRktQVHBuNDVKWWd4cWgwYm9xZ3VIUDZJZ2tRVEtWUHA5Qm1DdHlTT0pkNmJ5RTBsUTFkbmt0bGNpR1VtcFFPOXRCbjZBQlJCdlliaC9vWGFwbkNDNzVHR0l4bDhXK1paT2pvSFVodTdOQzI1VUpvTGRvdkMxVm9BaTJGQVhwK000TjFEeUF6VVVqZVN2NXdHN1piZjlFY1Q2ak1ic0oxQnBZL0p0b2w3TjBqcFFoZ0xoY1lmWWVVWjJCWHFHVUg4NVE4UlJ0ejJmUWRuem5sbEIxOGRDRE0zQk0wUlZtTFhHUEZWUmpFZFFoTFA5RGlKdnBOem9VQXZlZzlaQUxmSWpUVmI0ZXQ1dlBNOUFVVkMxMUpZQk15RXBKb0xhd0hWczNBMENORDBjZzIveG5YSk4rSUpXNEFLZjFHU1VhM1ZCY3VNclhsVVlUdWdab096UGZXS1J1YzhxWU1tbE9NS3dsN3gwa0t0c3dsZjJaUnNyajFoZzJ5enFCYVBsQWFNbGtSQzd6RzRXYUhjOEFCcmx5MG1EVmdQaEtnNjBLSUdzbG4xRkZRR29CSFkxVEd2OUtnSnAzVm9vM09CSXVBNDg1b3JoMGMwTkcyTFg2eVNBOXNHY0JhbjJRaG9iZ25pSjZGZXR1S1NIWExwNWVjTjFGaTFvM01nTW1LZHcwSXJGaGo4MUtpVUxEdlJKREk1S1NVbEtBRklLeFZ6Q3VnVXhYcEdnWmZBZ1BFRTkwTmV6S3pweHZIYlBUVnEyZE9hcTg0MkVOOXV5VHpLMkZZdCtXZFFaRGU0VWJlQjE4c3d2bFFVQ2lGcmJMK3lDN1dxbHpaT1ViMlZwWVFadTFtUFVrVDJYeTcyNk5qMGdwVW1vRVdJZXIvRkprZ2tnYkFBTDREaC8wbG81SkRCTUM3a2cwRHR6UG9nRjBLN0xXTFhSMDZQRU4wb29ISDFsdWVKa1FEUElXVTZNWk82TGEyc2d1bkY1MDhDMmxZR1pQbGN4MlhKMXR1WEZicmU1MUNJVVdTaGI0Zm9qNkxnR2NtbGcrVUNpU2l4Y0g5cko2VFRKZEFDMjRBcEdic2E1aGEvTklyK2g5SWVhWElDaVp1OEM0Skx6V1Q3Z0tZVDc2MzkrQUFqTGxwcGRYQUxibXQvemNkWjhuZkkvc3dYTmJaZHc5bVIxU083SWZnWktDLzRNQ3dwQ3c1c0QxajQwd0l1YmR0cEJOY3NWSG11VVB2aGFrc3hNOUY4Qkxrc1EzNk0vQk9KQVF0OFRCQlNVYlNvandLMzJFWWJlUXJ6dVlHYTluV0ZoT0tUbFFCdzlDRmo5alRHNEozTmdEdmV1QWcxVU9oYjRLQXA5cEhnYU1KS2IwU2xvTDdEb2RIc0xqcHRYaGt2T2Fhb2UwQ0hqRFU2dGtLQ0I0MmdaSnpSRGNQbzJ4TmVKclpEeGNYZVYzVjI4SndrMEhKaFUwOEx0R0RRTXFLT1AzVEdvQUk2WW5iRWtSd0RSazNPNGtpNjFJbnFUODEyeEtiaWlvQk1HRTVETHBNS3JpT3BvdkZMdGJJZTl4cU1xL1NUWXN5MFpRRjV5YVphdnAvYStIN3ViRG5wU3NpQndKRmFnQk1pN3dWV2M3VUhxbG13M2ZjTHZ2bW5WUlNGWVJRRW5neG5IdnV4OFExQ1Y3QUlBdUFJRGRBSDFBK0x3ZytnSGdQNEM5UUxnQkFOYWV2T1R3b3FNSFVvTmdtVm1FeURJN0xyeExIRFhYRWs3WkFNSTl6T2JHeUNHRGJrNkc1VWduVHBQYzMralpRTWpZR1V5dU5YZytNL1RpYkkyY0J4Z0p3a2IwYmdpNGZaZjVBQkNXVDdCRFNNOFllUy9KOG5vNElzeFFZazUxd1pLbTQ0Q2p3NnBUZlFqWGpVTHY5ZWpQT1ZLSjNQaFMyaUlmdWxBSzZzTUx1elk1T24vYkh6aFpETjJHYVBoNDY2WkxVVVpFbVdKM1hSRys4QSt2NVlPT2xGSU1SRkI0K0xqV3l1U3VTT2VwM3FyUFdyTkJvUnZHRFdiZ3FjdTk3MTVrWHoyQkVNRlVaWGZodkw5VUQvT3VtNjR3ejgxSWtzU1h2WnVJT3FjWVJDcHQrRFVpZ3N1RTNRN2J2Zzh6OXFFemY4bWZlSEZuNTVzSlJVdUxZeFEzZk1IWnVPN3ZoazhNMDkxUXhMQloxU2UyaVFOVjBkakV1Q0ZUYm55amVhcU5XdERVT2JxSmVKc0J1bklRN1BLV3F2SFBQRnhFWFRNS1JqZkFEYytNOWI3NVdpdEtlTjJUVHdQTWIwUEE5cTJGVVVHU2FMaHNsakRBVUFNTUxkS1lRSFZqY3dwZ1lLb3dhVVFDMTZycmh4QkRSVS9hWmdiRW9VcytBMTBUeGtzbmtTTGpaYXl5UmErUGhLS05qQlQ4TG9TcXJxQkdpcUdTUmlGNVRCQzdoNTNDaW9lRjRXRk1WMXpLNWpEUG9iakhnUDVhOXNCREQxaU84NFdjTDk0Q281RWRjSWtIbE5mSnRmbW1BRXQrQXAxSmF0dzd2NUx4YlNVM21lS0NXczEzY29kUVVZbEpWdis4dG11ckFHb0UxbnBNaFpleFRMb1BMMGtnN1VleTJNTEV1dk0weTQ1S2x3R2xXeEFobkhmTmpaYVdOY002ckpiTWltaTArc3p2OUJCcU91dGZQVkVqSGpJYk5kNXBhYU5tYkgzRkxKdmkxdGxPeE5zb3RkaU93VDluZVBPNytlU0dGRlR6MFRhZDlZZG1BL3BKOHFGYTVnc2Zhb2lzdzYxQW50OE92aisyNDJXSzNSVnIrY3lPQ0dUWFRaN1pxM3lISlFMUitxZnVTYmdQbDRVb1VubkZNcWx1SDlBUDhSaU8xa2Fsc3hlZUhYbmt1TkllOSs2MDZ6aWgxczhPSzg2ZWtNcjZxc0JzOHJ1VXE2eEZIMGdVZlZzT1lhbjNXU3RBUmY3RjUwdjZ3ZHVLYjBZdjJic3AydkN3U3FGYU1BcnJJTHZZVjBxeC9UczZjRDkvUjB2bWI3cStVajRRSkRIZkx3cWExTDJZU2FLZTZvY1dYVDZFaCtWd3VhUnlIc3BMdGlVTWVmcEpSVVlJdmRPcDVZRisvTWhnQkIycGZ3R2prS2NjZit3U0krQlZ6T1hMR2cxY3hXNERWZjlIT2FhSGlTczAvUjNkZlNpOGhkRnhZaDdNd2xGL2p5aHdEYWdGL0NlMnowaHd3RjRYNUpiRHNGSnVBd00wTnF0anNHTURDVjZHSzE5aGpVQURiUk43eUdkaE9oOHV3SEwzMEd6cXlsbWN2N2FJZzdRb2x6UG5Md3JiamNOdjM2WEthRlp6NGk4UFZIaGVRM29RcGFxTEpESTNTRGtFWExITUNKVFphUEt5ZlFUVVdyODZxSGNXNlpUZTVvTTd2YXRORFhrRmxja1VQNkdTVVFoVldpdEYyVzcxOWZQT1pIZTdnOFdyN0ZtMjR5OGhIa1RtUmdWN3ZqUFJYUHE0ZEQ4MGEwYVpnNDNmQlY1dFd2dkk2QUJZT2dmR3V0aThpL2txeFF1TEVHb0cxbzVmVG1tNm5zV1pyZGx1RTJicjBMZ2tkU2g3RjFNUzVwRDBEWkR3OFVpdFdLRm11c3gySDIxeEQvYm03eHhzOE9IMWxpWUpTVnc0WXVqd2h4UzMwQncyNUI3YUNiR3RnSFpVTEltNnVlYXR4ZXlwclZrcStsRm5CbVJWQWQyb1VUNUNWNlBMa1hYNGthS2JkZ1RtRmhqZXNvL0tqQzhJbWxnYkx5ckdLMzhTN0pqcXQxRTVhQ01pWG93YStVUGd5M2JKNTZkb0hJZ3hQUGdid0pyZFd0bE9HSjdNQ04rMDVpNlY3VW1qaWpoU21JL2VvZFhqSTJXeFFIamFtZlZPU1B5bldEdDU4Ym95OHl2TE40cTkzSmhwTDVwV0JuUkc2bGFhMXBFVjVtL3VJQXBSTjdSWG5UaklybW5BMnNIa1pwR2NHNnlzNlplV1h6NmQ4blRUZnRaaFFPYmFCWG1MVk1WcVprZ05ERmdEaTZYbFRZbTljVTJXWWpwelNTRkFTQnRxcXNTb2xpVVBLVWZiQUQxK3BpYldaNXlhWXppL2ZtV3NIUlhpY2ovOU5wMFp6ZmladEozMTExZWRnZkF0WDhXK21tdjI1MWRmRXdGQXRxRzh0ejJ5RHpMaUR0dmFiZXJXK0pxTmJoQ3h0U2dyTTZxNHNsVEpTNDF4YUNwQkdocHBEcnJpUVFXVjdOZ2RqNEY2aFNVam1vTFNCc3RaVGR2ZGZoQVluckJqVWl6bStnd1Z1OHpxaHNXYjN4L0YrNVhFVURVVFFYUUN4d2RIeHk1dmk2WUhuczI4VWlKaDBuN3hJV0MzNWwyc0dWUXFTTEhmMUNON2dDUUtrZUdnUjhhVFdxVy9CbGY1S0NBUWdUbXVMQ3hNelJqakxJc1I0UWczVmpvNithdlh0bXNDSm9aTU9rY2J6RjFLT0hHRDdaR3lrbGNXTXhzZWlEc1NtVXdDU1JieE0rT01WWWd4S2d3dlI1Wk5NQ1I0MU9RdUhzenVRMSthNyt1ZjNnTWVQM0dSR1hITTBHT2RiR2hmZjd6SWFSRUIrT3h2VGgwOThCczNmL0RBWTNwb0R5clFVdTZURUh5VWg1ZHRjaWMrT0NoUUZqZUYrUkR6NHR2cWREOUZ0T0NpQTJrZklIdmVrMlBMUmZ0QU84ZHhZdTRlMExpejdXQnl5K3dEeFg2Wkd1clphYnJ1ekd6V29PK21DK1pGa25Hc0tUdUx6TkhDSkM1SDhnVXpGczUzV3JCVk1nSzNJbE9CRkwvQkVRV205alRtY1I4VUVrMExKL1FFTURmZ1BIVFpDcXFXRi9vS2VldjRVUjRxR1ZVUzV6eEIwTmZ5clFkblQ4d2ZkRWFMdHBjajNKaDRGYS9HVDZZYzVadUFpMkRqdXdjK0liK25PSTd3Nk1hcU8rQ3ZLYTBqemFlZjREcVFvZVVJQWtka201dTVuUE83Wm13VHpBQTVWVWZ4b3VTMkdGQUlNQWhBMVMrZllZVklwUGNYaUZMRkNqbWdlT0V3QVVkRElIdzYwUGdwSk5EMk9GUkZid0lNRWF4aHBLV1c3Mlg3bG13OE9ZV09GdzJkWnNuMmROdjhKcCtmRkk0WmhtVDl3WmNaYTlnU3VBQlRydThodzVrMG1lQ2o3U3NlOWRLZ2dKUFJSZ1VzZVVWSGFrK3h4OE1RMUZHRGhNcWF1bG1uUExuQXREWUFDUzlPVzZKZXhlMUYrNHc5dkprejVVeCtxZ1c4NWpreHd6dzV3V0FXNW1IWnlmek9SYk5NekNPYzVqZFZwaFpzVXBzZStwR2dScHhtWjQrWjg5aTlwTzN4eGhnNVJoKy80YlVDakVwaDYwT1AxL0dXWnJXb3JpN2FaV3VRaStMWkp3WXAwYk5NZWZaaHd4NDk5aW42RkpjQUs0RG1BR1RJaUZXSnhEVHp3bEhmemZ6YXZRWWQ0eVlNeURTWVBDTE5tSkN6dUZGYnBvNUV1aWlRWkptUWxySXprRXhCR21LcDJMVGppa2lQc0tmUHZGMkpkRDR2MUUvczJlMjZzeGdDcnVDQjZNeVpMYnNJUDJUZDl1bk03cnNzdFAySDZGQmdVbE9CNjBDL3pZNHEzUXkwcHJuY0FTN0paTTgxMnlZZEpaTDQ0Z0lETnU0NjJZUmFUenk1SEtxN0xqeGpGT2NieGFYWnBCMHJiWmJVUFRPYi83cXhrZlRQT2daL2RLS1JnR3o3YmZJc29RMER4djN6OTgzTE40WW92b2FibU5aMm5qT0tIblo5c1JkVEdqSnF4SU9ZTWlkbkp3UlpEcGtUMjJwcGtkSVVOWEZTQmhYS0hHdUJoK2hsMytqNWJTcjJYTU83U0IzVkthWDJCanJPTW0xNHErUnNPR0JIc3dZRk5yK2tZTHpxQU0wM25qQjk5R2pxamthRHhNZk9hTnJXNkU5Vk1sQmlsVFZ4Y1dSaUFKZXYvUCtUNGE0TmJZcUVza2RzUzRhNHJWS0xLUUpOQkpRRmJTcmZqdEJtTW9FVUtTdmpmQWxBbFlUalMwUmgxTkhVdE1XSFc0Rm4zMFlVMEk0STlBUFU5cnd0dU4rYmVubFNjdGlFVFJZbTRnNGo3dDRBSkpHb2Nlb2tPUmdRTTh6MGZIOU5MTGFTUVJFOFdjQzRGZmthc0NiWmhYNms0c1NiR1hOTkxkSXZtUUhPQkdvR1Y0dGdOSzBzOTN4ZkF2cmk3ZW1NQWhhVWdjR0l5eWZmZVhTcGJIZzkvZDhtOTV1OC90K1R1Ny90KzdhNFR4L3NvL2U1TlB3enNwdktSck5UajF6cC9rL2Ivelgyb0UvLy8yU1dlK05xdmdtUmRVMGFLandSSXYxNnBFNUZVZW56YjNvNzVBamdIRU9rSUY5K0dYSTlmRU5ZS0g5Y1JrUHlxUTFHaFBYUytMTEdubVgyZUc1OWs1VFp1eXJGWE05RG1UN0tsNExtbVJ6WVlMaTVSMmZEa3NLSWJmQzVya3hnQURiNlIydVRmZW8xL0phSlA0WjJ0UWJ2NzVpYnVHOXZRYStvTStYYXVpS2FIWnM5MXJJeVFXK3JCbUlvZ3Y0WUV6aDMxOWZkdDZlZ3I4NjVkV1Y1NjRySitKU0srRzdpVStJZWJqL2VMeGZJOWhGWE92RXhjVmROQzk1U3h4MHA5SS9hVXoyYVZZeFh2YXE1YTlqaW03Mm1TY2JzQXoyTGEwT09icjB2Q1E5WUhkaEFwTGxYYS9XTXVvdytjLytxVnYwRHlxTXBYTEptZkVMWDhFYURidTF4ditFV3RKQnZvb1QwYStrVzJPbG00MlkzQWtSbURRWVg2UHJqWld2OTJwSmtVQk5pWDZnbzJkTGhlOFlqRVFPMXd5cWN2L1AyajJ1aTVIMlB5eXRPZDNKT0FNN3UxRTIyL0ZxbmZVUnJkdmIwNGk3b1g0TkRyeWZKTFJvdURJN2FtcnZWcTl3KzdhcDAxNGpGRnhxeE4vZXFWN3I4MmFtYWM3MTI1VUN3dVVkWDYraWxBaWxrdnNXdUdBaFZxbzJPK1ZPSytkV0NmUWNaN1NxQytPcTkvcnJNUElNenVNU2E3S0cyRmpOZ2lMY2szLytvNVZ0RE4xRnhEalJwc2l4TTNqWnd5d1NrQ3NJcnhCR2xtZXhLT3V5WFNxd1gxSXdXaktuVWFOU3J4djdtenFOdVRsVVVWWnEwM2NsYSt3L0xkQk82Vzg1c1VidElLSVlWS0w2SDdIaFdVck9yNENGcVpQRHhtKy9XaDVSUEhxWDRMUk55SWdqUEYwZVVsRElUdEhPZXFyYnVuL1ZUaWZVS3dXaWhtSXBBbzE0Ti9wL2dTcXpnN2x1ajByN1dLS042T0NQeGw0WExCMUJid0tFR3ZZd3F5elViTzduTnF2ckhtN3RvZnFCTTBkTG5kcXV2ZEVMQjhtQjVuMXpQV09qYTVKQXFTRVFyWGRDSDNQRGV3bjJoK3dvSmEvV1N3c1loSzlNaldzbDA2N290M0FGRHNsWG44N2RTaGlSbnZ2bWE2Qk92OG5RT21IVVFUUnd2WFc5L0Q2clFjUzAyWGozM0RiSS92eitmWElidVNwVnZWcXZIMVhmTnZYdXVtaGczVm15K3JRaHlqVjl5WG5SYTJiMmxMZGEvakg4YmJhVXQ3TjZhNFBpbFRaYzNtYmxqSmJveXpvdmNvdTh1ei91UElORHo4ODRST2o2d1cyMTB0eU8wb3JGVW9QWFhOUWJrOVpKWEdWa3JvRzZaTXk5WFVQTGEwejZyU2dxbGdYS2xiVkJicTQwcWNYOTMvdDBQY1p2c2tWSmx0TTFPeWJodktreXRLT1lNL3VWMHNWZ1RVZUlCRldGZzJ1VU8wRGZ6RjliV0JYdGpEanZTSUhsVjI4MmtuQmxML2IvOU5qcTR3TStNQmd0bkVSZUQ1bHpXWURTMkdxMHYvMENibTZSYTEzd0g1QS9ya3R5ZkxlM1kyczhxOXJ4Yi9LdXJHSWptSEhwUS9zYTlGKzNHMWpSbE5tWW9RdzVYMDhYMmZ2clRQbUtTWkR4ZGpNdlVwTEpIcERrZEJiY3h3UlQ2QnhHQ0JzUXgxS3J0U1Rtc2VBQ1pCeDJ3a1YzamZMVFkwSUo2Z2tpN0tlUWNYdWdMK3ViUWo1WFBidERvekJtem9jdFJhK3pOMmt5UXV3WWJLWDNuY29PMFdsa1FzSS9PQ1hyY2ZiN1BHSEpmeWY0VFB2OE9WaTJ0c0p5Yll6Y2JNcmdyQk9YR0pQdS9PaG1CRUpVZmpnbmlHQzZKN3dnQ3VHQzh4eVZSRk5rVW5kNUFWcUgzTEhBeTgxd2swdVJ5SldHZGI4ajcySUMwbGM3TmIyc2dmTTI2ZVVPMllmYncrMW1LU21YMEpsUFdaR3cxVVliNkRHa3laU2xEZXNOdDFiVVhsMFo1bzZFZmU1MEFXbXhzUWQxQnBNTVlkQTR2OVB1RFF3SFhpSDk2Q2I1c01lZlNCb01oWjhTYU0vcS85QzZiTEM1TkdZMHBLZ2haTy8zMnFUMFZVQVlxSFdER3FWYUpoOFRWSDk3TjBSbmlrYXBkeWwybkJKSVpWQnFqdzFDcmpnTGE2V0F6Wm5CM2VZRWhvc3JMNUFZSVoyYTJjeHJuYkwvV1JpVVJmZGkwNE14czI2VHNHMU9sWXYvUEg0Y0FoVG9nSittYXVFSWxpZTBJQXJKTEpORG1iSE1vRTBxci82aUxuQ1NqMTRkOE5INXFhVlc5UVJBdElvdTB5N05rdHV4RVhPTFVHYzZrMjJEOS9UYzJzL2pmblJBaEpJU2hqQXUrNlcyMTREMVFNZkVCZThuZ0krUWtlY09tTkgvNytTbWRNUEdkYmlFMHlhdGd2N052R3I4S0JiQ3lJQWwwMmxvY2RFZTYydXZjYTd1czJkY3V5Zks1eUNMMXN2SmVkNjJ6THJ3UzhuUjduZGloMlJXTkJ2aFN0N29wVzRzM0tHdjlKNEk0bjhmU0tDUHVYcU5BZWFOUlVDUXZObWFWVEJCdU54amhObmN3aXhvTUdkUnpybTh6R3VEMnpTbnpaMFlidWpKV2t5bHJNL1RZZDlZZEVveW1qTjNZYmIzclZyYndYQnpwb1BXSnZCM1VlYzg3MTUrNXNiWENLWk5wa0NLNDJEZmtjNDJFd3E3UlJYNmZQbzI1b3VmNWlkR1dldDg4cDJ0a1dxS3doRmdKV0hNdFJyTTVaNXkxLzY3VDNDUlI2MXN4WDR6VXU2TXBGRGRucklidVdnZlZ6YW5mMkZ0Sktjc24vNnJNclNuS2FFemEwK2MrSENwbStyei9lY2dUUk4rLy9iVldZd3AzaGFHYzNtOWRNanRRaHhOKzJDR0lvU3BKZkhzUXdnWGp2YVJsUDN0SENBSzArZE84MnBoUUdqZVljOVo5dU80dW5hdzBVK3V3cE5TT3FMUk5iZFgwTkR1c21BOE9WVDBua0RWOUpWQUY0QUZSbk04dE5qVGh0U0ZaVG05QTJsMkJOS2EzNXFuMkV5ZElUMkowTG83N29UblFremFkLzJzeEVVU0sveHBBcmJydWxCMWdKajM1ZlZHVzIwTVdhVlk5V3VSbTNWSXhyZWJmNHRwKzVaS094NXNoUFZObkpJRXVQOGNXOFlzY1NoM3BhcEpTOXJSODhQRE9MTEVHT2pjWEViKzVhLytsWnNsL2hHOU9ndnVidkNkL2NYMmRUaFZLS0EyVjZncjVKeHdJOFp4QUNGb3A5V3V1YXZOdDJsUXphYUxxRkdxdkdoVFNna3VSOG9iK3NCWU9lL1Zkb3U5RkZNOTU2cmhROE1PWWVGTkFHWGlHZkdaVU9icE1tT1ZMdmlUNS9tTTRDYmZUclM0OGp0aTlmL25KQ2RjeDZTMnpOUG5KL0x4SHROanJxYXRmS0RLUzVNMXZaMUN2ZmY3NjUyU0lWcCtlUWJvQXZxQU1HVjZQcjUzNGRQYU5wczlVM2ljOVR4S1Z0bis4U0FNekh0bFl2dnpocnkzdkY3NVhZSG5vcTJYTEh2N0svRzdCZTRVMWc0Zi9XVlcvUmlIeEM3MC96NkNPZnY3YTV6cmgvcHovSkwxSzh3YXJhT2J0MWxmNjVBOUNjMStaSTMrVTd3R21WWVRKb2g2U2tqMWcxNWNjMlM1NWQ4L0x3dUxZUE9BZUVJQUlCTTRnTDdvV3EyTC95VGNPclBMZTVZTFU4TTdPN3RzK2ZCc21Wdko5Y05WVUVYbnE2Q25TZ0RzckVQV1JSc0RaTUpzbisrYUZXNktZaHJHVTUyb1M1UmdhNXZtVkZRdVZDOHNoZVlWWkZqQVoxRnZqOVFuSEg5TFhlS3krOWljVEV5eTZpNVd6ZWh1aCsrcTcxeHg3RmxIdFhNU0VKNlpoaGVTUTVENXovVVVWaTVTTFhJbGR1T3kreEVmTUM1RDBzUXpwcmlYVTlSYW4vVE9KcWtFdFdIZTJ6S055ZWlKKzVvN2kwVlZZMjZ6cFh3Q2x4Y2ZTWkQ5Qzc1MS9wY3lZTXZDMTR6TEpWZXhVUmgvWDRuVnFVcFVJWExkcnNBdXBWdFZ0ZnV3WnI5Z0xNUElpUk1zVmpxOWdhSnpHclZKQ1NjZW13WWpmUHhBQm5sVHFRRlFkakk1SE5vZTFDNU8wMVpLaWdZV0JMWUJkTE5Zay9aZGV4Um9WNFNCMmZMdzFjMFhDSXZtenEwcXJ5RktCU2ppVGtmb1ladlRvN3dzckFNSFpmelJBNTlZakJaVzZQMTArdnNwZWorRWVCWnJaOHVlZDA4NTZ5c0M1QkRmdysxY3VFb3BvcmFaVWw5WVZHbkxzalJCWkV4UE5KZ0tCMXNabUhsNlRhQXpZOEcxZUdXRk5HNktDYytQMUlvMHRxOUxIS1lYVWZady9mOFdSTk43M0JmaDVra2dlcWY4WldTMll2a3MzRWo3cGZxaTcxbTVvSk1nR0k2Vk4xT0Y2TW8yL3I0bHVibEFUUnQ2cEJrQk45NW50WFl6SDJUL1B6TVYrWWVpNTg1eHVUVDFZUy84MlY3ZW5OVlpyYTNWUzZPR0JnQyt5c0lWK1kzZUtYcjNBRS9BTzBzNzVsOVlZMHBTTEdxbFVCa2lvRFIveFZEcXQ1Ny9BM2FrKzFUZHVMdUc5YVdmU0F4cVhiNDdSbGpXcThZQ2JEQW0zWUJBR082K0hPUXA1bUhNZHBqRVl1MU40RDZOWEJQZ0l0b2xoQStvbWhjbW5SZEJSTndzZ211VW1mKzh5RkkySUVIbFliRzFaTVF6QjBMRGtOd0hrRTdUVzRmenUzQzB4aHpWM2IybDYxWkFuNkJtU0tlRmFLU01JR0tsa2VBOXg2NHE5K1hOZHZuNW9tWTJXcnd6MTlkY3kvdG1NZnc2MDNPS1Vyd2oxenE1VjkzQWs4NnlaUnFQRmxyUlljcUk1cFBHOGp6M1RiRFRWV0MydHYrOHFGcXNJSTdHaFp5cysrVDFMWFRQM3k0L3p5TGNhYlQ3TjdkQUUzZFR0aWJqTW96eWtWb0tlQUdZMnhxRzZzMktJZTdSSmFnM2tUT29NWmNEOGJuVkVKcVlGNFZySGE2TDdpVEpwa2JNWGMwVHFPR3pLblZHYURVMkkxb1dwelV3ZjVBTlZZTStnbXlFMDdnUk1NaDBXSXNaeVVVbWhodW5YV1pNbTVmKy9IYnZzMDhtREtyT3JjYTVhc0c1aURqN2FKYlk0MFhuT3NFWmNVcXdiRHYvbGZyRGJVZFdweVhxSGF0Y3hiWFRUVGdiZUo3OGVYRjVuM3p5TFpQRnZyT0RnbmhPQnAvdkhUYVdMV2hINlRkbjgzZlI3c3RFeS9YNXY3c3JRSzFYWHZGMk5hWVBSTnFScURCaTQwZi9uNnhRbCtMNVE3WVorNDNwa0VOOVR6QUNZbW9HdWNUeFNpT2N0WW9BM0poQlp5S1hWd2p1Y3ZCbzVHSFJxMWNpS09ML3N1Z1Q0Q0dobStndzdLOEVLeHp2U3ZQNHhCOVlKbVdVN0p5OCtJcFU2REVBMS82NFJQYzBJTlQ2M1N5TVpHd1B2MzhlUHM2NEM3RmNMYXh1MHFjNnE2dDBRNlZFQ2NFTEpjS1ZjMmd1Q0lJMnFsWjkrdS9uWjF3Y2xHQ05va3dESHhyNGVScVNIdlh6dTFPeWZwSC8vejc5aEJzeXpUMjk5YlZVNGRobDFpWWNSNUVtdkJOTkVsTkkxQWxvcTF6RVVKbEY2Uk5MTjB3RDg4TGZ2N3AwK0NiNE9iSmVxMlhOV3cxdTlvQW9OSXAvbUpYd3BLL3ptaDkzNVBnUVBaUmFOUk5KTlBwVWZ2T2ZlT05sZGhGQW8yZ3FBVzhWQ1FkbFdGMjczRFpENmFaTnlWbTZPN0ZsZkRhcnlpcnZFOG1mUTN5NUxwSGZSSEFDNGVKZEU4dXZNclRYYUdxWkRKT3JVODJzYUZ3akVYZkRwanpnbFU0Zy9kUU00SjZhMDRqei8xVUxjaitUZi9ORlRpTldYeXV2OUhVQXczQXZlQlNNSC9DRHV5elNIUjlNTGZRK0JXOHNFUXRFMkVGZ21GQXFKcGRYZmgvU3k4M1dPZXllNUxGaUhnS0VwSjNobC83V0JiNEYxcmw1T1d3WElQaktaQngxeG9YQzE4OXdkdngvaXp1RmRYanFDUEkxUFZGOENPSzk2ajRkTWRqa0JkS3JpdFNIVTduZ0ozZC8zZjd6L0oxazhFelQzenhTTkJhcGgrYjZ5MVRXMHJGcU1Lb2RjKzFTMUZIMHlMcURDQXZEcHZMZy9iVUVxdGZGZnA2cHhwdGxMK0tDRFRzQjExeDJKbDRvNEwxeXZLY205VXVNVllNY3Y2WlFja3U5V091dU9za3VyYis0Y1BwVlBudC8xNFpzYlNDZE9CZVVZNWdPM0FVZTYwU0x2dytCU3NhcGF5cmVFSjBwc1pmLzNXaE9mRkh6bzdvTit6enp2LzNsOGpNVnByc3k4d0VsV1pTcU82SVJNZHVYa1Q0OUlwV29LcUM2K3EwR3ZjUWsxSHNhbGtUd3hkc043NnZoSHJJdkFQMllSWFpMaU5MOHJIc1hmTEpsUzNNV3d0ekhjdkRjZzMrZm1ibTlUOXY1YkgzOWMzRGorekxqbDJmRVMxNlZ1dkx1b29KRFgwOFBqOUN6bWNXL3U1ZkI2dTR0Y2h4dXhSdlJ6eXhWdDhiSm9WYk91bVJVdFl4cnh4bkRNdzJFenZOeDM1M1RueU85NmREM3NXLzhsKzV6V2JKM3NLVjM4MlhMeXl3M0tXM1JmNFBvdlBrMjNNcVJjb3Z0eXZYeW41aU5jKzlHbmk4REN5V3NDOWlrakhOVGVTek1mZkZOZjdjd2NDdkVlZk5aTGU4Z2xobUZHNFBpYjRqdE5DUkVLdWJuekpWNDF1bW1ELzhGTVd6K0Z2dEdCZDNDMHB2SmQwNGN6UlRXYSs1aHhFWmRBOHhmRmM1cmpJdXhkQSt4NHo3TGN5OC8yQ0E2cERnR0g4RVBsbnByRHFzT3p2SWNiOFVaRlhxNW1OMXdkNVNMam40K2JQeHN2Y2FxSU5VUlJvL3pXMlRhOXBYamR2OWYzRmt1TldLem96d3FncXJ4U1VYYW1lUWFYcFN5TVlXVzZsN0JZb1pMRm5lSDdyMHdobTZvQ0ttN01pR0ZHYWZINmYyN3NLV2FYcGVVbDNSajFBb1dWTkdPR0Z3eFlkMGxKUUxJbi9ycXh0VE9tU3NKZDNCNTFoQm16cFJvUDJWYklWaFI5bXJSTFY5aFgzTnRvVFRGakVUV25CK25DazdsT1UydnM5U0xYWmVJaWtUcWZhSmFldndKRnhibERxdmQzdnI5RGRXNy8rNkpGQVByL3YwN3IyUTZqUWZUUWU2THpXUFBCamcrdWQvNFFoSHdkTnZVZmRLUHN0bXhadGlxcnk3S3lnYThZeHlzb2JWOUdxdHRqNEN0Z3RiT0d2aXZycU03b002eU9zbHQ1WlpoL2tzcXFod2ZBQnJVOUpFdHIzS2JGZlJGUDRjMlNtNFA1N2ZTdXFXVlI3Ti9YUlM1dWNHbnByeDVUdlFDZS84VW9SZVRxSE1qTEQ4WXIvdWFHNUhzbnV4NlJBWTkyZWJ4UGVMM1R6UktKV2U3M0R2czlIWThDd080T3Izdlk2Mm1ucGVicGJzOGRtczhVc1hFWW5vQ2NjZ1ZFajhQUVY1Q3JCS3JVTElJS2x1NDZlMmNCeUlPVzZ5WmJDclpoL1Q5MVE3NjZRZFRxY0pXYk9pbzZYMEorMUY5ZDNJR29PM1FrQjFVaElyTE50SlQxL2RmLzZ0ZDlQL245MDYrWEZja3BCd1BtT29UTzZIVStYR2NJakh3T3lMUkRIcVduRUMwdyt1ZkoxSktnZ3BFd2NqVVJqdUVhZmRiMHlmOUxJbG9VWE1DRHdMOFZMbkZZQzhUVTdxVlYraXJScnkveFdTK05MZDAxUnlCQ1VUR3Y5MmI1WFYxSlpQNS9OVHZnSFVkMVI3ZkQyNFdmRGlDcE0yM20xM054Sm1LeDl1a3JybGhGN3pDNlpydDgrMXJmdGUyNFZlNGk5SGEwYU5VSit4WExCL1dmWmZFcnlwY3RYN0hpSHo5bDVOTG1CSjdBVEhFOGZ2SXdkanZHZDMrQ1lBamFUa2tsMy96M3dCVmo4dk1tenZEQVZiYXNBZ0tHMU9mQWpJbUoyV0VQWnNGTTJJWmI1TGRzU0wrN0JNejV3cnZONlJxeFNGVEQvK1c3QWlEL1R2T0lXSnI5azh0NTVYaCsxYVgyVTZxbmx4TXpHMmFRY0x2ekdYYWZ0MG9PY0ZXdkVWMlpxUXJCdERVTzRETEt2RDhmSmlVdlArZnRoQWZraWdHUWlsTkFqdEJVWXFYNC82ZUZrcyt1QzBYSHpxZEtXMDd5TmtKVHpudTIrL1JHNkRIZ2VsYWJtM3o5YlVkNVh6cTQydGpaWTlwU1h4a3NkLzdtbHN0bUh2RytPNlhVZTJJQk16bFN6OFZ4VDhVRmtoMmVReUorM3RmL0cySkNsZUhzYnpQOTBCYlJuQ2F1OUFtdWM2WlBHQ1JYcEhQRGxOYzlTbVl6MVBLUW4xeWViaDJodk1wUXRmYkl3cnBxTkxURzFObGwyaHh2c0czcWFWOUxiYXc1K2RiR2F2UXBOMXNIT3l1MndKTGY1VksrVU9ucEhUMm9veHY0cU1vZFZXZ0pIN0JOZ1pIZU92dGZkL3N0S0lOcmNuVlN6TnhDdXBQUWtBUDM0eXNUblFObXQ3VmJaYSszVU5wWWdqNVpIakJza0tLMFFRdHR6eGRYWHB4OGRjT0RydEp2QjNZdFgzOUc2ZjFUWlkvYlZmWkUvb2lKN3NVRExsdDl0L0taRGMxNXIvZGtldU1iNHVDdVY0OVpFUXlrbjJSWU10bTlSUU4vbDNXR0FCWGtGTDZJb0hmOG42ZHZBa2hHTHloN2JlZ3ZoYzRVU0NvSWNQbmVxYWVYWHZnZ3dBZWR3dDJ3STY0NURYbksxMjFIaFlCeWpWSzA2Tks0LzQ4YUx2b1hVeTJ0NFNwZS9rVjJ6L1RZV3FxajNiQTJHakdzN1dqYm83SFlPbXJXb0NVU1BiTjJ1Q1ZSc1crRVNEWHJSdngrY2lTWkd0WDRmYjVSS3FVZDlubnRWQnArOUl4MFluRUpiVVVhS1dWTkhjWFVLOHkxblpSN2lvOURMUHlmUFN5WFRDVngxNzRucWxsNDlva2IzYXdJTEtodVBhTFdQWFhOdXp1OTJ1SEVPYUo0K2VqNXZhK05xRjVEeG1RMEtIdHl4am5qMDZwNUI5YTk0ZjNhcDZvL01WVWF2ZjB6V1BKQTdoSjhLWWVjNWVXVEF2aE02a1ZKOHNVemlJRE12S1hVYjVCK0pKVzV0OUpSbWZRb1RoK3RabjE0b29wMXRMR3RlR1o3VTlPMG1jNWx5ZFdiQXpZWGJkeDJwK3BPL0M4elNRVkdqTy9CM3RsRDdPODgzRmsyTnFWV0hwcHBXcG5FazFuL21wWm9WNmFKZEpIbU83TzlRVkpTdjBodGE3Q1U0SnR5Y2JndC9tbERyZjRVWjhFUGdLVWcvQ2NJL2dHREpmV043RWtlK3dTYjlUdVhOMWttM0NCZUM3STVudDRDb0RBbG1pNFExRE44UVhkdkFWZzQyMDd4OWZmQklyaW8vcnMvSzF4YVY2UnM5eHM3WHprb1NDM2pReW1Cb0FuYzBmTUdwQmhocHJQZXR2eDlycmRYc3ptZTRRS2dzSjhZUHIwYWFidW5xZ0F4TVFUUUR2K05QY3d4ajJPeU02ZHUvM2ZubWovR3YxMWtQUUlCZk5CY0N3S1R3M1VnUzV3RnJBQWRSeFZ3UmdXOHFRSXVoMXRIS2xPa3I5cll5MThmYW93aVcyc2c2N1lHTDFqSlpNSlV3b2NxNFR1VnlCMi83UUtLN1hRYm9QR3dCcUxXUUQ3V1FMN1hRSDZ6WVEwSUkzN282KzJnYUFINzEyM2QzN2MvUERkY0swSUFoL3ViRVhLM0NXd0hwMkV5UE95Ykg5clltZjBCMlBzaEFQTXNTSFptY2V2NEZzZnV4ZjM5eGYyelYvLzdENHNYa2JnWmh0bDhxd1lPcUlFSDFHQ2YrOEVmTDlOcU01K0d6VmYybjIvK01FZTBtVWV0WmNCZS9TSG9ja1ljY0o3NEJyeDZkUmdBb0QwNEIwNzBxY2hvellMa1dvYjY1YTV2OG1lV0ptb21BR3B3bVBJZlFCZ1c1TzhXYWpBSHZvMWR2L3lpNDhiN2Jmd1RQWjNzeEFHdi9hZW9ZUUFndmw5S0V3RHM2UjY0MGZ2MXdiSHhTOUgrVDk4OXJTck5icTNuTkwxZkhsd0ErRVJET0lBZmgxemt3UlZIV2d1UFRtRWZXSy8vM1h0TjcwY2V6cVhiUkgvL3M2RDNiMytRc3p6c2xOSms3N2Q5R3hsc1RDSHB4ekk4dSsvVDc3ODRRdFc4c29IM1ErakpCSENSOGtyNFJ5QStmNnVETXo0TWNqWVA5N1NodjlIQ25wOEtmM2lHVWd2YmcvZER1TkR4U2FJQUtNVC8yMWNaOEtEOERMM3h1VGhGY1cyaTRwOVY3aFhMVzBCVkgxeUhsNHQ3UEwyL2xRdW91emhYNzRyd2h2MGFrYktucDg5N1BOTzdGSHpqb2l1V2xGTmVzK1Avc0JiUC8yS25IZHo4dW12clBaU3hGYkxpd1Z4eURVb3hwUmszbCsvOHpNZVBoNVIxR0FjQTdzclYrNC9wQW1KWDI1VnNpNGd2QXdxeFdEVGFFRkp1eURRMkVjbldYcWxLb3BLcHVhblJBRFRBaFpPMDdYWmJLamtibG5XcDdSM1lhQU5UUGI0cEdUZHp1VU9xZFkxV2llOG1EM2pvY1QwNlV5d1FBVWxBMjBZQm9LSmxYUkFKRE1sTmtNWjd5U290WkVRalFJL0VVY2xXbGRXT1hWUm1DbGVPZ3JZV1ZJMUJMN21iKzcyZTBkTnJzTDBDNGRaczNvRUtoYXh1TnNuQkViRnhNa1NFUisrWmpMWkhZaEpWVjNteG95VlJhVVQwcWpvdnJlZ2NWZFJzWGprbWFGRnRFZUpsamVRRlZRcG1VMDRRY2JDSGpBejFpVUlhd3ZsT1hrTzZMUjZrWGVvbVhNb2paUk5WM2ZxcXgzN0hoN2ZVZWdEVkMxK1pxRXdscTY2M3pjeTkzcTU3NCtxdUFyMHR0QlVxZitKdGpGaXBjMEJhK3lsNWE4Y203WXpOcktOQStJUUZPM3BmMWZyVmJlMURTcGhOV1J0b0hlSk5oZnNYUmVleHF2c0ZxU2ZVNzU2RTFpeXJzbkJaV3hwWWFHWW1JUkt2V1M3ejdPZy83aTRnZG00SkRhUmNtaGpySzFNNk4vUmFjbU9KaEdobDlZMDRIS3hralovY0d2S0NuQXJ0ZHV3SWRLMUlSaWhXdHN2b2I1SFlXVmFoQ0w1N2laWlM5U1VxK0RUSDg5MXVBSWp5bFZlbk5hMXRTaUdiSFNuMnpYbG5wOHVxZDducW1QbW5Dd1hteDIxWDh1UEh4emdmRUl0RXk1OXR0OSt1djdMWGRsUG95NWw2NzFsNE1BSjFvNVdvS0lGMkYrNlhaMVR0NjJMTjVndXhXV1dsRXRNa3hQZmR2TnhGcllnUjEyMVJsMnZhc29EOGVnNjNzRjR0UTdsUWVHeGJQZUxNQ1RpcXIxd0RMK3ZTSmZWMis2TVhmVzljRU1QSzBMLzg3a0VpOFkycmI5VkR0K1A5R3lMdjVjQldKMW91N2NLZEV4V2VyOGpQNHd2RFNzK3o2QnVQYUdLT0wvQ21saVNhNGJ5aUx1ZyttUkJSUmZCQU43R1NaMDJDNFhIOGVwZFdyL0NCOGdiVVpVcGVTczV4TlFESU9ZVkExRW1JZWlLWFdLWlJBMVZHVENUeG9tT29nT2pRRGNmWCt6MXJsT3loblV3dEVQWmlRRFNsU1EwWEhPVjVzaTllNlozcTY5Qm50QzIrNnZQb1B2Qys0KzBWYlR0NC8xLzh3WEl4RzQ2bUU0d24wSGkzL1hBUXBpTGdBRlpnMExqNUtIKzFYQnJIUW5waFRaMHYrM09qSXArNmIwZ3M2dW9TRTdxVndqdTN0ZWg5SjlCT1hjL0N3RHkvL2FVbUZxbEZMTW1INWxVMVI5aFJVdzRTYUkzMHFGSFdBbm1tU2xxbythdHVHNFhzc1MxNXpmMVNzeWw1YlozYjRwRlg4N2F5QWNkbWNaK3pvZWh6em9YRWRhUVNaa29vTHZtVjRMbXp1eDZ2RXdXN1JWQ0V0V3QzZEFVSzNmRmlaMWFkaTZWT1FYY2g2bXpHenoyaHpqZk1LUXFUamlqMnUyYXBqaVRQcmFSR0o3N2FOalRwY2Q2Z1BKQldBUDlYdGFwY1dQOXgrakw4amRQUHphL3dxaU51ZkRBdzYzYlhLa2xybXNBZStRVThKZnlmQTJ2cUYrUlAzWW4xM2VoaDUrdTVIcmJNUklZdzlQTHRvWDh3T1lHMWtYZUM0ZWE5WjAyTTNhTWF1bno5Y255YXZYcjdMRVFQSHErcXBoaUpIeTBKZ0pnQXlzem9tejNUbGxZQkNkYkl2Uk9jVWVMZ05aTHRMT3BGcHJYMDRXS09nVjVBbGl3OWV4MmJNMndmblkrbk52TVYvaXZ1L2hPenhGSFZibEpEV2FOSjZTUmx1Vkc5c1ZxMHhyVkVYVGZVS0J1TXE2Z1BRWGRVczFJeVZ0U3dKV3h2aGQraW5YUTlJQzVLaHhITE10NGZuSm9zdXRZTXRxWEFMQnZuUUZRQm1IT1dkbFZyK0RUUHhsSWdkMkdNcThsaFA0OFJEWE91RVFNWmk4OStZaWNTa3RnSklMbm1MaDRPaDBPMGVNcXpkbzlieW9md21PMzd1aFBySklkY0w3MnNFNXg4enFpb1ZZbWt4VkZGYTUvYmxhbzNBS2doL2tFT0FtUHV4NWJETk9RcTFiSUt3VW1KaGlZSEMzQ2NtWkx2a1dGVmtRNVplam5FOWNCL3NDSWk0bFUwa1k2ZXRSVU5hWHVvUUx5dEowTm95Mm9NQ2dyTGlKQ2RRUjNEQk9mK3l4VUNqdkxmUUZiRWVhL1RsNzJTdU5PdXBsVCtuQnRhV2dybHl6TmNST3hzYlgvVEZkSnkvMmd4UGEzb1UyR3BZYkNoTDJ2NUgyYXlJTldOUUwvem1LellxVUNzclYyYXNyZVhSTDcvY2w0YVQ2N1NNVEF4RWZKTHdoT2hOaFhPSnUvcDB3Ti92Q1ZNcUN6eE9qZk41ZUxSTE9DS0ljK01yMXhlNmZBd2JGc1c0TDRjMjdtK2F0b0FkQVRicGwvTjNSSmdiQjBuZk0yNkxmdUtrUFJzRFNFQTBWTVRqZERYWTdKNGY3OCtZRi9QNCtzaFYraGNsWlRHZnlQVG05MHVWS1BSY0JodXRLNUNLV1llOXBnYThjdUNxUmpoY01vNXhOaDRRY1k2SlIzYWs1WTQxbTVTUkI0V0ZGVXRzaXFBVWpVU01CWjY3UGNNSWRCTWEyaWNGSjdVN2oxV3NmMU9heUdjcXpFekMzaUFXVWE1Q2pXYWMzaXYwN0NTSlJJbUdGUGJpZDNPcjVXQ3dMZjIrNEoyTHNiVTJVRmhWU3dUckZxRHpJYzRDbUJOakpEV2xWYlRhRFFhNG1Za1hwZHNreUozZFRVZVQxeEd0bFRJSnVGTU9HbmhPbEhLa2hORUdoSno5QmwrakFsRE1Db0RRbXFaekJXeVVWU0lQSFZjNjJRRFpnOVBITndGWlRERWtJa2xtZ1FpWUxCUWtENEhZOVZvckt0YUFvU0xLQUZwTmNaVVNobXdJTzJzbFJXVE5qV21WbEI4ZjRSUnZ1RmV4d29xUTFaa0JhdmpodUppM2dvZHlmREpLd0x6QUZEdm9oYVdoRFJpSjkyalRvd245MzZ0dXdUaTNKbFlsTXR3T0N5dDE1dkYxYUJsQW1aQTgyb3RPZElHQ3gwV1FKb094Ni8zWTFuWm9mZm5sRGxvM2IvSDlyMFNJRExtd1lPdUpjOWRhZjJ0V1JLQUxhM0RWOXBCR0x0bWJ2YTNwQzRhSjYwUjZYcWJHYTdSKy9lVC9kNVFxbitvOG9kWTlXQytwdXlWMDFoaUNId2NvMjRVcFZGMUhSMFNtdjE0SWNxVXNOQmpwWXJhWG9wQkY1SmFoNmNxT2svSmFGWG1wOGxrMEphTWdoQ2tGQnZRRFB6ckZwUXVBT0lzYVkydjkyWXdwMTBnTkZFcGNyZGg3dGFlTUxSdFRNa3hHeVV4U1ZWZ0ZTbVhaYU5Qc3hzWStJWnA4SkdreHBPYkFGOU5kMGFXMFBQd25ycjhIakNiQkN0N3BjcmROeStIMjhtNlErcFhqNDgrVU1IS0MyRk5qMlEzZWYrM2FScUh1UkQrbWIvNVNlZnc5NE1hTUxDZkdWWlpDU2Y2UzQrSmUvUGhCK1NtSzFKZk9EVTZFMVpVcTVNdDZ2V2M5emFPVTlWbGtndnE1SXpoZVhxTGhZM3A5ZE1QNzVvLy9jWGhMR2VmSGV6YUs4OHpKVjFmOC81NWk2cjY5ZVFmWlhEMzFsNzRwT2JqZXJQWmZSazNjNGZ4L0xVeGVZZ3RiTTd1dy8xcW9lOXpiWW5wK1R5TUI3ZFcwOS9CZHl6S2JxdGVLSGtzR2x5UVVGYkt4ZDdOTmR4ZEVrWkFBQkE4aWxNUEd6dlJTZ0dCRUR6WU1Ybm5VRnpSVEhVU2dOWjdWVVQ2a2VBZTI1cHFmOVFYMWY4NHNXRGlJOVBIRWJVNFpXdExZTFBFVDZWMFFObTllbDlpMExROUhlOTRRdkNsdW5JRUdpUmNSbXBQbVpRcERRbm1GNmtoQUFQeHZ4OS8zMy8vOThMSC8xdFNOS0lmQU1CYSt3OFo1QUY4UEcvOXM2SW4rZTVzRGdHZ1lBQUFFTUMvSDhnanQ2dnIvMGE5VTc3WFgwQm9LQlZDZW83ZzNZU050NnZWUTZXZDRuL3dsZXE5UWxaTlptMUl6eS8yeXVjTC9Bb0lSeTREcGZ1TVEzMndKTXJQNkNMUFVEZmg2dWVCbGxyaFJmQWI4SU41VzVlU1ZjYXBPK3JhUGkreGJ6cmZYYXpvN09kOC83TFkxUTZnLzU2bDBwZVpCQXFvL3I0dDRGOHkzK2hpQ0dlNG5rQWowK1hXVWdrdS9teWNmVjJ2eEUwWkR2cTdUK2FVdGhPVXpWZjlPSkFWV0FtQXJ5NXZ3RDRuelNPZmVZMmRwVXR0MithQWZaNnFkME5sTHNjNCs0azRKV0Z2ZjlRVHF2dEdMZVJqWmhPQzl4WjUxY0wzc0lEOVE1VWpaZHV4MndXcWtLcHRGR1VJTFpsSEx3clpJVDdGVUpjaXBCRDhmS0U5dSs4LzRpMFg4dHZidk9ZRTNCQ1BqYkhsSGp0bUl0a3h2aXNpMm9FdWZKeTBJUVlOekQyNm84K0swYkZzbDR2WS91SUpRSFlvZU44K1dRUTZkd0pQUzFpSndrK3oyRlMycHllNnJjMHRiVDNCODFMZmgyUzdoaGZVbXJGeUxxMEVvbWlJYjUzK1lLVmU3NUxNZEF3RGtKc0NjLzBTQ3NUc3hVK1lXbS9LZXVmSytXamNzRjdaWkZ6YmhURWozcG41eXhVdEQ1VldEc3N1ZUN0aWMvQzJNZGZJNTd6STlyMlFIdU5TZkwyOEp5bHo1ZGs3RW5JUlAwdnRYd3h2TzJEck12YXJ4R0pFcTVYWExMK0xGOVJ4d2VsSWRoTngwYlRIdEpvUlBSS1VUaW55bFpJRTRFOVhuYVVUUURnb3hCMk1BcEFuU2tOSzVKN3U0U3ZCdG5PL3NtZS8zdDAwQXViSi9NSGZSK2s4WkVjRnlnTUFCTkNRZnJRMkZJd0R0VHNCK2g4Y2c4TUJDSXpEb1NZSEFKYkJ0d2JFM1hzYzY5Mi9OT0RVcmpZbEdrZzdGOUpBa1U3WElLQllXNE1EM3A3ZHo5SE1NcnNDQXJBcjcwSStmb2FjM1ZlUThMWDVSSUoyUmozTUd0VnJZQ1ZHMHRBNktOV3dvZHJlT3BWYS9ualhVNnlIV0p4WnV5Yko2dTZnVTRkNHcxN2F6RUpNb1Y4cjR3RCt5a3Jrb0VaOTFGWnE1SEx4OWlYb0F3OCtIREFJTTJwcVdYRHd6b2ZYUE53YnNnMmZSKzlrNnlLRmdMc0hKa1g4UXBmbWpWY2RZbUZTZ054ZXIyT1pZZ29FRFpLQjlYMW1zbVJLRW5scklEUU5RUGxBVURZdWxTZkdXTWN4ZUllZmVxTUk2dkJDMWF4dzQ5NXZJYmZ3QldId3hWVXZVSXlXanRUd1cxVGcrY1pURGIxOWphcnArZlZWRWdwNWZYN3M0MEs4TmpucXJqbjB0WTIxRmRNYjdZb3BpVTF4VldLVlB5YXh5S2NrNWxSTmlHMkViUnZnVWlrb1RnOTFTWFNnYkJKY2JTMHdhNlFCcGlScW1VMUlwYW9rS2k1V01aR05pcnBHU3VHVVJDWlFwVFdxaEsrS2VhcUlxd281OFFLYVA1WGgwZEZXa2FseGNGdlkvUFczUXJyNnc5ZGMxM2FsSm0yN3JpdnQybHdWaFY1RklscGtwYW9CRVZaNVlWYXhFRlhhQk5hL3RwamZ4ZFplenV0dytEYytJUC9KLzR5eTROemdyZ2JJd1gwRUdiVkNaYVd3bHJTU2NqNk8vRTArSUJGaDBkMGkrNDV2MzdkbU5aWEs5VFh3R3Y4TWZQYmV0Q3g2WEwrQXBDbERXL0hqTmlLKzd2cnExU3M0MjEyOGJiRy9NdmlNYzVHbzVKYzNLbWRkWjI4bzdFVTdWckNHQlBaNE50TDg5L3RsWEYwYklZbU5Jd0JCQVE9PSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlF1aWNrc2FuZDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBREkwQUJBQUFBQUFkWEFBQURIVEFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR2x3Ym5GWWNoekFHWUQ5VFZFRlVIQUNGQUJFSUNvR3FJSUdHVmd1RUtBQUJOZ0lrQTRoTUJDQUZoVUlISUF3SEcycGdSUWRpMkRnQWFQQVpGa1d3Y1FBRm0rOFRSZGttblVqMi95bEJtekdoZGVoYlpTRjBSN3VvN2hrWkNaR1Q2aG5wb2JaVFd4eTZjT0RoMEVnLzlvMEZSK0hBOHMzSjFiM3R3NTlYb3pnY0NOd2pabXR0d0NWeFg0aExvcEVrVGFSWHQwWklZMkl0NGpmOTJYc0N2TVJMVXdqMlFvMElraGN4S2tZcTVpUXRjZm5pbXJwWjBqcUh0R25nSmJsL3REcXppaXFkcXdBem9RMFRMeDg2TXpwWDV0STVUL3p2OTY5NzVyNEFvb3NSQkRKZkJibWtXZ3NJdG9xTmJHMlhKOUNrZW9iSGJmM3pCQm1vR0ExSTVhZ3hHTzFHVGFvTkVGVE02N0l1b245Rlh2emYraXVpd1FFSy9XL2FobWlieitWZEViVlZSNFlOK1BkL2pjekNUTzdMbndXZ0lxRmw1UUFsMjFZQjJwNUtKRmxMNkpmN1plQnpmdTRjRkozcStBT0M4UVY2NnpvYld3WWhXd0QvVjVzbXZFWG96RW1FVFd2dEtHMlRQRzNoV2NwUW05blFPdlI4SkZJVmdaQmQybWJGYytJMWZZWHZ3TlFrWml2cXlQMGU5Mzg2eTFiYTlkM3pCcUdMcXdBWDNYcHpiVEg2K3RiWHpHZ2tBMnVKZlF5ZWxmV2VKU3ZnQzBKRlVGMWF4TmRUVTJIVHBTajdsSmwvbmVtcTcrOXZTTWsvNkphZEdzc3FyZ0dlZXRuYU5WUEw0eitkN3F4L3NneG5GMlQ1ZWdIU1VXeVg3QUREVk1LeG94ejBCY2h1WHhpMkFzQ2F0VFB5dmdPT05UT2JyT1NjY0d1Q1FsemhFYktCL3ZydHoxaXJIOGhzWm5hNzluSW5oeTB5UkVMQ0p5TGdXZjg2LzNBZ1REQUFBTHBqTkVnM0pOTlFaTGhzWkxveXBGdzFwazRkY3RoaDVLaWp5QWtuRU1JQlFwK3VKL2lsa2hpcHVDUEhlZytHOWxwRm9RL2EreE9LYzZIRkF4QjJ6cnAzb3pBWGFpQnV4Vk04Vm1Da1dtVjd0dDgzVXFsNmk2eHd5YXN3Q3BWOStjelU1T2Zqck1ySC9CMWJkc1NaSzdtU1cvYS90Q212S29KRWloWWpWaUtQUHJ5bUtWRGtQLzlyTU1Nc2N5MncwRkxMckxQUkRudGRjeDB6S3pNL0U2aUFwQ2o2TC9rL2FLQTNBMjhPeVZ4YUM0T2xUNWFkdVBNUFdmWkIwdkJrUnRuY1lBR2RoU3VXYmxvMjUxclQ5ZUNPQ0tMZ2ZiWUdrcUJKNlZReWE0S1RHSUhVZzVmaHFSU1lFak1IUnhJSEkrbEozRlR6dE4wcFdoN0REREZQcHRvcHVONDRKL0FJa2cxU2VPcGNpOWhQMFJUUUVpV093enhOMDBaSFUrVXBTMUdGOEJZUEVEM0FCTEYxbnFMRmZBdFNJZHM0dFpRckVKQ3o5VEt0WjJUTVVWaGF4SE9MVzNpWVN0MHBvRWNZZ29TeDQ3VkRxY3loa2drRlBZSGR2TVN4OVY5K3Q3Nk5MWnFEQjJtOVlZaG10bXY0ejBsNzFhRFgvaGN6T3dRdXhxNmsxbFVDN25tbnRHL1AzU3p6S0dRL2Z3UlVEL2NPTVFpRElwVGdqeHZ2Yi9QYndFOXNsQTZpakxJVHhia0dscDJtWGhmVTFPNUEveUhlYWJSV0l6SWRXaldaMlcwOThTM05KbXhJVXhEMEpTMklRcWg3L0RMT1ZGVVk5SS8wNzFkcUpGeTRnTjlTTnlQc0Fxa2xKR1hQYWZlTSt4YkY1cUlZYy9JQUJ4bWxtNEJjQitvUE9SejE5Q00yb3VoMm9HdEVOTjJBSkZyQ1Z6TzROb0QzZXhXU0VLRzRzak1EdE9WSlNnWUxWM29TYUxZZWU2T3JFNTlKV3RJN1hxNkZNTkI2cEJhRHptU0c3eDlQL25jb0FRQzBZTzY1QVYvOFZxUjVwQzdPMEtKUlNUaVhNSGVhanp2cThmRDZURWF0ZFNlRWRDeUp5T1A3SFMwSE5zY2puNEVVSDdJVnY1QjlOY0h0NlErUXhyNU5nSmxFWXBCYmw3aVdGVGcyU3ZzdE5McGsxd2QwRU9CL0hLT1A1MW9Ba0tIYmswY3hnYVVTbUVkenZ2UkVYZlhuVUVxeHFHZ2R4LzFwVUJuNnlTVWJpTDhia0lsQ3BPQzJIRi9ZMHg1cXB4VEw2TG1sVVBiRk9KTWpZUURlWUpJY1lBaHRLVnFmckZLSW5nbWpPSTVleCtXYlNVQXJDR053aElEaWFLUFFWMTJlemFkQTA0Q0hHODVMWW1oMmdpTUVvaGd1RkNFN1d0MlJucFpPUDBMQW16akpOSk1sMUZxUTJ3ZmJVQkpiOCtnZGZpU0dTVzFnQzF0WjB6N1FWUWRkb1RTeXNqU2Viem9sZnlvaFN0Z2dCZWVMQ0hPRGZNeW8yQk9TOGExMmhpZHIzWVVoUkRWWFRBSXhFNnh3bXMwREVnMU1SRkhBR3RHWkpMRTZDdEJabDVKMkE3dWxUUDIwTWpRWHUrRkdjUmhqQ29WWHRvd1ppdGhlQWlnYmxuT1pJUmdEQ2dZS2VqakJRb1E2aFJoMkxJYXJHV0I3eitZaXRLQXVxRU1BbDlRRElnSGM5UnNZaVV6QU5nTXNaR0xMb1VheGFra1ZyZkRveksyMTBaYkswNFpwaTZDRUJWb3NNT0FBVVZnUWl3VjJITWpCRHVLVWdKT0lneVhoRU1uc1VDbFNhYVN4dzZUcmlPbU1SVjI0V1NHL0FyMW9iOExOOU1GYWZiRm9xTnJjY0NOeTRraWpxSXdCSmxOd0JDOG1XVmdsRyt0TVordjU1T01WNEVpRjJLQ0liVlNzbEZvWk5wbUZ3ODJYV3N3b0M1NktEK3FVcm9JekttbnU0R0FaZUpaL0VBQk00UVdRUnBGcWhvVllDUWZQZHBPaEhHYVd1eDRldUZpSG51NDAwcG8xTjdDWFZNbmZLalIyWWRGaXNjV3FGcXVCZE52QWE5ZHk4dEVUUCs3MTNMd2NEUHh2RGQwYXcrOW5leWZnZC9ZMzhDRUw1c0ppV0FuciszMy93WktjUW53S2pyWGlNQUJwRHVDb2FVaWtHSVNoQ0FFRnlFRVY1SmVsRmNIQnA5TG5lL2UvYTdiTUV3OEtwUDZaWlZtVlI4UzVvYkFtVlpKV09NNXkwajhCQUJRWVFUVW1ReWFaR0VUMXg5SERDVWtNRzJNMkhFT2h1WDVIalR1QnBTcEFLd2lYT21zcUJxREFYelFVSXdaK2ZPQkh2Z1poWWhQRzMvalZ5SXZKT0RkQklDMGpLNXNLbk43NnFVeHNJNVJqdEFwaXZ3Y21lQVFLOUZZS0dzRVN0Q1FRb2c3Nkc0WmVtcVRKVEFSVzFEOHlCVklRQlZNSWhhWnUvVkg3aFNPQlJGS1JtalFrU2JrZ1FIb2lyWXpoS0ZYWDdMSUpvTEM1YWFuaTB4Z1dMZ1JnVGdsa3JPYTFXTUp3blE5WHpsY2ZtQURzaFE0SDlFb2VueTVTb3JIcldnOXRzMHBJN3YvM3NFZXdBYXpydUMrR0NQQ2Z4cmtUOUNZQTlDOWJBNUJ4U0tLM2R4MEFZSS9leWlxbXRCdUFvMHRjTnVicjgwd2w0K200TVBqOW1LYVdQL0ZKMXRsdFBkVXpPNEcvaEw5V2pwVE5zbFZ1SXlmSTZYSlh1VmllRXdxdDRkYm1majhBQ0NKelNmZG40cE1vNDNLc2tYV3lzUVZwakQ5U3dtMEY5QVBBdndPQU54MnV2Y2IyQzl1QUM5K0VDODk0enpxZkdhUDdLT2Jocm5NN3oyMEJBWUJFUUg4bmdON0s5M1oxZXVWek5QcW43VFBISXZNY2RkVjFpNjJ6M245T21XV1QrWmFhYVlrTHpqbHZnV3VJaGlSUXNHYTBtb3RnWUdSaVpoRWxXcXc0ZGc1T2laSWtTNUZtamYrdDlRQUhva0o2Yi8zZ2JqTDExa2RmT2JRM2dCaDY2bXU5c3Y2M1R1ZFRvRkNSWW1WV3VXZTFTL2FiNjdEampqamh2cHNSY1V1TkxTN2I3SGJVdU91aTMvMFJEbGZjMEJBZXY2bTExVC8rOXErRkJBeEhoU2RTQ3hBdVJLZ3drVnJRMFFzaWE4MnFwYlphT2FPTkJDN3hGS2xpVE5OZUJyZU8ydW1nazY1NjZhNkhub1lZWUtCQlBFYWJZS3h4SmhudnJJbnk1Y2lWcDhSVXBXd21SMDJFalRiWWFaY2RDQTIvRUFCb0RRQnNQOUJ5UUw4Rk1QOEE4SjhETndjQUFEWjJGYnlFaE9NVUxDV3FvcGhJaUZGR1A2L0pTYmJubkpnVXhWMUR6TFFBaENKSXVFYkJvM2d5YVNVSlJTTmRFTEhTSHRJTTNISEdzU054ZmV3RW5jZnI2Y0NnTVdsN2phYUowMGV4UXRRUjlpaUc0Q1V3OGdTaUpubndTYjJyc0FpcFJFbG54Q1lNczZjU3lJK2UyUng2RXFiK0NyR0VIbU9vTkFPRnBKU3lObEFUaEhUTlBvQjlIUU9yeDRqNVhrek9nNFFPQ1dtY1BqUnhUQzNVOFlQb3VVVTdYN3pNdnJraVdvN2RKc1puUVFBRTdubjEvdDVmWjJSRVFtbzB3ZWl1dkprTGxnK3dST2tzNXhTOE04V0xsVG9FeEtSSnVONVpsdWM5VnhtR3AzWG9oU0ZaZzYwMmgwUHBmUWpnSEhMZFU5ZFlHWkdVakY4eEdQYWZwQ2lOQnE5VjZpMDZUMDRZWXA0b0sxNG9jM2VsckNpVkVZRGMvai95UVNuUE90YUpuekhCYWFoY0EwQ2ZBQ3E4Uzc1WnRBazBwVG5LTkF1dU1RV1FiRml2dG5QVXhuTUxRT3UyZkVtTmIxWnE1NUlNYzVRWnRtcDhWeWxSK0ZCWW95bFhwWDdWQkRBbWRtSXRIVjJGUnd4cTNmNHpKb3g0dDNLWmZwc2p5OHUvVldiVWc3WjFSOU1ncGJqSjR0bTRXQURNUWs0NXdEU2tVUmd0eUVtdzJNS1JUV0RGWmROL0ZHYVJmWkhiYTdPTFlPL3VUNGlIQjRxTWNxdEg3S1Z2MGJxd09aRi90ZVkrRFE0b0hVUVloUTRPVlFvYlRXTjFTN0RCOFBYYyt6dXg2T1EzeE8xRmRtRXFBL3Z5aUszdHVhSFNSYVc0ME9ZMDhaVkFQVFdNWHdLNFpFT3hCaEM4ZlR3YXNHaHhLU3Q3eVFsQm9UNTBvcngra05xb21HK3FJTTE0VHlYVmhTSUQxMHVFSTJDY3VGT3E1NENjUXZOengvcGNmOEdvZE5ZL1MzeG1hVit6Slpzdzc5aWxlOUYvVThyaFBWQzRtUWxjTURyYm9EWVM2Q05iNEFLd3hwK1JFRlZTMVRJNlVNWnc0d1lXUU5QUVc1dE5UbkZQZE5ndzBGTStkcWdIZzgyNko4c2lWaTN1blE0VGxzaTlnYjdHNDVtV0xuZC9EeisvUm5hOFJMRWU1OW1xcHI3U2hvcXRWd1NJdmZtR2RWMnY4eXBxalU3djVqNm5yUDExMXBnc2lMeE5qZTFXSEI4Yk1qcFdKODFkdFMycGFud1Rnd25OMjMzV3F3NGJESlNaR2xCSlRTRGxIZU1ZWlhadE85ZnVsV00vZTBETjNaek5GYnpmL2RzMnVYSUxLZ3hka3dOOVdFVFp1N2xzNXJrd3dSS3d5VnVWMkZNMmVhbGZHVmFoM0xVMHI1MXRXZk01V0ZIQ0ovV01ZWVVqaFd5K2NFbzhleVdCTVhFeldDVkxreWJZamoxdnJWSmRuT1JYZXhzcmdVRExxYmFoMm9pRDg1N0VTR0xhdnRrVExKUmZtTldFOGVhRzI5MFdtNUlzWGk1VGg3V3dsTzhjM0xTbjNldWk3V1I1SDh4RFkxMkxDYkN5RXhWKzZ4NGYzdFF3VURHcjNodGxPZkFHNjMxOHhrcnptc2picXdZdEVWU1c4dlI5S0xlaFo3b0ozb2thNWpXTFZuOXBXcWNybUQyVnZHT2FKOGVuK0tpT2RVYmtQWEpRZlc1eFpiN1cyUmVEdE9KVGEwTmJOend0UkpQQVo5UnRxU2F4MHFHbExrOTJndjFEWDVPVVErKzNZNnUwVUszUFB5RFJjOGVJbG1rU2NFWnAwd1MydzZ3Y0szK0txbkozNHllTmFidkY1L1J5RFIwajc4SHc4NUhtekdWT1MwV0lnOUpBZWxnTzQ5d05rdEk3aEEwVzlrd0p1ajlDRWwyR2FCTDVxa0pYSm1nc3NTNmFnTlZ2N29vR2lBZ3hhbCszcXdUWGZUaWxyQ21sVmxvOFkwTE0yRC9BTmhmdWlTSnJOWFZzQngwV3RQYmtWa3ZOYUhsa3dnQTFjT1F0SXl5RVVnME9ISGx6ZDkxUVczcmwzVzAvczNkd25mWUswZ0NPV3p3UHRJQ0hWbk5YN2VCZ1JuUmNHUVNyaml1YzF3bndxV1VsMTZ2Ulo5VmhYU2VNSVMwa2ZKQzcyOGtQay9yMkRFZFRQSTkwR0tBSm10dVJnMHBqSGFFNVMvbG15N0hRQ1kzZ0Jxa2Jia3BEaXQ3S01QcDlMa1FRU1ovUDVJcUR3UkNlUFJ6N2QzNjBPZ2FGVGpzZU41L0RPOG1hNGxDeGw1MVdjcE84VG55ZHVGbG1maGZ6Vm10NmVjaDhMZW04bitnUUtLS2hndzJFWCtwL0Rlc2k5R0FSVmdLOWtUbE9MVGtRSWFyWE1iSlp0YUVEMDZiNWJkSTRhSitFVFgrQWlRNUpkdHVjUTFYYUR6dkRGcTFzTGFKYzN0eEtRM3RRTGV5VXF5S1dWUTNGL3EwZEZqOFlEOGs2eWRkVkZhNStWcytEU0c2dUMvbk45Y2VudUVOcWxqSi80Y290L243ZitwaVllWVVwbytGWk9sRkd4UnZWMVd5NFZFUEdLTEpwWDdBQjN1Q3RMRjJibVdhSUJpTkY2aEI5MjNHL1QybXVkdElFMWZ6NjZUVXczQWJyUXJhbHdFRmhPM1pMTFpKR3pXend6d0xqRHMrejhvWms4NGdPd29IVUFIQWdMdzhYaDJhRk1yNjZqczVTb3hrdEpZQmVUclJqWDV6bkJrZG1JOU0rLzFocmNZall0ZFpyZ2JyVlRSNmMwNm8zbXVhQ2tOWmNqcmZQc1hsaXBhak5Md2F1Zkw1RVZTS0VBSGd6bzdFTXhZSlcwL29pSnh1TnRrbzBXbVUvTzQ0TmRVV3pJdXNOa2RaZmpkZlNWbzJ4OE9ESEg2THpUSHV6MnB3T1QvT2NCRWpKMVJValI4Yjg3NU5JRUJCdW0zQnR0NnpFb2RiMWhNZG9NaHJHR3FYVTQyQjBtNzNreUx1Um9hNThSeG5HaUt4bUlId3RnTlN1dmtBcXV2UjBLTkp3djM0WWU0WTkrcHZXMzVFMHRzRkYxZ3V1alRMVTM1ZnBVOER3bEFmUG5HN0gwM3pXOFgwZEpubXZKenlZNDV4OGxoRDZnMkpBVEVSNW14L3JFdDNtTnpxM09rYVV3SnZJZkd1K2ZxNVhmQk9IamFmdlFENklvd2hoYjluUWF4VDZKRGZTYjhWa3hybVZWbnF1NXJYSTVScTdSSHlNSlJpTkpuT0h0OGttdmJnZ3pZamduVG40ZHlleGNTek8zdlF5RG9KOWxXSWp1SXNSS1I4ZmJBQVhtenZzbHZNdWJib3ZUYW1jN0syYlJVZjJIMHlSakx0SnFlVHV5QWplOFlRY0pKQTFkY2R0enVWQ2UwL0VyaFlOSXd1MFlPekV0ZWIrU2xNS09VUXNFOXV1WnV2dVFYV2JYcFhsQ2J1dkpBUlhQeUFtekZHaEkrdU9HTUJIN0RQTzBvRFV3MU03OEFOM2hKNkVCK3FvMFlSaEk1OGJCWENJVUxJbXlnaFdWc2F5c0lTUUI1NmhxQjJISXBYek96TzlFbEZzZHh1Qk9YMGlQaFN4TlA5ZVZoeVNTSXAyRXpYa2FiUjdmZlF4a2VpVEQ0TDBGWUNHR2lOek1EZElqWGhoZHpYUHplUTZzSFV3RHlnZFVzd3grdW1LaXE0OW81UXJ5NEVKUGNodlgzMm1KMUVaUHZMcko2cGNhVnVtQzNwUXFYemoyZXZYNG9wVTd2TnUyYStPVitlcnh2SWoyVWJsNkEzblJza3hrV3c5Zk5BZWpWd01JRTVSSEVTbzV4cjF4TktzN2NjTjhOdzMxTWYvOXRSQUtORExIRDdjTDY1bW1lcGFvaGtuUGVMWW5jYitaR0FWczNRbWVzNXlCR3Y0eGJKUjdSdVdqS0lXd1E2bGZDdEZ0SEFlMFdDb28xREMrU0I2SnNkbnBFbVBnQjJnU1E2SlVpOFZGb0lCaFYza2hDaGYwMll4ajlKdmVnL1RLcVR3ZzNlSFBPNXNWa1dEWXZHQ1NhQnVxSTduYUE5b05CODcyTmdvdUlRYmtFckhiODhKMmROalM2SnBEclRmVjdyaDhXcnhrcjhjQjNaaDEyS25NbUtxSG8xcE9lbmh0RjQ2YXpFOUxhODd1Y1J2M0pSMnl5UTdtSU5sZmRuR2puVUpldC9GMXVqZStxTzZTdzZ2WVNwNkRSc2lHZ0o1QmN4WFZvM1I1TFYrWVYxdXV6aHZpWEQrYWIxWkdORHgyUHg0bnJhbWFjYnRxSEtvY3l2MzBlekIyOEdya2pYZTAreEFrQndhVE16TGRZbUZPOU8vZzJHSWVIQVNWTnJUejRVeHJJOFR4S2pqVkpxcnQxWHJkSTdETSszRGUrQ1ExZlc1L1YzVFhIZGZ4b3JFd01QVGJ4cnNSYVlwbmxLSE14eFpIcytKY2ZNYjdYR3BQQldtTGZ1Q1EvZlN6ZXYyUFJhdUN6NkFsbC9CNEVDRXZ0Rm85QnJHRWRacG5JT0krTGdnbjVCYnFPd1NiamkvMWhxQmEzNG45Zko5QUQzVThpYnVhbUdHZDNXMUx1UmxOb2h6bkxrdWlQZUQxajNDRERwNVRWTkdBK0ZoZFhvYVlFeU1UMHFUeDJSbndwczhJdEI5ZkhKM3lhNUZlZ0NsZlAwclJsbDlkN0NaMzMzai9oZzNHMk10YXZNMWZCVU5Cck4xVGVGV0Ywb2M3aXdDb1F2S21lU3BoQlJlSHR5dzB5aXc5MG42eHBnQ1l5a21vTktHaG1oMElWWlk4S0JrTzBXMXBxWUlpOU1pVFZHOTRKMmpoK2N2T1MwUnNlUUs1Z1VEOEVBcVAyQ2FyOUlqVmh0VjNzd1BWTnpUQjN2d1lDa2lXQlU3cjczTjQyQkFuNk4xRzlmbDlOWC9ENUErSjNrOVI2TlVXL055YnFUclZzenc1emZPRDhObzFvdFl2WDJTZ1lOWDEwRGM1WW9QdUpMVWo2NmRUdGNPbC9QRWJZWlBocmkzK08rL0U5K045amJlYVFyT1E1Z0oxN3gwQ0oybURvWVlvTkJsVE5XTkh1enhhL0R1Zmpyd3ZyRzBvZytZWWJGQ2IwVEJELzNvN2l0ek43ZHpYR29kejdmSjM2eHNET2t5T1NBNDROOHJIUHYvK1RNYURGcEpuNDM0Tjg1TS9tY3ErQ0tvaWdoeXdkamtsVnpTOThIZzZRR0JHVitrU2FhMUswbHlSNVRrRGNETi9ZSlRwUi96ZmJ6U2trNWV2RjdSdWRGWUtKcW1JaEVpUkVpcjA3RkVCTmF6NEVLejc4MEJOM3FLOXJPYis0WW8xOHo3NThuY2tnUzZPK1BnTEhaayt2WGVyN0lidThCcXRyYnMxZjMzbXg1MkhleVpKeDNvaUc4MFh6ZGJBNVMvK0VKN0x4RWZzMmRQejRZZ2FzZWh3UlJhTEtMVGtZZ1FKWGtQUmJBaDFqcVhtU3JkenZnbWZFKzJUWi9mbTRqdHkrZGorL2ZHODBpUjI2bi82NTFqK2JPZEVlVjNlWkw3NFFVaXNJYlJyM1NKRjVUb25XeGpmaUlHZWQzeGFjdVhZSS9YQzlYdGhZQVlrRFVZM3QxRWdUTk9Sa2dFOFE0VURTZ1VRY09IRUF1Z1BKNkY5dlVaUUo0bkxkUXIvKzlWK0dnYTR2c1F4Q0ROWDc1OTV5TlhwTS9mV3hBbnA5dytDNmpOSW4yNVU1b3NxUUdyR0hYcEJPNE5qYmN1Nnk1ZmN2Sm9kckh3bnBXYUZYV0RWR0ZxWGYzWld1Tno3RjlldnRyeWpHNWhhVG9IUDdYdnhiV3phMmlGZ05sWHB1S2NIeUs2dEhMNUpraXhTKzFqdXVudXdscUQzNy9XMEYzUVRjZElMVVcwR05nM0ZjMmtwNk5LaTVsQVRtZW1vQWtJVDVyWnhYejNmZG1wK1FObUc2UkZ4eDNHNnllWGlvcFprVnpmbGRZclRmVFp6eFk5Z28yK2dZWG1ZSWhTM2NrdDZFRVBlelkyM1pIaGpHMHdQdUh0MXpzejdZc2RHZVB1WllsZU1NSXNLYTBtYlRGcnVsTUd5M3NtSmVSQ3NwZjhQdXpRNEhJUnFkYUlYTGhFODY3WWdZQmRudFhrYzM2YlUvUDR3L2twWlQ4VTlGME0wQjBob0Zub05hMHVjV3d4Rmk1MHM3VDE1d04wd3FUWmZCN3JMVjh5bWhicWJjT0YvamFkYXZVZk4yc2haMEdRMXBiNE40MmtkR24wY1ZURDkxL1dNeWNuNWVxSVJULzErZEZrYjB2VDFnT0p1VnZyQ0lmMjJVdUtwcDkzNlNGVzBxbHNxRnVtSlBXT1RDendVNzRYc0tBK1dCeG5xRE5Wa0FmQXFJM2pXcXNoeW45SE1hOTlTdlpCbUd3L0tjQjFlalF5b1BGWTVzdS9PRVBENzBUeVdvUS9pZlZSM2w4cVRTQXV2VFVYNEY0U2VZMGFORnpRQWlWUUZnM1pEN0cvMzBFS04vcGNFc0FCU2pCWFk5ZGk3NHJsWHBKYzRkVjQ4amFJQnJBeTR3ekx3SURWWnUrM1dnZnN1ME5wT2NZd3czdlhIWlFjclJDM050UXNMUEdtRU1YMUE4c0gzMFladWdCWXVqeENMdzdlKzVORFRkZFE4ZWJHQitZZzVhWDBLcHF3SXVwU0xyM3lENUpuRnhUdmZhbnA2T0cwKzErZG1GMzZJZ0dzdzlCQmNQNTNuZkhQN05uM1FaWHBzeE0rS3B4RE5uMStBcVdCNGtkamJpYVl2dlBxUDdXUTRLL0RqRFVaNzEzL0RiRjdCR0tTS0owOFgrTDFUUlJ5eCtWVzcyb092QTEzQVF1clh1MDQ5dDNOOUZLWUU0VzNjNkU5NmEwMXlZZHZpNzcrREJSWHc5bVJDLzdMUEdKbGtBKzdSNzIyMWNHUWZjV295NlVLY3JmeEF2QWZCeUQ2Y05hY3RlcUhDYWUrcENsbUxHdEdCZ21DU1A3akJIUjF0ZDBYOTR1MzYxYkQrWWwyZ1lzOTl0a29BMXVjODY0UGZCVGljYXBxZXZocVhCZmUyYlBsaStQMUhqTVpGYXU0Qkd1Vk1HbDI2SWFLRGxKNHo2OVhSOUd4eFhIczUwV2JMYmk4QTE4UlRlRXJoNTFXWlpUMWhUVEZncHg4V2o3U1BpcVQ2c2syT0tIODVyNEM2NFVzREt6cW5CR1hmVVVvYUY4OTZuVUpua1N2K21IdlJJaUtNQmhVUU9uenpHdkgwcTkrYXNtWTlhcHFacXdXYzhhR0RPTUVNbGdlUXFCU2gwVWFRRDIySTdzZWZUYXJrRmdMTm5PcEEwZUgrcXdkNmcvb2RYK1Z5V3cwQjFhMW0veUxQYzVWUVo5ejFaSk84TFhiNFlvcmJkMS9XTG1lN1VFQjdCcjEyRmNGZy9aVm8yNlhJc0E5SnRpQktkYXpsb3hGUDBRUXdPSnBRVW9Famd3OTNWc1EzcHQwckNLTm9oNm5KeVhWR2NPd3dmTWFkY1hRK1VSdkgvNTM1KzAwZVk0RWc1L1pMK3dmVXkxcEdKVWtuWk9qbmJqRW1IRVlodXdZMHAreG00eFpNMUswMncxRFdjYzhic2luTXRtaVpXTnl1Q0JaL3RuaEhZanovZ1pPcUx1c2d3QnpRVmR0UEZRWGVZRHZIbFJ4Y3d0c1IySTFqUjlTS2lkdk9iMnBrN0QwL2tpS3VPWHgzcG1EdzVGQUhSYm1YVmxaK2FsU3hlKzRIU3VkaXhmYS9QSllZNkVlbW8wa3RKcjY4aDUyWWNHS3ZzSDlEN3g5RlY3TDlTN3dkS3dLQnVYbUJXN2ZiTXRaMEJJUnpGbFBjYjFtWThudHBzWDJZZ0F1czBjTTBxeFJMUFd0MTFLeHZmY2pxcmdDOWFyRTNtOEo3ZmVKUmNRVkpBZXM4NHI2dS9tZ2JVbnFkei9nMEMydUpvVjdrazkvS1dDVkxvd1c1T1JTN2x2WjJqLzZxQ09rZXcrZjUySTJyeXFqeDQrcTI1Ly8xeVQ5dERvL215K1NsWmx6OWxyOE9kZGp1Q0hHbGRyREJuRUdFd25KWEJYbWRKN1hxK0pLdEJQbVBSZXBld21XOTRST0dWRVk5SzQ4K3I4aUVoQXpuVHhnVkdkRTlPSzBFWG5TQ0ZkeHZGOGE0S1RDMU55OFpxMjc3Qk5MaUZjQ0hNRDVIZWhZdGNoRCtoWjc4RldCb0JBTitraEx5bXl5QUlHV2NsYTdMVzgxbGdpY0NRZHRkaWE4TVBBSGRrSHlIcUczcEl1aHVldk0vYml4Z1B5c1plNFJ3cjRzNExjdkgzVzVCRThnVi82dzErUndlak16Q1IrSnY4L0c5RVc4UXorUXdlSXhaS0NqQStuWDRjNnRuOVlhZlVOZmw4VStjMVdNZHd2WEE4ZGE2WjNSUnVEc1hhZ0FWdlQwWng5UTZway9xc0NLU0F6ODF6WHRmdEZmRUROVHcvbk1iaDZRV1JaVFk0S241L09GWGZmU0FqLzc2YkJBZGlZb1JGcDdjMk1yd1hCVFp0NXBEMXNtMkdJVmNFZnd0cDIwYWRmMmlaVVhJM3dEV2xDQVZaSTVWTGY2Nm1Nd0dZQXh6Q3ZsaUdvKzd2aUwxOVlqNElLejA3Wm9zTVBXL1BxZjAvckl6cCttUC9PN0p4eEgwTHpUWjh6R3RHc08zRUlUNXg2VlRyWFcrTDlsZ2U5VU1MUDVaYmZDdk9ZbEduT2llQnBFblJTQnhOKy9lQk5mMGpidHdFRTZCYW96VnhWNHFXT0xRNys2aWtmZEcrQkt3dXhDeUkrcjJiK2cyTk10a1g3UjdjZlZES1dpL2dDRWtEMWMxS3k4c0xYaHZnZU9Qdmg0cUpaNkU4R3I3TlRiRUZQYzJ2RHNXMlc4bWxqdEZwNmNDWldvc3J5UkhLM1E5RHZSODhtMjlOa1ZuWHVyaVFJT2lTc2FEcCt2MjFNNGZsVWNMellldkJBQzlyK01WcU52b0RSQ2dWRmpjeWdOWEs3Q3hZRmpiL2xvMDdWdlpRdGwwbXpuL090ditkSjExZHRyd0hrMVVBNnRkQ3dlczNrMG5VMkxTeHN4N05NU1BaZXRzbWFNdWtKSG9QWGRDUjlINm96b3hHbXIyV1l5SlpMT1pGQWRndzJrOUJDejNYNjkzT0x5R1RzeTNxK2VlSkpzZTkyeWFJZzY3MS9mOGVnbjRQQU14UUsyWHcwTHZmZEo5QjdjK1FkU1RQU3ZsQ3JaNExoLzJocW03dGJhWERiekFsaHVkU0VvN0FldVdtcXB6eTFYS1YxeTFWQnJwS1JMcVZTNWxacWVOOXE5QnNUbU5Vb1FNV1JOSUlHR0kwWGt5c0VTY2dWWm83SGhZckEwYUFsU293bzhGVmZ1eStYRm1vcmhPRUVvbjh1NXhzRjVZSXc1Y2lvbm9NSUZoMjFYUjBzSGl1dW1EdEpmdytubjVoU1ZGV0wrVjlSVTNGWXlJRkp2U0d3MnBOVXlpZ1g4S3VjRG1qYU9PM0J2bjA2WHNRaGJmT2FVZFBibnVTRFdtaklrazUyVFlWMWFOSTNobGtoV3JLRVpQaXdER3J5UGNQYjcvSXhsejdhcEhrVGgvWVd2Zm1zc0Y2UzRraGJ2RDNxSmtRVVdYQlhuZmlDVVVraUpqUUpsOExYdEU4cWRJNmpGYmRGMko3bXUyN3lYbDQzejk3QzlnMVNOMld3RW8rRERrT2JQZWxwRUhYa2QwbTNETklrdWpWTktORjlUSWV6ZjFxeHBwZENJbWhmOE53bmFydjRQL1ZPTU0vM3dRY3c2NERJSnUzQm5qeER3SURVak4zbmFNbW9qZXptNlBERGNGeCtPbDhPNVF1dzE4R1FtNEM4YTVoL1JTejZQY0ZXNmdCVEYyVEdWeFZRcU9uR1pJYUtHWXlhZE9CVXdXaHdwRk00WTFNcFlBZ0hYcS9CdGVPK2FLYmNHSVVXZ01LS3lOU1I2Tmg5dXVnWXM3Q0NxSEN6MHdxZ3AzWWZZYkhuRWxFWmhnV2ZKUDU0M2ZkK09TNDFJTXFzekdqTTZKR21VdnZnOXRIeUVndkNJWlRLM1dFSEFSQ0xtY2lkaVI4VEIzaVFCcXoxQnFScVdKL0RBUkU4UzFKL1U0SXhMMEVXQmdiNkkrUUx4NXhlUHhyZFY1U2ZyWitGMkdFanNVWlhWTkhnYURNZE5Xa3NRTlovSEFLY05HbVUwbnZFRUJJK3pPbUUxaXh4WFBtNG0xYkJKSFQra1ZIa3dvOHBYRUFrYXNad1RXQzJBRmZSVll3MC9VWTR0THExWXFMU2paeXVhUjZqNXdKYjRBbSt5VDNHV1ZYdWMzWWdOVTgzZ2JibGM4SktzZlVqUTBMNWozcFVGY1hJR2NvQVYwQzd3K2I1cVJpSld4QkVya244WnVYZXlXQW9XZmVtbEF4ZHB2TGR3L3JocVhidmFzRVhZOHNDMWhmeUtjcEI4YjdsYnlQMVhBZTRXc2NMenhVTmJkM1gyMU5ZM1BFRnp3WHVMdHQ1UmY1aUtQU1dRSWpzSXZyL1ZyWWJ3L09DN0NMOHZNL0JUSEhaNTVZYUpNcERPdDdSdGF0cFpPZHcybjE1RGgrdExqUzhBZnVYalBSemV1YjlRQnpWdmRyWUpoUUVVSDJta3YweTQ5OEJHd25mdmlqdG9GYlUzU2RxMlgvZDBTM3RMeXpTTDkxTno4Mk9nQlBnc2F1K3lnVCt0T0FnNTFIQ2ZYZEdmeW5HcUVSVHZhOEEycVBMN1BhMk4zTHMvblpkQUs5OXk2Q2syNTY1RExXM1V4TEpSWSsydDkveHV2clBaMHRwU1diNnQwcmZWMHJTUDA5SFd1cTYxZGJ5MVRRdWlFcnhNcEpmY3ByZERGVFVQVmJORk56dFlhajFsK2RXOG41cGJYdVEwcTF1YUQ0TW5vRkNpMzkwbnVoamY5eURZdnh5eUkzU2FGMTBYeDBybEppdzYzYTNrVTZwMUsyZHdrdnl4V3h5cjFjOFRPa0ZPWFdLS3FqM2JpdklFWDJIR2JicEFZdVhEanFwRDFzRStuMVp0bmNSSnJtbWdjbmlWRE91d3ZQV1NDdXl3bm45YVk3VXYwMURONnhEVHQxcWxROWU3aFV0YmhNS1dwY0pFQlNGYjllVVlYQUpINW5xMGt2c2hEbTFGcldXMzhvN0IyOUJsejg1OVd5UFBBMStiandhcCtQeGtodGQxSUtJdzlmemx5azdWMms1TW5tdVZYc210dFVOenJIM3h0dFlINkpxak9LSzJRK2VtdjE3NVBxUTM4VCs5bTZTN3lmVThxOEQrQnhoVFJlSEN2alRuV2tBTTkxSlkyUWtiNUFHUFFxV0pxQTc2bmx3K3cvZTlPWUJpcGk0ZDJrdEllT1JPdjFCRmNXK2FnQ2hBM2VzbEVYVUdiY0lHQVJUYzRuaFQxMUJaNjZYWHpURkxGTnlaSVQ1TUxXK3J5Qm1vZFcyVnJFWERSTVpxUkQvMnF5TUw3MlhnUXBHRUxmTm96NzBndm83QmtCenhXcDZlaEFWYWNucGV0WGtONnhKR2RnaUp5aHBKaDdhQ01JZ0RNY3BSVDhxaWFMdkw3R2FOVStabjR1aWxyZ2EzWW9NK2lLc0hIcWo5R3U0bmdycEZIb1dydmxGUVBzUGNweGxqcU9Mc3ZkbW1qYnJlbXNIcmE5K3VTc0dEK29WdXBic09iN0Z4WllVNnNxeFJiZHgwbldPeGtra2l1czR2bncvSzBXQ0pSNXVJNzVYWFQzMTRCcys5RFRuQnhieVJtTkc1d3c1QmdXUFVKaG5ac2wyV1czTjUrM1VyZGlVMExpcXhJQzlmSmh1Zk5sK1dUSnF1MExjU2treFg0ekZBZTVSV1JMVmNQajVUTTFORlJ0UDViYmZrYy9ZYk5OVUlpTG5wVEJMVHNyc3BnQ01aeDJuRmFrTXZKdWNvaWp3YVVNYUtlTDdRUXVlajZLTzIzSkZsUUl0VXVqWXpPL1NZdUUwN2ZidklSTkc4TW5jcG81ZDNsNWxLMGpJam1kdTQ5WTliWDZvMjZZbFpjN1BmSGY5MHZNZG1IbHdaUVR5SEROWDFHbDVrMWo3Y1A0LzVNTkVwNDBRSnpUTTNHTGl2MEpyZkJSNHVBZmYwcUJCTVcwS1U0Vm1xMk9NcWNMTWRURGV2YVBpQ21iWTR3WXlWTDFnWk5uVlJzajRITHBhQXVlYW5xNExjQ3BsWHBSS2lreW1VNllhYzRldStFSW8rMS9ONStzOUZ3aTkwUVAyTnJnQ0tHcFRETERLV0xhUlc2a2JQYW1OM0VabUtSSVFReWRVZWJFUzArWEdxZHFoYmdNU200dUg5aGI3d0FhcU9JVjJDNEtQVXZtSUVMMUFQZkEzNEs1bG1peFYzNkc4MEtMc2JVbzFDbnVyQ3lCUkY3a2NGUys5RXNZWC96UWZmOEIvYmZkUGt5enNwTUk0cWpwbnNYcnJBbzcvMXFkZm5TMFRNM0FhUzJVVHZSOGVMVnVMZWp1d0xsSGRid25VV1haRlZtb3hobmFMTGpqQ2JOZmlaMlFKSkxnaUsyOHFPdWt5bHl4WnlldUpQM0MvcEliUTZURjJ1aFhnYWNLWldGYnZnejNHdndoNWdhR2R0SUNIWmRBUHdQYUN6SXVqYWUxZk1kT0Y5MmQ0UXdXSHZPWDJMS0RKbGoyaTZOamZvaHFzZ2hGdXVHOWhLcmFYTjBvaFYwRU9rR2FMTEx6T012dWhYRTh2VTVkYm9jc1pvRE1sTUlUTnkrVFdpMEpLSUw1RFUrMC9wZDBmMFE0bTZDWFdwOE1IUUkrVjluaG5jd1NES01jb1EvY2h6Vjc5YktjKy92dmc1L1NGd083OTA3UEQ1dS9kVXl2ZXY5RDJqWDBaWmRBZVNSaS92ZjZxODNXT3pKeGlZV2hqS0g5cDZEbUtVZHR3MzVmNFN4cXRiSDdvalNjV0hGcm5XK0Q3bFltMU5rK0htYXlyd2RQUkN2ZlltOE1zbGp4b2ZFYzJNdURYMzJ3L01NK2lsdXZ6ckRad1RjZWx0dXA5dWh0MEdsNDhkK1FuSFcwNVVzanpYYS9ubjJiTnM4M1Q5RUhab3U4bnQ0OHNGT1BzMTc4OTNDYlhiMnNOTFdUR05qcFU0QU1PVHJMaFd5NDVQWHF1VlJxeE9WUVRXU0dOV2h5cjh5QjU0OG9KV1lBUFpYY0RoemNLTzkzKzhCK081Ujh4S3FONWNtb3lrRkNvMXJoWUZZSzJvaEdlelJ0UVZqRzZwOGpuQU9sVXBqK1BxYmNTL25sSUNOV1E0QzdCRWNQMU9iOS9ZbmM2dGE0STNMbkpJVmtiN05tSGRXS2oyd3I5WnpLVGk3NXNYSzFORGU1eGRZNG9wejhyRS9RZW5IL2NzV1hZcUZkbWJjUWpYMkFmaXRwQkVHcEc3ZlBJdXZmQ3JLeFZhdjlZUVltV2tqZzQzcUFMVGZKZHR6S29VeG54RS8zZlJPbS9SaktpN3V6QW5PYWdnU0ZuWG5wYnJJSEMyTE5lV292RmwycFpxcmduLzVLTGtzakVpSU1OaS9JaEVvL1JGWlpnL2F4WURLUy9ZSlV6clU3dGdoOXVEbTdqdHBDRklXYjg5MngySTJ5cXlNU3JlYnI5SXEyUFdzSjJNWHJ3ck5TSWgzUUE1QTIvWlVJSzAxZmJ3dm1ZRUY4cUdxcEJpTEdYcVhTOGV1d1ppTEk3VjlxYVBMaGoyMFVKUDkycVZGNlY0dlVRZFlzMzhsOUJWZ1NuY1lPRzdaVmt0aXRyZmZ2dEIyYjdRSitLR21uTmV2SlVqV2V2aGlCQ3ZVaUdOUGR5R2VBWEx0MEo0ZnBDYzJHa0Y5OVhUVWtHNFYvdHFwS1hIOWVtcEJ4Vm52MnVEWFhwZkU4bXNtbU5XbE9NWTJGK3d5VkRNR1NkQ1llUG1ZbTZUb2RPeUN6blQ1bkRJTkZIUUlpWDRZblU2b1YzcTlVZ3duY3lsT0dhU1pvK1hTYVFtVmp1ekJrM0dhS1FYUnhaeHVnMUp2cy8wdzJENGYxdnh5VVFlR0JaNXZUSUQrNGRjOHNkNFQrM1F2bGZBWEIrYUk3K1V6Yzd6RkErTE9aeGY1S0M4UW0xdmY4eElBZEJvVXpsMU5LUCtSSGRGNGZpcDVsY2FtblkzZDFTMXYxYi90V1BJWWk4UmhMMms1UTVuYVVHZzhUb2ExMmlUbUZtYlVBMFVUV2gwQ1RPbVMrcGlnSGNscERoeDhHYW92U1dqTFhRcjBWSUVvaC96MUtVVHRuM1hlT2c3OURDKzVDU1U2UnJkUGVtVFgvMXNpZHY2RDVnVmFWWnNKVFBuVXpzbFY2dkZVdlhWRXVuVkhJbEVjN1ZYWnBOTGJiS3ZNYkJzYjYva3MzK0xvZVhUVjlJUXNnTU45bDBiMmdKWm5QTnBPTTd1dlo0dVdiWWQ1OVJUT1R3M0pHWHBudnFxaGJYK0cwREtWQ3RnRWwxVUxSUGYzZXJna045UEY2NEVFSFdaUnQzRTI2MjFmUFNIYWoreFNMMkhobHp3ZFQyenF2aC93WmRzQ0VqTm80b3VJTGQ3SWNlMWJSSHdmcFZXQlpoamZaaVpUQXRGTlZNTGc2Z1dNaGhxbVdoSzBSM0Vwb0t0eHl1V3pTMXE1bXJwT3dxOGVWeTNDL0ZSZVJNSUhLZVpLRUkrZVlpdW9tbDJDUG9NRmpYNnE4Qmx2MGNFM1Z1b1FrOEs1eWVNcGROSElJa3MzeGhMQ1NYbGZFOHF2M3granc5UVlwaFM0ekxITmYzenRyRW1NSjA0RzAxMlVzUFg1K3RxdWtYYlYyaEtiVWtSVEk2YytEeERmbE1oeG9zQ0ljL3pnSmhIRlV0ZGp5bHZXQ2twdUw0MmRXRGZwT2x1YXFsWjFoTkJ0TnNMZkJHUnFVSm1JU3Y5WjRGRWVrdmdqV3RzYkdyOFFlNTJJN2k5SmZnUlhnT1F2VjdiSk5hdCtPdHRZL1F3eWt1TndINGpDMWI1WlV2WnA3K3VxMkZrdXJzNG1nT2hkclcvZDlqZ1RRNjdwZ0tEcjhobS9rN285bzdzNTA2eTJDZWVZM1B1TzhGbW5ienZidFlQTGEzL1cvclpGSlo3R2dJTTM2N1h3UFlqZ01wci9FTWc0WG9EbTVHdWwxZ0hzNy9DSVNhYjN6dWdrMDRNYUEwSVZFVXZybTN1cFdEUjhEY0tobHRRTUZ5TmdpRVRJL2duZTYya1RkNmMyZGJrNVdIRHJ4N1pKSXNxY0tZdlN1SlJsSWFpb0J0RndUc29DdjZVb2dUQWRjZ0pMY2dKenlJblBJS2M4S0dVb2k5MHdmU2FSdXdBb28rb3FicVIydWNScGc0L2NqM0JUSmo5S2VaeDRHZmptbUFYNVRtV1lDbFRNTnltendRbHhXbURSOVYrL2lPY0pQWmZtQjZIbCtBR2pZMG80dFJ0MXZjSHU0YkZhbjJ5eitBYlJqTmI4bzFTVGpkR0dxTk94WDRTSVRWcHlDUFhJOHloaVQzQkFpWWUzeklWK0toazVpUkNQbWpUKzNTbGVwK3VCdm5nNURHTFFmRVhBOEVBOW5icm5Yb0FzWHd4ZTcrdUl0QUlmbzM2OFVnM1FtQnErd2pvYmZReCtnUjlpajVEbjZNdndKZmdQZWtyVXZ3YXFTSytWZDdENytEM3pBOGUydmgySXpEOXRlbnhWRDZKQzQ1MTJ4dDhsajVIZlQ5UGZ4cCtvczRIdEFWZHdZektuS3ErUXN6eGV4bzNyR3dMY3JkMlZkUVFOMW1YeDFQY3dDMXU0c1BiekJORUx2MkxhTERkVXRQMm9iUXhLOGF6SG9PNFczaUQzVDQ5ZldlVTJlZlIzZjcveUxGWVptRFFYdmM5SzlsYWdVVUFNZUxlZnhhc0FqQ0hmVmdBWkI2SWRZczUwWHUxM2JxTEY5YjI0STlaRDJzRGJpMTQvejhneTFpeGx0amd2T1VCNUxvQWdCWFl6YWxKZ3NhTXJSMXRYWWRSUmxHSDlSUWRzRSs2eG1SZzh5SWVvOG94UnVNUUJTb1B1TU9NWU1MZHM0eEdDSitIMlNNaTVhYnVzL3dDVlk1dE5BMFhtMHk5eEdNMEp0QU9xMXBnSzBCZEtBZjdES0d2ME1mb3k5Ri9aR2xhbE52bHdubENjaGd0Ukw5bFc2QXI0S04rb1NkZ0l4WHBJSnlGMjdnTzJPL05BbGgxVlhlTk95UGQ5LzNTSUtBL1ZDazM5WTRFUFlpdUhlTUJISnBXa20zUWVKRUxQRVlMMFc5Z2daS2E5ekdIenY4Ykk3REhlLzRZYmhmZTJFOWlvTzlKTTMyM2J1YnNTa1F2aU13K24zUU5KVWU4dE90cnp5NXYyRWE2N0EyeFZaVHM0dTh5MWpqbnU1M05DM2tFYmlFL1pqc2l1bE9qMjBRNjhVNllFaW10eGt1dUMzdkw4WVpMbzJzRkVhZFF4dXZHOWxFMGV0Nitsays3TVFIb04wUFlsc2FYYit2YU4zdHIxeTQyZFZta2ZTYlY1eGkzQmJWMXUxMU05d0QwbE96TFhuWUNSOTB0NHd0K3JpdW9LQTE5eXV3RDJwTEFKd1E3WjN5K2NJbmk4a2c2MThuVVNBVDJPNlZLLzNXQklhMWhUMmV3N0VvRlNyYU1JaitUV0UwKzk0cmFIQUp3RVQ5K1o3cGxYRWpxM3hESDNRRGc1SUdPKzVMOEwyK0ovK2l3enhQTXhnRWlCZ0FJL2l5Wm9IQW1NUDAvZUU1azl5NmlOZTFrNnc3V3o0dWNycVRweHlaM0JlVUp2MlJ5cDNYRlRQWWR5TDdKSXdSNFJranpON2F6WGkyQ0lNRTBwVFhvZFpjN0lTamQrckw0Rkh4R0V5M0FSSFVBeDFWL0xadmlqbDh3V1YybTFmU0NmK3N3YzBXMDZPcWE1bTZTS3p5dFJuaFFWYWdNNk1jaFJna0pNWFlFOFloQjl1bUtvb1RwR1JxTmtLNGZ4NE9XK3UrNENyY0dZcmdUWjV2bUc5VFVqdGZuaXFZWlVXVDZVZzBlRTNoa2lVRzVuQnBnakYxNERYYm8rRFFSYmZwVjEzek1wbElKQ3VjK1ZMSnhHZ2F6eEZ3V0kzWkxuajY1WDUwMHhCMDNvWjBNTDRhU1A2R3ZRWEtidVBNclVxdm1hUWgzVUdaclJVWk5pWW85dFhUUlU3eEdsZFN5cFk0NWJBckxVTE16dEFiNjVpbWRJT2FSRFlwSVVGNUJzSW83S1E2L1V6U3d0STJTZWRTMWs3UW9JWFBTYzBHVEY0dXpXaHhMeHZ3TnhGN2g5cjEyTExZWElkOUZENXNyTy9TMzJiS2VXelpQSnFYL0FNM1FoMXB1ZlN0NzZqaVF2WUVsMW1NMGVNN1RNa3dBQTN0OVNEbTc2WmFYS0xaNTY1dnBPMGl4dmZReUNJMmo1Qk9oVi9rMlBpVjNzUnQ0S3FGbC9tRHVEblV6Nm03VnY3OFJQYjNJMWpQTVhWQ3FWWWlmK0VURkhuVzNyY2hNYjUxZTF1dVZwekwwbGdHVElBVU1hUlVGY0tBRHNJRUUwUUlabUtmeURVbEZaWWNvMmE2LzQzUURDYVhza2NNR09LMnM1S0Z6cVB5aTdzamZKOVM4TlZvamo4b1gxTWp1eWZFRVFJQ1BjV2ltQVdnakxCd2tKcTBPSmppZEhaejJpWTNPWnpzRWtkbnJFTmx5blNOWVlsNXloREtYWWc4ajFicVRDQWhzbkM3eTVLdFFLSnRYbG1JeWhVdThOTExCQlppeXVRT1V5RGJKZEVVbXlEV1pyTDlDZWFhWlloSUg3VVMwdUpYbWViVElpalpCY3JGODAyODZKeWV2N0V5MXhFUU9xc21UdzduS3RkQVVaZXp5VGVEbGt5M1hCR1VaNDNMS3BoN1FISzd4cWVBUWV2dG9jV1JsRXRKbEEwMVJaTXBSS1RWRlhlcnB4VnhGeGI2OG5GN2pzcTdHYmRVMjBCdWVJVkpPd3NmRnE0VFBCSVVTT0xpNEpNclFWejk5ZFpNaGFQQzRXVHNZeWdFblpxczRtcndZS2R4ZXVQbFlLVExKcURTL1Y0bzRoQ28rRHZOUWIvUUkrdkhvcmVmZ01UUE1tNFk1dTA3NVA2SklYaEgvZTEveW53RUEpIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9Ym9keSxodG1se2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9aHRtbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItcGFyYWdyYXBoLHB7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNjt0ZXh0LWFsaWduOmp1c3RpZnl9Lm1vbnN0ZXItaDEsaDF7Zm9udC1zaXplOjNyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTU7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDIsaDJ7Zm9udC1zaXplOjIuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yO21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI1O21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNCxoNHtmb250LXNpemU6MS41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg1LGg1e2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6Ym9sZGVyO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDYsaDZ7Zm9udC1zaXplOjEuM3JlbTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX1wK2gxe21hcmdpbi10b3A6My43NXJlbX1wK2gye21hcmdpbi10b3A6M3JlbX1wK2gze21hcmdpbi10b3A6Mi4yNXJlbX1wK2g0e21hcmdpbi10b3A6MS41cmVtfXAraDV7bWFyZ2luLXRvcDouNzVyZW19ZGl2K2gxLGRpditoMixkaXYraDMsZGl2K2g0LGRpditoNSxkaXYraDYscCtoNnttYXJnaW4tdG9wOjB9LmRlY297YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7dGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50fTo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX06OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfWtiZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtib3JkZXItcmFkaXVzOjEwcmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3BhZGRpbmc6LjI1ZW0gLjZlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9ZGV0YWlsc3ttYXJnaW4tYm90dG9tOjFyZW19c3VtbWFyeXtjdXJzb3I6cG9pbnRlcjtmb250LWZlYXR1cmUtc2V0dGluZ3M6XFxcInRudW1cXFwiO2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMWVtO3BhZGRpbmc6LjZyZW0gMXJlbX1kZXRhaWxzW29wZW5de3BhZGRpbmc6LjZyZW0gMXJlbSAuNzVyZW19ZGV0YWlsc1tvcGVuXSBzdW1tYXJ5e21hcmdpbi1ib3R0b206LjVyZW07cGFkZGluZzowfS5tb25zdGVyLW5vLXVzZXItc2VsZWN0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1Aa2V5ZnJhbWVzIGRldGFpbHMtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41ZW0pfX1kZXRhaWxzW29wZW5dPjpub3Qoc3VtbWFyeSl7YW5pbWF0aW9uOmRldGFpbHMtc2hvdyAuMTVzIGVhc2UtaW4tb3V0fWRldGFpbHNbb3Blbl0+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tb25vc3BhY2V7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2UpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtoZWlnaHQ6MTAwJX1idXR0b257d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9YnV0dG9uXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47dHJhbnNpdGlvbjp3aWR0aCAxMHMgZWFzZS1pbi1vdXR9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWxhYmVsXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXXthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpzdHJldGNoO2Rpc3BsYXk6ZmxleDt0cmFuc2l0aW9uOndpZHRoIDEycyBlYXNlLWluLW91dH1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdPmltZyxbZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdPnN2Z3ttYXJnaW4tbGVmdDouM2VtfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3ZnLnN1Y2Nlc3NmdWx7YW5pbWF0aW9uOmJvdW5jeSAuNXMgbGluZWFyIGZvcndhcmRzO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzc2Z1bCl9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmcuYWN0aXZpdHl7YW5pbWF0aW9uOmJvdW5jeSAuNXMgbGluZWFyIGZvcndhcmRzO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYWN0aXZpdHkpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3ZnLmZhaWxlZHthbmltYXRpb246Ym91bmN5IC41cyBsaW5lYXIgZm9yd2FyZHM7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1mYWlsZWQpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3ZnLmFjdGl2aXR5e2FuaW1hdGlvbi1kdXJhdGlvbjoxczthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlO2FuaW1hdGlvbi1uYW1lOmFjdGl2aXR5O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsMCwuMiwxKX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdLnN0YXRlbGVzc3tkaXNwbGF5Om5vbmV9QGtleWZyYW1lcyBhY3Rpdml0eXswJXt0cmFuc2Zvcm06c2NhbGUoMSl9NTAle3RyYW5zZm9ybTpzY2FsZSguMSl9dG97dHJhbnNmb3JtOnNjYWxlKDEpfX1Aa2V5ZnJhbWVzIGJvdW5jeXswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC4xKX04MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxLjE1KX05MCV7dHJhbnNmb3JtOnNjYWxlKC45KX10b3t0cmFuc2Zvcm06c2NhbGUoMSl9fSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgU3RhdGUsIGdldFN0YXRlSW5zdGFuY2VGb3IgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxTeW1ib2wgPSBTeW1ib2woXCJpbnRlcm5hbFN5bWJvbFwiKTtcblxuLyoqXG4gKiBUaGlzIFN0YXRlIGNsYXNzIHJlcHJlc2VudCBhIFN0YXRlIHdpdGggcHJlc2VudGF0aW9uXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBTdGF0ZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwcmVzZW50YXRpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICovXG5cdGNvbnN0cnVjdG9yKHN0YXRlLCBwcmVzZW50YXRpb24pIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge307XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uc3RhdGUgPSB2YWxpZGF0ZVN0cmluZyhzdGF0ZSk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ucHJlc2VudGF0aW9uID0gdmFsaWRhdGVTdHJpbmcocHJlc2VudGF0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gc3RhdGVcblx0ICovXG5cdGdldCBzdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHByZXNlbnRhdGlvblxuXHQgKi9cblx0Z2V0IHByZXNlbnRhdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0ucHJlc2VudGF0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBTdGF0ZShcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN0YXRlLFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ucHJlc2VudGF0aW9uLFxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9XG4gKi9cbmZ1bmN0aW9uIGdldFN0YXRlSW5zdGFuY2VGb3Ioc3RhdGUpIHtcblx0c3dpdGNoIChzdGF0ZSkge1xuXHRcdGNhc2UgXCJzdGF0ZWxlc3NcIjpcblx0XHRcdHJldHVybiBuZXcgU3RhdGUoXCJzdGF0ZWxlc3NcIiwgXCJcIik7XG5cdFx0Y2FzZSBcInN1Y2Nlc3NmdWxcIjpcblx0XHRcdHJldHVybiBuZXcgU3RhdGUoXG5cdFx0XHRcdFwic3VjY2Vzc2Z1bFwiLFxuXHRcdFx0XHQnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwic3VjY2Vzc2Z1bFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj48cGF0aCBkPVwiTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNHptMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTZ6XCIvPjxwYXRoIGQ9XCJNMTAuOTcgNC45N2EuMjM1LjIzNSAwIDAgMC0uMDIuMDIyTDcuNDc3IDkuNDE3IDUuMzg0IDcuMzIzYS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDV6XCIvPjwvc3ZnPicsXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJhY3Rpdml0eVwiOlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShcblx0XHRcdFx0XCJhY3Rpdml0eVwiLFxuXHRcdFx0XHQnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwiYWN0aXZpdHlcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+PGNpcmNsZSBjeD1cIjhcIiBjeT1cIjhcIiByPVwiOFwiLz48L3N2Zz4nLFxuXHRcdFx0KTtcblx0XHRjYXNlIFwiZmFpbGVkXCI6IC8vIGh0dHBzOi8vaWNvbnMuZ2V0Ym9vdHN0cmFwLmNvbS9pY29ucy9leGNsYW1hdGlvbi1jaXJjbGUvXG5cdFx0XHRyZXR1cm4gbmV3IFN0YXRlKFxuXHRcdFx0XHRcImZhaWxlZFwiLFxuXHRcdFx0XHQnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwiZmFpbGVkXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPjxwYXRoIGQ9XCJNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0em0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNnpcIi8+PHBhdGggZD1cIk03LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDB6TTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAwTDcuMSA0Ljk5NXpcIi8+PC9zdmc+Jyxcblx0XHRcdCk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBuZXcgU3RhdGUoc3RhdGUsIFwiXCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgcmVnaXN0ZXJDdXN0b21FbGVtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi9idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IGdldFN0YXRlSW5zdGFuY2VGb3IsIFN0YXRlIH0gZnJvbSBcIi4vdHlwZXMvc3RhdGUubWpzXCI7XG5cbmV4cG9ydCB7IFN0YXRlQnV0dG9uIH07XG5cbi8qKlxuICogQSBzdGF0ZSBidXR0b24gd2l0aCBpY29uc1xuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vc3RhdGUtYnV0dG9uL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vc3RhdGUtYnV0dG9uLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIGJ1dHRvbiB3aXRoIGljb25zXG4gKi9cbmNsYXNzIFN0YXRlQnV0dG9uIGV4dGVuZHMgQnV0dG9uIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b25AQGluc3RhbmNlXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHN0YXRlcyBBdmFpbGFibGUgc3RhdHVzXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9IHN0YXRlcy5zdWNjZXNzZnVsPSBzdWNjZXNzZnVsXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9IHN0YXRlcy5hY3Rpdml0eT0gYWN0aXZpdHlcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX0gc3RhdGVzLmZhaWxlZD0gZmFpbGVkXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9IGN1cnJlbnQgY3VycmVudCBzdGF0dXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlQWN0aW9uQ2FsbGJhY2t9IGFjdGlvbnMuY2xpY2tcblx0ICogQGV4dGVuZHMge0J1dHRvbn1cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvaWNvbnMvYmxvYi9tYWluL0xJQ0VOU0UubWR8Qm9vdHN0cmFwIGljb25zIGxpY2Vuc2V9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRzdGF0ZXM6IHtcblx0XHRcdFx0c3VjY2Vzc2Z1bDogZ2V0U3RhdGVJbnN0YW5jZUZvcihcInN1Y2Nlc3NmdWxcIiksXG5cdFx0XHRcdGFjdGl2aXR5OiBnZXRTdGF0ZUluc3RhbmNlRm9yKFwiYWN0aXZpdHlcIiksXG5cdFx0XHRcdGZhaWxlZDogZ2V0U3RhdGVJbnN0YW5jZUZvcihcImZhaWxlZFwiKSxcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50OiBnZXRTdGF0ZUluc3RhbmNlRm9yKFwic3RhdGVsZXNzXCIpLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1dHRvbi5cblx0ICogSWYgYSB0aW1lb3V0IGlzIHNldCwgdGhlIHN0YXRlIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBhZnRlciB0aGVcblx0ICogc3BlY2lmaWVkIHRpbWUuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjE4LjAgYSBwcmV2aW91c2x5IHNldCB0aW1lb3V0IGlzIGNsZWFyZWRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlN0YXRlQnV0dG9ufVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZVxuXHQgKi9cblx0c2V0U3RhdGUoc3RhdGUsIHRpbWVvdXQpIHtcblx0XHRjb25zdCB0aW1lb3V0U3ltYm9sID0gU3ltYm9sLmZvcihcInRpbWVvdXRcIik7XG5cdFx0aWYgKHRoaXNbdGltZW91dFN5bWJvbF0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXNbdGltZW91dFN5bWJvbF0pO1xuXHRcdFx0ZGVsZXRlIHRoaXNbdGltZW91dFN5bWJvbF07XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb2JqID0gdGhpcy5nZXRPcHRpb24oYHN0YXRlcy4ke3ZhbGlkYXRlU3RyaW5nKHN0YXRlKX1gKTtcblx0XHRpZiAob2JqID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vdCBmb3VuZFwiKTtcblx0XHR9XG5cblx0XHR0aGlzLnNldE9wdGlvbihcImN1cnJlbnRcIiwgdmFsaWRhdGVJbnN0YW5jZShvYmosIFN0YXRlKSk7XG5cblx0XHRpZiAoaXNJbnRlZ2VyKHRpbWVvdXQpICYmIHRpbWVvdXQgPiAwKSB7XG5cdFx0XHR0aGlzW3RpbWVvdXRTeW1ib2xdID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlU3RhdGUoKTtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZW91dFN5bWJvbF07XG5cdFx0XHR9LCB0aW1lb3V0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5TdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHJlbW92ZVN0YXRlKCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwiY3VycmVudFwiLCBnZXRTdGF0ZUluc3RhbmNlRm9yKFwic3RhdGVsZXNzXCIpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZXx1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXRTdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJjdXJyZW50XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1zdGF0ZS1idXR0b25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtBcnJheTxDU1NTdHlsZVNoZWV0Pn1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IHN0eWxlcyA9IEJ1dHRvbi5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0c3R5bGVzLnB1c2goU3RhdGVCdXR0b25TdHlsZVNoZWV0KTtcblx0XHRyZXR1cm4gc3R5bGVzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgPGJ1dHRvbiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHBhcnQ9XCJidXR0b25cIj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImxhYmVsXCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L2Rpdj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN0YXRlXCJcblx0XHRcdCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y3VycmVudC5zdGF0ZVwiXG5cdFx0XHQgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmN1cnJlbnQucHJlc2VudGF0aW9uXCI+PC9kaXY+XG4gICAgPC9idXR0b24+XG48L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoU3RhdGVCdXR0b24pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IERFTElNSVRFUiwgUGF0aGZpbmRlciwgV0lMRENBUkQgfSBmcm9tIFwiLi9wYXRoZmluZGVyLm1qc1wiO1xuXG5leHBvcnQgeyBidWlsZE1hcCwgUEFSRU5ULCBhc3NlbWJsZVBhcnRzIH07XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgUEFSRU5UID0gXCJeXCI7XG5cbi8qKlxuICogTWFwcyBjYW4gYmUgZWFzaWx5IGNyZWF0ZWQgZnJvbSBkYXRhIG9iamVjdHMgd2l0aCB0aGUgaGVscCBvZiB0aGUgZnVuY3Rpb24gYGJ1aWxkTWFwKClgLlxuICpcbiAqIFRoZSBwYXRoIGNhbiBiZSBzcGVjaWZpZWQgYXMgZWl0aGVyIGEgc2ltcGxlIGRlZmluaXRpb24gYS5iLmMgb3IgYSB0ZW1wbGF0ZSAke2EuYi5jfS5cbiAqIEtleSBhbmQgdmFsdWUgY2FuIGJlIGVpdGhlciBhIGRlZmluaXRpb24gb3IgYSB0ZW1wbGF0ZS4gVGhlIGtleSBkb2VzIG5vdCBoYXZlIHRvIGJlIGRlZmluZWQuXG4gKiBUaGUgdGVtcGxhdGVzIGRldGVybWluZSB0aGUgYXBwZWFyYW5jZSBvZiB0aGUga2V5cyBhbmQgdGhlIHZhbHVlIG9mIHRoZSBtYXAuIEVpdGhlciBhIHNpbmdsZSB2YWx1ZVxuICogaWQgY2FuIGJlIHRha2VuIG9yIGEgY29tcG9zaXRlIGtleSAke2lkfSAke25hbWV9IGNhbiBiZSB1c2VkLlxuICpcbiAqIElmIHlvdSB3YW50IHRvIGFjY2VzcyB0aGUgdmFsdWVzIG9mIHRoZSBwYXJlbnQgZGF0YSBzZXQsIHlvdSBoYXZlIHRvIHVzZSB0aGUgXiBjaGFyYWN0ZXIsIGZvciBleGFtcGxlLCAke2lkfSAke14ubmFtZX0uXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RhdGEvYnVpbGRtYXAubWpzXG4gKlxuICogQHBhcmFtIHsqfSBzdWJqZWN0IC0gVGhlIGRhdGEgb2JqZWN0IGZyb20gd2hpY2ggdGhlIG1hcCB3aWxsIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfE1vbnN0ZXIuRGF0YX5leGFtcGxlU2VsZWN0b3JDYWxsYmFja30gc2VsZWN0b3IgLSBUaGUgcGF0aCB0byB0aGUgZGF0YSBvYmplY3QsIG9yIGEgY2FsbGJhY2sgdGhhdCByZXR1cm5zIGEgbWFwLlxuICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZVRlbXBsYXRlXSAtIEEgdGVtcGxhdGUgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgbWFwLlxuICogQHBhcmFtIHtzdHJpbmd9IFtrZXlUZW1wbGF0ZV0gLSBBIHRlbXBsYXRlIGZvciB0aGUga2V5IG9mIHRoZSBtYXAuXG4gKiBAcGFyYW0ge01vbnN0ZXIuRGF0YX5leGFtcGxlRmlsdGVyQ2FsbGJhY2t9IFtmaWx0ZXJdIC0gQSBjYWxsYmFjayBmdW5jdGlvbiB0byBmaWx0ZXIgb3V0IHZhbHVlcy5cbiAqIEByZXR1cm4geyp9IC0gVGhlIGNyZWF0ZWQgbWFwLlxuICogQHRocm93cyB7VHlwZUVycm9yfSAtIElmIHRoZSB2YWx1ZSBpcyBuZWl0aGVyIGEgc3RyaW5nIG5vciBhIGZ1bmN0aW9uLlxuICogQHRocm93cyB7VHlwZUVycm9yfSAtIElmIHRoZSBzZWxlY3RvciBjYWxsYmFjayBkb2VzIG5vdCByZXR1cm4gYSBtYXAuXG4gKiovXG5mdW5jdGlvbiBidWlsZE1hcChzdWJqZWN0LCBzZWxlY3RvciwgdmFsdWVUZW1wbGF0ZSwga2V5VGVtcGxhdGUsIGZpbHRlcikge1xuXHRyZXR1cm4gYXNzZW1ibGVQYXJ0cyhzdWJqZWN0LCBzZWxlY3RvciwgZmlsdGVyLCBmdW5jdGlvbiAodiwgaywgbSkge1xuXHRcdGsgPSBidWlsZCh2LCBrZXlUZW1wbGF0ZSwgayk7XG5cdFx0diA9IGJ1aWxkKHYsIHZhbHVlVGVtcGxhdGUpO1xuXHRcdHRoaXMuc2V0KGssIHYpO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGUgYXNzZW1ibGVQYXJ0cyBmdW5jdGlvbiBpcyBhIHByaXZhdGUgZnVuY3Rpb24gdGhhdCBoZWxwcyBpbiBidWlsZGluZyBhIG1hcCBmcm9tIGEgc3ViamVjdCBvYmplY3QgYmFzZWQgb24gYSBwcm92aWRlZFxuICogc2VsZWN0b3IuIFRoZSBzZWxlY3RvciBjYW4gZWl0aGVyIGJlIGEgc3RyaW5nIG9yIGEgY2FsbGJhY2sgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgdXNlZCBhcyBhXG4gKiBoZWxwZXIgZnVuY3Rpb24gYnkgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBtb2R1bGUuXG4gKlxuICogVGhlIGZ1bmN0aW9uIHRha2VzIGZvdXIgcGFyYW1ldGVyczpcbiAqXG4gKiBzdWJqZWN0OiBUaGUgc3ViamVjdCBvYmplY3QgZnJvbSB3aGljaCB0aGUgbWFwIGlzIHRvIGJlIGJ1aWx0XG4gKiBzZWxlY3RvcjogVGhlIHNlbGVjdG9yIHRvIGRldGVybWluZSB0aGUgc3RydWN0dXJlIG9mIHRoZSBtYXAuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogZmlsdGVyIChvcHRpb25hbCk6IEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgdmFsdWVzIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEuXG4gKiBjYWxsYmFjazogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgbWFwLlxuICogSWYgdGhlIHNlbGVjdG9yIHBhcmFtZXRlciBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBpdCBpcyBleGVjdXRlZCBwYXNzaW5nIHRoZSBzdWJqZWN0IGFzIGl0cyBhcmd1bWVudCxcbiAqIGFuZCB0aGUgcmVzdWx0aW5nIHZhbHVlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgTWFwLiBPdGhlcndpc2UsIGlmIHRoZSBzZWxlY3RvciBwYXJhbWV0ZXIgaXMgYSBzdHJpbmcsXG4gKiBidWlsZEZsYXRNYXAgaXMgY2FsbGVkIHRvIGJ1aWxkIGEgZmxhdCBtYXAgd2l0aCBrZXlzIGFuZCB2YWx1ZXMgZXh0cmFjdGVkIGZyb20gdGhlIHN1YmplY3Qgb2JqZWN0IGJhc2VkIG9uIHRoZSBzZWxlY3Rvci5cbiAqXG4gKiBJZiB0aGUgZmlsdGVyIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSB1c2VkIHRvIGZpbHRlciBvdXQgY2VydGFpbiBlbGVtZW50cyBmcm9tIHRoZSBtYXAsIGJhc2VkIG9uIHNvbWVcbiAqIGNyaXRlcmlhLiBUaGUgY2FsbGJhY2sgd2lsbCBiZSBwYXNzZWQgdGhlIHZhbHVlLCBrZXksIGFuZCBtYXAgb2JqZWN0LCBhbmQgaWYgaXQgcmV0dXJucyBmYWxzZSwgdGhlIGVsZW1lbnQgd2lsbCBiZSBza2lwcGVkLlxuICpcbiAqIEZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIG1hcCwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAqXG4gKiB2OiBUaGUgdmFsdWUgb2YgdGhlIGVsZW1lbnRcbiAqIGs6IFRoZSBrZXkgb2YgdGhlIGVsZW1lbnRcbiAqIG06IFRoZSBtYXAgb2JqZWN0XG4gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIG5ldyBtYXAgd2l0aCB0aGUgcHJvY2Vzc2VkIHZhbHVlcy4gSWYgbWFwIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBNYXAsIGFuIGVtcHR5IG1hcCB3aWxsIGJlIHJldHVybmVkLlxuICpcbiAqIEV4YW1wbGUgVXNhZ2U6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogY29uc3Qgb2JqID0ge1xuICogICBuYW1lOiBcIkpvaG5cIixcbiAqICAgYWdlOiAzMCxcbiAqICAgYWRkcmVzczoge1xuICogICAgIGNpdHk6IFwiTmV3IFlvcmtcIixcbiAqICAgICBzdGF0ZTogXCJOWVwiLFxuICogICAgIGNvdW50cnk6IFwiVVNBXCIsXG4gKiAgIH0sXG4gKiB9O1xuICpcbiAqIGNvbnN0IHNlbGVjdG9yID0gXCJhZGRyZXNzXCI7XG4gKlxuICogY29uc3QgbWFwID0gYXNzZW1ibGVQYXJ0cyhvYmosIHNlbGVjdG9yLCBudWxsLCBmdW5jdGlvbiAodiwgaywgbSkge1xuICogICB0aGlzLnNldChrLCB2KTtcbiAqIH0pO1xuICpcbiAqIGNvbnNvbGUubG9nKG1hcCk7XG4gKiAvLyBPdXRwdXQ6IE1hcCgzKSB7XG4gKiAvLyAgIFwiYWRkcmVzcy5jaXR5XCIgPT4gXCJOZXcgWW9ya1wiLFxuICogLy8gICBcImFkZHJlc3Muc3RhdGVcIiA9PiBcIk5ZXCIsXG4gKiAvLyAgIFwiYWRkcmVzcy5jb3VudHJ5XCIgPT4gXCJVU0FcIlxuICogLy8gfVxuICogYGBgXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHN1YmplY3QgLSBUaGUgc3ViamVjdCBvYmplY3QgZnJvbSB3aGljaCB0aGUgbWFwIGlzIHRvIGJlIGJ1aWx0LlxuICogQHBhcmFtIHtzdHJpbmd8TW9uc3Rlci5EYXRhfmV4YW1wbGVTZWxlY3RvckNhbGxiYWNrfSBzZWxlY3RvciAtIFRoZSBzZWxlY3RvciB0byBkZXRlcm1pbmUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgbWFwLiBJdCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TW9uc3Rlci5EYXRhfmV4YW1wbGVGaWx0ZXJDYWxsYmFja30gW2ZpbHRlcl0gLSBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gZmlsdGVyIHZhbHVlcyBiYXNlZCBvbiBzb21lIGNyaXRlcmlhLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSBtYXAuXG4gKiBAcmV0dXJuIHtNYXB9IC0gQSBuZXcgbWFwIHdpdGggdGhlIHByb2Nlc3NlZCB2YWx1ZXMuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IC0gV2hlbiBzZWxlY3RvciBpcyBuZWl0aGVyIGEgc3RyaW5nIG5vciBhIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBhc3NlbWJsZVBhcnRzKHN1YmplY3QsIHNlbGVjdG9yLCBmaWx0ZXIsIGNhbGxiYWNrKSB7XG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcblxuXHRsZXQgbWFwO1xuXHRpZiAoaXNGdW5jdGlvbihzZWxlY3RvcikpIHtcblx0XHRtYXAgPSBzZWxlY3RvcihzdWJqZWN0KTtcblx0XHRpZiAoIShtYXAgaW5zdGFuY2VvZiBNYXApKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidGhlIHNlbGVjdG9yIGNhbGxiYWNrIG11c3QgcmV0dXJuIGEgbWFwXCIpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChpc1N0cmluZyhzZWxlY3RvcikpIHtcblx0XHRtYXAgPSBuZXcgTWFwKCk7XG5cdFx0YnVpbGRGbGF0TWFwLmNhbGwobWFwLCBzdWJqZWN0LCBzZWxlY3Rvcik7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInNlbGVjdG9yIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGEgZnVuY3Rpb25cIik7XG5cdH1cblxuXHRpZiAoIShtYXAgaW5zdGFuY2VvZiBNYXApKSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdG1hcC5mb3JFYWNoKCh2LCBrLCBtKSA9PiB7XG5cdFx0aWYgKGlzRnVuY3Rpb24oZmlsdGVyKSkge1xuXHRcdFx0aWYgKGZpbHRlci5jYWxsKG0sIHYsIGspICE9PSB0cnVlKSByZXR1cm47XG5cdFx0fVxuXG5cdFx0Y2FsbGJhY2suY2FsbChyZXN1bHQsIHYsIGssIG0pO1xuXHR9KTtcblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gc3ViamVjdFxuICogQHBhcmFtIHNlbGVjdG9yXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gcGFyZW50TWFwXG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBidWlsZEZsYXRNYXAoc3ViamVjdCwgc2VsZWN0b3IsIGtleSwgcGFyZW50TWFwKSB7XG5cdGNvbnN0IGN1cnJlbnRNYXAgPSBuZXcgTWFwKCk7XG5cblx0Y29uc3QgcmVzdWx0TGVuZ3RoID0gdGhpcy5zaXplO1xuXG5cdGlmIChrZXkgPT09IHVuZGVmaW5lZCkga2V5ID0gW107XG5cblx0Y29uc3QgcGFydHMgPSBzZWxlY3Rvci5zcGxpdChERUxJTUlURVIpO1xuXHRsZXQgY3VycmVudCA9IFwiXCI7XG5cdGNvbnN0IGN1cnJlbnRQYXRoID0gW107XG5cdGRvIHtcblx0XHRjdXJyZW50ID0gcGFydHMuc2hpZnQoKTtcblx0XHRjdXJyZW50UGF0aC5wdXNoKGN1cnJlbnQpO1xuXG5cdFx0aWYgKGN1cnJlbnQgPT09IFdJTERDQVJEKSB7XG5cdFx0XHRjb25zdCBmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcihzdWJqZWN0KTtcblx0XHRcdGxldCBtYXA7XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdG1hcCA9IGZpbmRlci5nZXRWaWEoY3VycmVudFBhdGguam9pbihERUxJTUlURVIpKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0Y29uc3QgYSA9IGU7XG5cdFx0XHRcdG1hcCA9IG5ldyBNYXAoKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBbaywgb10gb2YgbWFwKSB7XG5cdFx0XHRcdGNvbnN0IGNvcHlLZXkgPSBjbG9uZShrZXkpO1xuXG5cdFx0XHRcdGN1cnJlbnRQYXRoLm1hcCgoYSkgPT4ge1xuXHRcdFx0XHRcdGNvcHlLZXkucHVzaChhID09PSBXSUxEQ0FSRCA/IGsgOiBhKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Y29uc3Qga2sgPSBjb3B5S2V5LmpvaW4oREVMSU1JVEVSKTtcblx0XHRcdFx0Y29uc3Qgc3ViID0gYnVpbGRGbGF0TWFwLmNhbGwoXG5cdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRvLFxuXHRcdFx0XHRcdHBhcnRzLmpvaW4oREVMSU1JVEVSKSxcblx0XHRcdFx0XHRjb3B5S2V5LFxuXHRcdFx0XHRcdG8sXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0aWYgKGlzT2JqZWN0KHN1YikgJiYgcGFyZW50TWFwICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRzdWJbUEFSRU5UXSA9IHBhcmVudE1hcDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGN1cnJlbnRNYXAuc2V0KGtrLCBzdWIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSB3aGlsZSAocGFydHMubGVuZ3RoID4gMCk7XG5cblx0Ly8gbm8gc2V0IGluIGNoaWxkIHJ1blxuXHRpZiAocmVzdWx0TGVuZ3RoID09PSB0aGlzLnNpemUpIHtcblx0XHRmb3IgKGNvbnN0IFtrLCBvXSBvZiBjdXJyZW50TWFwKSB7XG5cdFx0XHR0aGlzLnNldChrLCBvKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc3ViamVjdDtcbn1cblxuLyoqXG4gKiBXaXRoIHRoZSBoZWxwIG9mIHRoaXMgZmlsdGVyIGNhbGxiYWNrLCB2YWx1ZXMgY2FuIGJlIGZpbHRlcmVkIG91dC4gT25seSBpZiB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgdGhlIHZhbHVlIGlzIHRha2VuIGZvciB0aGUgbWFwLlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkRhdGF+ZXhhbXBsZUZpbHRlckNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5ICBLZXlcbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuRGF0YS5idWlsZE1hcH1cbiAqL1xuXG4vKipcbiAqIEFsdGVybmF0aXZlbHkgdG8gYSBzdHJpbmcgc2VsZWN0b3IgYSBjYWxsYmFjayBjYW4gYmUgc3BlY2lmaWVkLiB0aGlzIG11c3QgcmV0dXJuIGEgbWFwLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQge2J1aWxkTWFwfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9kYXRhL2J1aWxkbWFwLm1qcyc7XG4gKlxuICogbGV0IG9iaiA9IHtcbiAqICAgICAgICAgICAgICAgIFwiZGF0YVwiOiBbXG4gKiAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEwLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJDYXNzYW5kcmFcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnJpY2htZW50XCI6IHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDEsIGxhYmVsOiBcIlhYU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMiwgbGFiZWw6IFwiWFNcIiwgcHJpY2U6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDMsIGxhYmVsOiBcIlNcIiwgcHJpY2U6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDQsIGxhYmVsOiBcIkxcIiwgcHJpY2U6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyMCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiWWVzc2V5IVwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAyLCBsYWJlbDogXCJYU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCwgbGFiZWw6IFwiTFwiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgfTtcbiAqXG4gKiBsZXQgY2FsbGJhY2sgPSBmdW5jdGlvbiAoc3ViamVjdCkge1xuICogICAgICAgICAgICAgICAgbGV0IG0gPSBuZXcgTWFwO1xuICpcbiAqICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ksIGJdIG9mIE9iamVjdC5lbnRyaWVzKHN1YmplY3QuZGF0YSkpIHtcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgbGV0IGtleTEgPSBpO1xuICpcbiAqICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtqLCBjXSBvZiBPYmplY3QuZW50cmllcyhiLmVucmljaG1lbnQudmFyaWFudHMpKSB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkyID0gajtcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIGRdIG9mIE9iamVjdC5lbnRyaWVzKGMucHJpY2UpKSB7XG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleTMgPSBrO1xuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQubmFtZSA9IGIubmFtZTtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQubGFiZWwgPSBjLmxhYmVsO1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5pZCA9IFtrZXkxLCBrZXkyLCBrZXkzXS5qb2luKCcuJyk7XG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5zZXQoZC5pZCwgZCk7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gKiAgICAgICAgICAgIH1cbiAqXG4gKiBsZXQgbWFwID0gYnVpbGRNYXAob2JqLCBjYWxsYmFjaywgJyR7bmFtZX0gJHt2a30nLCAnJHtpZH0nKVxuICpcbiAqIC8vIFx1MjFBNiBNYXAoMykge1xuICogLy8gIFwiMC4wLjBcIjpcIkNhc3NhbmRyYSAxMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMC4xXCI6XCJDYXNzYW5kcmEgMTIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjEuMFwiOlwiQ2Fzc2FuZHJhIDIyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4xLjFcIjpcIkNhc3NhbmRyYSAyMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMi4wXCI6XCJDYXNzYW5kcmEgMzIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjIuMVwiOlwiQ2Fzc2FuZHJhIDMyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4zLjBcIjpcIkNhc3NhbmRyYSA0Mi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMy4xXCI6XCJDYXNzYW5kcmEgNDIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjAuMFwiOlwiWWVzc2V5ISAxMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMC4xXCI6XCJZZXNzZXkhIDEyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4xLjBcIjpcIlllc3NleSEgMjIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjEuMVwiOlwiWWVzc2V5ISAyMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMi4wXCI6XCJZZXNzZXkhIDMyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4yLjFcIjpcIlllc3NleSEgMzIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjMuMFwiOlwiWWVzc2V5ISA0Mi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMy4xXCI6XCJZZXNzZXkhIDQyLjEyIFx1MjBBQ1wiXG4gKiAvLyB9XG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuRGF0YX5leGFtcGxlU2VsZWN0b3JDYWxsYmFja1xuICogQHBhcmFtIHsqfSBzdWJqZWN0IHN1YmplY3RcbiAqIEByZXR1cm4gTWFwXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE3LjBcbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuRGF0YS5idWlsZE1hcH1cbiAqL1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHN1YmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gZGVmaW5pdGlvblxuICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkKHN1YmplY3QsIGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSkge1xuXHRpZiAoZGVmaW5pdGlvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlID8gZGVmYXVsdFZhbHVlIDogc3ViamVjdDtcblx0dmFsaWRhdGVTdHJpbmcoZGVmaW5pdGlvbik7XG5cblx0Y29uc3QgcmVnZXhwID0gLyg/PHBsYWNlaG9sZGVyPlxcJHsoPzxwYXRoPlthLXpcXF5BLVouXFwtXzAtOV0qKX0pL2dtO1xuXHRjb25zdCBhcnJheSA9IFsuLi5kZWZpbml0aW9uLm1hdGNoQWxsKHJlZ2V4cCldO1xuXG5cdGNvbnN0IGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKHN1YmplY3QpO1xuXG5cdGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gZmluZGVyLmdldFZpYShkZWZpbml0aW9uKTtcblx0fVxuXG5cdGFycmF5LmZvckVhY2goKGEpID0+IHtcblx0XHRjb25zdCBncm91cHMgPSBhPy5bXCJncm91cHNcIl07XG5cdFx0Y29uc3QgcGxhY2Vob2xkZXIgPSBncm91cHM/LltcInBsYWNlaG9sZGVyXCJdO1xuXHRcdGlmIChwbGFjZWhvbGRlciA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cblx0XHRjb25zdCBwYXRoID0gZ3JvdXBzPy5bXCJwYXRoXCJdO1xuXG5cdFx0bGV0IHYgPSBmaW5kZXIuZ2V0VmlhKHBhdGgpO1xuXHRcdGlmICh2ID09PSB1bmRlZmluZWQpIHYgPSBkZWZhdWx0VmFsdWU7XG5cblx0XHRkZWZpbml0aW9uID0gZGVmaW5pdGlvbi5yZXBsYWNlQWxsKHBsYWNlaG9sZGVyLCB2KTtcblx0fSk7XG5cblx0cmV0dXJuIGRlZmluaXRpb247XG59XG4iLCAiLyoqXG4gKiBDdXN0b20gcG9zaXRpb25pbmcgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvdmlydHVhbC1lbGVtZW50c1xuICovXG5cbmNvbnN0IHNpZGVzID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcbmNvbnN0IGFsaWdubWVudHMgPSBbJ3N0YXJ0JywgJ2VuZCddO1xuY29uc3QgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9zaWRlcy5yZWR1Y2UoKGFjYywgc2lkZSkgPT4gYWNjLmNvbmNhdChzaWRlLCBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnRzWzBdLCBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnRzWzFdKSwgW10pO1xuY29uc3QgbWluID0gTWF0aC5taW47XG5jb25zdCBtYXggPSBNYXRoLm1heDtcbmNvbnN0IHJvdW5kID0gTWF0aC5yb3VuZDtcbmNvbnN0IGZsb29yID0gTWF0aC5mbG9vcjtcbmNvbnN0IGNyZWF0ZUNvb3JkcyA9IHYgPT4gKHtcbiAgeDogdixcbiAgeTogdlxufSk7XG5jb25zdCBvcHBvc2l0ZVNpZGVNYXAgPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5jb25zdCBvcHBvc2l0ZUFsaWdubWVudE1hcCA9IHtcbiAgc3RhcnQ6ICdlbmQnLFxuICBlbmQ6ICdzdGFydCdcbn07XG5mdW5jdGlvbiBjbGFtcChzdGFydCwgdmFsdWUsIGVuZCkge1xuICByZXR1cm4gbWF4KHN0YXJ0LCBtaW4odmFsdWUsIGVuZCkpO1xufVxuZnVuY3Rpb24gZXZhbHVhdGUodmFsdWUsIHBhcmFtKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyB2YWx1ZShwYXJhbSkgOiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGdldFNpZGUocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn1cbmZ1bmN0aW9uIGdldEF4aXNMZW5ndGgoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xufVxuZnVuY3Rpb24gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmNsdWRlcyhnZXRTaWRlKHBsYWNlbWVudCkpID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGdldE9wcG9zaXRlQXhpcyhnZXRTaWRlQXhpcyhwbGFjZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudFNpZGVzKHBsYWNlbWVudCwgcmVjdHMsIHJ0bCkge1xuICBpZiAocnRsID09PSB2b2lkIDApIHtcbiAgICBydGwgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgbGV0IG1haW5BbGlnbm1lbnRTaWRlID0gYWxpZ25tZW50QXhpcyA9PT0gJ3gnID8gYWxpZ25tZW50ID09PSAocnRsID8gJ2VuZCcgOiAnc3RhcnQnKSA/ICdyaWdodCcgOiAnbGVmdCcgOiBhbGlnbm1lbnQgPT09ICdzdGFydCcgPyAnYm90dG9tJyA6ICd0b3AnO1xuICBpZiAocmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gPiByZWN0cy5mbG9hdGluZ1tsZW5ndGhdKSB7XG4gICAgbWFpbkFsaWdubWVudFNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSk7XG4gIH1cbiAgcmV0dXJuIFttYWluQWxpZ25tZW50U2lkZSwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpXTtcbn1cbmZ1bmN0aW9uIGdldEV4cGFuZGVkUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgY29uc3Qgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGFsaWdubWVudCA9PiBvcHBvc2l0ZUFsaWdubWVudE1hcFthbGlnbm1lbnRdKTtcbn1cbmZ1bmN0aW9uIGdldFNpZGVMaXN0KHNpZGUsIGlzU3RhcnQsIHJ0bCkge1xuICBjb25zdCBsciA9IFsnbGVmdCcsICdyaWdodCddO1xuICBjb25zdCBybCA9IFsncmlnaHQnLCAnbGVmdCddO1xuICBjb25zdCB0YiA9IFsndG9wJywgJ2JvdHRvbSddO1xuICBjb25zdCBidCA9IFsnYm90dG9tJywgJ3RvcCddO1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBpZiAocnRsKSByZXR1cm4gaXNTdGFydCA/IHJsIDogbHI7XG4gICAgICByZXR1cm4gaXNTdGFydCA/IGxyIDogcmw7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIGlzU3RhcnQgPyB0YiA6IGJ0O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gW107XG4gIH1cbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMocGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBkaXJlY3Rpb24sIHJ0bCkge1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgbGV0IGxpc3QgPSBnZXRTaWRlTGlzdChnZXRTaWRlKHBsYWNlbWVudCksIGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JywgcnRsKTtcbiAgaWYgKGFsaWdubWVudCkge1xuICAgIGxpc3QgPSBsaXN0Lm1hcChzaWRlID0+IHNpZGUgKyBcIi1cIiArIGFsaWdubWVudCk7XG4gICAgaWYgKGZsaXBBbGlnbm1lbnQpIHtcbiAgICAgIGxpc3QgPSBsaXN0LmNvbmNhdChsaXN0Lm1hcChnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGlzdDtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBzaWRlID0+IG9wcG9zaXRlU2lkZU1hcFtzaWRlXSk7XG59XG5mdW5jdGlvbiBleHBhbmRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgLi4ucGFkZGluZ1xuICB9O1xufVxuZnVuY3Rpb24gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBleHBhbmRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIDoge1xuICAgIHRvcDogcGFkZGluZyxcbiAgICByaWdodDogcGFkZGluZyxcbiAgICBib3R0b206IHBhZGRpbmcsXG4gICAgbGVmdDogcGFkZGluZ1xuICB9O1xufVxuZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIGNvbnN0IHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH0gPSByZWN0O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgbGVmdDogeCxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZXhwb3J0IHsgYWxpZ25tZW50cywgY2xhbXAsIGNyZWF0ZUNvb3JkcywgZXZhbHVhdGUsIGV4cGFuZFBhZGRpbmdPYmplY3QsIGZsb29yLCBnZXRBbGlnbm1lbnQsIGdldEFsaWdubWVudEF4aXMsIGdldEFsaWdubWVudFNpZGVzLCBnZXRBeGlzTGVuZ3RoLCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50LCBnZXRPcHBvc2l0ZUF4aXMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRQYWRkaW5nT2JqZWN0LCBnZXRTaWRlLCBnZXRTaWRlQXhpcywgbWF4LCBtaW4sIHBsYWNlbWVudHMsIHJlY3RUb0NsaWVudFJlY3QsIHJvdW5kLCBzaWRlcyB9O1xuIiwgImltcG9ydCB7IGdldFNpZGVBeGlzLCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBeGlzTGVuZ3RoLCBnZXRTaWRlLCBnZXRBbGlnbm1lbnQsIGV2YWx1YXRlLCBnZXRQYWRkaW5nT2JqZWN0LCByZWN0VG9DbGllbnRSZWN0LCBtaW4sIGNsYW1wLCBwbGFjZW1lbnRzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIHNpZGVzLCBtYXgsIGdldE9wcG9zaXRlQXhpcyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5leHBvcnQgeyByZWN0VG9DbGllbnRSZWN0IH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcblxuZnVuY3Rpb24gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQoX3JlZiwgcGxhY2VtZW50LCBydGwpIHtcbiAgbGV0IHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmdcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHNpZGVBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25MZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gc2lkZUF4aXMgPT09ICd5JztcbiAgY29uc3QgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGZsb2F0aW5nLndpZHRoIC8gMjtcbiAgY29uc3QgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBmbG9hdGluZy5oZWlnaHQgLyAyO1xuICBjb25zdCBjb21tb25BbGlnbiA9IHJlZmVyZW5jZVthbGlnbkxlbmd0aF0gLyAyIC0gZmxvYXRpbmdbYWxpZ25MZW5ndGhdIC8gMjtcbiAgbGV0IGNvb3JkcztcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBmbG9hdGluZy5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZmxvYXRpbmcud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cbiAgc3dpdGNoIChnZXRBbGlnbm1lbnQocGxhY2VtZW50KSkge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSAtPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdICs9IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBjb29yZHM7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICpcbiAqIFRoaXMgZXhwb3J0IGRvZXMgbm90IGhhdmUgYW55IGBwbGF0Zm9ybWAgaW50ZXJmYWNlIGxvZ2ljLiBZb3Ugd2lsbCBuZWVkIHRvXG4gKiB3cml0ZSBvbmUgZm9yIHRoZSBwbGF0Zm9ybSB5b3UgYXJlIHVzaW5nIEZsb2F0aW5nIFVJIHdpdGguXG4gKi9cbmNvbnN0IGNvbXB1dGVQb3NpdGlvbiA9IGFzeW5jIChyZWZlcmVuY2UsIGZsb2F0aW5nLCBjb25maWcpID0+IHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCA9ICdib3R0b20nLFxuICAgIHN0cmF0ZWd5ID0gJ2Fic29sdXRlJyxcbiAgICBtaWRkbGV3YXJlID0gW10sXG4gICAgcGxhdGZvcm1cbiAgfSA9IGNvbmZpZztcbiAgY29uc3QgdmFsaWRNaWRkbGV3YXJlID0gbWlkZGxld2FyZS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZmxvYXRpbmcpKTtcbiAgbGV0IHJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmcsXG4gICAgc3RyYXRlZ3lcbiAgfSk7XG4gIGxldCB7XG4gICAgeCxcbiAgICB5XG4gIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgcGxhY2VtZW50LCBydGwpO1xuICBsZXQgc3RhdGVmdWxQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gIGxldCBtaWRkbGV3YXJlRGF0YSA9IHt9O1xuICBsZXQgcmVzZXRDb3VudCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsaWRNaWRkbGV3YXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIGZuXG4gICAgfSA9IHZhbGlkTWlkZGxld2FyZVtpXTtcbiAgICBjb25zdCB7XG4gICAgICB4OiBuZXh0WCxcbiAgICAgIHk6IG5leHRZLFxuICAgICAgZGF0YSxcbiAgICAgIHJlc2V0XG4gICAgfSA9IGF3YWl0IGZuKHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgaW5pdGlhbFBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICAgIHN0cmF0ZWd5LFxuICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBmbG9hdGluZ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHggPSBuZXh0WCAhPSBudWxsID8gbmV4dFggOiB4O1xuICAgIHkgPSBuZXh0WSAhPSBudWxsID8gbmV4dFkgOiB5O1xuICAgIG1pZGRsZXdhcmVEYXRhID0ge1xuICAgICAgLi4ubWlkZGxld2FyZURhdGEsXG4gICAgICBbbmFtZV06IHtcbiAgICAgICAgLi4ubWlkZGxld2FyZURhdGFbbmFtZV0sXG4gICAgICAgIC4uLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChyZXNldCAmJiByZXNldENvdW50IDw9IDUwKSB7XG4gICAgICByZXNldENvdW50Kys7XG4gICAgICBpZiAodHlwZW9mIHJlc2V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAocmVzZXQucGxhY2VtZW50KSB7XG4gICAgICAgICAgc3RhdGVmdWxQbGFjZW1lbnQgPSByZXNldC5wbGFjZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc2V0LnJlY3RzKSB7XG4gICAgICAgICAgcmVjdHMgPSByZXNldC5yZWN0cyA9PT0gdHJ1ZSA/IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgICAgICBmbG9hdGluZyxcbiAgICAgICAgICAgIHN0cmF0ZWd5XG4gICAgICAgICAgfSkgOiByZXNldC5yZWN0cztcbiAgICAgICAgfVxuICAgICAgICAoe1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeVxuICAgICAgICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHN0YXRlZnVsUGxhY2VtZW50LCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGkgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICBzdHJhdGVneSxcbiAgICBtaWRkbGV3YXJlRGF0YVxuICB9O1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBvZiBvdmVyZmxvdyBzaWRlIG9mZnNldHMgdGhhdCBkZXRlcm1pbmUgaG93IG11Y2ggdGhlXG4gKiBlbGVtZW50IGlzIG92ZXJmbG93aW5nIGEgZ2l2ZW4gY2xpcHBpbmcgYm91bmRhcnkgb24gZWFjaCBzaWRlLlxuICogLSBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBib3VuZGFyeSBieSB0aGF0IG51bWJlciBvZiBwaXhlbHNcbiAqIC0gbmVnYXRpdmUgPSBob3cgbWFueSBwaXhlbHMgbGVmdCBiZWZvcmUgaXQgd2lsbCBvdmVyZmxvd1xuICogLSAwID0gbGllcyBmbHVzaCB3aXRoIHRoZSBib3VuZGFyeVxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2RldGVjdE92ZXJmbG93XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIHZhciBfYXdhaXQkcGxhdGZvcm0kaXNFbGU7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGF0Zm9ybSxcbiAgICByZWN0cyxcbiAgICBlbGVtZW50cyxcbiAgICBzdHJhdGVneVxuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHtcbiAgICBib3VuZGFyeSA9ICdjbGlwcGluZ0FuY2VzdG9ycycsXG4gICAgcm9vdEJvdW5kYXJ5ID0gJ3ZpZXdwb3J0JyxcbiAgICBlbGVtZW50Q29udGV4dCA9ICdmbG9hdGluZycsXG4gICAgYWx0Qm91bmRhcnkgPSBmYWxzZSxcbiAgICBwYWRkaW5nID0gMFxuICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgY29uc3QgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8gJ3JlZmVyZW5jZScgOiAnZmxvYXRpbmcnO1xuICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICBjb25zdCBjbGlwcGluZ0NsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KGF3YWl0IHBsYXRmb3JtLmdldENsaXBwaW5nUmVjdCh7XG4gICAgZWxlbWVudDogKChfYXdhaXQkcGxhdGZvcm0kaXNFbGUgPSBhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoZWxlbWVudCkpKSAhPSBudWxsID8gX2F3YWl0JHBsYXRmb3JtJGlzRWxlIDogdHJ1ZSkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCAoYXdhaXQgKHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnRzLmZsb2F0aW5nKSkpLFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9KSk7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/IHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3RzLmZsb2F0aW5nLndpZHRoLFxuICAgIGhlaWdodDogcmVjdHMuZmxvYXRpbmcuaGVpZ2h0XG4gIH0gOiByZWN0cy5yZWZlcmVuY2U7XG4gIGNvbnN0IG9mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBvZmZzZXRTY2FsZSA9IChhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkpID8gKGF3YWl0IChwbGF0Zm9ybS5nZXRTY2FsZSA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0U2NhbGUob2Zmc2V0UGFyZW50KSkpIHx8IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfSA6IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfTtcbiAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0ID8gYXdhaXQgcGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0pIDogcmVjdCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiAoY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wKSAvIG9mZnNldFNjYWxlLnksXG4gICAgYm90dG9tOiAoZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSAvIG9mZnNldFNjYWxlLnksXG4gICAgbGVmdDogKGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCkgLyBvZmZzZXRTY2FsZS54LFxuICAgIHJpZ2h0OiAoZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0KSAvIG9mZnNldFNjYWxlLnhcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBvcHRpb25zID0+ICh7XG4gIG5hbWU6ICdhcnJvdycsXG4gIG9wdGlvbnMsXG4gIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgY29uc3Qge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBtaWRkbGV3YXJlRGF0YVxuICAgIH0gPSBzdGF0ZTtcbiAgICAvLyBTaW5jZSBgZWxlbWVudGAgaXMgcmVxdWlyZWQsIHdlIGRvbid0IFBhcnRpYWw8PiB0aGUgdHlwZS5cbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcGFkZGluZyA9IDBcbiAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpIHx8IHt9O1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9O1xuICAgIGNvbnN0IGF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gICAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChheGlzKTtcbiAgICBjb25zdCBhcnJvd0RpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnQpO1xuICAgIGNvbnN0IGlzWUF4aXMgPSBheGlzID09PSAneSc7XG4gICAgY29uc3QgbWluUHJvcCA9IGlzWUF4aXMgPyAndG9wJyA6ICdsZWZ0JztcbiAgICBjb25zdCBtYXhQcm9wID0gaXNZQXhpcyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICBjb25zdCBjbGllbnRQcm9wID0gaXNZQXhpcyA/ICdjbGllbnRIZWlnaHQnIDogJ2NsaWVudFdpZHRoJztcbiAgICBjb25zdCBlbmREaWZmID0gcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gKyByZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBjb29yZHNbYXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIGNvbnN0IHN0YXJ0RGlmZiA9IGNvb3Jkc1theGlzXSAtIHJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgICBjb25zdCBhcnJvd09mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50KSk7XG4gICAgbGV0IGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGFycm93T2Zmc2V0UGFyZW50W2NsaWVudFByb3BdIDogMDtcblxuICAgIC8vIERPTSBwbGF0Zm9ybSBjYW4gcmV0dXJuIGB3aW5kb3dgIGFzIHRoZSBgb2Zmc2V0UGFyZW50YC5cbiAgICBpZiAoIWNsaWVudFNpemUgfHwgIShhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoYXJyb3dPZmZzZXRQYXJlbnQpKSkpIHtcbiAgICAgIGNsaWVudFNpemUgPSBlbGVtZW50cy5mbG9hdGluZ1tjbGllbnRQcm9wXSB8fCByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIH1cbiAgICBjb25zdCBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjtcblxuICAgIC8vIElmIHRoZSBwYWRkaW5nIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IGNhdXNlcyB0aGUgYXJyb3cgdG8gbm8gbG9uZ2VyIGJlXG4gICAgLy8gY2VudGVyZWQsIG1vZGlmeSB0aGUgcGFkZGluZyBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkLlxuICAgIGNvbnN0IGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiAtIDE7XG4gICAgY29uc3QgbWluUGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21pblByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcbiAgICBjb25zdCBtYXhQYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWF4UHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBmbG9hdGluZyBlbGVtZW50IGlmIHRoZSBjZW50ZXJcbiAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50J3MgYm91bmRzLlxuICAgIGNvbnN0IG1pbiQxID0gbWluUGFkZGluZztcbiAgICBjb25zdCBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLSBtYXhQYWRkaW5nO1xuICAgIGNvbnN0IGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gICAgY29uc3Qgb2Zmc2V0ID0gY2xhbXAobWluJDEsIGNlbnRlciwgbWF4KTtcblxuICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhlIGFycm93J3MgcGFkZGluZyBjYXVzZXMgaXQgdG9cbiAgICAvLyB0byBwb2ludCB0byBub3RoaW5nIGZvciBhbiBhbGlnbmVkIHBsYWNlbWVudCwgYWRqdXN0IHRoZSBvZmZzZXQgb2YgdGhlXG4gICAgLy8gZmxvYXRpbmcgZWxlbWVudCBpdHNlbGYuIFRvIGVuc3VyZSBgc2hpZnQoKWAgY29udGludWVzIHRvIHRha2UgYWN0aW9uLFxuICAgIC8vIGEgc2luZ2xlIHJlc2V0IGlzIHBlcmZvcm1lZCB3aGVuIHRoaXMgaXMgdHJ1ZS5cbiAgICBjb25zdCBzaG91bGRBZGRPZmZzZXQgPSAhbWlkZGxld2FyZURhdGEuYXJyb3cgJiYgZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT0gbnVsbCAmJiBjZW50ZXIgIT09IG9mZnNldCAmJiByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSAvIDIgLSAoY2VudGVyIDwgbWluJDEgPyBtaW5QYWRkaW5nIDogbWF4UGFkZGluZykgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgPCAwO1xuICAgIGNvbnN0IGFsaWdubWVudE9mZnNldCA9IHNob3VsZEFkZE9mZnNldCA/IGNlbnRlciA8IG1pbiQxID8gY2VudGVyIC0gbWluJDEgOiBjZW50ZXIgLSBtYXggOiAwO1xuICAgIHJldHVybiB7XG4gICAgICBbYXhpc106IGNvb3Jkc1theGlzXSArIGFsaWdubWVudE9mZnNldCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgW2F4aXNdOiBvZmZzZXQsXG4gICAgICAgIGNlbnRlck9mZnNldDogY2VudGVyIC0gb2Zmc2V0IC0gYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgICAuLi4oc2hvdWxkQWRkT2Zmc2V0ICYmIHtcbiAgICAgICAgICBhbGlnbm1lbnRPZmZzZXRcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICByZXNldDogc2hvdWxkQWRkT2Zmc2V0XG4gICAgfTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50LCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykge1xuICBjb25zdCBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50ID0gYWxpZ25tZW50ID8gWy4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCksIC4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT09IGFsaWdubWVudCldIDogYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRTaWRlKHBsYWNlbWVudCkgPT09IHBsYWNlbWVudCk7XG4gIHJldHVybiBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50LmZpbHRlcihwbGFjZW1lbnQgPT4ge1xuICAgIGlmIChhbGlnbm1lbnQpIHtcbiAgICAgIHJldHVybiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50IHx8IChhdXRvQWxpZ25tZW50ID8gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSAhPT0gcGxhY2VtZW50IDogZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXV0b1BsYWNlbWVudCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhdXRvUCwgX21pZGRsZXdhcmVEYXRhJGF1dG9QMiwgX3BsYWNlbWVudHNUaGF0Rml0T25FO1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBhbGlnbm1lbnQsXG4gICAgICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cyxcbiAgICAgICAgYXV0b0FsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHMkMSA9IGFsaWdubWVudCAhPT0gdW5kZWZpbmVkIHx8IGFsbG93ZWRQbGFjZW1lbnRzID09PSBwbGFjZW1lbnRzID8gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQgfHwgbnVsbCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIDogYWxsb3dlZFBsYWNlbWVudHM7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gKChfbWlkZGxld2FyZURhdGEkYXV0b1AgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QLmluZGV4KSB8fCAwO1xuICAgICAgY29uc3QgY3VycmVudFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXhdO1xuICAgICAgaWYgKGN1cnJlbnRQbGFjZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBhbGlnbm1lbnRTaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKGN1cnJlbnRQbGFjZW1lbnQsIHJlY3RzLCBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpO1xuXG4gICAgICAvLyBNYWtlIGBjb21wdXRlQ29vcmRzYCBzdGFydCBmcm9tIHRoZSByaWdodCBwbGFjZS5cbiAgICAgIGlmIChwbGFjZW1lbnQgIT09IGN1cnJlbnRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRzJDFbMF1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50T3ZlcmZsb3dzID0gW292ZXJmbG93W2dldFNpZGUoY3VycmVudFBsYWNlbWVudCldLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1swXV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzFdXV07XG4gICAgICBjb25zdCBhbGxPdmVyZmxvd3MgPSBbLi4uKCgoX21pZGRsZXdhcmVEYXRhJGF1dG9QMiA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AyLm92ZXJmbG93cykgfHwgW10pLCB7XG4gICAgICAgIHBsYWNlbWVudDogY3VycmVudFBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzOiBjdXJyZW50T3ZlcmZsb3dzXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgIC8vIFRoZXJlIGFyZSBtb3JlIHBsYWNlbWVudHMgdG8gY2hlY2suXG4gICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UgPSBhbGxPdmVyZmxvd3MubWFwKGQgPT4ge1xuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQoZC5wbGFjZW1lbnQpO1xuICAgICAgICByZXR1cm4gW2QucGxhY2VtZW50LCBhbGlnbm1lbnQgJiYgY3Jvc3NBeGlzID9cbiAgICAgICAgLy8gQ2hlY2sgYWxvbmcgdGhlIG1haW5BeGlzIGFuZCBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBkLm92ZXJmbG93cy5zbGljZSgwLCAyKS5yZWR1Y2UoKGFjYywgdikgPT4gYWNjICsgdiwgMCkgOlxuICAgICAgICAvLyBDaGVjayBvbmx5IHRoZSBtYWluQXhpcy5cbiAgICAgICAgZC5vdmVyZmxvd3NbMF0sIGQub3ZlcmZsb3dzXTtcbiAgICAgIH0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZSA9IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZS5maWx0ZXIoZCA9PiBkWzJdLnNsaWNlKDAsXG4gICAgICAvLyBBbGlnbmVkIHBsYWNlbWVudHMgc2hvdWxkIG5vdCBjaGVjayB0aGVpciBvcHBvc2l0ZSBjcm9zc0F4aXNcbiAgICAgIC8vIHNpZGUuXG4gICAgICBnZXRBbGlnbm1lbnQoZFswXSkgPyAyIDogMykuZXZlcnkodiA9PiB2IDw9IDApKTtcbiAgICAgIGNvbnN0IHJlc2V0UGxhY2VtZW50ID0gKChfcGxhY2VtZW50c1RoYXRGaXRPbkUgPSBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfcGxhY2VtZW50c1RoYXRGaXRPbkVbMF0pIHx8IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZVswXVswXTtcbiAgICAgIGlmIChyZXNldFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2ZsaXAnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXJyb3csIF9taWRkbGV3YXJlRGF0YSRmbGlwO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgaW5pdGlhbFBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWUsXG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgICBmYWxsYmFja1N0cmF0ZWd5ID0gJ2Jlc3RGaXQnLFxuICAgICAgICBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gJ25vbmUnLFxuICAgICAgICBmbGlwQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuXG4gICAgICAvLyBJZiBhIHJlc2V0IGJ5IHRoZSBhcnJvdyB3YXMgY2F1c2VkIGR1ZSB0byBhbiBhbGlnbm1lbnQgb2Zmc2V0IGJlaW5nXG4gICAgICAvLyBhZGRlZCwgd2Ugc2hvdWxkIHNraXAgYW55IGxvZ2ljIG5vdyBzaW5jZSBgZmxpcCgpYCBoYXMgYWxyZWFkeSBkb25lIGl0c1xuICAgICAgLy8gd29yay5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjU0OSNpc3N1ZWNvbW1lbnQtMTcxOTYwMTY0M1xuICAgICAgaWYgKChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpbml0aWFsU2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhpbml0aWFsUGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzQmFzZVBsYWNlbWVudCA9IGdldFNpZGUoaW5pdGlhbFBsYWNlbWVudCkgPT09IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gICAgICBjb25zdCBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcEFsaWdubWVudCA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZFBsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiA9IGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gIT09ICdub25lJztcbiAgICAgIGlmICghc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzICYmIGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzLnB1c2goLi4uZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uLCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHMgPSBbaW5pdGlhbFBsYWNlbWVudCwgLi4uZmFsbGJhY2tQbGFjZW1lbnRzXTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBvdmVyZmxvd3MgPSBbXTtcbiAgICAgIGxldCBvdmVyZmxvd3NEYXRhID0gKChfbWlkZGxld2FyZURhdGEkZmxpcCA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcC5vdmVyZmxvd3MpIHx8IFtdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZV0pO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IHNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKTtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZXNbMF1dLCBvdmVyZmxvd1tzaWRlc1sxXV0pO1xuICAgICAgfVxuICAgICAgb3ZlcmZsb3dzRGF0YSA9IFsuLi5vdmVyZmxvd3NEYXRhLCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzXG4gICAgICB9XTtcblxuICAgICAgLy8gT25lIG9yIG1vcmUgc2lkZXMgaXMgb3ZlcmZsb3dpbmcuXG4gICAgICBpZiAoIW92ZXJmbG93cy5ldmVyeShzaWRlID0+IHNpZGUgPD0gMCkpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRmbGlwMiwgX292ZXJmbG93c0RhdGEkZmlsdGVyO1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoKChfbWlkZGxld2FyZURhdGEkZmxpcDIgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAyLmluZGV4KSB8fCAwKSArIDE7XG4gICAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzW25leHRJbmRleF07XG4gICAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgICAgLy8gVHJ5IG5leHQgcGxhY2VtZW50IGFuZCByZS1ydW4gdGhlIGxpZmVjeWNsZS5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBpbmRleDogbmV4dEluZGV4LFxuICAgICAgICAgICAgICBvdmVyZmxvd3M6IG92ZXJmbG93c0RhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmlyc3QsIGZpbmQgdGhlIGNhbmRpZGF0ZXMgdGhhdCBmaXQgb24gdGhlIG1haW5BeGlzIHNpZGUgb2Ygb3ZlcmZsb3csXG4gICAgICAgIC8vIHRoZW4gZmluZCB0aGUgcGxhY2VtZW50IHRoYXQgZml0cyB0aGUgYmVzdCBvbiB0aGUgbWFpbiBjcm9zc0F4aXMgc2lkZS5cbiAgICAgICAgbGV0IHJlc2V0UGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlciA9IG92ZXJmbG93c0RhdGEuZmlsdGVyKGQgPT4gZC5vdmVyZmxvd3NbMF0gPD0gMCkuc29ydCgoYSwgYikgPT4gYS5vdmVyZmxvd3NbMV0gLSBiLm92ZXJmbG93c1sxXSlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIucGxhY2VtZW50O1xuXG4gICAgICAgIC8vIE90aGVyd2lzZSBmYWxsYmFjay5cbiAgICAgICAgaWYgKCFyZXNldFBsYWNlbWVudCkge1xuICAgICAgICAgIHN3aXRjaCAoZmFsbGJhY2tTdHJhdGVneSkge1xuICAgICAgICAgICAgY2FzZSAnYmVzdEZpdCc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgX292ZXJmbG93c0RhdGEkZmlsdGVyMjtcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZW1lbnQgPSAoX292ZXJmbG93c0RhdGEkZmlsdGVyMiA9IG92ZXJmbG93c0RhdGEuZmlsdGVyKGQgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNpZGVBeGlzID0gZ2V0U2lkZUF4aXMoZC5wbGFjZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFNpZGVBeGlzID09PSBpbml0aWFsU2lkZUF4aXMgfHxcbiAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgYmlhcyB0byB0aGUgYHlgIHNpZGUgYXhpcyBkdWUgdG8gaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgICAgICAvLyByZWFkaW5nIGRpcmVjdGlvbnMgZmF2b3JpbmcgZ3JlYXRlciB3aWR0aC5cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNpZGVBeGlzID09PSAneSc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KS5tYXAoZCA9PiBbZC5wbGFjZW1lbnQsIGQub3ZlcmZsb3dzLmZpbHRlcihvdmVyZmxvdyA9PiBvdmVyZmxvdyA+IDApLnJlZHVjZSgoYWNjLCBvdmVyZmxvdykgPT4gYWNjICsgb3ZlcmZsb3csIDApXSkuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyMlswXTtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2luaXRpYWxQbGFjZW1lbnQnOlxuICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhY2VtZW50ICE9PSByZXNldFBsYWNlbWVudCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICBwbGFjZW1lbnQ6IHJlc2V0UGxhY2VtZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0KSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQsXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGhcbiAgfTtcbn1cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gc2lkZXMuc29tZShzaWRlID0+IG92ZXJmbG93W3NpZGVdID49IDApO1xufVxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2hpZGUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVjdHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3RyYXRlZ3kgPSAncmVmZXJlbmNlSGlkZGVuJyxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgc3dpdGNoIChzdHJhdGVneSkge1xuICAgICAgICBjYXNlICdyZWZlcmVuY2VIaWRkZW4nOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgICAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbk9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlSGlkZGVuOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2VzY2FwZWQnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgICAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3RzLmZsb2F0aW5nKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkT2Zmc2V0czogb2Zmc2V0cyxcbiAgICAgICAgICAgICAgICBlc2NhcGVkOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdHMpIHtcbiAgY29uc3QgbWluWCA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LmxlZnQpKTtcbiAgY29uc3QgbWluWSA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnRvcCkpO1xuICBjb25zdCBtYXhYID0gbWF4KC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgY29uc3QgbWF4WSA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LmJvdHRvbSkpO1xuICByZXR1cm4ge1xuICAgIHg6IG1pblgsXG4gICAgeTogbWluWSxcbiAgICB3aWR0aDogbWF4WCAtIG1pblgsXG4gICAgaGVpZ2h0OiBtYXhZIC0gbWluWVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UmVjdHNCeUxpbmUocmVjdHMpIHtcbiAgY29uc3Qgc29ydGVkUmVjdHMgPSByZWN0cy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IGEueSAtIGIueSk7XG4gIGNvbnN0IGdyb3VwcyA9IFtdO1xuICBsZXQgcHJldlJlY3QgPSBudWxsO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZFJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcmVjdCA9IHNvcnRlZFJlY3RzW2ldO1xuICAgIGlmICghcHJldlJlY3QgfHwgcmVjdC55IC0gcHJldlJlY3QueSA+IHByZXZSZWN0LmhlaWdodCAvIDIpIHtcbiAgICAgIGdyb3Vwcy5wdXNoKFtyZWN0XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3Vwc1tncm91cHMubGVuZ3RoIC0gMV0ucHVzaChyZWN0KTtcbiAgICB9XG4gICAgcHJldlJlY3QgPSByZWN0O1xuICB9XG4gIHJldHVybiBncm91cHMubWFwKHJlY3QgPT4gcmVjdFRvQ2xpZW50UmVjdChnZXRCb3VuZGluZ1JlY3QocmVjdCkpKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgaW1wcm92ZWQgcG9zaXRpb25pbmcgZm9yIGlubGluZSByZWZlcmVuY2UgZWxlbWVudHMgdGhhdCBjYW4gc3BhblxuICogb3ZlciBtdWx0aXBsZSBsaW5lcywgc3VjaCBhcyBoeXBlcmxpbmtzIG9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaW5saW5lXG4gKi9cbmNvbnN0IGlubGluZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnaW5saW5lJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIC8vIEEgTW91c2VFdmVudCdzIGNsaWVudHtYLFl9IGNvb3JkcyBjYW4gYmUgdXAgdG8gMiBwaXhlbHMgb2ZmIGFcbiAgICAgIC8vIENsaWVudFJlY3QncyBib3VuZHMsIGRlc3BpdGUgdGhlIGV2ZW50IGxpc3RlbmVyIGJlaW5nIHRyaWdnZXJlZC4gQVxuICAgICAgLy8gcGFkZGluZyBvZiAyIHNlZW1zIHRvIGhhbmRsZSB0aGlzIGlzc3VlLlxuICAgICAgY29uc3Qge1xuICAgICAgICBwYWRkaW5nID0gMixcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IG5hdGl2ZUNsaWVudFJlY3RzID0gQXJyYXkuZnJvbSgoYXdhaXQgKHBsYXRmb3JtLmdldENsaWVudFJlY3RzID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyhlbGVtZW50cy5yZWZlcmVuY2UpKSkgfHwgW10pO1xuICAgICAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRSZWN0c0J5TGluZShuYXRpdmVDbGllbnRSZWN0cyk7XG4gICAgICBjb25zdCBmYWxsYmFjayA9IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KG5hdGl2ZUNsaWVudFJlY3RzKSk7XG4gICAgICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgICAgIGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIHR3byByZWN0cyBhbmQgdGhleSBhcmUgZGlzam9pbmVkLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID09PSAyICYmIGNsaWVudFJlY3RzWzBdLmxlZnQgPiBjbGllbnRSZWN0c1sxXS5yaWdodCAmJiB4ICE9IG51bGwgJiYgeSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgcmVjdCBpbiB3aGljaCB0aGUgcG9pbnQgaXMgZnVsbHkgaW5zaWRlLlxuICAgICAgICAgIHJldHVybiBjbGllbnRSZWN0cy5maW5kKHJlY3QgPT4geCA+IHJlY3QubGVmdCAtIHBhZGRpbmdPYmplY3QubGVmdCAmJiB4IDwgcmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQgJiYgeSA+IHJlY3QudG9wIC0gcGFkZGluZ09iamVjdC50b3AgJiYgeSA8IHJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20pIHx8IGZhbGxiYWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlcmUgYXJlIDIgb3IgbW9yZSBjb25uZWN0ZWQgcmVjdHMuXG4gICAgICAgIGlmIChjbGllbnRSZWN0cy5sZW5ndGggPj0gMikge1xuICAgICAgICAgIGlmIChnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneScpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICAgICAgICAgICAgY29uc3QgbGFzdFJlY3QgPSBjbGllbnRSZWN0c1tjbGllbnRSZWN0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IGlzVG9wID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAndG9wJztcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IGZpcnN0UmVjdC50b3A7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBsYXN0UmVjdC5ib3R0b207XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gaXNUb3AgPyBmaXJzdFJlY3QubGVmdCA6IGxhc3RSZWN0LmxlZnQ7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGlzVG9wID8gZmlyc3RSZWN0LnJpZ2h0IDogbGFzdFJlY3QucmlnaHQ7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgeDogbGVmdCxcbiAgICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpc0xlZnRTaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAnbGVmdCc7XG4gICAgICAgICAgY29uc3QgbWF4UmlnaHQgPSBtYXgoLi4uY2xpZW50UmVjdHMubWFwKHJlY3QgPT4gcmVjdC5yaWdodCkpO1xuICAgICAgICAgIGNvbnN0IG1pbkxlZnQgPSBtaW4oLi4uY2xpZW50UmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gICAgICAgICAgY29uc3QgbWVhc3VyZVJlY3RzID0gY2xpZW50UmVjdHMuZmlsdGVyKHJlY3QgPT4gaXNMZWZ0U2lkZSA/IHJlY3QubGVmdCA9PT0gbWluTGVmdCA6IHJlY3QucmlnaHQgPT09IG1heFJpZ2h0KTtcbiAgICAgICAgICBjb25zdCB0b3AgPSBtZWFzdXJlUmVjdHNbMF0udG9wO1xuICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IG1lYXN1cmVSZWN0c1ttZWFzdXJlUmVjdHMubGVuZ3RoIC0gMV0uYm90dG9tO1xuICAgICAgICAgIGNvbnN0IGxlZnQgPSBtaW5MZWZ0O1xuICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gbWF4UmlnaHQ7XG4gICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICB5OiB0b3BcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc2V0UmVjdHMgPSBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgICAgICByZWZlcmVuY2U6IHtcbiAgICAgICAgICBnZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAgICAgICAgfSxcbiAgICAgICAgZmxvYXRpbmc6IGVsZW1lbnRzLmZsb2F0aW5nLFxuICAgICAgICBzdHJhdGVneVxuICAgICAgfSk7XG4gICAgICBpZiAocmVjdHMucmVmZXJlbmNlLnggIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnggfHwgcmVjdHMucmVmZXJlbmNlLnkgIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnkgfHwgcmVjdHMucmVmZXJlbmNlLndpZHRoICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS53aWR0aCB8fCByZWN0cy5yZWZlcmVuY2UuaGVpZ2h0ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcmVjdHM6IHJlc2V0UmVjdHNcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLy8gRm9yIHR5cGUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHksIHRoZSBgT2Zmc2V0T3B0aW9uc2AgdHlwZSB3YXMgYWxzb1xuLy8gRGVyaXZhYmxlLlxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50LFxuICAgIHBsYXRmb3JtLFxuICAgIGVsZW1lbnRzXG4gIH0gPSBzdGF0ZTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgY29uc3QgbWFpbkF4aXNNdWx0aSA9IFsnbGVmdCcsICd0b3AnXS5pbmNsdWRlcyhzaWRlKSA/IC0xIDogMTtcbiAgY29uc3QgY3Jvc3NBeGlzTXVsdGkgPSBydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMTtcbiAgY29uc3QgcmF3VmFsdWUgPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQge1xuICAgIG1haW5BeGlzLFxuICAgIGNyb3NzQXhpcyxcbiAgICBhbGlnbm1lbnRBeGlzXG4gIH0gPSB0eXBlb2YgcmF3VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZSxcbiAgICBjcm9zc0F4aXM6IDAsXG4gICAgYWxpZ25tZW50QXhpczogbnVsbFxuICB9IDoge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZS5tYWluQXhpcyB8fCAwLFxuICAgIGNyb3NzQXhpczogcmF3VmFsdWUuY3Jvc3NBeGlzIHx8IDAsXG4gICAgYWxpZ25tZW50QXhpczogcmF3VmFsdWUuYWxpZ25tZW50QXhpc1xuICB9O1xuICBpZiAoYWxpZ25tZW50ICYmIHR5cGVvZiBhbGlnbm1lbnRBeGlzID09PSAnbnVtYmVyJykge1xuICAgIGNyb3NzQXhpcyA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyBhbGlnbm1lbnRBeGlzICogLTEgOiBhbGlnbm1lbnRBeGlzO1xuICB9XG4gIHJldHVybiBpc1ZlcnRpY2FsID8ge1xuICAgIHg6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpLFxuICAgIHk6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aVxuICB9IDoge1xuICAgIHg6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aSxcbiAgICB5OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aVxuICB9O1xufVxuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IDA7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkYXJyb3c7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGFcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IGRpZmZDb29yZHMgPSBhd2FpdCBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucyk7XG5cbiAgICAgIC8vIElmIHRoZSBwbGFjZW1lbnQgaXMgdGhlIHNhbWUgYW5kIHRoZSBhcnJvdyBjYXVzZWQgYW4gYWxpZ25tZW50IG9mZnNldFxuICAgICAgLy8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNoYW5nZSB0aGUgcG9zaXRpb25pbmcgY29vcmRpbmF0ZXMuXG4gICAgICBpZiAocGxhY2VtZW50ID09PSAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZS5wbGFjZW1lbnQpICYmIChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggKyBkaWZmQ29vcmRzLngsXG4gICAgICAgIHk6IHkgKyBkaWZmQ29vcmRzLnksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAuLi5kaWZmQ29vcmRzLFxuICAgICAgICAgIHBsYWNlbWVudFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2hpZnQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBsaW1pdGVyID0ge1xuICAgICAgICAgIGZuOiBfcmVmID0+IHtcbiAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH0gPSBfcmVmO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IG1haW5BeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IG1haW5BeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gbWFpbkF4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBtYWluQXhpc0Nvb3JkID0gY2xhbXAobWluLCBtYWluQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IG1pblNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IGNyb3NzQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XG4gICAgICAgIGNvbnN0IG1heCA9IGNyb3NzQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gY2xhbXAobWluLCBjcm9zc0F4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpbWl0ZWRDb29yZHMgPSBsaW1pdGVyLmZuKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5saW1pdGVkQ29vcmRzLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgeDogbGltaXRlZENvb3Jkcy54IC0geCxcbiAgICAgICAgICB5OiBsaW1pdGVkQ29vcmRzLnkgLSB5LFxuICAgICAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgICAgIFttYWluQXhpc106IGNoZWNrTWFpbkF4aXMsXG4gICAgICAgICAgICBbY3Jvc3NBeGlzXTogY2hlY2tDcm9zc0F4aXNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgb3B0aW9ucyxcbiAgICBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBvZmZzZXQgPSAwLFxuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSB0cnVlXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGNvbnN0IHJhd09mZnNldCA9IGV2YWx1YXRlKG9mZnNldCwgc3RhdGUpO1xuICAgICAgY29uc3QgY29tcHV0ZWRPZmZzZXQgPSB0eXBlb2YgcmF3T2Zmc2V0ID09PSAnbnVtYmVyJyA/IHtcbiAgICAgICAgbWFpbkF4aXM6IHJhd09mZnNldCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwXG4gICAgICB9IDoge1xuICAgICAgICBtYWluQXhpczogMCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwLFxuICAgICAgICAuLi5yYXdPZmZzZXRcbiAgICAgIH07XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dIC0gY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGlmIChtYWluQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAobWFpbkF4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJG9mZnNlMjtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICAgICAgY29uc3QgaXNPcmlnaW5TaWRlID0gWyd0b3AnLCAnbGVmdCddLmluY2x1ZGVzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgKGlzT3JpZ2luU2lkZSA/ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlW2Nyb3NzQXhpc10pIHx8IDAgOiAwKSArIChpc09yaWdpblNpZGUgPyAwIDogY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzKTtcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dICsgKGlzT3JpZ2luU2lkZSA/IDAgOiAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZTIgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UyW2Nyb3NzQXhpc10pIHx8IDApIC0gKGlzT3JpZ2luU2lkZSA/IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyA6IDApO1xuICAgICAgICBpZiAoY3Jvc3NBeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBcdTIwMTRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NpemUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfc3RhdGUkbWlkZGxld2FyZURhdGEsIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTI7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBseSA9ICgpID0+IHt9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNZQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IHJlY3RzLmZsb2F0aW5nO1xuICAgICAgbGV0IGhlaWdodFNpZGU7XG4gICAgICBsZXQgd2lkdGhTaWRlO1xuICAgICAgaWYgKHNpZGUgPT09ICd0b3AnIHx8IHNpZGUgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGhlaWdodFNpZGUgPSBzaWRlO1xuICAgICAgICB3aWR0aFNpZGUgPSBhbGlnbm1lbnQgPT09ICgoYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKSA/ICdzdGFydCcgOiAnZW5kJykgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGhTaWRlID0gc2lkZTtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyAndG9wJyA6ICdib3R0b20nO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nSGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3cudG9wIC0gb3ZlcmZsb3cuYm90dG9tO1xuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nV2lkdGggPSB3aWR0aCAtIG92ZXJmbG93LmxlZnQgLSBvdmVyZmxvdy5yaWdodDtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0ID0gbWluKGhlaWdodCAtIG92ZXJmbG93W2hlaWdodFNpZGVdLCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVXaWR0aCA9IG1pbih3aWR0aCAtIG92ZXJmbG93W3dpZHRoU2lkZV0sIG1heGltdW1DbGlwcGluZ1dpZHRoKTtcbiAgICAgIGNvbnN0IG5vU2hpZnQgPSAhc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQ7XG4gICAgICBsZXQgYXZhaWxhYmxlSGVpZ2h0ID0gb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQ7XG4gICAgICBsZXQgYXZhaWxhYmxlV2lkdGggPSBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoO1xuICAgICAgaWYgKChfc3RhdGUkbWlkZGxld2FyZURhdGEgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEuZW5hYmxlZC54KSB7XG4gICAgICAgIGF2YWlsYWJsZVdpZHRoID0gbWF4aW11bUNsaXBwaW5nV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEyLmVuYWJsZWQueSkge1xuICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQ7XG4gICAgICB9XG4gICAgICBpZiAobm9TaGlmdCAmJiAhYWxpZ25tZW50KSB7XG4gICAgICAgIGNvbnN0IHhNaW4gPSBtYXgob3ZlcmZsb3cubGVmdCwgMCk7XG4gICAgICAgIGNvbnN0IHhNYXggPSBtYXgob3ZlcmZsb3cucmlnaHQsIDApO1xuICAgICAgICBjb25zdCB5TWluID0gbWF4KG92ZXJmbG93LnRvcCwgMCk7XG4gICAgICAgIGNvbnN0IHlNYXggPSBtYXgob3ZlcmZsb3cuYm90dG9tLCAwKTtcbiAgICAgICAgaWYgKGlzWUF4aXMpIHtcbiAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9IHdpZHRoIC0gMiAqICh4TWluICE9PSAwIHx8IHhNYXggIT09IDAgPyB4TWluICsgeE1heCA6IG1heChvdmVyZmxvdy5sZWZ0LCBvdmVyZmxvdy5yaWdodCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGhlaWdodCAtIDIgKiAoeU1pbiAhPT0gMCB8fCB5TWF4ICE9PSAwID8geU1pbiArIHlNYXggOiBtYXgob3ZlcmZsb3cudG9wLCBvdmVyZmxvdy5ib3R0b20pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgYXBwbHkoe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYXZhaWxhYmxlV2lkdGgsXG4gICAgICAgIGF2YWlsYWJsZUhlaWdodFxuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXh0RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudHMuZmxvYXRpbmcpO1xuICAgICAgaWYgKHdpZHRoICE9PSBuZXh0RGltZW5zaW9ucy53aWR0aCB8fCBoZWlnaHQgIT09IG5leHREaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHNoaWZ0LCBzaXplIH07XG4iLCAiZnVuY3Rpb24gaGFzV2luZG93KCkge1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG59XG5mdW5jdGlvbiBnZXROb2RlTmFtZShub2RlKSB7XG4gIGlmIChpc05vZGUobm9kZSkpIHtcbiAgICByZXR1cm4gKG5vZGUubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgLy8gTW9ja2VkIG5vZGVzIGluIHRlc3RpbmcgZW52aXJvbm1lbnRzIG1heSBub3QgYmUgaW5zdGFuY2VzIG9mIE5vZGUuIEJ5XG4gIC8vIHJldHVybmluZyBgI2RvY3VtZW50YCBhbiBpbmZpbml0ZSBsb29wIHdvbid0IG9jY3VyLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzIzMTdcbiAgcmV0dXJuICcjZG9jdW1lbnQnO1xufVxuZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgdmFyIF9ub2RlJG93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiAobm9kZSA9PSBudWxsIHx8IChfbm9kZSRvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX25vZGUkb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgfHwgd2luZG93O1xufVxuZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KG5vZGUpIHtcbiAgdmFyIF9yZWY7XG4gIHJldHVybiAoX3JlZiA9IChpc05vZGUobm9kZSkgPyBub2RlLm93bmVyRG9jdW1lbnQgOiBub2RlLmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfcmVmLmRvY3VtZW50RWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzTm9kZSh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE5vZGUgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLk5vZGU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBFbGVtZW50IHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5FbGVtZW50O1xufVxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5IVE1MRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpIHx8IHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBTaGFkb3dSb290IHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5TaGFkb3dSb290O1xufVxuZnVuY3Rpb24gaXNPdmVyZmxvd0VsZW1lbnQoZWxlbWVudCkge1xuICBjb25zdCB7XG4gICAgb3ZlcmZsb3csXG4gICAgb3ZlcmZsb3dYLFxuICAgIG92ZXJmbG93WSxcbiAgICBkaXNwbGF5XG4gIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVufGNsaXAvLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpICYmICFbJ2lubGluZScsICdjb250ZW50cyddLmluY2x1ZGVzKGRpc3BsYXkpO1xufVxuZnVuY3Rpb24gaXNUYWJsZUVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gWyd0YWJsZScsICd0ZCcsICd0aCddLmluY2x1ZGVzKGdldE5vZGVOYW1lKGVsZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGlzVG9wTGF5ZXIoZWxlbWVudCkge1xuICByZXR1cm4gWyc6cG9wb3Zlci1vcGVuJywgJzptb2RhbCddLnNvbWUoc2VsZWN0b3IgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIGlzQ29udGFpbmluZ0Jsb2NrKGVsZW1lbnRPckNzcykge1xuICBjb25zdCB3ZWJraXQgPSBpc1dlYktpdCgpO1xuICBjb25zdCBjc3MgPSBpc0VsZW1lbnQoZWxlbWVudE9yQ3NzKSA/IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudE9yQ3NzKSA6IGVsZW1lbnRPckNzcztcblxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuICByZXR1cm4gY3NzLnRyYW5zZm9ybSAhPT0gJ25vbmUnIHx8IGNzcy5wZXJzcGVjdGl2ZSAhPT0gJ25vbmUnIHx8IChjc3MuY29udGFpbmVyVHlwZSA/IGNzcy5jb250YWluZXJUeXBlICE9PSAnbm9ybWFsJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuYmFja2Ryb3BGaWx0ZXIgPyBjc3MuYmFja2Ryb3BGaWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuZmlsdGVyID8gY3NzLmZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IFsndHJhbnNmb3JtJywgJ3BlcnNwZWN0aXZlJywgJ2ZpbHRlciddLnNvbWUodmFsdWUgPT4gKGNzcy53aWxsQ2hhbmdlIHx8ICcnKS5pbmNsdWRlcyh2YWx1ZSkpIHx8IFsncGFpbnQnLCAnbGF5b3V0JywgJ3N0cmljdCcsICdjb250ZW50J10uc29tZSh2YWx1ZSA9PiAoY3NzLmNvbnRhaW4gfHwgJycpLmluY2x1ZGVzKHZhbHVlKSk7XG59XG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICBsZXQgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICB3aGlsZSAoaXNIVE1MRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBpZiAoaXNDb250YWluaW5nQmxvY2soY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgfSBlbHNlIGlmIChpc1RvcExheWVyKGN1cnJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShjdXJyZW50Tm9kZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBpc1dlYktpdCgpIHtcbiAgaWYgKHR5cGVvZiBDU1MgPT09ICd1bmRlZmluZWQnIHx8ICFDU1Muc3VwcG9ydHMpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIENTUy5zdXBwb3J0cygnLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXInLCAnbm9uZScpO1xufVxuZnVuY3Rpb24gaXNMYXN0VHJhdmVyc2FibGVOb2RlKG5vZGUpIHtcbiAgcmV0dXJuIFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddLmluY2x1ZGVzKGdldE5vZGVOYW1lKG5vZGUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59XG5mdW5jdGlvbiBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpIHtcbiAgaWYgKGlzRWxlbWVudChlbGVtZW50KSkge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsWCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsWVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShub2RlKSB7XG4gIGlmIChnZXROb2RlTmFtZShub2RlKSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID1cbiAgLy8gU3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGUuXG4gIG5vZGUuYXNzaWduZWRTbG90IHx8XG4gIC8vIERPTSBFbGVtZW50IGRldGVjdGVkLlxuICBub2RlLnBhcmVudE5vZGUgfHxcbiAgLy8gU2hhZG93Um9vdCBkZXRlY3RlZC5cbiAgaXNTaGFkb3dSb290KG5vZGUpICYmIG5vZGUuaG9zdCB8fFxuICAvLyBGYWxsYmFjay5cbiAgZ2V0RG9jdW1lbnRFbGVtZW50KG5vZGUpO1xuICByZXR1cm4gaXNTaGFkb3dSb290KHJlc3VsdCkgPyByZXN1bHQuaG9zdCA6IHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUobm9kZSk7XG4gIGlmIChpc0xhc3RUcmF2ZXJzYWJsZU5vZGUocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50ID8gbm9kZS5vd25lckRvY3VtZW50LmJvZHkgOiBub2RlLmJvZHk7XG4gIH1cbiAgaWYgKGlzSFRNTEVsZW1lbnQocGFyZW50Tm9kZSkgJiYgaXNPdmVyZmxvd0VsZW1lbnQocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gcGFyZW50Tm9kZTtcbiAgfVxuICByZXR1cm4gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3IocGFyZW50Tm9kZSk7XG59XG5mdW5jdGlvbiBnZXRPdmVyZmxvd0FuY2VzdG9ycyhub2RlLCBsaXN0LCB0cmF2ZXJzZUlmcmFtZXMpIHtcbiAgdmFyIF9ub2RlJG93bmVyRG9jdW1lbnQyO1xuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG4gIGlmICh0cmF2ZXJzZUlmcmFtZXMgPT09IHZvaWQgMCkge1xuICAgIHRyYXZlcnNlSWZyYW1lcyA9IHRydWU7XG4gIH1cbiAgY29uc3Qgc2Nyb2xsYWJsZUFuY2VzdG9yID0gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3Iobm9kZSk7XG4gIGNvbnN0IGlzQm9keSA9IHNjcm9sbGFibGVBbmNlc3RvciA9PT0gKChfbm9kZSRvd25lckRvY3VtZW50MiA9IG5vZGUub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9ub2RlJG93bmVyRG9jdW1lbnQyLmJvZHkpO1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsYWJsZUFuY2VzdG9yKTtcbiAgaWYgKGlzQm9keSkge1xuICAgIGNvbnN0IGZyYW1lRWxlbWVudCA9IGdldEZyYW1lRWxlbWVudCh3aW4pO1xuICAgIHJldHVybiBsaXN0LmNvbmNhdCh3aW4sIHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNPdmVyZmxvd0VsZW1lbnQoc2Nyb2xsYWJsZUFuY2VzdG9yKSA/IHNjcm9sbGFibGVBbmNlc3RvciA6IFtdLCBmcmFtZUVsZW1lbnQgJiYgdHJhdmVyc2VJZnJhbWVzID8gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZnJhbWVFbGVtZW50KSA6IFtdKTtcbiAgfVxuICByZXR1cm4gbGlzdC5jb25jYXQoc2Nyb2xsYWJsZUFuY2VzdG9yLCBnZXRPdmVyZmxvd0FuY2VzdG9ycyhzY3JvbGxhYmxlQW5jZXN0b3IsIFtdLCB0cmF2ZXJzZUlmcmFtZXMpKTtcbn1cbmZ1bmN0aW9uIGdldEZyYW1lRWxlbWVudCh3aW4pIHtcbiAgcmV0dXJuIHdpbi5wYXJlbnQgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHdpbi5wYXJlbnQpID8gd2luLmZyYW1lRWxlbWVudCA6IG51bGw7XG59XG5cbmV4cG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGdldENvbnRhaW5pbmdCbG9jaywgZ2V0RG9jdW1lbnRFbGVtZW50LCBnZXRGcmFtZUVsZW1lbnQsIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yLCBnZXROb2RlTmFtZSwgZ2V0Tm9kZVNjcm9sbCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGdldFdpbmRvdywgaXNDb250YWluaW5nQmxvY2ssIGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc05vZGUsIGlzT3ZlcmZsb3dFbGVtZW50LCBpc1NoYWRvd1Jvb3QsIGlzVGFibGVFbGVtZW50LCBpc1RvcExheWVyLCBpc1dlYktpdCB9O1xuIiwgImltcG9ydCB7IHJlY3RUb0NsaWVudFJlY3QsIGRldGVjdE92ZXJmbG93IGFzIGRldGVjdE92ZXJmbG93JDEsIG9mZnNldCBhcyBvZmZzZXQkMSwgYXV0b1BsYWNlbWVudCBhcyBhdXRvUGxhY2VtZW50JDEsIHNoaWZ0IGFzIHNoaWZ0JDEsIGZsaXAgYXMgZmxpcCQxLCBzaXplIGFzIHNpemUkMSwgaGlkZSBhcyBoaWRlJDEsIGFycm93IGFzIGFycm93JDEsIGlubGluZSBhcyBpbmxpbmUkMSwgbGltaXRTaGlmdCBhcyBsaW1pdFNoaWZ0JDEsIGNvbXB1dGVQb3NpdGlvbiBhcyBjb21wdXRlUG9zaXRpb24kMSB9IGZyb20gJ0BmbG9hdGluZy11aS9jb3JlJztcbmltcG9ydCB7IHJvdW5kLCBjcmVhdGVDb29yZHMsIG1heCwgbWluLCBmbG9vciB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5pbXBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBpc0hUTUxFbGVtZW50LCBpc0VsZW1lbnQsIGdldFdpbmRvdywgaXNXZWJLaXQsIGdldEZyYW1lRWxlbWVudCwgZ2V0Tm9kZVNjcm9sbCwgZ2V0RG9jdW1lbnRFbGVtZW50LCBpc1RvcExheWVyLCBnZXROb2RlTmFtZSwgaXNPdmVyZmxvd0VsZW1lbnQsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUsIGlzQ29udGFpbmluZ0Jsb2NrLCBpc1RhYmxlRWxlbWVudCwgZ2V0Q29udGFpbmluZ0Jsb2NrIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5leHBvcnQgeyBnZXRPdmVyZmxvd0FuY2VzdG9ycyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuXG5mdW5jdGlvbiBnZXRDc3NEaW1lbnNpb25zKGVsZW1lbnQpIHtcbiAgY29uc3QgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgLy8gSW4gdGVzdGluZyBlbnZpcm9ubWVudHMsIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFyZSBlbXB0eVxuICAvLyBzdHJpbmdzIGZvciBTVkcgZWxlbWVudHMsIHJldHVybmluZyBOYU4uIEZhbGxiYWNrIHRvIGAwYCBpbiB0aGlzIGNhc2UuXG4gIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoY3NzLndpZHRoKSB8fCAwO1xuICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChjc3MuaGVpZ2h0KSB8fCAwO1xuICBjb25zdCBoYXNPZmZzZXQgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBvZmZzZXRXaWR0aCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0V2lkdGggOiB3aWR0aDtcbiAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRIZWlnaHQgOiBoZWlnaHQ7XG4gIGNvbnN0IHNob3VsZEZhbGxiYWNrID0gcm91bmQod2lkdGgpICE9PSBvZmZzZXRXaWR0aCB8fCByb3VuZChoZWlnaHQpICE9PSBvZmZzZXRIZWlnaHQ7XG4gIGlmIChzaG91bGRGYWxsYmFjaykge1xuICAgIHdpZHRoID0gb2Zmc2V0V2lkdGg7XG4gICAgaGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICQ6IHNob3VsZEZhbGxiYWNrXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gIWlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgOiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZG9tRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29vcmRzKDEpO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBkb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZG9tRWxlbWVudCk7XG4gIGxldCB4ID0gKCQgPyByb3VuZChyZWN0LndpZHRoKSA6IHJlY3Qud2lkdGgpIC8gd2lkdGg7XG4gIGxldCB5ID0gKCQgPyByb3VuZChyZWN0LmhlaWdodCkgOiByZWN0LmhlaWdodCkgLyBoZWlnaHQ7XG5cbiAgLy8gMCwgTmFOLCBvciBJbmZpbml0eSBzaG91bGQgYWx3YXlzIGZhbGxiYWNrIHRvIDEuXG5cbiAgaWYgKCF4IHx8ICFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB4ID0gMTtcbiAgfVxuICBpZiAoIXkgfHwgIU51bWJlci5pc0Zpbml0ZSh5KSkge1xuICAgIHkgPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmNvbnN0IG5vT2Zmc2V0cyA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb29yZHMoMCk7XG5mdW5jdGlvbiBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoIWlzV2ViS2l0KCkgfHwgIXdpbi52aXN1YWxWaWV3cG9ydCkge1xuICAgIHJldHVybiBub09mZnNldHM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCxcbiAgICB5OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wXG4gIH07XG59XG5mdW5jdGlvbiBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGVsZW1lbnQsIGlzRml4ZWQsIGZsb2F0aW5nT2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKCFmbG9hdGluZ09mZnNldFBhcmVudCB8fCBpc0ZpeGVkICYmIGZsb2F0aW5nT2Zmc2V0UGFyZW50ICE9PSBnZXRXaW5kb3coZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBpZiAoaW5jbHVkZVNjYWxlKSB7XG4gICAgaWYgKG9mZnNldFBhcmVudCkge1xuICAgICAgaWYgKGlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpID8gZ2V0VmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgbGV0IHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgdmlzdWFsT2Zmc2V0cy54KSAvIHNjYWxlLng7XG4gIGxldCB5ID0gKGNsaWVudFJlY3QudG9wICsgdmlzdWFsT2Zmc2V0cy55KSAvIHNjYWxlLnk7XG4gIGxldCB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZS54O1xuICBsZXQgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZS55O1xuICBpZiAoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhkb21FbGVtZW50KTtcbiAgICBjb25zdCBvZmZzZXRXaW4gPSBvZmZzZXRQYXJlbnQgJiYgaXNFbGVtZW50KG9mZnNldFBhcmVudCkgPyBnZXRXaW5kb3cob2Zmc2V0UGFyZW50KSA6IG9mZnNldFBhcmVudDtcbiAgICBsZXQgY3VycmVudFdpbiA9IHdpbjtcbiAgICBsZXQgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB3aGlsZSAoY3VycmVudElGcmFtZSAmJiBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0V2luICE9PSBjdXJyZW50V2luKSB7XG4gICAgICBjb25zdCBpZnJhbWVTY2FsZSA9IGdldFNjYWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgaWZyYW1lUmVjdCA9IGN1cnJlbnRJRnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgbGVmdCA9IGlmcmFtZVJlY3QubGVmdCArIChjdXJyZW50SUZyYW1lLmNsaWVudExlZnQgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nTGVmdCkpICogaWZyYW1lU2NhbGUueDtcbiAgICAgIGNvbnN0IHRvcCA9IGlmcmFtZVJlY3QudG9wICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50VG9wICsgcGFyc2VGbG9hdChjc3MucGFkZGluZ1RvcCkpICogaWZyYW1lU2NhbGUueTtcbiAgICAgIHggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIHkgKj0gaWZyYW1lU2NhbGUueTtcbiAgICAgIHdpZHRoICo9IGlmcmFtZVNjYWxlLng7XG4gICAgICBoZWlnaHQgKj0gaWZyYW1lU2NhbGUueTtcbiAgICAgIHggKz0gbGVmdDtcbiAgICAgIHkgKz0gdG9wO1xuICAgICAgY3VycmVudFdpbiA9IGdldFdpbmRvdyhjdXJyZW50SUZyYW1lKTtcbiAgICAgIGN1cnJlbnRJRnJhbWUgPSBnZXRGcmFtZUVsZW1lbnQoY3VycmVudFdpbik7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0VG9DbGllbnRSZWN0KHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH0pO1xufVxuXG4vLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4vLyBpbmNvcnJlY3QgZm9yIFJUTC5cbmZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCwgcmVjdCkge1xuICBjb25zdCBsZWZ0U2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xuICBpZiAoIXJlY3QpIHtcbiAgICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGxlZnRTY3JvbGw7XG4gIH1cbiAgcmV0dXJuIHJlY3QubGVmdCArIGxlZnRTY3JvbGw7XG59XG5cbmZ1bmN0aW9uIGdldEhUTUxPZmZzZXQoZG9jdW1lbnRFbGVtZW50LCBzY3JvbGwsIGlnbm9yZVNjcm9sbGJhclgpIHtcbiAgaWYgKGlnbm9yZVNjcm9sbGJhclggPT09IHZvaWQgMCkge1xuICAgIGlnbm9yZVNjcm9sbGJhclggPSBmYWxzZTtcbiAgfVxuICBjb25zdCBodG1sUmVjdCA9IGRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeCA9IGh0bWxSZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIChpZ25vcmVTY3JvbGxiYXJYID8gMCA6XG4gIC8vIFJUTCA8Ym9keT4gc2Nyb2xsYmFyLlxuICBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCwgaHRtbFJlY3QpKTtcbiAgY29uc3QgeSA9IGh0bWxSZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3A7XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50cyxcbiAgICByZWN0LFxuICAgIG9mZnNldFBhcmVudCxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgaXNGaXhlZCA9IHN0cmF0ZWd5ID09PSAnZml4ZWQnO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgdG9wTGF5ZXIgPSBlbGVtZW50cyA/IGlzVG9wTGF5ZXIoZWxlbWVudHMuZmxvYXRpbmcpIDogZmFsc2U7XG4gIGlmIChvZmZzZXRQYXJlbnQgPT09IGRvY3VtZW50RWxlbWVudCB8fCB0b3BMYXllciAmJiBpc0ZpeGVkKSB7XG4gICAgcmV0dXJuIHJlY3Q7XG4gIH1cbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBsZXQgc2NhbGUgPSBjcmVhdGVDb29yZHMoMSk7XG4gIGNvbnN0IG9mZnNldHMgPSBjcmVhdGVDb29yZHMoMCk7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCBpc092ZXJmbG93RWxlbWVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50KTtcbiAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIG9mZnNldHMueCA9IG9mZnNldFJlY3QueCArIG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ID0gb2Zmc2V0UmVjdC55ICsgb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9XG4gIH1cbiAgY29uc3QgaHRtbE9mZnNldCA9IGRvY3VtZW50RWxlbWVudCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQgPyBnZXRIVE1MT2Zmc2V0KGRvY3VtZW50RWxlbWVudCwgc2Nyb2xsLCB0cnVlKSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogcmVjdC53aWR0aCAqIHNjYWxlLngsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCAqIHNjYWxlLnksXG4gICAgeDogcmVjdC54ICogc2NhbGUueCAtIHNjcm9sbC5zY3JvbGxMZWZ0ICogc2NhbGUueCArIG9mZnNldHMueCArIGh0bWxPZmZzZXQueCxcbiAgICB5OiByZWN0LnkgKiBzY2FsZS55IC0gc2Nyb2xsLnNjcm9sbFRvcCAqIHNjYWxlLnkgKyBvZmZzZXRzLnkgKyBodG1sT2Zmc2V0LnlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHMoZWxlbWVudCkge1xuICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LmdldENsaWVudFJlY3RzKCkpO1xufVxuXG4vLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlLlxuZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3Qgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KTtcbiAgY29uc3QgYm9keSA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5O1xuICBjb25zdCB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5LnNjcm9sbFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKTtcbiAgY29uc3QgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keS5zY3JvbGxIZWlnaHQsIGJvZHkuY2xpZW50SGVpZ2h0KTtcbiAgbGV0IHggPSAtc2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICBjb25zdCB5ID0gLXNjcm9sbC5zY3JvbGxUb3A7XG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKSAtIHdpZHRoO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCB2aXN1YWxWaWV3cG9ydCA9IHdpbi52aXN1YWxWaWV3cG9ydDtcbiAgbGV0IHdpZHRoID0gaHRtbC5jbGllbnRXaWR0aDtcbiAgbGV0IGhlaWdodCA9IGh0bWwuY2xpZW50SGVpZ2h0O1xuICBsZXQgeCA9IDA7XG4gIGxldCB5ID0gMDtcbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgY29uc3QgdmlzdWFsVmlld3BvcnRCYXNlZCA9IGlzV2ViS2l0KCk7XG4gICAgaWYgKCF2aXN1YWxWaWV3cG9ydEJhc2VkIHx8IHZpc3VhbFZpZXdwb3J0QmFzZWQgJiYgc3RyYXRlZ3kgPT09ICdmaXhlZCcpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbi8vIFJldHVybnMgdGhlIGlubmVyIGNsaWVudCByZWN0LCBzdWJ0cmFjdGluZyBzY3JvbGxiYXJzIGlmIHByZXNlbnQuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgY29uc3QgdG9wID0gY2xpZW50UmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgY29uc3QgbGVmdCA9IGNsaWVudFJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgY29uc3Qgc2NhbGUgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0U2NhbGUoZWxlbWVudCkgOiBjcmVhdGVDb29yZHMoMSk7XG4gIGNvbnN0IHdpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aCAqIHNjYWxlLng7XG4gIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICogc2NhbGUueTtcbiAgY29uc3QgeCA9IGxlZnQgKiBzY2FsZS54O1xuICBjb25zdCB5ID0gdG9wICogc2NhbGUueTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpIHtcbiAgbGV0IHJlY3Q7XG4gIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAndmlld3BvcnQnKSB7XG4gICAgcmVjdCA9IGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSk7XG4gIH0gZWxzZSBpZiAoY2xpcHBpbmdBbmNlc3RvciA9PT0gJ2RvY3VtZW50Jykge1xuICAgIHJlY3QgPSBnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKTtcbiAgfSBlbHNlIGlmIChpc0VsZW1lbnQoY2xpcHBpbmdBbmNlc3RvcikpIHtcbiAgICByZWN0ID0gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHZpc3VhbE9mZnNldHMgPSBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpO1xuICAgIHJlY3QgPSB7XG4gICAgICB4OiBjbGlwcGluZ0FuY2VzdG9yLnggLSB2aXN1YWxPZmZzZXRzLngsXG4gICAgICB5OiBjbGlwcGluZ0FuY2VzdG9yLnkgLSB2aXN1YWxPZmZzZXRzLnksXG4gICAgICB3aWR0aDogY2xpcHBpbmdBbmNlc3Rvci53aWR0aCxcbiAgICAgIGhlaWdodDogY2xpcHBpbmdBbmNlc3Rvci5oZWlnaHRcbiAgICB9O1xuICB9XG4gIHJldHVybiByZWN0VG9DbGllbnRSZWN0KHJlY3QpO1xufVxuZnVuY3Rpb24gaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIHN0b3BOb2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICBpZiAocGFyZW50Tm9kZSA9PT0gc3RvcE5vZGUgfHwgIWlzRWxlbWVudChwYXJlbnROb2RlKSB8fCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUocGFyZW50Tm9kZSkucG9zaXRpb24gPT09ICdmaXhlZCcgfHwgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKHBhcmVudE5vZGUsIHN0b3BOb2RlKTtcbn1cblxuLy8gQSBcImNsaXBwaW5nIGFuY2VzdG9yXCIgaXMgYW4gYG92ZXJmbG93YCBlbGVtZW50IHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBjaGlsZCBlbGVtZW50cy4gVGhpcyByZXR1cm5zIGFsbCBjbGlwcGluZyBhbmNlc3RvcnNcbi8vIG9mIHRoZSBnaXZlbiBlbGVtZW50IHVwIHRoZSB0cmVlLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIGNhY2hlKSB7XG4gIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGNhY2hlLmdldChlbGVtZW50KTtcbiAgaWYgKGNhY2hlZFJlc3VsdCkge1xuICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gIH1cbiAgbGV0IHJlc3VsdCA9IGdldE92ZXJmbG93QW5jZXN0b3JzKGVsZW1lbnQsIFtdLCBmYWxzZSkuZmlsdGVyKGVsID0+IGlzRWxlbWVudChlbCkgJiYgZ2V0Tm9kZU5hbWUoZWwpICE9PSAnYm9keScpO1xuICBsZXQgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBudWxsO1xuICBjb25zdCBlbGVtZW50SXNGaXhlZCA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7XG4gICAgY29uc3QgY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgPSBpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSk7XG4gICAgaWYgKCFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZERyb3BDdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmICFjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA6ICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJyAmJiAhIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlICYmIFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmNsdWRlcyhjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZS5wb3NpdGlvbikgfHwgaXNPdmVyZmxvd0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgY3VycmVudE5vZGUpO1xuICAgIGlmIChzaG91bGREcm9wQ3VycmVudE5vZGUpIHtcbiAgICAgIC8vIERyb3Agbm9uLWNvbnRhaW5pbmcgYmxvY2tzLlxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihhbmNlc3RvciA9PiBhbmNlc3RvciAhPT0gY3VycmVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWNvcmQgbGFzdCBjb250YWluaW5nIGJsb2NrIGZvciBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICBjYWNoZS5zZXQoZWxlbWVudCwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgYW5jZXN0b3JzLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50LFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ0FuY2VzdG9ycycgPyBpc1RvcExheWVyKGVsZW1lbnQpID8gW10gOiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgdGhpcy5fYykgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICBjb25zdCBjbGlwcGluZ0FuY2VzdG9ycyA9IFsuLi5lbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMsIHJvb3RCb3VuZGFyeV07XG4gIGNvbnN0IGZpcnN0Q2xpcHBpbmdBbmNlc3RvciA9IGNsaXBwaW5nQW5jZXN0b3JzWzBdO1xuICBjb25zdCBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ0FuY2VzdG9ycy5yZWR1Y2UoKGFjY1JlY3QsIGNsaXBwaW5nQW5jZXN0b3IpID0+IHtcbiAgICBjb25zdCByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgZmlyc3RDbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICBoZWlnaHQ6IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wLFxuICAgIHg6IGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIHk6IGNsaXBwaW5nUmVjdC50b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGVsZW1lbnQsIG9mZnNldFBhcmVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCBpc092ZXJmbG93RWxlbWVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUsIGlzRml4ZWQsIG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIC8vIElmIHRoZSA8Ym9keT4gc2Nyb2xsYmFyIGFwcGVhcnMgb24gdGhlIGxlZnQgKGUuZy4gUlRMIHN5c3RlbXMpLiBVc2VcbiAgICAgIC8vIEZpcmVmb3ggd2l0aCBsYXlvdXQuc2Nyb2xsYmFyLnNpZGUgPSAzIGluIGFib3V0OmNvbmZpZyB0byB0ZXN0IHRoaXMuXG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIGNvbnN0IHggPSByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCAtIGh0bWxPZmZzZXQueDtcbiAgY29uc3QgeSA9IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSAtIGh0bWxPZmZzZXQueTtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1N0YXRpY1Bvc2l0aW9uZWQoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYyc7XG59XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpIHtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocG9seWZpbGwpIHtcbiAgICByZXR1cm4gcG9seWZpbGwoZWxlbWVudCk7XG4gIH1cbiAgbGV0IHJhd09mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXG4gIC8vIEZpcmVmb3ggcmV0dXJucyB0aGUgPGh0bWw+IGVsZW1lbnQgYXMgdGhlIG9mZnNldFBhcmVudCBpZiBpdCdzIG5vbi1zdGF0aWMsXG4gIC8vIHdoaWxlIENocm9tZSBhbmQgU2FmYXJpIHJldHVybiB0aGUgPGJvZHk+IGVsZW1lbnQuIFRoZSA8Ym9keT4gZWxlbWVudCBtdXN0XG4gIC8vIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29ycmVjdCBjYWxjdWxhdGlvbnMgZXZlbiBpZiB0aGUgPGh0bWw+IGVsZW1lbnQgaXNcbiAgLy8gbm9uLXN0YXRpYy5cbiAgaWYgKGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSA9PT0gcmF3T2Zmc2V0UGFyZW50KSB7XG4gICAgcmF3T2Zmc2V0UGFyZW50ID0gcmF3T2Zmc2V0UGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuICByZXR1cm4gcmF3T2Zmc2V0UGFyZW50O1xufVxuXG4vLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKGlzVG9wTGF5ZXIoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIGxldCBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICAgIHdoaWxlIChzdmdPZmZzZXRQYXJlbnQgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICBpZiAoaXNFbGVtZW50KHN2Z09mZnNldFBhcmVudCkgJiYgIWlzU3RhdGljUG9zaXRpb25lZChzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiBzdmdPZmZzZXRQYXJlbnQ7XG4gICAgICB9XG4gICAgICBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKHN2Z09mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiB3aW47XG4gIH1cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpO1xuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCwgcG9seWZpbGwpO1xuICB9XG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgaXNMYXN0VHJhdmVyc2FibGVOb2RlKG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkgJiYgIWlzQ29udGFpbmluZ0Jsb2NrKG9mZnNldFBhcmVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbjtcbn1cblxuY29uc3QgZ2V0RWxlbWVudFJlY3RzID0gYXN5bmMgZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZ2V0T2Zmc2V0UGFyZW50Rm4gPSB0aGlzLmdldE9mZnNldFBhcmVudCB8fCBnZXRPZmZzZXRQYXJlbnQ7XG4gIGNvbnN0IGdldERpbWVuc2lvbnNGbiA9IHRoaXMuZ2V0RGltZW5zaW9ucztcbiAgY29uc3QgZmxvYXRpbmdEaW1lbnNpb25zID0gYXdhaXQgZ2V0RGltZW5zaW9uc0ZuKGRhdGEuZmxvYXRpbmcpO1xuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZTogZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZGF0YS5yZWZlcmVuY2UsIGF3YWl0IGdldE9mZnNldFBhcmVudEZuKGRhdGEuZmxvYXRpbmcpLCBkYXRhLnN0cmF0ZWd5KSxcbiAgICBmbG9hdGluZzoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogZmxvYXRpbmdEaW1lbnNpb25zLndpZHRoLFxuICAgICAgaGVpZ2h0OiBmbG9hdGluZ0RpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5kaXJlY3Rpb24gPT09ICdydGwnO1xufVxuXG5jb25zdCBwbGF0Zm9ybSA9IHtcbiAgY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QsXG4gIGdldERvY3VtZW50RWxlbWVudCxcbiAgZ2V0Q2xpcHBpbmdSZWN0LFxuICBnZXRPZmZzZXRQYXJlbnQsXG4gIGdldEVsZW1lbnRSZWN0cyxcbiAgZ2V0Q2xpZW50UmVjdHMsXG4gIGdldERpbWVuc2lvbnMsXG4gIGdldFNjYWxlLFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMXG59O1xuXG4vLyBodHRwczovL3NhbXRob3IuYXUvMjAyMS9vYnNlcnZpbmctZG9tL1xuZnVuY3Rpb24gb2JzZXJ2ZU1vdmUoZWxlbWVudCwgb25Nb3ZlKSB7XG4gIGxldCBpbyA9IG51bGw7XG4gIGxldCB0aW1lb3V0SWQ7XG4gIGNvbnN0IHJvb3QgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgdmFyIF9pbztcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAoX2lvID0gaW8pID09IG51bGwgfHwgX2lvLmRpc2Nvbm5lY3QoKTtcbiAgICBpbyA9IG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gcmVmcmVzaChza2lwLCB0aHJlc2hvbGQpIHtcbiAgICBpZiAoc2tpcCA9PT0gdm9pZCAwKSB7XG4gICAgICBza2lwID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aHJlc2hvbGQgPT09IHZvaWQgMCkge1xuICAgICAgdGhyZXNob2xkID0gMTtcbiAgICB9XG4gICAgY2xlYW51cCgpO1xuICAgIGNvbnN0IHtcbiAgICAgIGxlZnQsXG4gICAgICB0b3AsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodFxuICAgIH0gPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmICghc2tpcCkge1xuICAgICAgb25Nb3ZlKCk7XG4gICAgfVxuICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnNldFRvcCA9IGZsb29yKHRvcCk7XG4gICAgY29uc3QgaW5zZXRSaWdodCA9IGZsb29yKHJvb3QuY2xpZW50V2lkdGggLSAobGVmdCArIHdpZHRoKSk7XG4gICAgY29uc3QgaW5zZXRCb3R0b20gPSBmbG9vcihyb290LmNsaWVudEhlaWdodCAtICh0b3AgKyBoZWlnaHQpKTtcbiAgICBjb25zdCBpbnNldExlZnQgPSBmbG9vcihsZWZ0KTtcbiAgICBjb25zdCByb290TWFyZ2luID0gLWluc2V0VG9wICsgXCJweCBcIiArIC1pbnNldFJpZ2h0ICsgXCJweCBcIiArIC1pbnNldEJvdHRvbSArIFwicHggXCIgKyAtaW5zZXRMZWZ0ICsgXCJweFwiO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290TWFyZ2luLFxuICAgICAgdGhyZXNob2xkOiBtYXgoMCwgbWluKDEsIHRocmVzaG9sZCkpIHx8IDFcbiAgICB9O1xuICAgIGxldCBpc0ZpcnN0VXBkYXRlID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBoYW5kbGVPYnNlcnZlKGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IHJhdGlvID0gZW50cmllc1swXS5pbnRlcnNlY3Rpb25SYXRpbztcbiAgICAgIGlmIChyYXRpbyAhPT0gdGhyZXNob2xkKSB7XG4gICAgICAgIGlmICghaXNGaXJzdFVwZGF0ZSkge1xuICAgICAgICAgIHJldHVybiByZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyYXRpbykge1xuICAgICAgICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgY2xpcHBlZCwgdGhlIHJhdGlvIGlzIDAuIFRocm90dGxlIHRoZSByZWZyZXNoXG4gICAgICAgICAgLy8gdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIG9mIHVwZGF0ZXMuXG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoKGZhbHNlLCAxZS03KTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZyZXNoKGZhbHNlLCByYXRpbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlzRmlyc3RVcGRhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IGEgYGRvY3VtZW50YCBhcyB0aGUgcm9vdCBhbmQgd2lsbCB0aHJvdyBhblxuICAgIC8vIGVycm9yLlxuICAgIHRyeSB7XG4gICAgICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVPYnNlcnZlLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC8vIEhhbmRsZSA8aWZyYW1lPnNcbiAgICAgICAgcm9vdDogcm9vdC5vd25lckRvY3VtZW50XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVPYnNlcnZlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaW8ub2JzZXJ2ZShlbGVtZW50KTtcbiAgfVxuICByZWZyZXNoKHRydWUpO1xuICByZXR1cm4gY2xlYW51cDtcbn1cblxuLyoqXG4gKiBBdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHdoZW4gbmVjZXNzYXJ5LlxuICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXMgbW91bnRlZCBvbiB0aGUgRE9NIG9yXG4gKiB2aXNpYmxlIG9uIHRoZSBzY3JlZW4uXG4gKiBAcmV0dXJucyBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGludm9rZWQgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBpc1xuICogcmVtb3ZlZCBmcm9tIHRoZSBET00gb3IgaGlkZGVuIGZyb20gdGhlIHNjcmVlbi5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvVXBkYXRlXG4gKi9cbmZ1bmN0aW9uIGF1dG9VcGRhdGUocmVmZXJlbmNlLCBmbG9hdGluZywgdXBkYXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIGFuY2VzdG9yU2Nyb2xsID0gdHJ1ZSxcbiAgICBhbmNlc3RvclJlc2l6ZSA9IHRydWUsXG4gICAgZWxlbWVudFJlc2l6ZSA9IHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gJ2Z1bmN0aW9uJyxcbiAgICBsYXlvdXRTaGlmdCA9IHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciA9PT0gJ2Z1bmN0aW9uJyxcbiAgICBhbmltYXRpb25GcmFtZSA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCByZWZlcmVuY2VFbCA9IHVud3JhcEVsZW1lbnQocmVmZXJlbmNlKTtcbiAgY29uc3QgYW5jZXN0b3JzID0gYW5jZXN0b3JTY3JvbGwgfHwgYW5jZXN0b3JSZXNpemUgPyBbLi4uKHJlZmVyZW5jZUVsID8gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMocmVmZXJlbmNlRWwpIDogW10pLCAuLi5nZXRPdmVyZmxvd0FuY2VzdG9ycyhmbG9hdGluZyldIDogW107XG4gIGFuY2VzdG9ycy5mb3JFYWNoKGFuY2VzdG9yID0+IHtcbiAgICBhbmNlc3RvclNjcm9sbCAmJiBhbmNlc3Rvci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGUsIHtcbiAgICAgIHBhc3NpdmU6IHRydWVcbiAgICB9KTtcbiAgICBhbmNlc3RvclJlc2l6ZSAmJiBhbmNlc3Rvci5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGUpO1xuICB9KTtcbiAgY29uc3QgY2xlYW51cElvID0gcmVmZXJlbmNlRWwgJiYgbGF5b3V0U2hpZnQgPyBvYnNlcnZlTW92ZShyZWZlcmVuY2VFbCwgdXBkYXRlKSA6IG51bGw7XG4gIGxldCByZW9ic2VydmVGcmFtZSA9IC0xO1xuICBsZXQgcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICBpZiAoZWxlbWVudFJlc2l6ZSkge1xuICAgIHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKF9yZWYgPT4ge1xuICAgICAgbGV0IFtmaXJzdEVudHJ5XSA9IF9yZWY7XG4gICAgICBpZiAoZmlyc3RFbnRyeSAmJiBmaXJzdEVudHJ5LnRhcmdldCA9PT0gcmVmZXJlbmNlRWwgJiYgcmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgLy8gUHJldmVudCB1cGRhdGUgbG9vcHMgd2hlbiB1c2luZyB0aGUgYHNpemVgIG1pZGRsZXdhcmUuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMTc0MFxuICAgICAgICByZXNpemVPYnNlcnZlci51bm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyZW9ic2VydmVGcmFtZSk7XG4gICAgICAgIHJlb2JzZXJ2ZUZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICB2YXIgX3Jlc2l6ZU9ic2VydmVyO1xuICAgICAgICAgIChfcmVzaXplT2JzZXJ2ZXIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShmbG9hdGluZyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdXBkYXRlKCk7XG4gICAgfSk7XG4gICAgaWYgKHJlZmVyZW5jZUVsICYmICFhbmltYXRpb25GcmFtZSkge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShyZWZlcmVuY2VFbCk7XG4gICAgfVxuICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICB9XG4gIGxldCBmcmFtZUlkO1xuICBsZXQgcHJldlJlZlJlY3QgPSBhbmltYXRpb25GcmFtZSA/IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpIDogbnVsbDtcbiAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZnJhbWVMb29wKCk7XG4gIH1cbiAgZnVuY3Rpb24gZnJhbWVMb29wKCkge1xuICAgIGNvbnN0IG5leHRSZWZSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHJlZmVyZW5jZSk7XG4gICAgaWYgKHByZXZSZWZSZWN0ICYmIChuZXh0UmVmUmVjdC54ICE9PSBwcmV2UmVmUmVjdC54IHx8IG5leHRSZWZSZWN0LnkgIT09IHByZXZSZWZSZWN0LnkgfHwgbmV4dFJlZlJlY3Qud2lkdGggIT09IHByZXZSZWZSZWN0LndpZHRoIHx8IG5leHRSZWZSZWN0LmhlaWdodCAhPT0gcHJldlJlZlJlY3QuaGVpZ2h0KSkge1xuICAgICAgdXBkYXRlKCk7XG4gICAgfVxuICAgIHByZXZSZWZSZWN0ID0gbmV4dFJlZlJlY3Q7XG4gICAgZnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZUxvb3ApO1xuICB9XG4gIHVwZGF0ZSgpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIHZhciBfcmVzaXplT2JzZXJ2ZXIyO1xuICAgIGFuY2VzdG9ycy5mb3JFYWNoKGFuY2VzdG9yID0+IHtcbiAgICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSk7XG4gICAgICBhbmNlc3RvclJlc2l6ZSAmJiBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGUpO1xuICAgIH0pO1xuICAgIGNsZWFudXBJbyA9PSBudWxsIHx8IGNsZWFudXBJbygpO1xuICAgIChfcmVzaXplT2JzZXJ2ZXIyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyMi5kaXNjb25uZWN0KCk7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoZnJhbWVJZCk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IG9mIG92ZXJmbG93IHNpZGUgb2Zmc2V0cyB0aGF0IGRldGVybWluZSBob3cgbXVjaCB0aGVcbiAqIGVsZW1lbnQgaXMgb3ZlcmZsb3dpbmcgYSBnaXZlbiBjbGlwcGluZyBib3VuZGFyeSBvbiBlYWNoIHNpZGUuXG4gKiAtIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGJvdW5kYXJ5IGJ5IHRoYXQgbnVtYmVyIG9mIHBpeGVsc1xuICogLSBuZWdhdGl2ZSA9IGhvdyBtYW55IHBpeGVscyBsZWZ0IGJlZm9yZSBpdCB3aWxsIG92ZXJmbG93XG4gKiAtIDAgPSBsaWVzIGZsdXNoIHdpdGggdGhlIGJvdW5kYXJ5XG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZGV0ZWN0T3ZlcmZsb3dcbiAqL1xuY29uc3QgZGV0ZWN0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyQxO1xuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBvZmZzZXQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgY2hvb3NpbmcgdGhlIHBsYWNlbWVudFxuICogdGhhdCBoYXMgdGhlIG1vc3Qgc3BhY2UgYXZhaWxhYmxlIGF1dG9tYXRpY2FsbHksIHdpdGhvdXQgbmVlZGluZyB0byBzcGVjaWZ5IGFcbiAqIHByZWZlcnJlZCBwbGFjZW1lbnQuIEFsdGVybmF0aXZlIHRvIGBmbGlwYC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvUGxhY2VtZW50XG4gKi9cbmNvbnN0IGF1dG9QbGFjZW1lbnQgPSBhdXRvUGxhY2VtZW50JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IHNoaWZ0JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGZsaXBwaW5nIHRoZSBgcGxhY2VtZW50YFxuICogaW4gb3JkZXIgdG8ga2VlcCBpdCBpbiB2aWV3IHdoZW4gdGhlIHByZWZlcnJlZCBwbGFjZW1lbnQocykgd2lsbCBvdmVyZmxvdyB0aGVcbiAqIGNsaXBwaW5nIGJvdW5kYXJ5LiBBbHRlcm5hdGl2ZSB0byBgYXV0b1BsYWNlbWVudGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZmxpcFxuICovXG5jb25zdCBmbGlwID0gZmxpcCQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBcdTIwMTRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBzaXplJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gaGlkZSQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gcG9zaXRpb24gYW4gaW5uZXIgZWxlbWVudCBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBzbyB0aGF0IGl0XG4gKiBhcHBlYXJzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hcnJvd1xuICovXG5jb25zdCBhcnJvdyA9IGFycm93JDE7XG5cbi8qKlxuICogUHJvdmlkZXMgaW1wcm92ZWQgcG9zaXRpb25pbmcgZm9yIGlubGluZSByZWZlcmVuY2UgZWxlbWVudHMgdGhhdCBjYW4gc3BhblxuICogb3ZlciBtdWx0aXBsZSBsaW5lcywgc3VjaCBhcyBoeXBlcmxpbmtzIG9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaW5saW5lXG4gKi9cbmNvbnN0IGlubGluZSA9IGlubGluZSQxO1xuXG4vKipcbiAqIEJ1aWx0LWluIGBsaW1pdGVyYCB0aGF0IHdpbGwgc3RvcCBgc2hpZnQoKWAgYXQgYSBjZXJ0YWluIHBvaW50LlxuICovXG5jb25zdCBsaW1pdFNoaWZ0ID0gbGltaXRTaGlmdCQxO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyB0aGF0IHdpbGwgcGxhY2UgdGhlIGZsb2F0aW5nIGVsZW1lbnRcbiAqIG5leHQgdG8gYSBnaXZlbiByZWZlcmVuY2UgZWxlbWVudC5cbiAqL1xuY29uc3QgY29tcHV0ZVBvc2l0aW9uID0gKHJlZmVyZW5jZSwgZmxvYXRpbmcsIG9wdGlvbnMpID0+IHtcbiAgLy8gVGhpcyBjYWNoZXMgdGhlIGV4cGVuc2l2ZSBgZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzYCBmdW5jdGlvbiBzbyB0aGF0XG4gIC8vIG11bHRpcGxlIGxpZmVjeWNsZSByZXNldHMgcmUtdXNlIHRoZSBzYW1lIHJlc3VsdC4gSXQgb25seSBsaXZlcyBmb3IgYVxuICAvLyBzaW5nbGUgY2FsbC4gSWYgb3RoZXIgZnVuY3Rpb25zIGJlY29tZSBleHBlbnNpdmUsIHdlIGNhbiBhZGQgdGhlbSBhcyB3ZWxsLlxuICBjb25zdCBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IHtcbiAgICBwbGF0Zm9ybSxcbiAgICAuLi5vcHRpb25zXG4gIH07XG4gIGNvbnN0IHBsYXRmb3JtV2l0aENhY2hlID0ge1xuICAgIC4uLm1lcmdlZE9wdGlvbnMucGxhdGZvcm0sXG4gICAgX2M6IGNhY2hlXG4gIH07XG4gIHJldHVybiBjb21wdXRlUG9zaXRpb24kMShyZWZlcmVuY2UsIGZsb2F0aW5nLCB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucyxcbiAgICBwbGF0Zm9ybTogcGxhdGZvcm1XaXRoQ2FjaGVcbiAgfSk7XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgYXV0b1VwZGF0ZSwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHBsYXRmb3JtLCBzaGlmdCwgc2l6ZSB9O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFycm93LFxuXHRhdXRvUGxhY2VtZW50LFxuXHRhdXRvVXBkYXRlLFxuXHRkZXRlY3RPdmVyZmxvdyxcblx0Y29tcHV0ZVBvc2l0aW9uLFxuXHRvZmZzZXQsXG5cdGZsaXAsXG5cdHNpemUsXG5cdHNoaWZ0LFxufSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHsgUHJvY2Vzc2luZyB9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Byb2Nlc3NpbmcubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi8uLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nLCBpc0FycmF5LCBpc09iamVjdCwgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9pcy5tanNcIjtcblxuZXhwb3J0IHsgcG9zaXRpb25Qb3BwZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGNvbnRyb2xFbGVtZW50XG4gKiBAcGFyYW0gcG9wcGVyRWxlbWVudFxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm4ge1Byb21pc2V8Kn1cbiAqL1xuZnVuY3Rpb24gcG9zaXRpb25Qb3BwZXIoY29udHJvbEVsZW1lbnQsIHBvcHBlckVsZW1lbnQsIG9wdGlvbnMpIHtcblx0Y29uc3QgYm9keSA9IGdldERvY3VtZW50KCkuYm9keTtcblxuXHRyZXR1cm4gbmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGNvbnN0IGFycm93RWxlbWVudCA9IGNvbnRyb2xFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1hcnJvd11cIixcblx0XHQpO1xuXG5cdFx0Y29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0e1xuXHRcdFx0XHRwbGFjZW1lbnQ6IFwidG9wXCIsXG5cdFx0XHR9LFxuXHRcdFx0b3B0aW9ucyxcblx0XHQpO1xuXG5cdFx0Y29uc3QgbWlkZGxld2FyZSA9IGNvbmZpZz8uW1wibWlkZGxld2FyZVwiXTtcblx0XHRpZiAoIWlzQXJyYXkobWlkZGxld2FyZSkpIHtcblx0XHRcdGlmIChpc1N0cmluZyhtaWRkbGV3YXJlKSkge1xuXHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdID0gbWlkZGxld2FyZS5zcGxpdChcIixcIikuZmlsdGVyKChsaW5lKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGxpbmUudHJpbSgpLmxlbmd0aCA+IDA7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXSA9IFtdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3Qga2V5IGluIG1pZGRsZXdhcmUpIHtcblx0XHRcdGNvbnN0IGxpbmUgPSBtaWRkbGV3YXJlW2tleV07XG5cdFx0XHRpZiAoaXNGdW5jdGlvbihsaW5lKSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzT2JqZWN0KGxpbmUpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWlzU3RyaW5nKGxpbmUpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRgTWlkZGxld2FyZSBtdXN0IGJlIGEgc3RyaW5nLCBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdC4gR290ICR7dHlwZW9mIGxpbmV9YCxcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qga3YgPSBsaW5lLnNwbGl0KFwiOlwiKTtcblx0XHRcdGNvbnN0IGZuID0ga3Yuc2hpZnQoKTtcblxuXHRcdFx0c3dpdGNoIChmbikge1xuXHRcdFx0XHRjYXNlIFwiZmxpcFwiOlxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IGZsaXAoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInNoaWZ0XCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gc2hpZnQoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImF1dG9QbGFjZW1lbnRcIjpcblx0XHRcdFx0XHRsZXQgZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzID0gW1widG9wXCIsIFwiYm90dG9tXCIsIFwibGVmdFwiLCBcInJpZ2h0XCJdO1xuXG5cdFx0XHRcdFx0Y29uc3QgZGVmUGxhY2VtZW50ID0ga3Y/LnNoaWZ0KCk7XG5cdFx0XHRcdFx0aWYgKGlzU3RyaW5nKGRlZlBsYWNlbWVudCkgJiYgZGVmUGxhY2VtZW50LnRyaW0oKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMgPSBkZWZQbGFjZW1lbnRcblx0XHRcdFx0XHRcdFx0LnNwbGl0KFwiLFwiKVxuXHRcdFx0XHRcdFx0XHQuZmlsdGVyKChsaW5lKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGxpbmUudHJpbSgpLmxlbmd0aCA+IDA7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMuaW5jbHVkZXMoY29uZmlnLnBsYWNlbWVudCkpIHtcblx0XHRcdFx0XHRcdGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cy5zcGxpY2UoXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cy5pbmRleE9mKGNvbmZpZy5wbGFjZW1lbnQpLFxuXHRcdFx0XHRcdFx0XHQxLFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzLnVuc2hpZnQoY29uZmlnLnBsYWNlbWVudCk7XG5cblx0XHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdW2tleV0gPSBhdXRvUGxhY2VtZW50KHtcblx0XHRcdFx0XHRcdGNyb3NzQXhpczogdHJ1ZSxcblx0XHRcdFx0XHRcdGF1dG9BbGlnbm1lbnQ6IHRydWUsXG5cdFx0XHRcdFx0XHRhbGxvd2VkUGxhY2VtZW50czogZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzLFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJkZXRlY3RPdmVyZmxvd1wiOlxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IGRldGVjdE92ZXJmbG93KCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJhcnJvd1wiOlxuXHRcdFx0XHRcdGlmIChhcnJvd0VsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IGFycm93KHsgZWxlbWVudDogYXJyb3dFbGVtZW50IH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInNpemVcIjpcblx0XHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdW2tleV0gPSBzaXplKHtcblx0XHRcdFx0XHRcdGFwcGx5KHsgYXZhaWxhYmxlV2lkdGgsIGF2YWlsYWJsZUhlaWdodCwgZWxlbWVudHMgfSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBtYXhXaWR0aCA9IGJvZHkuY2xpZW50V2lkdGg7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1heEhlaWdodCA9IGJvZHkuY2xpZW50SGVpZ2h0O1xuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVXaWR0aCA8IDApIHtcblx0XHRcdFx0XHRcdFx0XHRhdmFpbGFibGVXaWR0aCA9IDA7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoYXZhaWxhYmxlSGVpZ2h0IDwgMCkge1xuXHRcdFx0XHRcdFx0XHRcdGF2YWlsYWJsZUhlaWdodCA9IDA7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoYXZhaWxhYmxlV2lkdGggPiBtYXhXaWR0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGF2YWlsYWJsZVdpZHRoID0gbWF4V2lkdGg7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoYXZhaWxhYmxlSGVpZ2h0ID4gbWF4SGVpZ2h0KSB7XG5cdFx0XHRcdFx0XHRcdFx0YXZhaWxhYmxlSGVpZ2h0ID0gbWF4SGVpZ2h0O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihlbGVtZW50cy5mbG9hdGluZy5zdHlsZSwge1xuXHRcdFx0XHRcdFx0XHRcdGJveFNpemluZzogXCJib3JkZXItYm94XCIsXG5cdFx0XHRcdFx0XHRcdFx0bWF4V2lkdGg6IGAke2F2YWlsYWJsZVdpZHRofXB4YCxcblx0XHRcdFx0XHRcdFx0XHRtYXhIZWlnaHQ6IGAke2F2YWlsYWJsZUhlaWdodH1weGAsXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIm9mZnNldFwiOlxuXHRcdFx0XHRcdGNvbnN0IG8gPSBrdj8uc2hpZnQoKTtcblx0XHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdW2tleV0gPSBvZmZzZXQocGFyc2VJbnQobykgfHwgMTApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiaGlkZVwiOlxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IGhpZGUoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZnVuY3Rpb246ICR7Zm59YCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cG9wcGVyRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInZpc2liaWxpdHlcIik7XG5cdFx0cG9wcGVyRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXG5cdFx0YXV0b1VwZGF0ZShjb250cm9sRWxlbWVudCwgcG9wcGVyRWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0Y29tcHV0ZVBvc2l0aW9uKGNvbnRyb2xFbGVtZW50LCBwb3BwZXJFbGVtZW50LCBjb25maWcpLnRoZW4oXG5cdFx0XHRcdCh7IHgsIHksIHBsYWNlbWVudCwgbWlkZGxld2FyZURhdGEgfSkgPT4ge1xuXHRcdFx0XHRcdE9iamVjdC5hc3NpZ24ocG9wcGVyRWxlbWVudC5zdHlsZSwge1xuXHRcdFx0XHRcdFx0dG9wOiBcIjBcIixcblx0XHRcdFx0XHRcdGxlZnQ6IFwiMFwiLFxuXHRcdFx0XHRcdFx0dHJhbnNmb3JtOiBgdHJhbnNsYXRlKCR7cm91bmRCeURQUih4KX1weCwke3JvdW5kQnlEUFIoeSl9cHgpYCxcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGlmIChtaWRkbGV3YXJlRGF0YS5hcnJvdykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2lkZSA9IHBsYWNlbWVudC5zcGxpdChcIi1cIilbMF07XG5cblx0XHRcdFx0XHRcdGNvbnN0IHN0YXRpY1NpZGUgPSB7XG5cdFx0XHRcdFx0XHRcdHRvcDogXCJib3R0b21cIixcblx0XHRcdFx0XHRcdFx0cmlnaHQ6IFwibGVmdFwiLFxuXHRcdFx0XHRcdFx0XHRib3R0b206IFwidG9wXCIsXG5cdFx0XHRcdFx0XHRcdGxlZnQ6IFwicmlnaHRcIixcblx0XHRcdFx0XHRcdH1bc2lkZV07XG5cblx0XHRcdFx0XHRcdC8vIG1vbnN0ZXItYm9yZGVyLXdpZHRoID0gKyA0ICgyKjIpIChzaG91bGQgY29tZSBmcm9tIGNzcylcblx0XHRcdFx0XHRcdGNvbnN0IGFycm93TGVuID0gYXJyb3dFbGVtZW50Lm9mZnNldFdpZHRoICsgNDtcblxuXHRcdFx0XHRcdFx0Y29uc3QgYm9yZGVyU3R5bGUgPSB7XG5cdFx0XHRcdFx0XHRcdGJvcmRlckxlZnQ6IFwidHJhbnNwYXJlbnRcIixcblx0XHRcdFx0XHRcdFx0Ym9yZGVyUmlnaHQ6IFwidHJhbnNwYXJlbnRcIixcblx0XHRcdFx0XHRcdFx0Ym9yZGVyQm90dG9tOiBcInRyYW5zcGFyZW50XCIsXG5cdFx0XHRcdFx0XHRcdGJvcmRlclRvcDogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZGVmYXVsdEJvcmRlciA9XG5cdFx0XHRcdFx0XHRcdFwidmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNClcIjtcblxuXHRcdFx0XHRcdFx0c3dpdGNoIChzaWRlKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJ0b3BcIjpcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJSaWdodCA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyQm90dG9tID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIFwiYm90dG9tXCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyVG9wID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJMZWZ0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIFwibGVmdFwiOlxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclJpZ2h0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJUb3AgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJyaWdodFwiOlxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlckJvdHRvbSA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyTGVmdCA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IHsgeCwgeSB9ID0gbWlkZGxld2FyZURhdGEuYXJyb3c7XG5cblx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdFx0XHRcdGFycm93RWxlbWVudC5zdHlsZSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxlZnQ6IHggIT0gbnVsbCA/IGAke3h9cHhgIDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHR0b3A6IHkgIT0gbnVsbCA/IGAke3l9cHhgIDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHQvLyBFbnN1cmUgdGhlIHN0YXRpYyBzaWRlIGdldHMgdW5zZXQgd2hlblxuXHRcdFx0XHRcdFx0XHRcdC8vIGZsaXBwaW5nIHRvIG90aGVyIHBsYWNlbWVudHMnIGF4ZXMuXG5cdFx0XHRcdFx0XHRcdFx0cmlnaHQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0Ym90dG9tOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFtzdGF0aWNTaWRlXTogYCR7LWFycm93TGVuIC8gMn1weGAsXG5cdFx0XHRcdFx0XHRcdFx0dHJhbnNmb3JtOiBcInJvdGF0ZSg0NWRlZylcIixcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH0pLnJ1bigpO1xufVxuXG5mdW5jdGlvbiByb3VuZEJ5RFBSKHZhbHVlKSB7XG5cdGNvbnN0IGRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG5cdHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogZHByKSAvIGRwcjtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBTZWxlY3RTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBTZWxlY3RTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0U2VsZWN0U3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBzZWxlY3QgeyBcbi5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja30ubW9uc3Rlci1iYWRnZS1wcmltYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LC5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LC5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LC5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUsLm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3N7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MsLm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZ3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZywubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1lcnJvcntwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3IsLm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7ZmxleDo0IDAgOTAlO21pbi1oZWlnaHQ6MS40ZW07b3ZlcmZsb3c6YXV0bztzY3JvbGxiYXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtzY3JvbGxiYXItd2lkdGg6dGhpbjt3aWR0aDoxMDAlfS5kLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250YWluZXJdLm9wZW57LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTcuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwbDYgNmEuNS41IDAgMCAxLS43MDguNzA4TDggNS43MDdsLTUuNjQ2IDUuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNy42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA1LjcwN2wtNS42NDYgNS42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0uY2xlYXIsW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0ub3BlbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyIGNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOi44ZW07bWFzay1zaXplOi44ZW19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0uY2xlYXJ7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWNjZW50LWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKTstby1ib3JkZXItaW1hZ2U6aW5pdGlhbDtib3JkZXItaW1hZ2U6aW5pdGlhbDtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGgpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjEwMCU7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6LjRyZW0gLjZyZW07d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpmaWxsLWF2YWlsYWJsZX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHh9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXTpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1zZWxlY3Rpb25de2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2dhcDo1cHg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bWFyZ2luOjVweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uLWNvbnRyb2xde21hcmdpbi1yaWdodDo4cHh9W2RhdGEtbW9uc3Rlci1yb2xlPWJhZGdlXXtkaXNwbGF5OmlubGluZS1mbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1iYWRnZS1sYWJlbF17YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7Z2FwOjdweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn1bZGF0YS1tb25zdGVyLXJvbGU9ZmlsdGVyXSxbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLWZpbHRlcl17ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoyMDA7b3JkZXI6OTk5OTk5OTk7dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWZpbHRlcl0uYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JvcmRlcjowO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTttaW4td2lkdGg6NDAlO291dGxpbmU6bm9uZTt2aXNpYmlsaXR5OnZpc2libGV9LmFjdGl2ZVtkYXRhLW1vbnN0ZXItcm9sZT1maWx0ZXJdW25hbWU9cG9wcGVyLWZpbHRlcl17aGVpZ2h0OjEuNWVtO21hcmdpbjoyLjVlbTtwYWRkaW5nOjJweDt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkqMil9Lm9wdGlvbi1maWx0ZXItY29udHJvbHthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7ZGlzcGxheTpmbGV4O2hlaWdodDoyLjVlbTttYXJnaW46LTEuMWVtIC0xLjFlbSAuM2VtfVtkYXRhLW1vbnN0ZXItcm9sZT1yZW1vdmUtYmFkZ2Vde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2hlaWdodDoxNnB4O21hcmdpbi1sZWZ0OjVweDstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO29yZGVyOjJ9W2RhdGEtbW9uc3Rlci1yb2xlPXJlbW92ZS1iYWRnZV0sW2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXXstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyIGNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOi44ZW07bWFzay1zaXplOi44ZW07bWluLWhlaWdodDoxNnB4O3dpZHRoOjE2cHh9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTEuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggMTAuMjkzbDUuNjQ2LTUuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhsLTYgNmEuNS41IDAgMCAxLS43MDggMGwtNi02YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xLjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDEwLjI5M2w1LjY0Ni01LjY0N2EuNS41IDAgMCAxIC43MDguNzA4bC02IDZhLjUuNSAwIDAgMS0uNzA4IDBsLTYtNmEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5vcGVuW2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNy42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA1LjcwN2wtNS42NDYgNS42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J003LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDUuNzA3bC01LjY0NiA1LjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOHonLyUzRSUzQy9zdmclM0VcXFwiKX0uZW1wdHlbZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktZGFzaC1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQgOGEuNS41IDAgMCAxIC41LS41aDdhLjUuNSAwIDAgMSAwIDFoLTdBLjUuNSAwIDAgMSA0IDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1kYXNoLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5jbGVhcltkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKX0uZXJyb3JbZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpfS5sb2FkaW5nW2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXXthbmltYXRpb24tZHVyYXRpb246MXM7YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDppbmZpbml0ZTthbmltYXRpb24tbmFtZTphY3Rpdml0eTthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLDAsLjIsMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdhY3Rpdml0eScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ2NpcmNsZSBjeD0nOCcgY3k9JzgnIHI9JzgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdhY3Rpdml0eScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ2NpcmNsZSBjeD0nOCcgY3k9JzgnIHI9JzgnLyUzRSUzQy9zdmclM0VcXFwiKX1Aa2V5ZnJhbWVzIGFjdGl2aXR5ezAle3RyYW5zZm9ybTpzY2FsZSgxKX01MCV7dHJhbnNmb3JtOnNjYWxlKC4xKX10b3t0cmFuc2Zvcm06c2NhbGUoMSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MTtzY3JvbGxiYXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtzY3JvbGxiYXItd2lkdGg6dGhpbn1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjZweCA1cHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0gbGFiZWx7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXSBsYWJlbD5kaXZ7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW5vLW9wdGlvbnNde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2JvcmRlci1yYWRpdXM6LjJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCk7bWFyZ2luOjEuMWVtIDEuMWVtIDA7cGFkZGluZzouM2VtIC44ZW19LnNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV0sW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9aGlkZGVuXXtkaXNwbGF5Om5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWZvY3VzZWQ9dHJ1ZV17b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpO291dGxpbmUtb2Zmc2V0Oi0ycHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0+aW5wdXQ6Zm9jdXMsW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0+bGFiZWw6Zm9jdXN7b3V0bGluZTpub25lfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBidWlsZE1hcCB9IGZyb20gXCIuLi8uLi9kYXRhL2J1aWxkbWFwLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IHBvc2l0aW9uUG9wcGVyIH0gZnJvbSBcIi4vdXRpbC9mbG9hdGluZy11aS5tanNcIjtcbmltcG9ydCB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuLFxuXHRmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlLFxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbixcbn0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udHJvbCB9IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tY29udHJvbC5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHtcblx0ZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQsXG5cdGZpcmVDdXN0b21FdmVudCxcblx0ZmlyZUV2ZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgRm9ybWF0dGVyIH0gZnJvbSBcIi4uLy4uL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IElEIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHtcblx0aXNBcnJheSxcblx0aXNGdW5jdGlvbixcblx0aXNJbnRlZ2VyLFxuXHRpc0l0ZXJhYmxlLFxuXHRpc09iamVjdCxcblx0aXNQcmltaXRpdmUsXG5cdGlzU3RyaW5nLFxufSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQXJyYXksIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgUHJvY2Vzc2luZyB9IGZyb20gXCIuLi8uLi91dGlsL3Byb2Nlc3NpbmcubWpzXCI7XG5pbXBvcnQgeyBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBTZWxlY3RTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9zZWxlY3QubWpzXCI7XG5pbXBvcnQge1xuXHRnZXREb2N1bWVudFRyYW5zbGF0aW9ucyxcblx0VHJhbnNsYXRpb25zLFxufSBmcm9tIFwiLi4vLi4vaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmV4cG9ydCB7XG5cdFNlbGVjdCxcblx0cG9wcGVyRWxlbWVudFN5bWJvbCxcblx0Z2V0U3VtbWFyeVRlbXBsYXRlLFxuXHRnZXRTZWxlY3Rpb25UZW1wbGF0ZSxcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IG5vT3B0aW9uc0F2YWlsYWJsZU1lc3NhZ2UgPSBcIk5vIG9wdGlvbnMgYXZhaWxhYmxlLlwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBjbGlja1RvTG9hZE9wdGlvbnNNZXNzYWdlID0gXCJDbGljayB0byBsb2FkIG9wdGlvbnMuXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBrZXlGaWx0ZXJFdmVudFN5bWJvbCA9IFN5bWJvbChcImtleUZpbHRlckV2ZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBsYXp5TG9hZERvbmVTeW1ib2wgPSBTeW1ib2woXCJsYXp5TG9hZERvbmVcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGlzTG9hZGluZ1N5bWJvbCA9IFN5bWJvbChcImlzTG9hZGluZ1wiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBjbG9zZUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNsb3NlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGNsZWFyT3B0aW9uRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xlYXJPcHRpb25FdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBrZXlFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJrZXlFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgbGFzdEZldGNoZWREYXRhU3ltYm9sID0gU3ltYm9sKFwibGFzdEZldGNoZWREYXRhXCIpO1xuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBpbnB1dEV2ZW50SGFuZGxlciA9IFN5bWJvbChcImlucHV0RXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGNoYW5nZUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNoYW5nZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHNlbGVjdGlvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzZWxlY3Rpb25FbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRhaW5lckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250YWluZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGlubGluZUZpbHRlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJpbmxpbmVGaWx0ZXJFbGVtZW50XCIpO1xuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRmlsdGVyRWxlbWVudFwiKTtcbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcblx0XCJwb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50XCIsXG4pO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IG9wdGlvbnNFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwib3B0aW9uc0VsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qgbm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm5vT3B0aW9uc0F2YWlsYWJsZUVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qgc3RhdHVzT3JSZW1vdmVCYWRnZXNFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic3RhdHVzT3JSZW1vdmVCYWRnZXNFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbCA9IFN5bWJvbChcIkBAYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRpc2FibGVkUmVxdWVzdE1hcmtlciA9IFN5bWJvbChcIkBAZGlzYWJsZWRSZXF1ZXN0TWFya2VyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBGT0NVU19ESVJFQ1RJT05fVVAgPSAxO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgRk9DVVNfRElSRUNUSU9OX0RPV04gPSAyO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBGSUxURVJfTU9ERV9SRU1PVEUgPSBcInJlbW90ZVwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBGSUxURVJfTU9ERV9PUFRJT05TID0gXCJvcHRpb25zXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9NT0RFX0RJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBGSUxURVJfUE9TSVRJT05fUE9QUEVSID0gXCJwb3BwZXJcIjtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9QT1NJVElPTl9JTkxJTkUgPSBcImlubGluZVwiO1xuXG4vKipcbiAqIEEgc2VsZWN0IGNvbnRyb2wgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWxlY3Qgb25lIG9yIG1vcmUgb3B0aW9ucyBmcm9tIGEgbGlzdC5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC13aXRoLW9wdGlvbnMgU2VsZWN0IHdpdGggb3B0aW9uc1xuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QtbXVsdGlwbGUgTXVsdGlwbGUgc2VsZWN0aW9uXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC1maWx0ZXIgRmlsdGVyXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC1mZXRjaCBGZXRjaCBvcHRpb25zXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC1sYXp5IExhenkgbG9hZFxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QtcmVtb3RlLWZpbHRlciBSZW1vdGUgZmlsdGVyXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHNlbGVjdCBjb250cm9sIHRoYXQgY2FuIG1ha2UgeW91ciBsaWZlIGVhc2llciBhbmQgYWxzbyBsb29rcyBnb29kLlxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VkXG4gKi9cbmNsYXNzIFNlbGVjdCBleHRlbmRzIEN1c3RvbUNvbnRyb2wge1xuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0aW5pdE9wdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge1N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3NlbGVjdEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9mIHRoZSBTZWxlY3Rcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBjb25zb2xlLmxvZyhlLnZhbHVlKVxuXHQgKiAvLyBcdTIxQTYgMVxuXHQgKiAvLyBcdTIxQTYgWycxJywnMiddXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXQgdmFsdWUoKSB7XG5cdFx0cmV0dXJuIGNvbnZlcnRTZWxlY3Rpb25Ub1ZhbHVlLmNhbGwodGhpcywgdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIikpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9hdHRhY2hJbnRlcm5hbHN9XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IGZvcm1Bc3NvY2lhdGVkKCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBzZWxlY3Rpb25cblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBlLnZhbHVlPTFcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fSB2YWx1ZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1zZWxlY3RlZCB0aGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBzZXRcblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRWYWx1ZVRvU2VsZWN0aW9uLmNhbGwodGhpcywgdmFsdWUpO1xuXHRcdHNldFNlbGVjdGlvblxuXHRcdFx0LmNhbGwodGhpcywgcmVzdWx0LnNlbGVjdGlvbilcblx0XHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0b2dnbGVFdmVudFR5cGU9Y2xpY2ssdG91Y2ggTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgZHJvcGRvd25cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkZWxlZ2F0ZXNGb2N1cz1mYWxzZSBsb3JlbSBbc2VlIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU2hhZG93Um9vdC9kZWxlZ2F0ZXNGb2N1cylcblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gb3B0aW9ucyBTZWxlY3Rpb24gb2Yga2V5IGlkZW50aWZpZXIgcGFpcnMgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24gYW5kIGRpc3BsYXllZCBpbiB0aGUgZHJvcGRvd24uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvcHRpb25zW10ubGFiZWxcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG9wdGlvbnNbXS52YWx1ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gb3B0aW9uc1tdLnZpc2liaWxpdHkgaGlkZGVuIG9yIHZpc2libGVcblx0ICogQHByb3BlcnR5IHtBcnJheX0gc2VsZWN0aW9uIFNlbGVjdGVkIG9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtJbnRlZ2VyfSBzaG93TWF4T3B0aW9ucz0xMCBNYXhpbXVtIG51bWJlciBvZiB2aXNpYmxlIG9wdGlvbnMgYmVmb3JlIGEgc2Nyb2xsIGJhciBzaG91bGQgYmUgZGlzcGxheWVkLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZT1yYWRpbyBNdWx0aXBsZSAoY2hlY2tib3gpIG9yIHNpbmdsZSBzZWxlY3Rpb24gKHJhZGlvKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZT0ocmFuZG9tIGlkKSBOYW1lIG9mIHRoZSBmb3JtIGZpZWxkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmwgTG9hZCBvcHRpb25zIGZyb20gc2VydmVyIHBlciB1cmxcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGxvb2t1cCBMb2FkIG9wdGlvbnMgZnJvbSBzZXJ2ZXIgcGVyIHVybFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbG9va3VwLnVybD1udWxsIExvYWQgb3B0aW9ucyBmcm9tIHNlcnZlciBwZXIgdXJsXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbG9va3VwLmdyb3VwaW5nPWZhbHNlIExvYWQgYWxsIHNlbGVjdGVkIG9wdGlvbnMgZnJvbSBzZXJ2ZXIgcGVyIHVybCBhdCBvbmNlICh0cnVlKSBvciBvbmUgYnkgb25lIChmYWxzZSlcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoIEZldGNoIFtzZWUgVXNpbmcgRmV0Y2ggbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkvVXNpbmdfRmV0Y2gpXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1lcnJvclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoLmhlYWRlcnM9e1wiYWNjZXB0XCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuY2Fubm90LWJlLWxvYWRlZCBjYW5ub3QgYmUgbG9hZGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMubm8tb3B0aW9ucy1hdmFpbGFibGUgbm8gb3B0aW9ucyBhdmFpbGFibGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5zZWxlY3QtYW4tb3B0aW9uIHNlbGVjdCBhbiBvcHRpb25cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5uby1vcHRpb24gbm8gb3B0aW9uIGluIHRoZSBsaXN0LCBtYXliZSB5b3UgaGF2ZSB0byBjaGFuZ2UgdGhlIGZpbHRlclxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgTGlzdCB3aXRoIGZlYXR1cmVzXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMuY2xlYXJBbGw9dHJ1ZSBEaXNwbGF5IG9mIGEgZGVsZXRlIGJ1dHRvbiB0byBkZWxldGUgdGhlIGVudGlyZSBzZWxlY3Rpb25cblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5jbGVhcj10cnVlIERpc3BsYXkgb2YgYSBkZWxldGUga2V5IGZvciBkZWxldGluZyB0aGUgc3BlY2lmaWMgc2VsZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMubGF6eUxvYWQ9ZmFsc2UgTG9hZCBvcHRpb25zIHdoZW4gZmlyc3Qgb3BlbmluZyB0aGUgZHJvcGRvd24uIChIaW50OyBsYXp5bExvYWQgaXMgbm90IHN1cHBvcnRlZCB3aXRoIHJlbW90ZSBmaWx0ZXIpXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMuY2xvc2VPblNlbGVjdD1mYWxzZSBDbG9zZSB0aGUgZHJvcGRvd24gd2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQgKHNpbmNlIDMuNTQuMClcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5lbXB0eVZhbHVlSWZOb09wdGlvbnM9ZmFsc2UgSWYgbm8gb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB0aGUgc2VsZWN0aW9uIGlzIHNldCB0byBhbiBlbXB0eSBhcnJheVxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZlYXR1cmVzLnN0b3JlRmV0Y2hlZERhdGE9ZmFsc2UgU3RvcmUgZmV0Y2hlZCBkYXRhIGluIHRoZSBvYmplY3Rcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy51c2VTdHJpY3RWYWx1ZUNvbXBhcmlzb249dHJ1ZSBVc2Ugc3RyaWN0IHZhbHVlIGNvbXBhcmlzb24gZm9yIHRoZSBzZWxlY3Rpb25cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbHRlci5kZWZhdWx0VmFsdWU9bnVsbCBEZWZhdWx0IGZpbHRlciB2YWx1ZSwgaWYgdGhlIGZpbHRlciBpcyBlbXB0eSwgaWYgdGhlIGRlZmF1bHQgdmFsdWUgaXMgbnVsbCwgdGhlbiBubyByZXF1ZXN0IGlzIG1hZGVcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmaWx0ZXIubW9kZT1vcHRpb25zIEZpbHRlciBtb2RlLCB2YWx1ZXM6IG9wdGlvbnMsIHJlbW90ZSwgZGlzYWJsZWQgKEhpbnQ7IGxhenlsTG9hZCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggcmVtb3RlIGZpbHRlciwgaWYgeW91IHVzZSByZW1vdGUgZmlsdGVyLCB0aGUgbGF6eUxvYWQgaXMgZGlzYWJsZWQpXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlTWFwcGluZyBNYXBwaW5nIG9mIHRoZSB0ZW1wbGF0ZSBwbGFjZWhvbGRlcnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlTWFwcGluZy5zZWxlY3RlZCBTZWxlY3RlZCBUZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcG9wcGVyIFtQb3BwZXJKUyBPcHRpb25zXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3BwZXIucGxhY2VtZW50PWJvdHRvbSBQb3BwZXJKUyBwbGFjZW1lbnRcblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gbW9kaWZpZXJzPXtuYW1lOm9mZnNldH0gUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBtYXBwaW5nXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnNlbGVjdG9yPSogUGF0aCB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcubGFiZWxUZW1wbGF0ZT1cIlwiIHRlbXBsYXRlIHdpdGggdGhlIGxhYmVsIHBsYWNlaG9sZGVycyBpbiB0aGUgZm9ybSAke25hbWV9LCB3aGVyZSBuYW1lIGlzIHRoZSBrZXkgKCoqKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy52YWx1ZVRlbXBsYXRlPVwiXCIgdGVtcGxhdGUgd2l0aCB0aGUgdmFsdWUgcGxhY2Vob2xkZXJzIGluIHRoZSBmb3JtICR7bmFtZX0sIHdoZXJlIG5hbWUgaXMgdGhlIGtleVxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVGaWx0ZXJDYWxsYmFja3x1bmRlZmluZWR9IG1hcHBpbmcuZmlsdGVyIEZpbHRlcmluZyBvZiB2YWx1ZXMgdmlhIGEgZnVuY3Rpb25cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZvcm1hdHRlclxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmZvcm1hdHRlclNlbGVjdGlvbkNhbGxiYWNrfHVuZGVmaW5lZH0gZm9ybWF0dGVyLnNlbGVjdGlvbiBmb3JtYXQgc2VsZWN0aW9uIGxhYmVsXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHR0b2dnbGVFdmVudFR5cGU6IFtcImNsaWNrXCIsIFwidG91Y2hcIl0sXG5cdFx0XHRcdGRlbGVnYXRlc0ZvY3VzOiBmYWxzZSxcblx0XHRcdFx0b3B0aW9uczogW10sXG5cdFx0XHRcdHNlbGVjdGlvbjogW10sXG5cdFx0XHRcdHNob3dNYXhPcHRpb25zOiAxMCxcblx0XHRcdFx0dHlwZTogXCJyYWRpb1wiLFxuXHRcdFx0XHRuYW1lOiBuZXcgSUQoXCJzXCIpLnRvU3RyaW5nKCksXG5cdFx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdFx0Y2xlYXJBbGw6IHRydWUsXG5cdFx0XHRcdFx0Y2xlYXI6IHRydWUsXG5cdFx0XHRcdFx0bGF6eUxvYWQ6IGZhbHNlLFxuXHRcdFx0XHRcdGNsb3NlT25TZWxlY3Q6IGZhbHNlLFxuXHRcdFx0XHRcdGVtcHR5VmFsdWVJZk5vT3B0aW9uczogZmFsc2UsXG5cdFx0XHRcdFx0c3RvcmVGZXRjaGVkRGF0YTogZmFsc2UsXG5cdFx0XHRcdFx0dXNlU3RyaWN0VmFsdWVDb21wYXJpc29uOiBmYWxzZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0dXJsOiBudWxsLFxuXHRcdFx0XHRsb29rdXA6IHtcblx0XHRcdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRcdFx0Z3JvdXBpbmc6IGZhbHNlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0XHRcImNhbm5vdC1iZS1sb2FkZWRcIjogXCJDYW5ub3QgYmUgbG9hZGVkXCIsXG5cdFx0XHRcdFx0XCJuby1vcHRpb25zLWF2YWlsYWJsZVwiOiBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlLFxuXHRcdFx0XHRcdFwiY2xpY2stdG8tbG9hZC1vcHRpb25zXCI6IGNsaWNrVG9Mb2FkT3B0aW9uc01lc3NhZ2UsXG5cdFx0XHRcdFx0XCJzZWxlY3QtYW4tb3B0aW9uXCI6IFwiU2VsZWN0IGFuIG9wdGlvblwiLFxuXHRcdFx0XHRcdFwic3VtbWFyeS10ZXh0XCI6IHtcblx0XHRcdFx0XHRcdHplcm86IFwiTm8gZW50cmllcyB3ZXJlIHNlbGVjdGVkXCIsXG5cdFx0XHRcdFx0XHRvbmU6ICc8c3BhbiBjbGFzcz1cIm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxsXCI+MTwvc3Bhbj4gZW50cnkgd2FzIHNlbGVjdGVkJyxcblx0XHRcdFx0XHRcdG90aGVyOlxuXHRcdFx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCJtb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbFwiPiR7Y291bnR9PC9zcGFuPiBlbnRyaWVzIHdlcmUgc2VsZWN0ZWQnLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJuby1vcHRpb25zXCI6XG5cdFx0XHRcdFx0XHRcIlVuZm9ydHVuYXRlbHksIHRoZXJlIGFyZSBubyBvcHRpb25zIGF2YWlsYWJsZSBpbiB0aGUgbGlzdC5cIixcblx0XHRcdFx0XHRcIm5vLW9wdGlvbnMtZm91bmRcIjpcblx0XHRcdFx0XHRcdFwiTm8gb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBsaXN0LiBQbGVhc2UgY29uc2lkZXIgbW9kaWZ5aW5nIHRoZSBmaWx0ZXIuXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1lc3NhZ2VzOiB7XG5cdFx0XHRcdFx0Y29udHJvbDogbnVsbCxcblx0XHRcdFx0XHRzZWxlY3RlZDogbnVsbCxcblx0XHRcdFx0XHRlbXB0eU9wdGlvbnM6IG51bGwsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdFx0cmVkaXJlY3Q6IFwiZXJyb3JcIixcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0bW9kZTogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdFx0YWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmaWx0ZXI6IHtcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWU6IG51bGwsXG5cdFx0XHRcdFx0bW9kZTogRklMVEVSX01PREVfRElTQUJMRUQsXG5cdFx0XHRcdFx0cG9zaXRpb246IEZJTFRFUl9QT1NJVElPTl9JTkxJTkUsXG5cdFx0XHRcdFx0bWFya2VyOiB7XG5cdFx0XHRcdFx0XHRvcGVuOiBcIntcIixcblx0XHRcdFx0XHRcdGNsb3NlOiBcIn1cIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdFx0YmFkZ2U6IFwibW9uc3Rlci1iYWRnZS1wcmltYXJ5XCIsXG5cdFx0XHRcdFx0c3RhdHVzT3JSZW1vdmVCYWRnZTogXCJlbXB0eVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdFx0c2VsZWN0b3I6IFwiKlwiLFxuXHRcdFx0XHRcdGxhYmVsVGVtcGxhdGU6IFwiXCIsXG5cdFx0XHRcdFx0dmFsdWVUZW1wbGF0ZTogXCJcIixcblx0XHRcdFx0XHRmaWx0ZXI6IG51bGwsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZvcm1hdHRlcjoge1xuXHRcdFx0XHRcdHNlbGVjdGlvbjogYnVpbGRTZWxlY3Rpb25MYWJlbCxcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGVNYXBwaW5nOiB7XG5cdFx0XHRcdFx0LyoqIHdpdGggdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXNlbGVjdGVkLXRlbXBsYXRlYCB0aGUgdGVtcGxhdGUgZm9yIHRoZSBzZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBkZWZpbmVkLiAqL1xuXHRcdFx0XHRcdHNlbGVjdGVkOiBnZXRTZWxlY3Rpb25UZW1wbGF0ZSgpLFxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdHBvcHBlcjoge1xuXHRcdFx0XHRcdHBsYWNlbWVudDogXCJib3R0b21cIixcblx0XHRcdFx0XHRtaWRkbGV3YXJlOiBbXCJmbGlwXCIsIFwib2Zmc2V0OjFcIl0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTZWxlY3R9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwoc2VsZik7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHNlbGYpO1xuXG5cdFx0bGV0IGxhenlMb2FkRmxhZyA9IHNlbGYuZ2V0T3B0aW9uKFwiZmVhdHVyZXMubGF6eUxvYWRcIiwgZmFsc2UpO1xuXHRcdGxldCByZW1vdGVGaWx0ZXJGbGFnID0gZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9SRU1PVEU7XG5cblx0XHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9SRU1PVEUpIHtcblx0XHRcdHNlbGYuZ2V0T3B0aW9uKFwiZmVhdHVyZXMubGF6eUxvYWRcIiwgZmFsc2UpO1xuXHRcdFx0aWYgKGxhenlMb2FkRmxhZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XCJsYXp5TG9hZCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggcmVtb3RlIGZpbHRlclwiLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRsYXp5TG9hZEZsYWcgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoc2VsZi5oYXNBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSkge1xuXHRcdFx0bmV3IFByb2Nlc3NpbmcoMTAsICgpID0+IHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIik7XG5cdFx0XHR9KVxuXHRcdFx0XHQucnVuKClcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwidXJsXCIpICE9PSBudWxsKSB7XG5cdFx0XHRpZiAobGF6eUxvYWRGbGFnIHx8IHJlbW90ZUZpbHRlckZsYWcpIHtcblx0XHRcdFx0bG9va3VwU2VsZWN0aW9uLmNhbGwoc2VsZik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmZldGNoKCkuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgbGFzdFZhbHVlID0gc2VsZi52YWx1ZTtcblx0XHRzZWxmW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihcblx0XHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChpc09iamVjdCh0aGlzKSAmJiB0aGlzIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcikge1xuXHRcdFx0XHRcdGNvbnN0IG4gPSB0aGlzLmdldFN1YmplY3QoKT8ub3B0aW9ucz8udmFsdWU7XG5cblx0XHRcdFx0XHRpZiAobGFzdFZhbHVlICE9PSBuKSB7XG5cdFx0XHRcdFx0XHRsYXN0VmFsdWUgPSBuO1xuXHRcdFx0XHRcdFx0c2V0U2VsZWN0aW9uXG5cdFx0XHRcdFx0XHRcdC5jYWxsKHNlbGYsIG4pXG5cdFx0XHRcdFx0XHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdFx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdCk7XG5cblx0XHRhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdC5jYWxsKHNlbGYpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICogQHRocm93cyB7RXJyb3J9IHN0b3JlRmV0Y2hlZERhdGEgaXMgbm90IGVuYWJsZWRcblx0ICogQHNpbmNlIDMuNjYuMFxuXHQgKi9cblx0Z2V0TGFzdEZldGNoZWREYXRhKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnN0b3JlRmV0Y2hlZERhdGFcIikgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzdG9yZUZldGNoZWREYXRhIGlzIG5vdCBlbmFibGVkXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzPy5bbGFzdEZldGNoZWREYXRhU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmNsaWNrKCkgbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uZm9jdXMoKSBtZXRob2Qgc2V0cyBmb2N1cyBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2ZvY3VzfVxuXHQgKi9cblx0Zm9jdXMob3B0aW9ucykge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdFx0Z2F0aGVyU3RhdGUuY2FsbCh0aGlzKTtcblx0XHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdFx0fSlcblx0XHRcdC5ydW4oKVxuXHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2JsdXJcblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdFx0Z2F0aGVyU3RhdGUuY2FsbCh0aGlzKTtcblx0XHRcdGJsdXJGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHR9KVxuXHRcdFx0LnJ1bigpXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIElmIG5vIHVybCBpcyBzcGVjaWZpZWQsIHRoZSBvcHRpb25zIGFyZSB0YWtlbiBmcm9tIHRoZSBDb21wb25lbnQgaXRzZWxmLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybCBVUkwgdG8gZmV0Y2ggdGhlIG9wdGlvbnNcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGZldGNoKHVybCkge1xuXHRcdHJldHVybiBmZXRjaEl0LmNhbGwodGhpcywgdXJsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0cGFyc2VTbG90c1RvT3B0aW9ucy5jYWxsKHRoaXMpO1xuXHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cblx0XHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRnYXRoZXJTdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHR9KVxuXHRcdFx0LnJ1bigpXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0ZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogSW1wb3J0IFNlbGVjdCBPcHRpb25zIGZyb20gZGF0YXNldFxuXHQgKiBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0aGUgY29udHJvbCBkZWZhdWx0cy9vcHRpb25zXG5cdCAqXG5cdCAqIEBwYXJhbSB7YXJyYXl8b2JqZWN0fE1hcHxTZXR9IGRhdGFcblx0ICogQHJldHVybiB7U2VsZWN0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWFwIGlzIG5vdCBpdGVyYWJsZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBsYWJlbCBjb25maWd1cmF0aW9uXG5cdCAqIEBmaXJlcyBtb25zdGVyLW9wdGlvbnMtc2V0IHRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgb3B0aW9ucyBhcmUgc2V0XG5cdCAqL1xuXHRpbXBvcnRPcHRpb25zKGRhdGEpIHtcblx0XHRjb25zdCBtYXBwaW5nT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZ1wiLCB7fSk7XG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSBtYXBwaW5nT3B0aW9ucz8uW1wic2VsZWN0b3JcIl07XG5cdFx0Y29uc3QgbGFiZWxUZW1wbGF0ZSA9IG1hcHBpbmdPcHRpb25zPy5bXCJsYWJlbFRlbXBsYXRlXCJdO1xuXHRcdGNvbnN0IHZhbHVlVGVtcGxhdGUgPSBtYXBwaW5nT3B0aW9ucz8uW1widmFsdWVUZW1wbGF0ZVwiXTtcblx0XHRjb25zdCBmaWx0ZXIgPSBtYXBwaW5nT3B0aW9ucz8uW1wiZmlsdGVyXCJdO1xuXG5cdFx0bGV0IGZsYWcgPSBmYWxzZTtcblx0XHRpZiAobGFiZWxUZW1wbGF0ZSA9PT0gXCJcIikge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgXCJlbXB0eSBsYWJlbCB0ZW1wbGF0ZVwiKTtcblx0XHRcdGZsYWcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZVRlbXBsYXRlID09PSBcIlwiKSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBcImVtcHR5IHZhbHVlIHRlbXBsYXRlXCIpO1xuXHRcdFx0ZmxhZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGZsYWcgPT09IHRydWUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgbGFiZWwgY29uZmlndXJhdGlvblwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBtYXAgPSBidWlsZE1hcChkYXRhLCBzZWxlY3RvciwgbGFiZWxUZW1wbGF0ZSwgdmFsdWVUZW1wbGF0ZSwgZmlsdGVyKTtcblxuXHRcdGNvbnN0IG9wdGlvbnMgPSBbXTtcblxuXHRcdGlmICghaXNJdGVyYWJsZShtYXApKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYXAgaXMgbm90IGl0ZXJhYmxlXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblxuXHRcdG1hcC5mb3JFYWNoKChsYWJlbCwgdmFsdWUpID0+IHtcblx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRsYWJlbCxcblx0XHRcdFx0dmlzaWJpbGl0eSxcblx0XHRcdFx0ZGF0YTogbWFwLmdldCh2YWx1ZSksXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJ1bkFzT3B0aW9uTGVuZ3RoQ2hhbmdlZC5jYWxsKHRoaXMsIG1hcC5zaXplKTtcblx0XHR0aGlzLnNldE9wdGlvbihcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW9wdGlvbnMtc2V0XCIsIHtcblx0XHRcdG9wdGlvbnMsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcmV0dXJuIHtTZWxlY3R9XG5cdCAqL1xuXHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbigpIHtcblx0XHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1zZWxlY3RcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1NlbGVjdFN0eWxlU2hlZXRdO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9va3VwU2VsZWN0aW9uKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRjb25zdCBzZWxlY3Rpb24gPSBzZWxmLmdldE9wdGlvbihcInNlbGVjdGlvblwiKTtcblx0XHRpZiAoc2VsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChzZWxmW2lzTG9hZGluZ1N5bWJvbF0gPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoc2VsZltsYXp5TG9hZERvbmVTeW1ib2xdID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHVybCA9IHNlbGYuZ2V0T3B0aW9uKFwidXJsXCIpO1xuXHRcdGxldCBsb29rdXBVcmwgPSBzZWxmLmdldE9wdGlvbihcImxvb2t1cC51cmxcIik7XG5cdFx0aWYgKGxvb2t1cFVybCAhPT0gbnVsbCkge1xuXHRcdFx0dXJsID0gbG9va3VwVXJsO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImxvb2t1cC5ncm91cGluZ1wiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0ZmlsdGVyRnJvbVJlbW90ZUJ5VmFsdWVcblx0XHRcdFx0LmNhbGwoXG5cdFx0XHRcdFx0c2VsZixcblx0XHRcdFx0XHR1cmwsXG5cdFx0XHRcdFx0c2VsZWN0aW9uLm1hcCgocykgPT4gcz8uW1widmFsdWVcIl0pLFxuXHRcdFx0XHQpXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHNlbGYsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgcyBvZiBzZWxlY3Rpb24pIHtcblx0XHRcdGlmIChzPy5bXCJ2YWx1ZVwiXSkge1xuXHRcdFx0XHRmaWx0ZXJGcm9tUmVtb3RlQnlWYWx1ZS5jYWxsKHNlbGYsIHVybCwgcz8uW1widmFsdWVcIl0pLmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCAxMDApO1xufVxuXG5mdW5jdGlvbiBmZXRjaEl0KHVybCwgY29udHJvbE9wdGlvbnMpIHtcblx0aWYgKHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHR9XG5cblx0aWYgKHVybCAhPT0gdW5kZWZpbmVkICYmIHVybCAhPT0gbnVsbCkge1xuXHRcdHVybCA9IHZhbGlkYXRlU3RyaW5nKHVybCk7XG5cdH0gZWxzZSB7XG5cdFx0dXJsID0gdGhpcy5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdFx0aWYgKHVybCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHVybCBkZWZpbmVkXCIpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJsb2FkaW5nXCIpO1xuXG5cdFx0bmV3IFByb2Nlc3NpbmcoMTAsICgpID0+IHtcblx0XHRcdGZldGNoRGF0YVxuXHRcdFx0XHQuY2FsbCh0aGlzLCB1cmwpXG5cdFx0XHRcdC50aGVuKChtYXApID0+IHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRpc09iamVjdChtYXApIHx8XG5cdFx0XHRcdFx0XHRpc0FycmF5KG1hcCkgfHxcblx0XHRcdFx0XHRcdG1hcCBpbnN0YW5jZW9mIFNldCB8fFxuXHRcdFx0XHRcdFx0bWFwIGluc3RhbmNlb2YgTWFwXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmltcG9ydE9wdGlvbnMobWFwKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImVycm9yXCIpO1xuXHRcdFx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpc1tsYXN0RmV0Y2hlZERhdGFTeW1ib2xdID0gbWFwO1xuXG5cdFx0XHRcdFx0XHRsZXQgcmVzdWx0O1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cdFx0XHRcdFx0XHRsZXQgbmV3VmFsdWUgPSBbXTtcblx0XHRcdFx0XHRcdGlmIChzZWxlY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0bmV3VmFsdWUgPSBzZWxlY3Rpb247XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuaGFzQXR0cmlidXRlKFwidmFsdWVcIikpIHtcblx0XHRcdFx0XHRcdFx0bmV3VmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBzZXRTZWxlY3Rpb24uY2FsbCh0aGlzLCBuZXdWYWx1ZSk7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjaGVja09wdGlvblN0YXRlLmNhbGwodGhpcyk7XG5cdFx0XHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJjbG9zZWRcIik7XG5cdFx0XHRcdFx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlcnJvclwiKTtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiaW52YWxpZCByZXNwb25zZVwiKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlcnJvclwiKTtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH0pO1xuXHRcdH0pXG5cdFx0XHQucnVuKClcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZXJyb3JcIik7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIGBgYFxuICogPG1vbnN0ZXItc2VsZWN0IGRhdGEtbW9uc3Rlci11cmw9XCJodHRwczovL2V4YW1wbGUuY29tL1wiPjwvbW9uc3Rlci1zZWxlY3Q+XG4gKiBgYGBcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGRlcHJlY2F0ZWQgMjAyNC0wMS0yMSAoeW91IHNob3VsZCB1c2UgZGF0YS1tb25zdGVyLW9wdGlvbi0uLi4pXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHRlbXBsYXRlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItc2VsZWN0ZWQtdGVtcGxhdGVcIik7XG5cdGlmIChpc1N0cmluZyh0ZW1wbGF0ZSkpIHtcblx0XHRpZiAoIW9wdGlvbnNbXCJ0ZW1wbGF0ZU1hcHBpbmdcIl0pIG9wdGlvbnNbXCJ0ZW1wbGF0ZU1hcHBpbmdcIl0gPSB7fTtcblxuXHRcdHN3aXRjaCAodGVtcGxhdGUpIHtcblx0XHRcdGNhc2UgXCJzdW1tYXJ5XCI6XG5cdFx0XHRjYXNlIFwiZGVmYXVsdFwiOlxuXHRcdFx0XHRvcHRpb25zW1widGVtcGxhdGVNYXBwaW5nXCJdW1wic2VsZWN0ZWRcIl0gPSBnZXRTdW1tYXJ5VGVtcGxhdGUoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic2VsZWN0ZWRcIjpcblx0XHRcdFx0b3B0aW9uc1tcInRlbXBsYXRlTWFwcGluZ1wiXVtcInNlbGVjdGVkXCJdID0gZ2V0U2VsZWN0aW9uVGVtcGxhdGUoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XCJpbnZhbGlkIHRlbXBsYXRlLCB1c2Ugc3VtbWFyeSBvciBzZWxlY3RlZFwiLFxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpcy5wYXJlbnRFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25UZW1wbGF0ZSgpIHtcblx0cmV0dXJuIGA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic2VsZWN0aW9uXCIgcGFydD1cInNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJzZWxlY3Rpb24gcGF0aDpzZWxlY3Rpb25cIiByb2xlPVwic2VhcmNoXCJcbiAgICAgICAgICAgID48aW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwic2VhcmNoYm94XCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImlubGluZS1maWx0ZXJcIiBuYW1lPVwiaW5saW5lLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgID48ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5jb250cm9sXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gO1xufVxuXG5mdW5jdGlvbiBnZXRTdW1tYXJ5VGVtcGxhdGUoKSB7XG5cdHJldHVybiBgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInNlbGVjdGlvblwiIHJvbGU9XCJzZWFyY2hcIiBwYXJ0PVwic3VtbWFyeVwiPlxuICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHJvbGU9XCJzZWFyY2hib3hcIlxuICAgICAgICAgICBwYXJ0PVwiaW5saW5lLWZpbHRlclwiIG5hbWU9XCJpbmxpbmUtZmlsdGVyXCJcbiAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgID5cbiAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5zZWxlY3RlZFwiPjwvZGl2PiAgICBcbjwvZGl2PmA7XG59XG5cbi8qKlxuICogQHJldHVybiB7dm9pZH1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2xvdHNUb09wdGlvbnMoKSB7XG5cdGxldCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRpZiAoIWlzSXRlcmFibGUob3B0aW9ucykpIHtcblx0XHRvcHRpb25zID0gW107XG5cdH1cblxuXHRsZXQgY291bnRlciA9IDE7XG5cdGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIFwiZGl2XCIpLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRsZXQgdmFsdWUgPSAoY291bnRlcisrKS50b1N0cmluZygpO1xuXHRcdGxldCB2aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XG5cblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItdmFsdWVcIikpIHtcblx0XHRcdHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItdmFsdWVcIik7XG5cdFx0fVxuXG5cdFx0aWYgKG5vZGUuc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIpIHtcblx0XHRcdHZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxhYmVsID0gbm9kZS5vdXRlckhUTUw7XG5cblx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0dmFsdWUsXG5cdFx0XHRsYWJlbCxcblx0XHRcdHZpc2liaWxpdHksXG5cdFx0fSk7XG5cdH0pO1xuXG5cdHJ1bkFzT3B0aW9uTGVuZ3RoQ2hhbmdlZC5jYWxsKHRoaXMsIG9wdGlvbnMubGVuZ3RoKTtcblx0dGhpcy5zZXRPcHRpb24oXCJvcHRpb25zXCIsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIHdhaXQgdW50aWwgYWxsIG9wdGlvbnMgYXJlIGZpbmlzaGVkIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2ludH0gdGFyZ2V0TGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIHJ1bkFzT3B0aW9uTGVuZ3RoQ2hhbmdlZCh0YXJnZXRMZW5ndGgpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKCFzZWxmW29wdGlvbnNFbGVtZW50U3ltYm9sXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGNhbGxiYWNrID0gZnVuY3Rpb24gKG11dGF0aW9uc0xpc3QsIG9ic2VydmVyKSB7XG5cdFx0Y29uc3QgcnVuID0gZmFsc2U7XG5cdFx0Zm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnNMaXN0KSB7XG5cdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJjaGlsZExpc3RcIikge1xuXHRcdFx0XHRjb25zdCBydW4gPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocnVuID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBub2RlcyA9IHNlbGZbb3B0aW9uc0VsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0XHRcdGBkaXZbJHtBVFRSSUJVVEVfUk9MRX09b3B0aW9uXWAsXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAobm9kZXMubGVuZ3RoID09PSB0YXJnZXRMZW5ndGgpIHtcblx0XHRcdFx0Y2hlY2tPcHRpb25TdGF0ZS5jYWxsKHNlbGYpO1xuXHRcdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuXHRvYnNlcnZlci5vYnNlcnZlKHNlbGZbb3B0aW9uc0VsZW1lbnRTeW1ib2xdLCB7XG5cdFx0YXR0cmlidXRlczogZmFsc2UsXG5cdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdHN1YnRyZWU6IHRydWUsXG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBidWlsZFNlbGVjdGlvbkxhYmVsKHZhbHVlKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0bGV0IG8gPSBvcHRpb25zPy5baV07XG5cdFx0bGV0IGwsIHYsIHYyO1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMudXNlU3RyaWN0VmFsdWVDb21wYXJpc29uXCIpID09PSB0cnVlKSB7XG5cdFx0XHR2ID0gdmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHYgPSBgJHt2YWx1ZX1gO1xuXHRcdH1cblxuXHRcdGlmIChpc1ByaW1pdGl2ZShvKSAmJiBvID09PSB2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIG87XG5cdFx0fSBlbHNlIGlmICghaXNPYmplY3QobykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnVzZVN0cmljdFZhbHVlQ29tcGFyaXNvblwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0bCA9IG8/LltcImxhYmVsXCJdO1xuXHRcdFx0djIgPSBvPy5bXCJ2YWx1ZVwiXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bCA9IGAke28/LltcImxhYmVsXCJdfWA7XG5cdFx0XHR2MiA9IGAke28/LltcInZhbHVlXCJdfWA7XG5cdFx0fVxuXG5cdFx0aWYgKHYyID09PSB2KSB7XG5cdFx0XHRyZXR1cm4gbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gdmFsdWUgZm91bmRcbiAqL1xuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uTGFiZWwodmFsdWUpIHtcblx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcImZvcm1hdHRlci5zZWxlY3Rpb25cIik7XG5cdGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdGNvbnN0IGxhYmVsID0gY2FsbGJhY2suY2FsbCh0aGlzLCB2YWx1ZSk7XG5cdFx0aWYgKGlzU3RyaW5nKGxhYmVsKSkgcmV0dXJuIGxhYmVsO1xuXHR9XG5cblx0aWYgKGlzU3RyaW5nKHZhbHVlKSB8fCBpc0ludGVnZXIodmFsdWUpKSB7XG5cdFx0cmV0dXJuIGAke3ZhbHVlfWA7XG5cdH1cblxuXHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMuY2Fubm90LWJlLWxvYWRlZFwiLCB2YWx1ZSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZUtleWJvYXJkRXZlbnRzKGV2ZW50KSB7XG5cdHN3aXRjaCAoZXZlbnQ/LltcImNvZGVcIl0pIHtcblx0XHRjYXNlIFwiRXNjYXBlXCI6XG5cdFx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiU3BhY2VcIjpcblx0XHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJBcnJvd0Rvd25cIjpcblx0XHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQXJyb3dVcFwiOlxuXHRcdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHR9XG59XG5cbi8qKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNS4wXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uT2JzZXJ2ZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdHNlbGYuYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0bmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblx0XHRcdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzZWxmLnVwZGF0ZUkxOG4oKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XG5cdFx0XHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwoc2VsZiwgXCJlcnJvclwiKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGFyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0LmNhbGwoc2VsZik7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGUpO1xuXHRcdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHNlbGYsIFwiZXJyb3JcIik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzZXRTdW1tYXJ5QW5kQ29udHJvbFRleHQuY2FsbChzZWxmKTtcblx0XHRcdH0pLnJ1bigpO1xuXHRcdH0pLFxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0VHJhbnNsYXRpb24oKSB7XG5cdGNvbnN0IHRyYW5zbGF0aW9uID0gbmV3IFRyYW5zbGF0aW9ucyhcImVuXCIpLmFzc2lnblRyYW5zbGF0aW9ucyhcblx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVsc1wiLCB7fSksXG5cdCk7XG5cblx0dHJ5IHtcblx0XHRjb25zdCBkb2MgPSBnZXREb2N1bWVudFRyYW5zbGF0aW9ucygpO1xuXHRcdHRyYW5zbGF0aW9uLmxvY2FsZSA9IGRvYy5sb2NhbGU7XG5cdH0gY2F0Y2ggKGUpIHt9XG5cblx0cmV0dXJuIHRyYW5zbGF0aW9uO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd8Kn1cbiAqL1xuZnVuY3Rpb24gc2V0U3VtbWFyeUFuZENvbnRyb2xUZXh0KCkge1xuXHRjb25zdCB0cmFuc2xhdGlvbnMgPSBnZXREZWZhdWx0VHJhbnNsYXRpb24uY2FsbCh0aGlzKTtcblx0Y29uc3Qgc2VsZWN0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXG5cdGNvbnN0IHRleHQgPSB0cmFuc2xhdGlvbnMuZ2V0UGx1cmFsUnVsZVRleHQoXG5cdFx0XCJzdW1tYXJ5LXRleHRcIixcblx0XHRzZWxlY3Rpb25zLmxlbmd0aCxcblx0XHRcIlwiLFxuXHQpO1xuXG5cdGNvbnN0IHNlbGVjdGVkVGV4dCA9IG5ldyBGb3JtYXR0ZXIoe1xuXHRcdGNvdW50OiBTdHJpbmcoc2VsZWN0aW9ucy5sZW5ndGgpLFxuXHR9KS5mb3JtYXQodGV4dCk7XG5cblx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5zZWxlY3RlZFwiLCBzZWxlY3RlZFRleHQpO1xuXG5cdGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldE9wdGlvbihcIm1lc3NhZ2VzLmNvbnRyb2xcIik7XG5cdGNvbnN0IG1zZyA9IHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLnNlbGVjdC1hbi1vcHRpb25cIik7XG5cblx0aWYgKFxuXHRcdGN1cnJlbnQgPT09IFwiXCIgfHxcblx0XHRjdXJyZW50ID09PSB1bmRlZmluZWQgfHxcblx0XHRjdXJyZW50ID09PSBtc2cgfHxcblx0XHRjdXJyZW50ID09PSBudWxsXG5cdCkge1xuXHRcdGlmIChzZWxlY3Rpb25zID09PSB1bmRlZmluZWQgfHwgc2VsZWN0aW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZXMuY29udHJvbFwiLCBtc2cpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLmNvbnRyb2xcIiwgXCJcIik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge05vZGVMaXN0fVxuICovXG5mdW5jdGlvbiBnZXRPcHRpb25FbGVtZW50cygpIHtcblx0cmV0dXJuIHRoaXNbb3B0aW9uc0VsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCxcblx0KTtcbn1cblxuLyoqXG4gKiBXaXRoIHRoZSBoZWxwIG9mIHRoaXMgZmlsdGVyIGNhbGxiYWNrLCB2YWx1ZXMgY2FuIGJlIGZpbHRlcmVkIG91dC4gT25seSBpZiB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgdGhlIHZhbHVlIGlzIHRha2VuIGZvciB0aGUgbWFwLlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlRmlsdGVyQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgIEtleVxuICogQHNlZSBNb25zdGVyLkRhdGEuYnVpbGRNYXBcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1+Zm9ybWF0dGVyU2VsZWN0aW9uQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKiBAc2VlIE1vbnN0ZXIuRGF0YS5idWlsZE1hcFxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2FsY0FuZFNldE9wdGlvbnNEaW1lbnNpb24oKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25FbGVtZW50cy5jYWxsKHRoaXMpO1xuXHRjb25zdCBjb250YWluZXIgPSB0aGlzW29wdGlvbnNFbGVtZW50U3ltYm9sXTtcblx0aWYgKCEoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgb3B0aW9ucyBpbnN0YW5jZW9mIE5vZGVMaXN0KSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGxldCB2aXNpYmxlID0gMDtcblx0bGV0IG9wdGlvbkhlaWdodCA9IDA7XG5cdGNvbnN0IG1heCA9IHRoaXMuZ2V0T3B0aW9uKFwic2hvd01heE9wdGlvbnNcIiwgMTApO1xuXG5cdGxldCBzY3JvbGxGbGFnID0gZmFsc2U7XG5cdGZvciAoY29uc3QgWywgb3B0aW9uXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zKSkge1xuXHRcdGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRHbG9iYWwoKS5nZXRDb21wdXRlZFN0eWxlKG9wdGlvbik7XG5cdFx0aWYgKGNvbXB1dGVkU3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIpIGNvbnRpbnVlO1xuXG5cdFx0bGV0IGggPSBvcHRpb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuXHRcdGggKz0gcGFyc2VJbnQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLXRvcFwiKSwgMTApO1xuXHRcdGggKz0gcGFyc2VJbnQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLWJvdHRvbVwiKSwgMTApO1xuXHRcdG9wdGlvbkhlaWdodCArPSBoO1xuXG5cdFx0dmlzaWJsZSsrO1xuXG5cdFx0aWYgKHZpc2libGUgPiBtYXgpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGlmICh2aXNpYmxlID4gbWF4KSB7XG5cdFx0dmlzaWJsZSA9IG1heDtcblx0XHRzY3JvbGxGbGFnID0gdHJ1ZTtcblx0fVxuXG5cdGlmICh2aXNpYmxlID09PSAwKSB7XG5cdFx0aWYgKGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSA9PT0gRklMVEVSX01PREVfRElTQUJMRUQpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFxuXHRcdFx0XHRcIm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiLFxuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVscy5uby1vcHRpb25zLWF2YWlsYWJsZVwiKSxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFxuXHRcdFx0XHRcIm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiLFxuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVscy5uby1vcHRpb25zLWZvdW5kXCIpLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0dGhpc1tub09wdGlvbnNBdmFpbGFibGVFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXNbbm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0fVxuXG5cdGNvbnN0IHN0eWxlcyA9IGdldEdsb2JhbCgpLmdldENvbXB1dGVkU3R5bGUodGhpc1tvcHRpb25zRWxlbWVudFN5bWJvbF0pO1xuXHRsZXQgcGFkZGluZyA9IHBhcnNlSW50KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy10b3BcIiksIDEwKTtcblx0cGFkZGluZyArPSBwYXJzZUludChzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmctYm90dG9tXCIpLCAxMCk7XG5cblx0bGV0IG1hcmdpbiA9IHBhcnNlSW50KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLXRvcFwiKSwgMTApO1xuXHRtYXJnaW4gKz0gcGFyc2VJbnQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoXCJtYXJnaW4tYm90dG9tXCIpLCAxMCk7XG5cblx0Y29uc3QgY29udGFpbmVySGVpZ2h0ID0gb3B0aW9uSGVpZ2h0ICsgcGFkZGluZyArIG1hcmdpbjtcblx0Y29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGAke2NvbnRhaW5lckhlaWdodH1weGA7XG5cblx0aWYgKHNjcm9sbEZsYWcgPT09IHRydWUpIHtcblx0XHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dZID0gXCJzY3JvbGxcIjtcblx0fSBlbHNlIHtcblx0XHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dZID0gXCJhdXRvXCI7XG5cdH1cblxuXHRjb25zdCBkb21SZWN0ID0gdGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS53aWR0aCA9IGAke2RvbVJlY3Qud2lkdGh9cHhgO1xuXHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dYID0gXCJhdXRvXCI7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJlY3Rpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGFjdGl2YXRlQ3VycmVudE9wdGlvbihkaXJlY3Rpb24pIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0bGV0IGZvY3VzZWQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkXWApO1xuXG5cdGlmIChcblx0XHQhKGZvY3VzZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHxcblx0XHRmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9aGlkZGVuXVwiKVxuXHQpIHtcblx0XHRmb3IgKGNvbnN0IFssIGVdIG9mIE9iamVjdC5lbnRyaWVzKFxuXHRcdFx0dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCksXG5cdFx0KSkge1xuXHRcdFx0aWYgKGUubWF0Y2hlcyhcIltkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT12aXNpYmxlXVwiKSkge1xuXHRcdFx0XHRmb2N1c2VkID0gZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChkaXJlY3Rpb24gPT09IEZPQ1VTX0RJUkVDVElPTl9ET1dOKSB7XG5cdFx0XHR3aGlsZSAoZm9jdXNlZC5uZXh0U2libGluZykge1xuXHRcdFx0XHRmb2N1c2VkID0gZm9jdXNlZC5uZXh0U2libGluZztcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Zm9jdXNlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpID09PSBcIm9wdGlvblwiICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5tYXRjaGVzKFwiW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PXZpc2libGVdXCIpICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5tYXRjaGVzKFwiOm5vdChbZGF0YS1tb25zdGVyLWZpbHRlcmVkPXRydWVdKVwiKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgZm91bmQgPSBmYWxzZTtcblx0XHRcdHdoaWxlIChmb2N1c2VkLnByZXZpb3VzU2libGluZykge1xuXHRcdFx0XHRmb2N1c2VkID0gZm9jdXNlZC5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRmb2N1c2VkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwib3B0aW9uXCIgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9dmlzaWJsZV1cIikgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCI6bm90KFtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV0pXCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGZvdW5kID09PSBmYWxzZSkge1xuXHRcdFx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRpZiAoZm9jdXNlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3Rcblx0XHRcdFx0LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0FUVFJJQlVURV9QUkVGSVh9Zm9jdXNlZF1gKVxuXHRcdFx0XHQuZm9yRWFjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGUucmVtb3ZlQXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9Zm9jdXNlZGApO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0Zm9jdXNlZC5mb2N1cygpO1xuXHRcdFx0Zm9jdXNlZC5zZXRBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkYCwgdHJ1ZSk7XG5cdFx0fVxuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBmaWx0ZXJPcHRpb25zKCkge1xuXHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0bGV0IGZpbHRlclZhbHVlO1xuXG5cdFx0c3dpdGNoICh0aGlzLmdldE9wdGlvbihcImZpbHRlci5wb3NpdGlvblwiKSkge1xuXHRcdFx0Y2FzZSBGSUxURVJfUE9TSVRJT05fSU5MSU5FOlxuXHRcdFx0XHRpZiAodGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0ZmlsdGVyVmFsdWUgPSB0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIEZJTFRFUl9QT1NJVElPTl9QT1BQRVI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRcdGZvciAoY29uc3QgW2ksIG9wdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMob3B0aW9ucykpIHtcblx0XHRcdGlmIChvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbHVlKSA9PT0gLTEpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtpfS5maWx0ZXJlZGAsIFwidHJ1ZVwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKGBvcHRpb25zLiR7aX0uZmlsdGVyZWRgLCB1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSlcblx0XHQucnVuKClcblx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRuZXcgUHJvY2Vzc2luZygxMDAsICgpID0+IHtcblx0XHRcdFx0Y2FsY0FuZFNldE9wdGlvbnNEaW1lbnNpb24uY2FsbCh0aGlzKTtcblx0XHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHRcdH0pXG5cdFx0XHRcdC5ydW4oKVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9KTtcblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gaGFuZGxlRmlsdGVyS2V5Ym9hcmRFdmVudHMoZXZlbnQpIHtcblx0Y29uc3Qgc2hpZnRLZXkgPSBldmVudD8uW1wic2hpZnRLZXlcIl07XG5cblx0c3dpdGNoIChldmVudD8uW1wiY29kZVwiXSkge1xuXHRcdGNhc2UgXCJUYWJcIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRXNjYXBlXCI6XG5cdFx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVGFiXCIgJiYgc2hpZnRLZXkgPT09IHRydWU6XG5cdFx0Y2FzZSBcIkFycm93VXBcIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9VUCk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlRhYlwiICYmICFzaGlmdEtleTpcblx0XHRjYXNlIFwiQXJyb3dEb3duXCI6XG5cdFx0XHRhY3RpdmF0ZUN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBGT0NVU19ESVJFQ1RJT05fRE9XTik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGlmIChcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHR0aGlzW2xhenlMb2FkRG9uZVN5bWJvbF0gIT09IHRydWVcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLmNsaWNrKCk7XG5cdFx0XHR9XG5cblx0XHRcdGhhbmRsZUZpbHRlcktleUV2ZW50cy5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogTWV0aG9kIGhhbmRsZUZpbHRlcktleUV2ZW50cyBpcyB1c2VkIHRvIGhhbmRsZSBmaWx0ZXIga2V5IGV2ZW50cy5cbiAqIERlYm91bmNlIGlzIHVzZWQgdG8gcHJldmVudCBtdWx0aXBsZSBjYWxscy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIGhhbmRsZUZpbHRlcktleUV2ZW50c1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHt2b2lkfSBUaGlzIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUZpbHRlcktleUV2ZW50cygpIHtcblx0aWYgKHRoaXNba2V5RmlsdGVyRXZlbnRTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHR0cnkge1xuXHRcdFx0dGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF0udG91Y2goKTtcblx0XHRcdHJldHVybjtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRkZWxldGUgdGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF07XG5cdFx0fVxuXHR9XG5cblx0dGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0aWYgKGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSAhPT0gRklMVEVSX01PREVfUkVNT1RFKSB7XG5cdFx0XHRmaWx0ZXJPcHRpb25zLmNhbGwodGhpcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZpbHRlckZyb21SZW1vdGUuY2FsbCh0aGlzKS5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIHRoaXNba2V5RmlsdGVyRXZlbnRTeW1ib2xdO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBmaWx0ZXJGcm9tUmVtb3RlKCkge1xuXHRpZiAoXG5cdFx0ISh0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpICYmXG5cdFx0ISh0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpXG5cdCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHNob3cuY2FsbCh0aGlzKTtcblxuXHRjb25zdCB1cmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiKTtcblx0aWYgKCF1cmwpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdHRoaXMsXG5cdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XCJNaXNzaW5nIFVSTCBmb3IgUmVtb3RlIEZpbHRlci5cIixcblx0XHQpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGxldCBmaWx0ZXJWYWx1ZTtcblxuXHRzd2l0Y2ggKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLnBvc2l0aW9uXCIpKSB7XG5cdFx0Y2FzZSBGSUxURVJfUE9TSVRJT05fSU5MSU5FOlxuXHRcdFx0aWYgKHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdH1cblxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBGSUxURVJfUE9TSVRJT05fUE9QUEVSOlxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRpZiAodGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdFx0ZmlsdGVyVmFsdWUgPSB0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmlsdGVyRnJvbVJlbW90ZUJ5VmFsdWUuY2FsbCh0aGlzLCB1cmwsIGZpbHRlclZhbHVlKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVJMKHVybCwgdmFsdWUpIHtcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcblx0XHR2YWx1ZSA9IHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLmRlZmF1bHRWYWx1ZVwiKTtcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0dmFsdWUgPSBkaXNhYmxlZFJlcXVlc3RNYXJrZXIudG9TdHJpbmcoKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHsgZmlsdGVyOiBlbmNvZGVVUkkodmFsdWUpIH0pO1xuXHRjb25zdCBvcGVuTWFya2VyID0gdGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIubWFya2VyLm9wZW5cIik7XG5cdGxldCBjbG9zZU1hcmtlciA9IHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLm1hcmtlci5jbG9zZVwiKTtcblx0aWYgKCFjbG9zZU1hcmtlcikge1xuXHRcdGNsb3NlTWFya2VyID0gb3Blbk1hcmtlcjtcblx0fVxuXG5cdGlmIChvcGVuTWFya2VyICYmIGNsb3NlTWFya2VyKSB7XG5cdFx0Zm9ybWF0dGVyLnNldE1hcmtlcihvcGVuTWFya2VyLCBjbG9zZU1hcmtlcik7XG5cdH1cblxuXHRyZXR1cm4gZm9ybWF0dGVyLmZvcm1hdCh1cmwpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb3B0aW9uVXJsXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5mdW5jdGlvbiBmaWx0ZXJGcm9tUmVtb3RlQnlWYWx1ZShvcHRpb25VcmwsIHZhbHVlKSB7XG5cdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0bGV0IHVybCA9IGZvcm1hdFVSTC5jYWxsKHRoaXMsIG9wdGlvblVybCwgdmFsdWUpO1xuXHRcdGlmICh1cmwuaW5kZXhPZihkaXNhYmxlZFJlcXVlc3RNYXJrZXIudG9TdHJpbmcoKSkgIT09IC0xKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZmV0Y2hJdFxuXHRcdFx0LmNhbGwodGhpcywgdXJsLCB7XG5cdFx0XHRcdGRpc2FibGVIaWRpbmc6IHRydWUsXG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRjaGVja09wdGlvblN0YXRlLmNhbGwodGhpcyk7XG5cdFx0XHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdH0pO1xuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMoZXZlbnQpIHtcblx0Y29uc3Qgc2hpZnRLZXkgPSBldmVudD8uW1wic2hpZnRLZXlcIl07XG5cblx0c3dpdGNoIChldmVudD8uW1wiY29kZVwiXSkge1xuXHRcdGNhc2UgXCJFc2NhcGVcIjpcblx0XHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFbnRlclwiOlxuXHRcdGNhc2UgXCJTcGFjZVwiOlxuXHRcdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdFx0Y29uc3QgZWxlbWVudCA9IHBhdGg/LlswXTtcblx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0Y29uc3QgaW5wdXQgPSBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIik7XG5cdFx0XHRcdGlmICghaW5wdXQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0ZmlyZUV2ZW50KGlucHV0LCBcImNsaWNrXCIpO1xuXHRcdFx0fVxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIlRhYlwiICYmIHNoaWZ0S2V5ID09PSB0cnVlOlxuXHRcdGNhc2UgXCJBcnJvd1VwXCI6XG5cdFx0XHRhY3RpdmF0ZUN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBGT0NVU19ESVJFQ1RJT05fVVApO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIlRhYlwiICYmICFzaGlmdEtleTpcblx0XHRjYXNlIFwiQXJyb3dMZWZ0XCI6XG5cdFx0Y2FzZSBcIkFycm93UmlnaHRcIjpcblx0XHRcdC8vIGhhbmRsZWQgYnkgdHJlZSBzZWxlY3Rcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJBcnJvd0Rvd25cIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0Y29uc3QgcCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdFx0aWYgKHA/LlswXSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHRcdGJyZWFrO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0RmlsdGVyTW9kZSgpIHtcblx0c3dpdGNoICh0aGlzLmdldE9wdGlvbihcImZpbHRlci5tb2RlXCIpKSB7XG5cdFx0Y2FzZSBGSUxURVJfTU9ERV9PUFRJT05TOlxuXHRcdFx0cmV0dXJuIEZJTFRFUl9NT0RFX09QVElPTlM7XG5cdFx0Y2FzZSBGSUxURVJfTU9ERV9SRU1PVEU6XG5cdFx0XHRyZXR1cm4gRklMVEVSX01PREVfUkVNT1RFO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gRklMVEVSX01PREVfRElTQUJMRUQ7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBibHVyRmlsdGVyKCkge1xuXHRpZiAoISh0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSA9PT0gRklMVEVSX01PREVfRElTQUJMRUQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uYmx1cigpO1xuXG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5ibHVyKCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmb2N1c09wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZm9jdXNQb3BwZXJGaWx0ZXIoZm9jdXNPcHRpb25zKSB7XG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImQtbm9uZVwiKTtcblx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblxuXHRpZiAoISh0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHR0aGlzLFxuXHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFwiTWlzc2luZyBQb3BwZXIgRmlsdGVyIEVsZW1lbnQuXCIsXG5cdFx0KTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyB2aXNpYmlsaXR5IGlzIHNldCB0byB2aXNpYmxlLCBiZWNhdXNlIGZvY3VzKCkgZG9lcyBub3Qgd29yayBvbiBpbnZpc2libGUgZWxlbWVudHNcblx0Ly8gYW5kIHRoZSBjbGFzcyBkZWZpbml0aW9uIGlzIGFzc2lnbmVkIGxhdGVyIGluIHRoZSBwcm9jZXNzaW5nXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGlmIChmb2N1c09wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBmb2N1c09wdGlvbnMgPT09IG51bGwpIHtcblx0XHRcdHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0uZm9jdXMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS5mb2N1cyhmb2N1c09wdGlvbnMpO1xuXHRcdH1cblx0fSwgMTAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZvY3VzT3B0aW9uc1xuICovXG5mdW5jdGlvbiBmb2N1c0lubGluZUZpbHRlcihmb2N1c09wdGlvbnMpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcblx0aWYgKFxuXHRcdCghaXNBcnJheShvcHRpb25zKSB8fCBvcHRpb25zLmxlbmd0aCA9PT0gMCkgJiZcblx0XHRnZXRGaWx0ZXJNb2RlLmNhbGwodGhpcykgIT09IEZJTFRFUl9NT0RFX1JFTU9URVxuXHQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJkLW5vbmVcIik7XG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuXG5cdC8vIHZpc2liaWxpdHkgaXMgc2V0IHRvIHZpc2libGUsIGJlY2F1c2UgZm9jdXMoKSBkb2VzIG5vdCB3b3JrIG9uIGludmlzaWJsZSBlbGVtZW50c1xuXHQvLyBhbmQgdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgYXNzaWduZWQgbGF0ZXIgaW4gdGhlIHByb2Nlc3Npbmdcblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0aWYgKGZvY3VzT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IGZvY3VzT3B0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5mb2N1cygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmZvY3VzKGZvY3VzT3B0aW9ucyk7XG5cdFx0fVxuXHR9LCAxMDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZvY3VzRmlsdGVyKGZvY3VzT3B0aW9ucykge1xuXHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9ESVNBQkxFRCkge1xuXHRcdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0XHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJkLW5vbmVcIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLnBvc2l0aW9uXCIpID09PSBGSUxURVJfUE9TSVRJT05fSU5MSU5FKSB7XG5cdFx0cmV0dXJuIGZvY3VzSW5saW5lRmlsdGVyLmNhbGwodGhpcywgZm9jdXNPcHRpb25zKTtcblx0fVxuXG5cdHJldHVybiBmb2N1c1BvcHBlckZpbHRlci5jYWxsKHRoaXMsIGZvY3VzT3B0aW9ucyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2FycmF5fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKi9cbmZ1bmN0aW9uIGdhdGhlclN0YXRlKCkge1xuXHRjb25zdCB0eXBlID0gdGhpcy5nZXRPcHRpb24oXCJ0eXBlXCIpO1xuXHRpZiAoW1wicmFkaW9cIiwgXCJjaGVja2JveFwiXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHR5cGVcIik7XG5cdH1cblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCBzZWxlY3Rpb24gPSBbXTtcblx0Y29uc3QgZWxlbWVudHMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcblx0XHRgaW5wdXRbdHlwZT0ke3R5cGV9XTpjaGVja2VkYCxcblx0KTtcblxuXHRmb3IgKGNvbnN0IGUgb2YgZWxlbWVudHMpIHtcblx0XHRzZWxlY3Rpb24ucHVzaCh7XG5cdFx0XHRsYWJlbDogZ2V0U2VsZWN0aW9uTGFiZWwuY2FsbCh0aGlzLCBlLnZhbHVlKSxcblx0XHRcdHZhbHVlOiBlLnZhbHVlLFxuXHRcdH0pO1xuXHR9XG5cblx0c2V0U2VsZWN0aW9uXG5cdFx0LmNhbGwodGhpcywgc2VsZWN0aW9uKVxuXHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHR9KTtcblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5jbG9zZU9uU2VsZWN0XCIpID09PSB0cnVlKSB7XG5cdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uKCkge1xuXHRjb25zdCB0eXBlID0gdGhpcy5nZXRPcHRpb24oXCJ0eXBlXCIpO1xuXHRpZiAoW1wicmFkaW9cIiwgXCJjaGVja2JveFwiXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHR5cGVcIik7XG5cdH1cblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRzZXRTZWxlY3Rpb25cblx0XHQuY2FsbCh0aGlzLCBbXSlcblx0XHQudGhlbigoKSA9PiB7fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXQoKSB7XG5cdC8vIHByZXZlbnQgbXVsdGlwbGUgY2FsbHNcblx0aWYgKHRoaXNbYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHR0aGlzW2FyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0U3ltYm9sXSA9IDA7XG5cdH1cblxuXHRpZiAodGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0gPiAwKSB7XG5cdFx0dGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0tLTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHRoaXNbYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2xdKys7XG5cblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcblxuXHRpZiAoXG5cdFx0b3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0b3B0aW9ucyA9PT0gbnVsbCB8fFxuXHRcdChpc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubGVuZ3RoID09PSAwKVxuXHQpIHtcblx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZW1wdHlcIik7XG5cblx0XHQvLyBoaWRlLmNhbGwodGhpcyk7XG5cblx0XHRsZXQgbXNnID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMubm8tb3B0aW9ucy1hdmFpbGFibGVcIik7XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcInVybFwiKSAhPT0gbnVsbCAmJlxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0dGhpc1tsYXp5TG9hZERvbmVTeW1ib2xdICE9PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHRtc2cgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5jbGljay10by1sb2FkLW9wdGlvbnNcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIsIG1zZyk7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5zdW1tYXJ5XCIsIFwiXCIpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuZW1wdHlWYWx1ZUlmTm9PcHRpb25zXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnZhbHVlID0gXCJcIjtcblx0XHR9XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgbm9PcHRpb25zQXZhaWxhYmxlTWVzc2FnZSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Y29uc3Qgc2VsZWN0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRpZiAoXG5cdFx0c2VsZWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0c2VsZWN0aW9ucyA9PT0gbnVsbCB8fFxuXHRcdHNlbGVjdGlvbnMubGVuZ3RoID09PSAwXG5cdCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFxuXHRcdFx0XCJtZXNzYWdlcy5jb250cm9sXCIsXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVscy5zZWxlY3QtYW4tb3B0aW9uXCIpLFxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIsIFwiXCIpO1xuXHR9XG5cblx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5zdW1tYXJ5XCIsIHNldFN1bW1hcnlBbmRDb250cm9sVGV4dC5jYWxsKHRoaXMpKTtcblxuXHRsZXQgdXBkYXRlZCA9IGZhbHNlO1xuXHRsZXQgdmFsdWVDb3VudGVyID0gMTtcblx0Zm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuXHRcdGlmIChvcHRpb24/LnZpc2liaWxpdHkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0b3B0aW9uLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb24/LnZhbHVlID09PSB1bmRlZmluZWQgJiYgb3B0aW9uPy5sYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24udmFsdWUgPSBgJHt2YWx1ZUNvdW50ZXIrK31gO1xuXHRcdFx0b3B0aW9uLmxhYmVsID0gb3B0aW9uLnZhbHVlO1xuXHRcdFx0dXBkYXRlZCA9IHRydWU7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9uPy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24udmFsdWUgPSBvcHRpb24ubGFiZWw7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9uPy5sYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24ubGFiZWwgPSBvcHRpb24udmFsdWU7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRpZiAodXBkYXRlZCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcblx0fVxuXG5cdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcyk7XG5cblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgbm9PcHRpb25zQXZhaWxhYmxlTWVzc2FnZSk7XG5cdHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBjaGVja09wdGlvblN0YXRlKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCBlbGVtZW50cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09b3B0aW9uXSBpbnB1dGAsXG5cdCk7XG5cblx0bGV0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRpZiAoIWlzQXJyYXkoc2VsZWN0aW9uKSkge1xuXHRcdHNlbGVjdGlvbiA9IFtdO1xuXHR9XG5cblx0Y29uc3QgY2hlY2tlZFZhbHVlcyA9IHNlbGVjdGlvbi5tYXAoKGEpID0+IHtcblx0XHRyZXR1cm4gYS52YWx1ZTtcblx0fSk7XG5cblx0Zm9yIChjb25zdCBlIG9mIGVsZW1lbnRzKSB7XG5cdFx0aWYgKGNoZWNrZWRWYWx1ZXMuaW5kZXhPZihlLnZhbHVlKSAhPT0gLTEpIHtcblx0XHRcdGlmIChlLmNoZWNrZWQgIT09IHRydWUpIGUuY2hlY2tlZCA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChlLmNoZWNrZWQgIT09IGZhbHNlKSBlLmNoZWNrZWQgPSBmYWxzZTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBjb252ZXJ0VmFsdWVUb1NlbGVjdGlvbih2YWx1ZSkge1xuXHRjb25zdCBzZWxlY3Rpb24gPSBbXTtcblxuXHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZVxuXHRcdFx0LnNwbGl0KFwiLFwiKVxuXHRcdFx0Lm1hcCgoYSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYS50cmltKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigoYSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYSAhPT0gXCJcIjtcblx0XHRcdH0pO1xuXHR9XG5cblx0aWYgKGlzU3RyaW5nKHZhbHVlKSB8fCBpc0ludGVnZXIodmFsdWUpKSB7XG5cdFx0c2VsZWN0aW9uLnB1c2goe1xuXHRcdFx0bGFiZWw6IGdldFNlbGVjdGlvbkxhYmVsLmNhbGwodGhpcywgdmFsdWUpLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0Zm9yIChjb25zdCB2IG9mIHZhbHVlKSB7XG5cdFx0XHRzZWxlY3Rpb24ucHVzaCh7XG5cdFx0XHRcdGxhYmVsOiBnZXRTZWxlY3Rpb25MYWJlbC5jYWxsKHRoaXMsIHYpLFxuXHRcdFx0XHR2YWx1ZTogdixcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHZhbHVlID0gdmFsdWUuam9pbihcIixcIik7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0c2VsZWN0aW9uOiBzZWxlY3Rpb24sXG5cdFx0dmFsdWU6IHZhbHVlLFxuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2FycmF5fSBzZWxlY3Rpb25cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29udmVydFNlbGVjdGlvblRvVmFsdWUoc2VsZWN0aW9uKSB7XG5cdGNvbnN0IHZhbHVlID0gW107XG5cblx0aWYgKGlzQXJyYXkoc2VsZWN0aW9uKSkge1xuXHRcdGZvciAoY29uc3Qgb2JqIG9mIHNlbGVjdGlvbikge1xuXHRcdFx0Y29uc3QgdiA9IG9iaj8uW1widmFsdWVcIl07XG5cdFx0XHRpZiAodiAhPT0gdW5kZWZpbmVkKSB2YWx1ZS5wdXNoKHYpO1xuXHRcdH1cblx0fVxuXG5cdGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gdmFsdWUucG9wKCk7XG5cdH1cblxuXHRyZXR1cm4gdmFsdWUuam9pbihcIixcIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7YXJyYXl9IHNlbGVjdGlvblxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pIHtcblx0aWYgKGlzU3RyaW5nKHNlbGVjdGlvbikpIHtcblx0XHRjb25zdCByZXN1bHQgPSBjb252ZXJ0VmFsdWVUb1NlbGVjdGlvbi5jYWxsKHRoaXMsIHNlbGVjdGlvbik7XG5cdFx0c2VsZWN0aW9uID0gcmVzdWx0Py5zZWxlY3Rpb247XG5cdH0gZWxzZSBpZiAoc2VsZWN0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRzZWxlY3Rpb24gPSBbXTtcblx0fVxuXG5cdHZhbGlkYXRlQXJyYXkoc2VsZWN0aW9uKTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbi5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBsID0gZ2V0U2VsZWN0aW9uTGFiZWwuY2FsbCh0aGlzLCBzZWxlY3Rpb25baV0udmFsdWUpO1xuXHRcdGlmIChsID09PSBzZWxlY3Rpb25baV0udmFsdWUpIHtcblx0XHRcdGwgPSBzZWxlY3Rpb25baV0ubGFiZWw7XG5cdFx0fVxuXG5cdFx0c2VsZWN0aW9uW2ldID0ge1xuXHRcdFx0bGFiZWw6IGwsXG5cdFx0XHR2YWx1ZTogc2VsZWN0aW9uW2ldLnZhbHVlLFxuXHRcdH07XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcInNlbGVjdGlvblwiLCBzZWxlY3Rpb24pO1xuXHRjaGVja09wdGlvblN0YXRlLmNhbGwodGhpcyk7XG5cblx0dHJ5IHtcblx0XHR0aGlzPy5zZXRGb3JtVmFsdWUodGhpcy52YWx1ZSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHR9XG5cblx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1zZWxlY3RlZFwiLCB7XG5cdFx0c2VsZWN0aW9uLFxuXHR9KTtcblxuXHRyZXR1cm4gbmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGNvbnN0IENMQVNTTkFNRSA9IFwic2VsZWN0ZWRcIjtcblxuXHRcdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5vdFNlbGVjdGVkID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6bm90KDpjaGVja2VkKVwiKTtcblxuXHRcdGlmIChub3RTZWxlY3RlZCkge1xuXHRcdFx0bm90U2VsZWN0ZWQuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXJlbnQgPSBub2RlLmNsb3Nlc3QoYFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCk7XG5cdFx0XHRcdGlmIChwYXJlbnQpIHtcblx0XHRcdFx0XHRwYXJlbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU05BTUUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFwiOmNoZWNrZWRcIik7XG5cdFx0aWYgKHNlbGVjdGVkKSB7XG5cdFx0XHRzZWxlY3RlZC5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IG5vZGUuY2xvc2VzdChgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gKTtcblx0XHRcdFx0aWYgKHBhcmVudCkge1xuXHRcdFx0XHRcdHBhcmVudC5jbGFzc0xpc3QuYWRkKENMQVNTTkFNRSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSlcblx0XHQucnVuKClcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHRoZSByZXN1bHQgY2Fubm90IGJlIHBhcnNlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCByZXNwb25zZVxuICovXG5mdW5jdGlvbiBmZXRjaERhdGEodXJsKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRpZiAoIXVybCkgdXJsID0gdGhpcy5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdGlmICghdXJsKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0Y29uc3QgZmV0Y2hPcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSk7XG5cblx0bGV0IGRlbGF5V2F0Y2ggPSBmYWxzZTtcblxuXHQvLyBpZiBmZXRjaCBzaG9ydCB0aW1lLCBkbyBub3Qgc2hvdyBsb2FkaW5nIGJhZGdlLCBiZWNhdXNlIG9mIGZsaWNrZXJpbmdcblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRpZiAoZGVsYXlXYXRjaCA9PT0gdHJ1ZSkgcmV0dXJuO1xuXHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJsb2FkaW5nXCIpO1xuXHRcdGRlbGF5V2F0Y2ggPSB0cnVlO1xuXHR9KTtcblxuXHR1cmwgPSBmb3JtYXRVUkwuY2FsbCh0aGlzLCB1cmwpO1xuXG5cdHNlbGZbaXNMb2FkaW5nU3ltYm9sXSA9IHRydWU7XG5cdGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXHRyZXR1cm4gZ2xvYmFsXG5cdFx0LmZldGNoKHVybCwgZmV0Y2hPcHRpb25zKVxuXHRcdC50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdFx0c2VsZltpc0xvYWRpbmdTeW1ib2xdID0gZmFsc2U7XG5cdFx0XHRkZWxheVdhdGNoID0gdHJ1ZTtcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG5cdFx0XHRpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5kZXhPZihcImFwcGxpY2F0aW9uL2pzb25cIikgIT09IC0xKSB7XG5cdFx0XHRcdHJldHVybiByZXNwb25zZS50ZXh0KCk7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHJlc3BvbnNlICR7Y29udGVudFR5cGV9YCk7XG5cdFx0fSlcblx0XHQudGhlbigodGV4dCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShKU09OLnBhcnNlKFN0cmluZyh0ZXh0KSkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidGhlIHJlc3VsdCBjYW5ub3QgYmUgcGFyc2VkLCBjaGVjayB0aGUgVVJMXCIpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRzZWxmW2lzTG9hZGluZ1N5bWJvbF0gPSBmYWxzZTtcblx0XHRcdGRlbGF5V2F0Y2ggPSB0cnVlO1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoaWRlKCkge1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImNsb3NlZFwiKTtcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4odGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sIFwiY2xhc3NcIiwgXCJvcGVuXCIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNob3coKSB7XG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIHVuZGVmaW5lZCkgPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXG5cdGNvbnN0IGxhenlMb2FkRmxhZyA9XG5cdFx0dGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiKSAmJiB0aGlzW2xhenlMb2FkRG9uZVN5bWJvbF0gIT09IHRydWU7XG5cblx0aWYgKGxhenlMb2FkRmxhZyA9PT0gdHJ1ZSkge1xuXHRcdHRoaXNbbGF6eUxvYWREb25lU3ltYm9sXSA9IHRydWU7XG5cdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImxvYWRpbmdcIik7XG5cblx0XHRuZXcgUHJvY2Vzc2luZygyMDAsICgpID0+IHtcblx0XHRcdHRoaXMuZmV0Y2goKVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0Y2hlY2tPcHRpb25TdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRzaG93LmNhbGwodGhpcyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImVycm9yXCIpO1xuXHRcdFx0XHR9KTtcblx0XHR9KVxuXHRcdFx0LnJ1bigpXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImVycm9yXCIpO1xuXHRcdFx0fSk7XG5cblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBoYXNQb3BwZXJGaWx0ZXJGbGFnID1cblx0XHR0aGlzLmdldE9wdGlvbihcImZpbHRlci5wb3NpdGlvblwiKSA9PT0gRklMVEVSX1BPU0lUSU9OX1BPUFBFUiAmJlxuXHRcdGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSAhPT0gRklMVEVSX01PREVfRElTQUJMRUQ7XG5cblx0Y29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbkVsZW1lbnRzLmNhbGwodGhpcyk7XG5cdGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCAmJiBoYXNQb3BwZXJGaWx0ZXJGbGFnID09PSBmYWxzZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSztcblx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcIm9wZW5cIik7XG5cblx0YWRkQXR0cmlidXRlVG9rZW4odGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sIFwiY2xhc3NcIiwgXCJvcGVuXCIpO1xuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuXHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cdFx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInZpc2liaWxpdHlcIik7XG5cdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdH0pXG5cdFx0LnJ1bigpXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZSgpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHR9IGVsc2Uge1xuXHRcdHNob3cuY2FsbCh0aGlzKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAZmlyZXMgbW9uc3Rlci1zZWxlY3Rpb24tcmVtb3ZlZFxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0aW9uLWNsZWFyZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHRzZWxmW2NsZWFyT3B0aW9uRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcInJlbW92ZS1iYWRnZVwiLFxuXHRcdCk7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRjb25zdCBiYWRnZSA9IGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZWxlbWVudCwgQVRUUklCVVRFX1JPTEUsIFwiYmFkZ2VcIik7XG5cdFx0XHRpZiAoYmFkZ2UgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGJhZGdlLmdldEF0dHJpYnV0ZShgJHtBVFRSSUJVVEVfUFJFRklYfXZhbHVlYCk7XG5cblx0XHRcdFx0bGV0IHNlbGVjdGlvbiA9IHNlbGYuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRcdFx0XHRzZWxlY3Rpb24gPSBzZWxlY3Rpb24uZmlsdGVyKChiKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlICE9PSBiLnZhbHVlO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRzZXRTZWxlY3Rpb25cblx0XHRcdFx0XHQuY2FsbChzZWxmLCBzZWxlY3Rpb24pXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1zZWxlY3Rpb24tcmVtb3ZlZFwiLCB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHNlbGYsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0c2VsZltjbG9zZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHBhdGgpKSB7XG5cdFx0XHRpZiAoZWxlbWVudCA9PT0gc2VsZikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGhpZGUuY2FsbChzZWxmKTtcblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHNlbGZbaW5wdXRFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBwYXRoPy5bMF07XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSAmJlxuXHRcdFx0XHRlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwib3B0aW9uLWNvbnRyb2xcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItY2hhbmdlXCIsIHtcblx0XHRcdFx0XHR0eXBlOiBldmVudC50eXBlLFxuXHRcdFx0XHRcdHZhbHVlOiBlbGVtZW50LnZhbHVlLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IGVsZW1lbnQuY2hlY2tlZCxcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcblx0XHRcdFx0ZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpID09PSBcImZpbHRlclwiXG5cdFx0XHQpIHtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHRzZWxmW2NoYW5nZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRnYXRoZXJTdGF0ZS5jYWxsKHNlbGYpO1xuXHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItY2hhbmdlZFwiLCBldmVudD8uZGV0YWlsKTtcblx0fTtcblxuXHRzZWxmW2tleUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHBhdGguc2hpZnQoKTtcblxuXHRcdGxldCByb2xlO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0aWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSkge1xuXHRcdFx0XHRyb2xlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpO1xuXHRcdFx0fSBlbHNlIGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRcdFx0Ly8gZm9jdXNGaWx0ZXIuY2FsbChzZWxmKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGUgPSBlbGVtZW50LmNsb3Nlc3QoYFske0FUVFJJQlVURV9ST0xFfV1gKTtcblx0XHRcdFx0aWYgKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkpIHtcblx0XHRcdFx0XHRyb2xlID0gZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRzd2l0Y2ggKHJvbGUpIHtcblx0XHRcdGNhc2UgXCJmaWx0ZXJcIjpcblx0XHRcdFx0aGFuZGxlRmlsdGVyS2V5Ym9hcmRFdmVudHMuY2FsbChzZWxmLCBldmVudCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIm9wdGlvbi1sYWJlbFwiOlxuXHRcdFx0Y2FzZSBcIm9wdGlvbi1jb250cm9sXCI6XG5cdFx0XHRjYXNlIFwib3B0aW9uXCI6XG5cdFx0XHRcdGhhbmRsZU9wdGlvbktleWJvYXJkRXZlbnRzLmNhbGwoc2VsZiwgZXZlbnQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb250cm9sXCI6XG5cdFx0XHRjYXNlIFwidG9nZ2xlXCI6XG5cdFx0XHRcdGhhbmRsZVRvZ2dsZUtleWJvYXJkRXZlbnRzLmNhbGwoc2VsZiwgZXZlbnQpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH07XG5cblx0Y29uc3QgdHlwZXMgPSBzZWxmLmdldE9wdGlvbihcInRvZ2dsZUV2ZW50VHlwZVwiLCBbXCJjbGlja1wiXSk7XG5cblx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyh0eXBlcykpIHtcblx0XHRzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXVxuXHRcdFx0LnF1ZXJ5U2VsZWN0b3IoYFske0FUVFJJQlVURV9ST0xFfT1cImNvbnRhaW5lclwiXWApXG5cdFx0XHQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XHRcdFwicmVtb3ZlLWJhZGdlXCIsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0b2dnbGUuY2FsbChzZWxmKTtcblx0XHRcdH0pO1xuXG5cdFx0c2VsZltjb250cm9sRWxlbWVudFN5bWJvbF1cblx0XHRcdC5xdWVyeVNlbGVjdG9yKGBbJHtBVFRSSUJVVEVfUk9MRX09XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiXWApXG5cdFx0XHQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgdW5kZWZpbmVkKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IHBhdGg/LlswXTtcblx0XHRcdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRyb2wgPSBlbGVtZW50LmNsb3Nlc3QoXG5cdFx0XHRcdFx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIl1gLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRyb2wuY2xhc3NMaXN0LmNvbnRhaW5zKFwiY2xlYXJcIikpIHtcblx0XHRcdFx0XHRcdFx0Y2xlYXJTZWxlY3Rpb24uY2FsbChzZWxmKTtcblxuXHRcdFx0XHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXNlbGVjdGlvbi1jbGVhcmVkXCIsIHt9KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdFx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRcdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFx0XHRcdFx0XHRcInJlbW92ZS1iYWRnZVwiLFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dG9nZ2xlLmNhbGwoc2VsZik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdC8vIGJhZGdlLCBzZWxlY3Rpb25cblx0XHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgc2VsZltjbGVhck9wdGlvbkV2ZW50SGFuZGxlcl0pO1xuXHR9XG5cblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwibW9uc3Rlci1jaGFuZ2VcIiwgc2VsZltjaGFuZ2VFdmVudEhhbmRsZXJdKTtcblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgc2VsZltpbnB1dEV2ZW50SGFuZGxlcl0pO1xuXHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHNlbGZba2V5RXZlbnRIYW5kbGVyXSk7XG5cblx0cmV0dXJuIHNlbGY7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqL1xuZnVuY3Rpb24gc2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMoc3VnZ2VzdGlvbikge1xuXHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXG5cdFx0Y29uc3QgY2xlYXJBbGxGbGFnID1cblx0XHRcdGlzQXJyYXkoc2VsZWN0aW9uKSAmJlxuXHRcdFx0c2VsZWN0aW9uLmxlbmd0aCA+IDAgJiZcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuY2xlYXJBbGxcIikgPT09IHRydWU7XG5cblx0XHRjb25zdCBjdXJyZW50ID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIik7XG5cblx0XHRpZiAoc3VnZ2VzdGlvbiA9PT0gXCJlcnJvclwiKSB7XG5cdFx0XHRpZiAoY3VycmVudCAhPT0gXCJlcnJvclwiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwiZXJyb3JcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXNbaXNMb2FkaW5nU3ltYm9sXSA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwibG9hZGluZ1wiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwibG9hZGluZ1wiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoc3VnZ2VzdGlvbiA9PT0gXCJsb2FkaW5nXCIpIHtcblx0XHRcdGlmIChjdXJyZW50ICE9PSBcImxvYWRpbmdcIikge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcImxvYWRpbmdcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGNsZWFyQWxsRmxhZykge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwiY2xlYXJcIikge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcImNsZWFyXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJvcGVuXCIpKSB7XG5cdFx0XHRpZiAoY3VycmVudCAhPT0gXCJvcGVuXCIpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJvcGVuXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG5cdFx0aWYgKFxuXHRcdFx0b3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRvcHRpb25zID09PSBudWxsIHx8XG5cdFx0XHQoaXNBcnJheShvcHRpb25zKSAmJiBvcHRpb25zLmxlbmd0aCA9PT0gMClcblx0XHQpIHtcblx0XHRcdGlmIChjdXJyZW50ICE9PSBcImVtcHR5XCIpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJlbXB0eVwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoc3VnZ2VzdGlvbikge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IHN1Z2dlc3Rpb24pIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgc3VnZ2VzdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udHJvbF1gLFxuXHQpO1xuXHR0aGlzW3NlbGVjdGlvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1zZWxlY3Rpb25dYCxcblx0KTtcblx0dGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udGFpbmVyXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXBvcHBlcl1gLFxuXHQpO1xuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1maWx0ZXJdW25hbWU9XCJpbmxpbmUtZmlsdGVyXCJdYCxcblx0KTtcblx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09ZmlsdGVyXVtuYW1lPVwicG9wcGVyLWZpbHRlclwiXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0gPVxuXHRcdHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0ucGFyZW50RWxlbWVudDtcblx0dGhpc1tvcHRpb25zRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbnNdYCxcblx0KTtcblx0dGhpc1tub09wdGlvbnNBdmFpbGFibGVFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09XCJuby1vcHRpb25zXCJdYCxcblx0KTtcblx0dGhpc1tzdGF0dXNPclJlbW92ZUJhZGdlc0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc11gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVBvcHBlcigpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSAhPT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGNhbGNBbmRTZXRPcHRpb25zRGltZW5zaW9uLmNhbGwodGhpcyk7XG5cdFx0cG9zaXRpb25Qb3BwZXIuY2FsbChcblx0XHRcdHRoaXMsXG5cdFx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSxcblx0XHRcdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0sXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcInBvcHBlclwiLCB7fSksXG5cdFx0KTtcblx0fSlcblx0XHQucnVuKClcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvblwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItZmlsdGVyZWQgcGF0aDpvcHRpb25zLmZpbHRlcmVkLFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eSBwYXRoOm9wdGlvbnMudmlzaWJpbGl0eVwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBwYXJ0PVwib3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvbi1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICB0eXBlIHBhdGg6dHlwZSxcbiAgICAgICAgICAgIHJvbGUgcGF0aDpyb2xlLFxuICAgICAgICAgICAgdmFsdWUgcGF0aDpvcHRpb25zIHwgaW5kZXg6dmFsdWUsIFxuICAgICAgICAgICAgbmFtZSBwYXRoOm5hbWUsIFxuICAgICAgICAgICAgcGFydCBwYXRoOnR5cGUgfCBwcmVmaXg6b3B0aW9uLSB8IHN1ZmZpeDogZm9ybSxcbiAgICAgICAgICAgIGNsYXNzIHBhdGg6b3B0aW9ucy5jbGFzcyBcbiAgICAgICAgICAgIFwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6b3B0aW9ucyB8IGluZGV4OmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0PVwib3B0aW9uLWxhYmVsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDx0ZW1wbGF0ZSBpZD1cInNlbGVjdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImJhZGdlXCJcbiAgICAgICAgICAgICAgICAgcGFydD1cImJhZGdlXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXZhbHVlIHBhdGg6c2VsZWN0aW9uIHwgaW5kZXg6dmFsdWUsIFxuICAgICAgICAgICAgICAgICBjbGFzcyBwYXRoOmNsYXNzZXMgfCBpbmRleDpiYWRnZSwgXG4gICAgICAgIHBhcnQgcGF0aDp0eXBlIHwgc3VmZml4Oi1vcHRpb24gfCBwcmVmaXg6IGZvcm0tXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOnNlbGVjdGlvbiB8IGluZGV4OmxhYmVsXCIgcGFydD1cImJhZGdlLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYmFkZ2UtbGFiZWxcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJyZW1vdmUtYmFkZ2VcIiBkYXRhLW1vbnN0ZXItc2VsZWN0LXRoaXNcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpmZWF0dXJlcy5jbGVhciB8ID86OmhpZGRlbiBcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJyZW1vdmUtYmFkZ2VcIiB0YWJpbmRleD1cIi0xXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8c2xvdCBjbGFzcz1cImhpZGRlblwiPjwvc2xvdD5cblxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgXFwke3NlbGVjdGVkfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uLWZpbHRlci1jb250cm9sXCIgcm9sZT1cInNlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwic2VhcmNoYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJwb3BwZXItZmlsdGVyXCIgbmFtZT1cInBvcHBlci1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cImNvbnRlbnRcIiBjbGFzcz1cImZsZXhcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJvcHRpb25zXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJvcHRpb25zXCIgZGF0YS1tb25zdGVyLWluc2VydD1cIm9wdGlvbnMgcGF0aDpvcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwibm8tb3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwibm8tb3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bWVzc2FnZXMuZW1wdHlPcHRpb25zXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgcGFydD1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFNlbGVjdCk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUG9wcGVyU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgUG9wcGVyU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdFBvcHBlclN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgcG9wcGVyIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbixcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4sXG59IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9ST0xFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyB9IGZyb20gXCIuLi9mb3JtL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHBvc2l0aW9uUG9wcGVyIH0gZnJvbSBcIi4uL2Zvcm0vdXRpbC9mbG9hdGluZy11aS5tanNcIjtcbmltcG9ydCB7IFBvcHBlclN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3BvcHBlci5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5cbmV4cG9ydCB7IFBvcHBlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGFycm93RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImFycm93RWxlbWVudFwiKTtcblxuLyoqXG4gKiBBIFBvcHBlciBpcyBhIGZsb2F0aW5nIFVJIGVsZW1lbnQgdGhhdCBjYW4gYmUgc2hvd24gb3IgaGlkZGVuLlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2xheW91dC9wb3BwZXIvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L3BvcHBlci1zaW1wbGVcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9wb3BwZXItY2xpY2tcbiAqXG4gKiBAc2luY2UgMS42NS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgcG9wcGVyIHRoYXQgY2FuIG1ha2UgeW91ciBsaWZlIGVhc2llciBhbmQgYWxzbyBsb29rcyBnb29kLlxuICogQGZpcmVzIG1vbnN0ZXItcG9wcGVyLWhpZGUgZmlyZWQgd2hlbiB0aGUgcG9wcGVyIGlzIGhpZGUuXG4gKiBAZmlyZXMgbW9uc3Rlci1wb3BwZXItaGlkZGVuIGZpcmVkIHdoZW4gdGhlIHBvcHBlciBpcyBoaWRkZW4uXG4gKiBAZmlyZXMgbW9uc3Rlci1wb3BwZXItb3BlbiBmaXJlZCB3aGVuIHRoZSBwb3BwZXIgaXMgb3Blbi5cbiAqIEBmaXJlcyBtb25zdGVyLXBvcHBlci1vcGVuZWQgZmlyZWQgd2hlbiB0aGUgcG9wcGVyIGlzIG9wZW5lZC5cbiAqL1xuY2xhc3MgUG9wcGVyIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2xheW91dC9wb3BwZXJAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUaGUgdGVtcGxhdGVzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIFRoZSBtYWluIHRlbXBsYXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbW9kZSBUaGUgbW9kZSBvZiB0aGUgcG9wcGVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGBjbGlja2AsIGBlbnRlcmAsIGBtYW51YWxgLCBgZm9jdXNgLCBcImF1dG9cIiBvciBhIGNvbWJpbmF0aW9uIG9mIHRoZW0uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250ZW50IFRoZSBjb250ZW50IG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwb3BwZXIgVGhlIHBvcHBlciBvcHRpb25zLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcG9wcGVyLnBsYWNlbWVudCBUaGUgcGxhY2VtZW50IG9mIHRoZSBwb3BwZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmUgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAgYW5kIGByaWdodGAuXG5cdCAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb25bXX0gcG9wcGVyLm1pZGRsZXdhcmUgVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyBUaGUgZmVhdHVyZXMgb2YgdGhlIHBvcHBlci5cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudCBQcmV2ZW50cyB0aGUgb3BlbiBldmVudCBmcm9tIGJlaW5nIHNlbnQuXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRtb2RlOiBcImF1dG8gZm9jdXNcIixcblx0XHRcdGNvbnRlbnQ6IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0cG9wcGVyOiB7XG5cdFx0XHRcdHBsYWNlbWVudDogXCJ0b3BcIixcblx0XHRcdFx0bWlkZGxld2FyZTogW1wiYXV0b1BsYWNlbWVudFwiLCBcInNoaWZ0XCIsIFwib2Zmc2V0OjE1XCIsIFwiYXJyb3dcIl0sXG5cdFx0XHR9LFxuXHRcdFx0ZmVhdHVyZXM6IHtcblx0XHRcdFx0cHJldmVudE9wZW5FdmVudFNlbnQ6IGZhbHNlLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBjb25uZWN0ZWRDYWxsYmFja2AgbWV0aG9kIG9uIHRoZSBmaXJzdCBjYWxsLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtWb2lkfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdGFnIG5hbWUgb2YgdGhlIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1wb3BwZXJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjc3Mgc3R5bGVzIG9mIHRoZSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1BvcHBlclN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGNvbm5lY3RlZCB0byB0aGUgZG9tLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHRhdHRhY2hSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBkb20uXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHRkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaXRoIHRoaXMgbWV0aG9kIHlvdSBjYW4gc2hvdyB0aGUgcG9wcGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQb3BwZXJ9XG5cdCAqL1xuXHRzaG93RGlhbG9nKCkge1xuXHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBXaXRoIHRoaXMgbWV0aG9kIHlvdSBjYW4gaGlkZSB0aGUgcG9wcGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQb3BwZXJ9XG5cdCAqL1xuXHRoaWRlRGlhbG9nKCkge1xuXHRcdGhpZGUuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBXaXRoIHRoaXMgbWV0aG9kIHlvdSBjYW4gdG9nZ2xlIHRoZSBwb3BwZXIuXG5cdCAqXG5cdCAqIEByZXR1cm4ge1BvcHBlcn1cblx0ICovXG5cdHRvZ2dsZURpYWxvZygpIHtcblx0XHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRcdHRoaXMuaGlkZURpYWxvZygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNob3dEaWFsb2coKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UG9wcGVyfVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuXHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMocGF0aCkpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHR9O1xuXG5cdGxldCBtb2RlcyA9IG51bGw7XG5cdGNvbnN0IG1vZGVPcHRpb24gPSB0aGlzLmdldE9wdGlvbihcIm1vZGVcIik7XG5cblx0aWYgKHR5cGVvZiBtb2RlT3B0aW9uID09PSBcInN0cmluZ1wiKSB7XG5cdFx0bW9kZXMgPSBtb2RlT3B0aW9uLnNwbGl0KFwiIFwiKTtcblx0fVxuXG5cdGlmIChcblx0XHRtb2RlcyA9PT0gbnVsbCB8fFxuXHRcdG1vZGVzID09PSB1bmRlZmluZWQgfHxcblx0XHRpc0FycmF5KG1vZGVzKSA9PT0gZmFsc2UgfHxcblx0XHRtb2Rlcy5sZW5ndGggPT09IDBcblx0KSB7XG5cdFx0bW9kZXMgPSBbXCJtYW51YWxcIl07XG5cdH1cblxuXHRmb3IgKGNvbnN0IFssIG1vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG1vZGVzKSkge1xuXHRcdGluaXRFdmVudEhhbmRsZXJCeU1vZGUuY2FsbCh0aGlzLCBtb2RlKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gbW9kZVxuICogQHJldHVybiB7UG9wcGVyfVxuICogQHRocm93cyBFcnJvclxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyQnlNb2RlKG1vZGUpIHtcblx0c3dpdGNoIChtb2RlKSB7XG5cdFx0Y2FzZSBcIm1hbnVhbFwiOlxuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiZm9jdXNcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zaG93RGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiY2xpY2tcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy50b2dnbGVEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImVudGVyXCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zaG93RGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImF1dG9cIjogLy8gaXMgaG92ZXJcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnNob3dEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuaGlkZURpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG1vZGUgJHttb2RlfWApO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVzaXplT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpcy5wYXJlbnRFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGhpZGUoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLWhpZGVcIiwge1xuXHRcdHNlbGYsXG5cdH0pO1xuXG5cdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbihzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXSwgXCJjbGFzc1wiLCBcIm9wZW5cIik7XG5cblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1wb3BwZXItaGlkZGVuXCIsIHtcblx0XHRcdHNlbGYsXG5cdFx0fSk7XG5cdH0sIDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNob3coKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmIChzZWxmLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmIChzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLW9wZW5cIiwge1xuXHRcdHNlbGYsXG5cdH0pO1xuXG5cdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSztcblxuXHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXSwgXCJjbGFzc1wiLCBcIm9wZW5cIik7XG5cdHVwZGF0ZVBvcHBlci5jYWxsKHNlbGYpO1xuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLW9wZW5lZFwiLCB7XG5cdFx0XHRzZWxmLFxuXHRcdH0pO1xuXHR9LCAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgIT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHBvc2l0aW9uUG9wcGVyLmNhbGwoXG5cdFx0dGhpcyxcblx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSxcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwicG9wcGVyXCIsIHt9KSxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UG9wcGVyfVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250cm9sXWAsXG5cdCk7XG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblx0dGhpc1thcnJvd0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1hcnJvd11gLFxuXHQpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8c2xvdCBuYW1lPVwiYnV0dG9uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIj48L3Nsb3Q+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoUG9wcGVyKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBQb3BwZXIgYXMgTmV3UG9wcGVyIH0gZnJvbSBcIi4uL2xheW91dC9wb3BwZXIubWpzXCI7XG5cbmV4cG9ydCB7IFBvcHBlciB9O1xuXG4vKipcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjY1LjBcbiAqL1xuY2xhc3MgUG9wcGVyIGV4dGVuZHMgTmV3UG9wcGVyIHt9XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUG9wcGVyQnV0dG9uU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgUG9wcGVyQnV0dG9uU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdFBvcHBlckJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgcG9wcGVyYnV0dG9uIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX0ubW9uc3Rlci1idXR0b24tcHJpbWFyeSxidXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeSwubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH1idXR0b246YWN0aXZlLGJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWJ1dHRvbjphY3RpdmV7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9Lm1vbnN0ZXItYnV0dG9uLWJhciwubW9uc3Rlci1idXR0b24tZ3JvdXB7YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6c3RyZXRjaDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2JveC1zaXppbmc6Ym9yZGVyLWJveDtnYXA6MDttYXJnaW46MXJlbSAwfS5tb25zdGVyLWJ1dHRvbi1ncm91cD46bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkqLTEpfS5tb25zdGVyLWJ1dHRvbi1ncm91cCA6aG92ZXJ7Ym94LXNoYWRvdzpub25lfWJ1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe2J1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfX1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gYnV0dG9ue3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWJ1dHRvbl17d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17aGVpZ2h0OjEwMCV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IFBvcHBlciB9IGZyb20gXCIuL3BvcHBlci5tanNcIjtcbmltcG9ydCB7IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3BvcHBlci1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBwb3NpdGlvblBvcHBlciB9IGZyb20gXCIuL3V0aWwvZmxvYXRpbmctdWkubWpzXCI7XG5pbXBvcnQgXCIuL2J1dHRvbi5tanNcIjtcblxuZXhwb3J0IHsgUG9wcGVyQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2xvc2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbG9zZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlckVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXJyb3dFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYXJyb3dFbGVtZW50XCIpO1xuXG4vKipcbiAqIFRoaXMgYWN0aW9uIGNhbGxiYWNrIGV4ZWN1dGVzIHRoZSBhY3Rpb25zIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZC5cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUFjdGlvbkNhbGxiYWNrXG4gKiBAcGFyYW0ge0V2ZW50fSBlIEV2ZW50XG4gKiBAdGhpcyB7Q3VzdG9tQ29udHJvbH1cbiAqL1xuXG4vKipcbiAqIFRoZSBQb3BwZXJCdXR0b24gaXMgYSBidXR0b24gdGhhdCBvcGVucyBhIHBvcHBlciBlbGVtZW50LlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvcG9wcGVyLWJ1dHRvbi5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqIGFzIHdlbGwgYXMgW3Bvb3BlcmpzXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItcG9wcGVyLWJ1dHRvbiAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1wb3BwZXItYnV0dG9uJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcG9wcGVyLWJ1dHRvbj48L21vbnN0ZXItcG9wcGVyLWJ1dHRvbj5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge1BvcHBlckJ1dHRvbn0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3BvcHBlci1idXR0b24uanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1wb3BwZXItYnV0dG9uJyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgYGRhdGEtbW9uc3Rlci1vcHRpb24tY2xhc3Nlcy1idXR0b25gIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIENTUyBjbGFzcyBvZiB0aGUgYnV0dG9uLlxuICpcbiAqIEBzdGFydHVtbCBwb3BwZXItYnV0dG9uLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIFBvcHBlclxuICogUG9wcGVyIDx8LS0gUG9wcGVyQnV0dG9uXG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgcG9wcGVyIGJ1dHRvblxuICovXG5cbi8qKlxuICogQSBiZWF1dGlmdWwgcG9wcGVyIGJ1dHRvbiB0aGF0IGNhbiBtYWtlIHlvdXIgbGlmZSBlYXNpZXIgYW5kIGFsc28gbG9va3MgZ29vZC5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3BvcHBlci1idXR0b24vXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9wb3BwZXItYnV0dG9uLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHBvcHBlciBidXR0b25cbiAqIEBmaXJlcyBtb25zdGVyLW9wdGlvbnMtc2V0XG4gKiBAZmlyZXMgbW9uc3Rlci1zZWxlY3RlZFxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VkXG4gKi9cbmNsYXNzIFBvcHBlckJ1dHRvbiBleHRlbmRzIFBvcHBlciB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vcG9wcGVyLWJ1dHRvbkBAaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyAtIFRoZSB0ZW1wbGF0ZXMgZm9yIHRoZSBjb250cm9sLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gLSBUaGUgbWFpbiB0ZW1wbGF0ZS5cblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGxhYmVscyAtIFRoZSBsYWJlbHMgZm9yIHRoZSBjb250cm9sLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmJ1dHRvbiAtIFRoZSBsYWJlbCBmb3IgdGhlIGJ1dHRvbi5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRlbnQgLSBUaGUgY29udGVudCBvZiB0aGUgcG9wcGVyLlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gcG9wcGVyIC0gVGhlIHBvcHBlciBvcHRpb25zLlxuXHQgKiBAZXh0ZW5kcyB7QnV0dG9uLmRlZmF1bHRzfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0YWN0aW9uczoge1xuXHRcdFx0XHRjbGljazogKGUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnRvZ2dsZURpYWxvZygpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIm1vbnN0ZXItYnV0dG9uXCIsXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdGJ1dHRvbjogJzxzbG90IG5hbWU9XCJidXR0b25cIj48L3Nsb3Q+Jyxcblx0XHRcdH0sXG5cdFx0XHRtb2RlOiBcImNsaWNrXCIsXG5cdFx0XHR2YWx1ZTogbnVsbCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b259XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1wb3BwZXItYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0Y29uc3Qgc3R5bGVzID0gc3VwZXIuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdHN0eWxlcy5wdXNoKFBvcHBlckJ1dHRvblN0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBzdHlsZXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0YXR0YWNoUmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0ZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5jbGljaygpIG1ldGhvZCBzaW11bGF0ZXMgYSBjbGljayBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2NsaWNrfVxuXHQgKi9cblx0Y2xpY2soKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2spXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uZm9jdXMoKSBtZXRob2Qgc2V0cyBmb2N1cyBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2ZvY3VzfVxuXHQgKi9cblx0Zm9jdXMob3B0aW9ucykge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5ibHVyKCkgbWV0aG9kIHJlbW92ZXMgZm9jdXMgZnJvbSB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqL1xuXHRibHVyKCkge1xuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5ibHVyKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5ibHVyKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9hdHRhY2hJbnRlcm5hbHN9XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IGZvcm1Bc3NvY2lhdGVkKCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBjdXJyZW50IHNlbGVjdGlvbiBvZiB0aGUgU2VsZWN0XG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1zZWxlY3QnKTtcblx0ICogY29uc29sZS5sb2coZS52YWx1ZSlcblx0ICogLy8gXHUyMUE2IDFcblx0ICogLy8gXHUyMUE2IFsnMScsJzInXVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd8YXJyYXl9XG5cdCAqL1xuXHRnZXQgdmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHNlbGVjdGlvblxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGUudmFsdWU9MVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd8YXJyYXl9IHZhbHVlXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqL1xuXHRzZXQgdmFsdWUodmFsdWUpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHZhbHVlKTtcblx0XHR0cnkge1xuXHRcdFx0dGhpcz8uc2V0Rm9ybVZhbHVlKHRoaXMudmFsdWUpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2luaXRFdmVudEhhbmRsZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyhwYXRoKSkge1xuXHRcdFx0aWYgKGVsZW1lbnQgPT09IHRoaXMpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0fTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhdHRhY2hSZXNpemVPYnNlcnZlcigpIHtcblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXMucGFyZW50RWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdIGluc3RhbmNlb2YgUmVzaXplT2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgIT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHBvc2l0aW9uUG9wcGVyLmNhbGwoXG5cdFx0dGhpcyxcblx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSxcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwicG9wcGVyXCIsIHt9KSxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250cm9sXWAsXG5cdCk7XG5cblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YnV0dG9uXWAsXG5cdCk7XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09cG9wcGVyXWAsXG5cdCk7XG5cblx0dGhpc1thcnJvd0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1hcnJvd11gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxidXR0b24gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgaWY6dHJ1ZSwgY2xhc3MgcGF0aDpjbGFzc2VzLmJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuYnV0dG9uXCI+PC9idXR0b24+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoUG9wcGVyQnV0dG9uKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBDb25maXJtQnV0dG9uU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRDb25maXJtQnV0dG9uU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBjb25maXJtYnV0dG9uIHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YWxpZ24tY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xlZnQ6MDtwYWRkaW5nOjEuMWVtO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJdIGRpdltkYXRhLW1vbnN0ZXItcm9sZT1hcnJvd117YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7aGVpZ2h0OmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTt6LWluZGV4Oi0xfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1kZWNpc2lvbl17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtZXZlbmx5O21hcmdpbjoxcmVtIDAgLjRyZW07d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17aGVpZ2h0OjEwMCU7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudH1idXR0b257d2lkdGg6MTAwJX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdE1lc3NhZ2VTdGF0ZUJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgbWVzc2FnZXN0YXRlYnV0dG9uIHsgXG5AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25de3dpZHRoOjEwMCV9YnV0dG9ue3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnR9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9ST0xFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgUG9wcGVyIH0gZnJvbSBcIi4vcG9wcGVyLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvbWVzc2FnZS1zdGF0ZS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCBcIi4vc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIEEgc2VsZWN0IGNvbnRyb2wgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWxlY3Qgb25lIG9yIG1vcmUgb3B0aW9ucyBmcm9tIGEgbGlzdC5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL21lc3NhZ2Utc3RhdGUtYnV0dG9uL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vbWVzc2FnZS1zdGF0ZS1idXR0b24tc2ltcGxlXG4gKlxuICogQHNpbmNlIDIuMTEuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHNlbGVjdCBjb250cm9sIHRoYXQgY2FuIG1ha2UgeW91ciBsaWZlIGVhc2llciBhbmQgYWxzbyBsb29rcyBnb29kLlxuICogQGZpcmVzIG1vbnN0ZXItb3B0aW9ucy1zZXRcbiAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGVkXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZWRcbiAqL1xuY2xhc3MgTWVzc2FnZVN0YXRlQnV0dG9uIGV4dGVuZHMgUG9wcGVyIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL21lc3NhZ2Utc3RhdGUtYnV0dG9uQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLk1lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Vcblx0ICovXG5cdHNldFN0YXRlKHN0YXRlLCB0aW1lb3V0KSB7XG5cdFx0cmV0dXJuIHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0U3RhdGUoc3RhdGUsIHRpbWVvdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLk1lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHJlbW92ZVN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLnJlbW92ZVN0YXRlKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0U3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZ2V0U3RhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVscyBMYWJlbCBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmJ1dHRvbiBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IG1vZGUgTW9kZSBkZWZpbml0aW9ucyAobWFudWFsLCBzdWJtaXQpXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRtZXNzYWdlOiB7XG5cdFx0XHRcdHRpdGxlOiB1bmRlZmluZWQsXG5cdFx0XHRcdGNvbnRlbnQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0aWNvbjogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdG1vZGU6IFwibWFudWFsXCIsXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdH0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJtb25zdGVyLWJ1dHRvbi1wcmltYXJ5XCIsXG5cdFx0XHR9LFxuXHRcdFx0YWN0aW9uczoge1xuXHRcdFx0XHRjbGljazogKGUpID0+IHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgY2xpY2sgYWN0aW9uIGlzIG5vdCBkZWZpbmVkXCIpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdGRpc2FibGVCdXR0b246IGZhbHNlLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblxuXHRcdGxldCBtb2RlcyA9IG51bGw7XG5cdFx0Y29uc3QgbW9kZU9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwibW9kZVwiKTtcblx0XHRpZiAodHlwZW9mIG1vZGVPcHRpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdG1vZGVzID0gbW9kZU9wdGlvbi5zcGxpdChcIiBcIik7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0bW9kZXMgPT09IG51bGwgfHxcblx0XHRcdG1vZGVzID09PSB1bmRlZmluZWQgfHxcblx0XHRcdGlzQXJyYXkobW9kZXMpID09PSBmYWxzZSB8fFxuXHRcdFx0bW9kZXMubGVuZ3RoID09PSAwXG5cdFx0KSB7XG5cdFx0XHRtb2RlcyA9IFtcIm1hbnVhbFwiXTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFssIG1vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG1vZGVzKSkge1xuXHRcdFx0aW5pdEV2ZW50SGFuZGxlckJ5TW9kZS5jYWxsKHRoaXMsIG1vZGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1lc3NhZ2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8SFRNTEVsZW1lbnR9bWVzc2FnZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IGljb25cblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uTWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0c2V0TWVzc2FnZShtZXNzYWdlLCB0aXRsZSwgaWNvbikge1xuXHRcdGlmIChpc1N0cmluZyhtZXNzYWdlKSkge1xuXHRcdFx0aWYgKG1lc3NhZ2UgPT09IFwiXCIpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcIm1lc3NhZ2UgbXVzdCBub3QgYmUgZW1wdHlcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGNvbnRhaW5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRjb25zdCBtZXNzYWdlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdGNvbnN0IHRpdGxlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdHRpdGxlRGl2LnNldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1yb2xlXCIsIFwibWVzc2FnZS10aXRsZS1ib3hcIik7XG5cblx0XHRcdGxldCB0aXRsZUVsZW1lbnQsIGljb25FbGVtZW50O1xuXHRcdFx0aWYgKHRpdGxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGl0bGUgPSB2YWxpZGF0ZVN0cmluZyh0aXRsZSk7XG5cdFx0XHRcdHRpdGxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRcdHRpdGxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcIlwiKTtcblx0XHRcdFx0dGl0bGVFbGVtZW50LmlubmVySFRNTCA9IHRpdGxlO1xuXHRcdFx0XHR0aXRsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXJvbGVcIiwgXCJtZXNzYWdlLXRpdGxlXCIpO1xuXHRcdFx0XHR0aXRsZURpdi5hcHBlbmRDaGlsZCh0aXRsZUVsZW1lbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaWNvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGljb24gPSB2YWxpZGF0ZVN0cmluZyhpY29uKTtcblx0XHRcdFx0aWNvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0XHRpY29uRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcIlwiKTtcblx0XHRcdFx0aWNvbkVsZW1lbnQuaW5uZXJIVE1MID0gaWNvbjtcblx0XHRcdFx0aWNvbkVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXJvbGVcIiwgXCJtZXNzYWdlLWljb25cIik7XG5cdFx0XHRcdHRpdGxlRGl2LmFwcGVuZENoaWxkKGljb25FbGVtZW50KTtcblx0XHRcdH1cblxuXHRcdFx0bWVzc2FnZURpdi5pbm5lckhUTUwgPSBtZXNzYWdlO1xuXHRcdFx0Y29udGFpbmVyRGl2LmFwcGVuZENoaWxkKHRpdGxlRGl2KTtcblx0XHRcdGNvbnRhaW5lckRpdi5hcHBlbmRDaGlsZChtZXNzYWdlRGl2KTtcblxuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlLmNvbnRlbnRcIiwgY29udGFpbmVyRGl2KTtcblx0XHR9IGVsc2UgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlLmNvbnRlbnRcIiwgbWVzc2FnZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcdFwibWVzc2FnZSBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XCIsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGNsZWFycyB0aGUgTWVzc2FnZVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5NZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHRjbGVhck1lc3NhZ2UoKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlLnRpdGxlXCIsIHVuZGVmaW5lZCk7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlLmNvbnRlbnRcIiwgdW5kZWZpbmVkKTtcblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2UuaWNvblwiLCB1bmRlZmluZWQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpdGggdGhpcyBtZXRob2QgeW91IGNhbiBzaG93IHRoZSBwb3BwZXIgd2l0aCB0aW1lb3V0IGZlYXR1cmUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG5cdCAqIEByZXR1cm4ge01lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHNob3dNZXNzYWdlKHRpbWVvdXQpIHtcblx0XHR0aGlzLnNob3dEaWFsb2cuY2FsbCh0aGlzKTtcblxuXHRcdGlmICh0aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRzdXBlci5oaWRlRGlhbG9nKCk7XG5cdFx0XHR9LCB0aW1lb3V0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBXaXRoIHRoaXMgbWV0aG9kIHlvdSBjYW4gc2hvdyB0aGUgcG9wcGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHRzaG93RGlhbG9nKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcIm1lc3NhZ2UuY29udGVudFwiKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHN1cGVyLnNob3dEaWFsb2coKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5NZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHRoaWRlTWVzc2FnZSgpIHtcblx0XHRzdXBlci5oaWRlRGlhbG9nKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uTWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0dG9nZ2xlTWVzc2FnZSgpIHtcblx0XHRzdXBlci50b2dnbGVEaWFsb2coKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdCAqL1xuXHRnZXRNZXNzYWdlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcIm1lc3NhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLW1lc3NhZ2Utc3RhdGUtYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBzdHlsZXMgPSBQb3BwZXIuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdHN0eWxlcy5wdXNoKFN0YXRlQnV0dG9uU3R5bGVTaGVldCk7XG5cdFx0c3R5bGVzLnB1c2goTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCk7XG5cdFx0cmV0dXJuIHN0eWxlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmNsaWNrKCkgbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2soKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5mb2N1cygpIG1ldGhvZCBzZXRzIGZvY3VzIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvZm9jdXN9XG5cdCAqL1xuXHRmb2N1cyhvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlckJ5TW9kZShtb2RlKSB7XG5cdHN3aXRjaCAobW9kZSkge1xuXHRcdGNhc2UgXCJtYW51YWxcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiLCAoZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiKTtcblx0XHRcdFx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwic3VibWl0XCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcImFjdGlvbnMuY2xpY2tcIiwgKGUpID0+IHtcblx0XHRcdFx0Y29uc3QgZm9ybSA9IHRoaXMuZm9ybTtcblxuXHRcdFx0XHRpZiAoZm9ybSBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCkge1xuXHRcdFx0XHRcdGZvcm0ucmVxdWVzdFN1Ym1pdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cblxuICAgICAgICAgICAgPG1vbnN0ZXItc3RhdGUtYnV0dG9uIGV4cG9ydHBhcnRzPVwiYnV0dG9uOmJ1dHRvbi1idXR0b24sY29udHJvbDpidXR0b24tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItb3B0aW9uLWNsYXNzZXMtYnV0dG9uIHBhdGg6Y2xhc3Nlcy5idXR0b24sIGRpc2FibGVkIHBhdGg6ZmVhdHVyZXMuZGlzYWJsZUJ1dHRvbiB8IGlmOnRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L3NwYW4+XG4gICAgICAgICAgICA8L21vbnN0ZXItc3RhdGUtYnV0dG9uPlxuXG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwibWVzc2FnZVwiIHBhcnQ9XCJtZXNzYWdlXCIgY2xhc3M9XCJmbGV4XCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlLmNvbnRlbnRcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE1lc3NhZ2VTdGF0ZUJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IHR5cGVPZiB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlb2YubWpzXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi9idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXJCdXR0b24gfSBmcm9tIFwiLi9wb3BwZXItYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2NvbmZpcm0tYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5cbmltcG9ydCBcIi4vYnV0dG9uLm1qc1wiO1xuaW1wb3J0IFwiLi9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3BvcHBlci1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanNcIjtcblxuZXhwb3J0IHsgQ29uZmlybUJ1dHRvbiB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbmZpcm1CdXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY2FuY2VsQnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBUaGlzIGFjdGlvbiBjYWxsYmFjayBleGVjdXRlcyB0aGUgYWN0aW9ucyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja1xuICogQHBhcmFtIHtFdmVudH0gZSBFdmVudFxuICogQHRoaXMge0N1c3RvbUNvbnRyb2x9XG4gKi9cblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIGNvbmZpcm0gYnV0dG9uIGVsZW1lbnQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2NvbmZpcm0tYnV0dG9uLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICogYXMgd2VsbCBhcyBbcG9vcGVyanNdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyLykuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1jb25maXJtLWJ1dHRvbiAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jb25maXJtLWJ1dHRvbicpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLWNvbmZpcm0tYnV0dG9uPjwvbW9uc3Rlci1jb25maXJtLWJ1dHRvbj5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge0NvbmZpcm1CdXR0b259IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9jb25maXJtLWJ1dHRvbi5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7XG4gKiBgYGBcbiAqIFRoZSBgZGF0YS1tb25zdGVyLWJ1dHRvbi1jbGFzc2AgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgQ1NTIGNsYXNzIG9mIHRoZSBidXR0b24uXG4gKlxuICogQHN0YXJ0dW1sIGNvbmZpcm0tYnV0dG9uLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIEJ1dHRvblxuICogQnV0dG9uIDx8LS0gUG9wcGVyQnV0dG9uXG4gKiBQb3BwZXJCdXR0b24gPHwtLSBDb25maXJtQnV0dG9uXG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgY29uZmlybSBidXR0b25cbiAqL1xuXG4vKipcbiAqIEEgY29uZmlybSBidXR0b24gY29udHJvbC5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL2NvbmZpcm0tYnV0dG9uL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vY29uZmlybS1idXR0b24tc2ltcGxlXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25maXJtIGJ1dHRvbiBjb250cm9sXG4gKi9cbmNsYXNzIENvbmZpcm1CdXR0b24gZXh0ZW5kcyBQb3BwZXJCdXR0b24ge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL2NvbmZpcm0tYnV0dG9uQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdG9nZ2xlRXZlbnRUeXBlPWNsaWNrLHRvdWNoIExpc3Qgb2YgZXZlbnQgdHlwZXMgdG8gYmUgb2JzZXJ2ZWQgZm9yIG9wZW5pbmcgdGhlIGNvbmZpcm0gbWVzc2FnZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuYnV0dG9uPSc8c2xvdCBuYW1lPVwiYnV0dG9uXCI+PC9zbG90PicgQnV0dG9uIGxhYmVsXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMubWVzc2FnZT0nPHNsb3Q+U2hvdWxkIEkgU3RheSBvciBTaG91bGQgSSBHbz88L3Nsb3Q+JyBNZXNzYWdlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuY29uZmlybT0nPHNsb3QgbmFtZT1cImNvbmZpcm1cIj5Db25maXJtPC9zbG90PicgQ29uZmlybSBidXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5jYW5jZWw9JzxzbG90IG5hbWU9XCJjYW5jZWxcIj5DYW5jZWw8L3Nsb3Q+JyBDYW5jZWwgYnV0dG9uIGxhYmVsXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUFjdGlvbkNhbGxiYWNrfSBhY3Rpb25zLmNvbmZpcm1cblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlQWN0aW9uQ2FsbGJhY2t9IGFjdGlvbnMuY2FuY2VsIExpc3Qgb2YgZXZlbnQgdHlwZXMgdG8gYmUgb2JzZXJ2ZWQgZm9yIG9wZW5pbmcgdGhlIGRyb3Bkb3duXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBwb3BwZXIgW1BvcHBlckpTIE9wdGlvbnNdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyLylcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBvcHBlci5wbGFjZW1lbnQ9dG9wIFBvcHBlckpTIHBsYWNlbWVudFxuXHQgKiBAZXh0ZW5kcyB7UG9wcGVyQnV0dG9ufVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdGNvbnN0IG9iaiA9IE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiAnPHNsb3QgbmFtZT1cImJ1dHRvblwiPjwvc2xvdD4nLFxuXHRcdFx0XHRtZXNzYWdlOiBcIjxzbG90PlNob3VsZCBJIFN0YXkgb3IgU2hvdWxkIEkgR28/PC9zbG90PlwiLFxuXHRcdFx0XHRjb25maXJtOiAnPHNsb3QgbmFtZT1cImNvbmZpcm1cIj5Db25maXJtPC9zbG90PicsXG5cdFx0XHRcdGNhbmNlbDogJzxzbG90IG5hbWU9XCJjYW5jZWxcIj5DYW5jZWw8L3Nsb3Q+Jyxcblx0XHRcdH0sXG5cdFx0fSk7XG5cblx0XHRvYmpbXCJjbGFzc2VzXCJdW1wiY29uZmlybUJ1dHRvblwiXSA9IFwibW9uc3Rlci1idXR0b24tcHJpbWFyeVwiO1xuXHRcdG9ialtcImNsYXNzZXNcIl1bXCJjYW5jZWxCdXR0b25cIl0gPSBcIm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeVwiO1xuXHRcdG9ialtcImFjdGlvbnNcIl1bXCJjYW5jZWxcIl0gPSAoZSkgPT4ge1xuXHRcdFx0dGhpcy5oaWRlRGlhbG9nKCk7XG5cdFx0fTtcblxuXHRcdG9ialtcImFjdGlvbnNcIl1bXCJjb25maXJtXCJdID0gKGUpID0+IHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgY2FsbGJhY2sgbXVzdCBiZSBpbXBsZW1lbnRlZFwiKTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdGhpZGVEaWFsb2coKSB7XG5cdFx0c3VwZXIuaGlkZURpYWxvZygpO1xuXHRcdHRoaXNbY29uZmlybUJ1dHRvbkVsZW1lbnRTeW1ib2xdLnJlbW92ZVN0YXRlKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyQnV0dG9ufVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRoYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWNvbmZpcm0tYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7QXJyYXl9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBzdHlsZXMgPSBQb3BwZXJCdXR0b24uZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdHN0eWxlcy5wdXNoKENvbmZpcm1CdXR0b25TdHlsZVNoZWV0KTtcblx0XHRyZXR1cm4gc3R5bGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlckJ1dHRvbn1cblx0ICovXG5cdHNob3dEaWFsb2coKSB7XG5cdFx0Y29uc3QgY29uZmlybUJ1dHRvbkNsYXNzID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmNvbmZpcm1CdXR0b25cIik7XG5cdFx0aWYgKGNvbmZpcm1CdXR0b25DbGFzcykge1xuXHRcdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFxuXHRcdFx0XHRcImNsYXNzZXMuYnV0dG9uXCIsXG5cdFx0XHRcdGNvbmZpcm1CdXR0b25DbGFzcyxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2FuY2VsQnV0dG9uQ2xhc3MgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuY2FuY2VsQnV0dG9uXCIpO1xuXHRcdGlmIChjYW5jZWxCdXR0b25DbGFzcykge1xuXHRcdFx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XHRcdFwiY2xhc3Nlcy5idXR0b25cIixcblx0XHRcdFx0Y2FuY2VsQnV0dG9uQ2xhc3MsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBzdXBlci5zaG93RGlhbG9nKCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBjb25maXJtIGJ1dHRvbiBzdGF0ZVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uQ29uZmlybUJ1dHRvbn1cblx0ICovXG5cdHNldENvbmZpcm1CdXR0b25TdGF0ZShzdGF0ZSwgdGltZW91dCkge1xuXHRcdHRoaXNbY29uZmlybUJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNldFN0YXRlKHN0YXRlLCB0aW1lb3V0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgYW5kIHNob3cgdGhlIGNvbmZpcm0gYnV0dG9uIG1lc3NhZ2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uQ29uZmlybUJ1dHRvbn1cblx0ICovXG5cdHNob3dDb25maXJtQnV0dG9uTWVzc2FnZShtZXNzYWdlLCB0aW1lb3V0KSB7XG5cdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0TWVzc2FnZShtZXNzYWdlKTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXNbY29uZmlybUJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNob3dNZXNzYWdlKHRpbWVvdXQpO1xuXHRcdH0sIDApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB0eXBlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9uKHR5cGUpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGNvbnN0IGNhbGxiYWNrID0gc2VsZi5nZXRPcHRpb24oYGFjdGlvbnMuJHt0eXBlfWApO1xuXHRcdGlmICh0eXBlT2YoY2FsbGJhY2spICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTtcblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50aGFuZGxlcn1cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b24jbW9uc3Rlci1jb25maXJtXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyQnV0dG9uI21vbnN0ZXItY29uZmlybWVkXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudGhhbmRsZXIoKSB7XG5cdHRoaXNbY2FuY2VsQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFxuXHRcdFwiY2xpY2tFdmVudFR5cGVcIixcblx0XHR0aGlzLmdldE9wdGlvbihcImNsaWNrRXZlbnRUeXBlXCIsIFtcImNsaWNrXCJdKSxcblx0KTtcblx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XCJhY3Rpb25zLmNsaWNrXCIsXG5cdFx0Z2V0QWN0aW9uLmNhbGwodGhpcywgXCJjYW5jZWxcIiksXG5cdCk7XG5cblx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFxuXHRcdFwiY2xpY2tFdmVudFR5cGVcIixcblx0XHR0aGlzLmdldE9wdGlvbihcImNsaWNrRXZlbnRUeXBlXCIsIFtcImNsaWNrXCJdKSxcblx0KTtcblx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiLCAoKSA9PiB7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBnZXRBY3Rpb24uY2FsbCh0aGlzLCBcImNvbmZpcm1cIik7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1jb25maXJtXCIsIHt9KTtcblx0XHRjYWxsYmFjay5jYWxsKHRoaXMpO1xuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItY29uZmlybWVkXCIsIHt9KTtcblx0fSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29uZmlybV1gLFxuXHQpO1xuXHR0aGlzW2NhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jYW5jZWxdYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxidXR0b24gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgaWY6dHJ1ZSwgY2xhc3MgcGF0aDpjbGFzc2VzLmJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuYnV0dG9uXCI+PC9idXR0b24+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJtZXNzYWdlXCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5tZXNzYWdlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImRlY2lzaW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLW1lc3NhZ2Utc3RhdGUtYnV0dG9uIGV4cG9ydHBhcnRzPVwibW9uc3Rlci1zdGF0ZS1idXR0b246Y29uZmlybS1idXR0b24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sOmNvbmZpcm0tY29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi1idXR0b246Y29uZmlybS1jb250cm9sLWJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi1jb250cm9sOmNvbmZpcm0tYnV0dG9uLWNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BwZXI6Y29uZmlybS1wb3BwZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOmNvbmZpcm0tcG9wcGVyLW1lc3NhZ2UtbWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246Y29uZmlybS1wb3BwZXItbWVzc2FnZS1pY29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6Y29uZmlybS1wb3BwZXItbWVzc2FnZS10aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGF0YS1tb25zdGVyLWJ1dHRvbi1jbGFzcyBwYXRoOmNsYXNzZXMuY29uZmlybUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY29uZmlybVwiIHBhcnQ9XCJjb25maXJtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmNvbmZpcm1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbW9uc3Rlci1tZXNzYWdlLXN0YXRlLWJ1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICA8bW9uc3Rlci1idXR0b24gZXhwb3J0cGFydHM9XCJidXR0b246Y2FuY2VsLWJ1dHRvbixjb250cm9sOmNhbmNlbC1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGF0YS1tb25zdGVyLWJ1dHRvbi1jbGFzcyBwYXRoOmNsYXNzZXMuY2FuY2VsQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY2FuY2VsXCIgcGFydD1cImNhbmNlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5jYW5jZWxcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbW9uc3Rlci1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KENvbmZpcm1CdXR0b24pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHBhcnNlRGF0YVVSTCB9IGZyb20gXCIuLi90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi9wYXRoZmluZGVyLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhc291cmNlIH07XG5cbi8qKlxuICogVGhpcyBjYWxsYmFjayBjYW4gYmUgcGFzc2VkIHRvIGEgZGF0YXNvdXJjZSBhbmQgaXMgdXNlZCB0byBhZGFwdCBkYXRhIHN0cnVjdHVyZXMuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlfmV4YW1wbGVDYWxsYmFja1xuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAgS2V5XG4gKiBAc2VlIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlXG4gKi9cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBpbnRlcm5hbERhdGFTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL0BAZGF0YVwiLFxuKTtcblxuLyoqXG4gKiBUaGUgZGF0YXNvdXJjZSBjbGFzcyBpcyB0aGUgYmFzaXMgZm9yIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgZGF0YSBzb3VyY2VzLlxuICogSXQgcHJvdmlkZXMgYSB1bmlmaWVkIGludGVyZmFjZSBmb3IgYWNjZXNzaW5nIGRhdGFcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kYXRhL2RhdGFzb3VyY2UubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgZGF0YXNvdXJjZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIERhdGFzb3VyY2UgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIGNyZWF0ZXMgYSBuZXcgZGF0YXNvdXJjZVxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gbmV3IFByb3h5T2JzZXJ2ZXIoe1xuXHRcdFx0b3B0aW9uczogZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRzKSxcblx0XHR9KTtcblxuXHRcdHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBhdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICovXG5cdGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tpbnRlcm5hbERhdGFTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBkZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXS5jb250YWluc09ic2VydmVyKG9ic2VydmVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXJpdmVkIGNsYXNzZXMgY2FuIG92ZXJyaWRlIGFuZCBleHRlbmQgdGhpcyBtZXRob2QgYXMgZm9sbG93cy5cblx0ICpcblx0ICogYGBgXG5cdCAqIGdldCBkZWZhdWx0cygpIHtcblx0ICogICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdCAqICAgICAgICBteVZhbHVlOnRydWVcblx0ICogICAgfSk7XG5cdCAqIH1cblx0ICogYGBgXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBvcHRpb25cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0c2V0T3B0aW9uKHBhdGgsIHZhbHVlKSB7XG5cdFx0bmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSkuc2V0VmlhKFxuXHRcdFx0cGF0aCxcblx0XHRcdHZhbHVlLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge0RhdGFzb3VyY2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqL1xuXHRzZXRPcHRpb25zKG9wdGlvbnMpIHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSBwYXJzZU9wdGlvbnNKU09OKG9wdGlvbnMpO1xuXHRcdH1cblx0XHRleHRlbmQoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuXHRcdFx0dGhpcy5kZWZhdWx0cyxcblx0XHRcdG9wdGlvbnMsXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRnZXRPcHRpb24ocGF0aCwgZGVmYXVsdFZhbHVlKSB7XG5cdFx0bGV0IHZhbHVlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhbHVlID0gbmV3IFBhdGhmaW5kZXIoXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuXHRcdFx0KS5nZXRWaWEocGF0aCk7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlcy5cblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgcmVhbCBvYmplY3Rcblx0ICpcblx0ICogQHJldHVybiB7T2JqZWN0fEFycmF5fVxuXHQgKi9cblx0Z2V0KCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdHxBcnJheX0gZGF0YVxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0c2V0KGRhdGEpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uc2V0U3ViamVjdChkYXRhKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlXCIpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuICovXG5mdW5jdGlvbiBwYXJzZU9wdGlvbnNKU09OKGRhdGEpIHtcblx0aWYgKGlzU3RyaW5nKGRhdGEpKSB7XG5cdFx0Ly8gdGhlIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHNwZWNpZmllZCBhcyBhIGRhdGEgdXJsLlxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkYXRhVXJsID0gcGFyc2VEYXRhVVJMKGRhdGEpO1xuXHRcdFx0ZGF0YSA9IGRhdGFVcmwuY29udGVudDtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XG5cdFx0XHR2YWxpZGF0ZU9iamVjdChvYmopO1xuXHRcdFx0cmV0dXJuIG9iajtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uIChhY3R1YWw6ICR7ZGF0YX0pLmAsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7fTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBVFRSSUJVVEVfUFJFRklYIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbi8qKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgPSBcImJsb2NrXCI7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1kYXRhc291cmNlYCBjYW4gYmUgdXNlZCB0byBwYXNzIGEgZGF0YXNvdXJjZS5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfREFUQVNPVVJDRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9ZGF0YXNvdXJjZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFTT1VSQ0VfU0VMRUNUT1IgPSBgJHtBVFRSSUJVVEVfREFUQVNPVVJDRX0tc2VsZWN0b3JgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EQVRBVEFCTEVfR1JJRF9URU1QTEFURSA9IGAke0FUVFJJQlVURV9QUkVGSVh9Z3JpZC10ZW1wbGF0ZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9IRUFEID0gYCR7QVRUUklCVVRFX1BSRUZJWH1oZWFkYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfREFUQVRBQkxFX0FMSUdOID0gYCR7QVRUUklCVVRFX1BSRUZJWH1hbGlnbmA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9TT1JUQUJMRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9c29ydGFibGVgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EQVRBVEFCTEVfSU5ERVggPSBgJHtBVFRSSUJVVEVfUFJFRklYfWluZGV4YDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfREFUQVRBQkxFX01PREUgPSBgJHtBVFRSSUJVVEVfUFJFRklYfW1vZGVgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EQVRBVEFCTEVfUkVTUE9OU0lWRV9CUkVBS1BPSU5UID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yZXNwb25zaXZlLWJyZWFrcG9pbnRgO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZS1hcmd1bWVudHNgIGNhbiBiZSB1c2VkIHRvIHBhc3MgYXJndW1lbnRzLlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EQVRBU09VUkNFX0FSR1VNRU5UUyA9IGAke0FUVFJJQlVURV9EQVRBU09VUkNFfS1hcmd1bWVudHNgO1xuXG4vKipcbiAqIENvbHVtbiBpcyBub3QgaGlkZWFibGUgYW5kIHZpc2libGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9NT0RFX0ZJWEVEID0gXCJmaXhlZFwiO1xuXG4vKipcbiAqIENvbHVtbiBpcyBoaWRkZW5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9NT0RFX0hJRERFTiA9IFwiaGlkZGVuXCI7XG5cbi8qKlxuICogQ29sdW1uIGlzIHZpc2libGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9NT0RFX1ZJU0lCTEUgPSBcInZpc2libGVcIjtcblxuZXhwb3J0IHtcblx0QVRUUklCVVRFX0RBVEFTT1VSQ0UsXG5cdEFUVFJJQlVURV9EQVRBU09VUkNFX1NFTEVDVE9SLFxuXHRBVFRSSUJVVEVfREFUQVNPVVJDRV9BUkdVTUVOVFMsXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfR1JJRF9URU1QTEFURSxcblx0QVRUUklCVVRFX0RBVEFUQUJMRV9IRUFELFxuXHRBVFRSSUJVVEVfREFUQVRBQkxFX1NPUlRBQkxFLFxuXHRBVFRSSUJVVEVfREFUQVRBQkxFX01PREUsXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfSU5ERVgsXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfQUxJR04sXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfTU9ERV9GSVhFRCxcblx0QVRUUklCVVRFX0RBVEFUQUJMRV9SRVNQT05TSVZFX0JSRUFLUE9JTlQsXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfTU9ERV9WSVNJQkxFLFxuXHRBVFRSSUJVVEVfREFUQVRBQkxFX01PREVfSElEREVOLFxuXHRTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0ssXG59O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdEN1c3RvbUVsZW1lbnQsXG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIGFzIERhdGFzb3VyY2VCYXNlIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgRGF0YXNvdXJjZSwgZGF0YVNvdXJjZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkYXRhU291cmNlU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZGF0YXNvdXJjZUBAZGF0YXNvdXJjZVwiLFxuKTtcblxuLyoqXG4gKiBUaGUgRGF0YXNvdXJjZSBjb21wb25lbnQgaXMgYSBiYXNpYyBjbGFzcyBmb3IgdGhlIGRhdGF0YWJsZSBjb21wb25lbnQuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9kYXRhc291cmNlLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIEBzdGFydHVtbCBkYXRhc291cmNlLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gRGF0YXNvdXJjZVxuICogQGVuZHVtbFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGFic3RyYWN0IGRhdGFzb3VyY2VcbiAqL1xuY2xhc3MgRGF0YXNvdXJjZSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBjbGFzc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2RhdGFTb3VyY2VTeW1ib2xdID0gbmV3IERhdGFzb3VyY2VCYXNlKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9kYXRhc291cmNlQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHt9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Gb3JtfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGRhdGEsIHdpdGhvdXQgcHJveHlcblx0ICogQHJldHVybiB7T2JqZWN0fVxuXHQgKi9cblx0Z2V0IGRhdGEoKSB7XG5cdFx0cmV0dXJuIHRoaXNbZGF0YVNvdXJjZVN5bWJvbF0uZ2V0KCk7XG5cdH1cblxuXHQvKipcblx0ICogc2V0IHRoZSBkYXRhXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG5cdCAqL1xuXHRzZXQgZGF0YShkYXRhKSB7XG5cdFx0dGhpc1tkYXRhU291cmNlU3ltYm9sXS5zZXQoZGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBkYXRhc291cmNlXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRGF0YS5EYXRhc291cmNlfVxuXHQgKi9cblx0Z2V0IGRhdGFzb3VyY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbZGF0YVNvdXJjZVN5bWJvbF07XG5cdH1cblxuXHR3cml0ZSgpIHtcblx0XHR0aGlzW2RhdGFTb3VyY2VTeW1ib2xdLndyaXRlKCk7XG5cdH1cblxuXHRyZWFkKCkge1xuXHRcdHRoaXNbZGF0YVNvdXJjZVN5bWJvbF0ucmVhZCgpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgRGF0YXNldFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IERhdGFzZXRTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0RGF0YXNldFN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgZGF0YXNldCB7IFxuOndoZXJlKGh0bWwpe2xpbmUtaGVpZ2h0OjEuMTU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1vei10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGV4dC1zaXplLWFkanVzdDoxMDAlfTp3aGVyZShoMSl7Zm9udC1zaXplOjJlbTttYXJnaW4tYmxvY2stZW5kOi42N2VtO21hcmdpbi1ibG9jay1zdGFydDouNjdlbX06d2hlcmUoZGwsb2wsdWwpIDp3aGVyZShkbCxvbCx1bCl7bWFyZ2luLWJsb2NrLWVuZDowO21hcmdpbi1ibG9jay1zdGFydDowfTp3aGVyZShocil7Ym94LXNpemluZzpjb250ZW50LWJveDtjb2xvcjppbmhlcml0O2hlaWdodDowfTp3aGVyZShhYmJyW3RpdGxlXSl7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfTp3aGVyZShiLHN0cm9uZyl7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShjb2RlLGtiZCxwcmUsc2FtcCl7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLG1vbm9zcGFjZTtmb250LXNpemU6MWVtfTp3aGVyZShzbWFsbCl7Zm9udC1zaXplOjgwJX06d2hlcmUodGFibGUpe2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3I7dGV4dC1pbmRlbnQ6MH06d2hlcmUoYnV0dG9uLGlucHV0LHNlbGVjdCl7bWFyZ2luOjB9OndoZXJlKGJ1dHRvbil7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufTp3aGVyZShwcm9ncmVzcyl7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9OndoZXJlKHNlbGVjdCl7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUodGV4dGFyZWEpe21hcmdpbjowfTp3aGVyZShpbnB1dFt0eXBlPXNlYXJjaCBpXSl7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiw6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouNTR9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyLXN0eWxlOm5vbmU7cGFkZGluZzowfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzcmluZ3tvdXRsaW5lOjFweCBkb3R0ZWQgQnV0dG9uVGV4dH06d2hlcmUoOi1tb3otdWktaW52YWxpZCl7Ym94LXNoYWRvdzpub25lfTp3aGVyZShkaWFsb2cpe2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6c29saWQ7Y29sb3I6IzAwMDtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7bGVmdDowO21hcmdpbjphdXRvO3BhZGRpbmc6MWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudH06d2hlcmUoZGlhbG9nOm5vdChbb3Blbl0pKXtkaXNwbGF5Om5vbmV9OndoZXJlKHN1bW1hcnkpe2Rpc3BsYXk6bGlzdC1pdGVtfWh0bWx7aGVpZ2h0OjEwMCV9Ym9keSxodG1se21pbi1oZWlnaHQ6Y2FsYygxMDB2aCAtIDQwcHgpfWJvZHl7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmc6MDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnksYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5LC5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9YnV0dG9uOmFjdGl2ZSxidXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31idXR0b246YWN0aXZle3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5tb25zdGVyLWJ1dHRvbi1iYXIsLm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tb25zdGVyLWJ1dHRvbi1ncm91cHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Z2FwOjA7bWFyZ2luOjFyZW0gMH0ubW9uc3Rlci1idXR0b24tZ3JvdXA+Om5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKi0xKX0ubW9uc3Rlci1idXR0b24tZ3JvdXAgOmhvdmVye2JveC1zaGFkb3c6bm9uZX1idXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtidXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja306YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlOlxcXCJDb25zb2xhc1xcXCIsXFxcIkNvdXJpZXIgTmV3XFxcIixcXFwiUm9ib3RvIE1vbm9cXFwiLFxcXCJTb3VyY2UgQ29kZSBQcm9cXFwiLFxcXCJGaXJhIE1vbm9cXFwiLG1vbm9zcGFjZTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTYpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoOjJweDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDozcHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweDstLW1vbnN0ZXItZHJhZ2dlci13aWR0aDoycHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoOjRweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0OjUwcHh9c3Bhbi5tb25zdGVyLWZ4LXJpcHBsZXthbmltYXRpb246bW9uc3Rlci1meC1yaXBwbGUgLjZzIGxpbmVhcjtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC43KTtib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06c2NhbGUoMCl9QGtleWZyYW1lcyBtb25zdGVyLWZ4LXJpcHBsZXt0b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDQpfX0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LC5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LC5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LC5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUsLm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3N7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MsLm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZ3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZywubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1lcnJvcntwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3IsLm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWluZm86YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtaW5mbzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1pbmZvOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWluZm86YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtaW5mbzpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLWluZm86YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWluZm8tY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J204LjkzIDYuNTg4LTIuMjkuMjg3LS4wODIuMzguNDUuMDgzYy4yOTQuMDcuMzUyLjE3Ni4yODguNDY5bC0uNzM4IDMuNDY4Yy0uMTk0Ljg5Ny4xMDUgMS4zMTkuODA4IDEuMzE5LjU0NSAwIDEuMTc4LS4yNTIgMS40NjUtLjU5OGwuMDg4LS40MTZjLS4yLjE3Ni0uNDkyLjI0Ni0uNjg2LjI0Ni0uMjc1IDAtLjM3NS0uMTkzLS4zMDQtLjUzM3pNOSA0LjVhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktaW5mby1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTguOTMgNi41ODgtMi4yOS4yODctLjA4Mi4zOC40NS4wODNjLjI5NC4wNy4zNTIuMTc2LjI4OC40NjlsLS43MzggMy40NjhjLS4xOTQuODk3LjEwNSAxLjMxOS44MDggMS4zMTkuNTQ1IDAgMS4xNzgtLjI1MiAxLjQ2NS0uNTk4bC4wODgtLjQxNmMtLjIuMTc2LS40OTIuMjQ2LS42ODYuMjQ2LS4yNzUgMC0uMzc1LS4xOTMtLjMwNC0uNTMzek05IDQuNWExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDAnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1pbmZvOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLWluZm86YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItaW5mbzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1pbmZvOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLWluZm86YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1pbmZvOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1pbmZvLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtOC45MyA2LjU4OC0yLjI5LjI4Ny0uMDgyLjM4LjQ1LjA4M2MuMjk0LjA3LjM1Mi4xNzYuMjg4LjQ2OWwtLjczOCAzLjQ2OGMtLjE5NC44OTcuMTA1IDEuMzE5LjgwOCAxLjMxOS41NDUgMCAxLjE3OC0uMjUyIDEuNDY1LS41OThsLjA4OC0uNDE2Yy0uMi4xNzYtLjQ5Mi4yNDYtLjY4Ni4yNDYtLjI3NSAwLS4zNzUtLjE5My0uMzA0LS41MzN6TTkgNC41YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWluZm8tY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J204LjkzIDYuNTg4LTIuMjkuMjg3LS4wODIuMzguNDUuMDgzYy4yOTQuMDcuMzUyLjE3Ni4yODguNDY5bC0uNzM4IDMuNDY4Yy0uMTk0Ljg5Ny4xMDUgMS4zMTkuODA4IDEuMzE5LjU0NSAwIDEuMTc4LS4yNTIgMS40NjUtLjU5OGwuMDg4LS40MTZjLS4yLjE3Ni0uNDkyLjI0Ni0uNjg2LjI0Ni0uMjc1IDAtLjM3NS0uMTkzLS4zMDQtLjUzM3pNOSA0LjVhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtaW5mbzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWljb24tdGVydGlhcnktMy1pbmZvOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLWluZm86YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtaW5mbzpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1pbmZvOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtaW5mbzpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktaW5mby1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTguOTMgNi41ODgtMi4yOS4yODctLjA4Mi4zOC40NS4wODNjLjI5NC4wNy4zNTIuMTc2LjI4OC40NjlsLS43MzggMy40NjhjLS4xOTQuODk3LjEwNSAxLjMxOS44MDggMS4zMTkuNTQ1IDAgMS4xNzgtLjI1MiAxLjQ2NS0uNTk4bC4wODgtLjQxNmMtLjIuMTc2LS40OTIuMjQ2LS42ODYuMjQ2LS4yNzUgMC0uMzc1LS4xOTMtLjMwNC0uNTMzek05IDQuNWExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDAnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1pbmZvLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtOC45MyA2LjU4OC0yLjI5LjI4Ny0uMDgyLjM4LjQ1LjA4M2MuMjk0LjA3LjM1Mi4xNzYuMjg4LjQ2OWwtLjczOCAzLjQ2OGMtLjE5NC44OTcuMTA1IDEuMzE5LjgwOCAxLjMxOS41NDUgMCAxLjE3OC0uMjUyIDEuNDY1LS41OThsLjA4OC0uNDE2Yy0uMi4xNzYtLjQ5Mi4yNDYtLjY4Ni4yNDYtLjI3NSAwLS4zNzUtLjE5My0uMzA0LS41MzN6TTkgNC41YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWluZm86YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtaW5mbzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1pbmZvOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWluZm86YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtaW5mbzpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LWluZm86YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWluZm8tY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J204LjkzIDYuNTg4LTIuMjkuMjg3LS4wODIuMzguNDUuMDgzYy4yOTQuMDcuMzUyLjE3Ni4yODguNDY5bC0uNzM4IDMuNDY4Yy0uMTk0Ljg5Ny4xMDUgMS4zMTkuODA4IDEuMzE5LjU0NSAwIDEuMTc4LS4yNTIgMS40NjUtLjU5OGwuMDg4LS40MTZjLS4yLjE3Ni0uNDkyLjI0Ni0uNjg2LjI0Ni0uMjc1IDAtLjM3NS0uMTkzLS4zMDQtLjUzM3pNOSA0LjVhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktaW5mby1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTguOTMgNi41ODgtMi4yOS4yODctLjA4Mi4zOC40NS4wODNjLjI5NC4wNy4zNTIuMTc2LjI4OC40NjlsLS43MzggMy40NjhjLS4xOTQuODk3LjEwNSAxLjMxOS44MDggMS4zMTkuNTQ1IDAgMS4xNzgtLjI1MiAxLjQ2NS0uNTk4bC4wODgtLjQxNmMtLjIuMTc2LS40OTIuMjQ2LS42ODYuMjQ2LS4yNzUgMC0uMzc1LS4xOTMtLjMwNC0uNTMzek05IDQuNWExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDAnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1vbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1vbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS10b2dnbGUtb24nIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J001IDNhNSA1IDAgMCAwIDAgMTBoNmE1IDUgMCAwIDAgMC0xMHptNiA5YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLXRvZ2dsZS1vbicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTUgM2E1IDUgMCAwIDAgMCAxMGg2YTUgNSAwIDAgMCAwLTEwem02IDlhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItb246YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItb246YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1vbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktdG9nZ2xlLW9uJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNSAzYTUgNSAwIDAgMCAwIDEwaDZhNSA1IDAgMCAwIDAtMTB6bTYgOWE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS10b2dnbGUtb24nIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J001IDNhNSA1IDAgMCAwIDAgMTBoNmE1IDUgMCAwIDAgMC0xMHptNiA5YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLXRvZ2dsZS1vbicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTUgM2E1IDUgMCAwIDAgMCAxMGg2YTUgNSAwIDAgMCAwLTEwem02IDlhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktdG9nZ2xlLW9uJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNSAzYTUgNSAwIDAgMCAwIDEwaDZhNSA1IDAgMCAwIDAtMTB6bTYgOWE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDgnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1vbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1vbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS10b2dnbGUtb24nIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J001IDNhNSA1IDAgMCAwIDAgMTBoNmE1IDUgMCAwIDAgMC0xMHptNiA5YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLXRvZ2dsZS1vbicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTUgM2E1IDUgMCAwIDAgMCAxMGg2YTUgNSAwIDAgMCAwLTEwem02IDlhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtb2ZmOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW9mZjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1vZmY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtb2ZmOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLW9mZjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW9mZjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMTEgNGE0IDQgMCAwIDEgMCA4SDhhNSA1IDAgMCAwIDItNCA1IDUgMCAwIDAtMi00em0tNiA4YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOE0wIDhhNSA1IDAgMCAwIDUgNWg2YTUgNSAwIDAgMCAwLTEwSDVhNSA1IDAgMCAwLTUgNScvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTExIDRhNCA0IDAgMCAxIDAgOEg4YTUgNSAwIDAgMCAyLTQgNSA1IDAgMCAwLTItNHptLTYgOGE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDhNMCA4YTUgNSAwIDAgMCA1IDVoNmE1IDUgMCAwIDAgMC0xMEg1YTUgNSAwIDAgMC01IDUnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1vZmY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItb2ZmOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLW9mZjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1vZmY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItb2ZmOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItb2ZmOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J00xMSA0YTQgNCAwIDAgMSAwIDhIOGE1IDUgMCAwIDAgMi00IDUgNSAwIDAgMC0yLTR6bS02IDhhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4TTAgOGE1IDUgMCAwIDAgNSA1aDZhNSA1IDAgMCAwIDAtMTBINWE1IDUgMCAwIDAtNSA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMTEgNGE0IDQgMCAwIDEgMCA4SDhhNSA1IDAgMCAwIDItNCA1IDUgMCAwIDAtMi00em0tNiA4YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOE0wIDhhNSA1IDAgMCAwIDUgNWg2YTUgNSAwIDAgMCAwLTEwSDVhNSA1IDAgMCAwLTUgNScvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLW9mZjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWljb24tdGVydGlhcnktMy1vZmY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtb2ZmOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLW9mZjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1vZmY6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1vZmY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTExIDRhNCA0IDAgMCAxIDAgOEg4YTUgNSAwIDAgMCAyLTQgNSA1IDAgMCAwLTItNHptLTYgOGE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDhNMCA4YTUgNSAwIDAgMCA1IDVoNmE1IDUgMCAwIDAgMC0xMEg1YTUgNSAwIDAgMC01IDUnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J00xMSA0YTQgNCAwIDAgMSAwIDhIOGE1IDUgMCAwIDAgMi00IDUgNSAwIDAgMC0yLTR6bS02IDhhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4TTAgOGE1IDUgMCAwIDAgNSA1aDZhNSA1IDAgMCAwIDAtMTBINWE1IDUgMCAwIDAtNSA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtb2ZmOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW9mZjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1vZmY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtb2ZmOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LW9mZjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW9mZjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMTEgNGE0IDQgMCAwIDEgMCA4SDhhNSA1IDAgMCAwIDItNCA1IDUgMCAwIDAtMi00em0tNiA4YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOE0wIDhhNSA1IDAgMCAwIDUgNWg2YTUgNSAwIDAgMCAwLTEwSDVhNSA1IDAgMCAwLTUgNScvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTExIDRhNCA0IDAgMCAxIDAgOEg4YTUgNSAwIDAgMCAyLTQgNSA1IDAgMCAwLTItNHptLTYgOGE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDhNMCA4YTUgNSAwIDAgMCA1IDVoNmE1IDUgMCAwIDAgMC0xMEg1YTUgNSAwIDAgMC01IDUnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1wb3NpdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLXBvc2l0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtcG9zaXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1wb3NpdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLXBvc2l0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMS1wb3NpdGl2OmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLXBvc2l0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItcG9zaXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1wb3NpdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLXBvc2l0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItcG9zaXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLXBvc2l0aXY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtcG9zaXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWljb24tdGVydGlhcnktMy1wb3NpdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLXBvc2l0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtcG9zaXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1wb3NpdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtcG9zaXRpdjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1wb3NpdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LXBvc2l0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtcG9zaXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1wb3NpdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LXBvc2l0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktNC1wb3NpdGl2OmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLW5lZ2F0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtbmVnYXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1uZWdhdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLW5lZ2F0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtbmVnYXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW5lZ2F0aXY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1uZWdhdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLW5lZ2F0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItbmVnYXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1uZWdhdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLW5lZ2F0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1uZWdhdGl2OmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtbmVnYXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWljb24tdGVydGlhcnktMy1uZWdhdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLW5lZ2F0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtbmVnYXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1uZWdhdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtbmVnYXRpdjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LW5lZ2F0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtbmVnYXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1uZWdhdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LW5lZ2F0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtbmVnYXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW5lZ2F0aXY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS13YXJuaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLXdhcm5pbmc6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtd2FybmluZzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS13YXJuaW5nOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLXdhcm5pbmc6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMS13YXJuaW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi13YXJuaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLXdhcm5pbmc6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItd2FybmluZzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi13YXJuaW5nOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLXdhcm5pbmc6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi13YXJuaW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy13YXJuaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLXdhcm5pbmc6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtd2FybmluZzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy13YXJuaW5nOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLXdhcm5pbmc6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy13YXJuaW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC13YXJuaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LXdhcm5pbmc6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtd2FybmluZzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC13YXJuaW5nOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LXdhcm5pbmc6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktNC13YXJuaW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1uZXV0cmFsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW5ldXRyYWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtbmV1dHJhbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1uZXV0cmFsOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLW5ldXRyYWw6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMS1uZXV0cmFsOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1uZXV0cmFsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLW5ldXRyYWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItbmV1dHJhbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1uZXV0cmFsOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLW5ldXRyYWw6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1uZXV0cmFsOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1uZXV0cmFsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLW5ldXRyYWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtbmV1dHJhbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1uZXV0cmFsOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLW5ldXRyYWw6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1uZXV0cmFsOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1uZXV0cmFsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW5ldXRyYWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtbmV1dHJhbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1uZXV0cmFsOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LW5ldXRyYWw6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktNC1uZXV0cmFsOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1xdWVzdGlvbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1xdWVzdGlvbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLXF1ZXN0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTUuMjU1IDUuNzg2YS4yMzcuMjM3IDAgMCAwIC4yNDEuMjQ3aC44MjVjLjEzOCAwIC4yNDgtLjExMy4yNjYtLjI1LjA5LS42NTYuNTQtMS4xMzQgMS4zNDItMS4xMzQuNjg2IDAgMS4zMTQuMzQzIDEuMzE0IDEuMTY4IDAgLjYzNS0uMzc0LjkyNy0uOTY1IDEuMzcxLS42NzMuNDg5LTEuMjA2IDEuMDYtMS4xNjggMS45ODdsLjAwMy4yMTdhLjI1LjI1IDAgMCAwIC4yNS4yNDZoLjgxMWEuMjUuMjUgMCAwIDAgLjI1LS4yNXYtLjEwNWMwLS43MTguMjczLS45MjcgMS4wMS0xLjQ4Ni42MDktLjQ2MyAxLjI0NC0uOTc3IDEuMjQ0LTIuMDU2IDAtMS41MTEtMS4yNzYtMi4yNDEtMi42NzMtMi4yNDEtMS4yNjcgMC0yLjY1NS41OS0yLjc1IDIuMjg2bTEuNTU3IDUuNzYzYzAgLjUzMy40MjUuOTI3IDEuMDEuOTI3LjYwOSAwIDEuMDI4LS4zOTQgMS4wMjgtLjkyNyAwLS41NTItLjQyLS45NC0xLjAyOS0uOTQtLjU4NCAwLTEuMDA5LjM4OC0xLjAwOS45NCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNS4yNTUgNS43ODZhLjIzNy4yMzcgMCAwIDAgLjI0MS4yNDdoLjgyNWMuMTM4IDAgLjI0OC0uMTEzLjI2Ni0uMjUuMDktLjY1Ni41NC0xLjEzNCAxLjM0Mi0xLjEzNC42ODYgMCAxLjMxNC4zNDMgMS4zMTQgMS4xNjggMCAuNjM1LS4zNzQuOTI3LS45NjUgMS4zNzEtLjY3My40ODktMS4yMDYgMS4wNi0xLjE2OCAxLjk4N2wuMDAzLjIxN2EuMjUuMjUgMCAwIDAgLjI1LjI0NmguODExYS4yNS4yNSAwIDAgMCAuMjUtLjI1di0uMTA1YzAtLjcxOC4yNzMtLjkyNyAxLjAxLTEuNDg2LjYwOS0uNDYzIDEuMjQ0LS45NzcgMS4yNDQtMi4wNTYgMC0xLjUxMS0xLjI3Ni0yLjI0MS0yLjY3My0yLjI0MS0xLjI2NyAwLTIuNjU1LjU5LTIuNzUgMi4yODZtMS41NTcgNS43NjNjMCAuNTMzLjQyNS45MjcgMS4wMS45MjcuNjA5IDAgMS4wMjgtLjM5NCAxLjAyOC0uOTI3IDAtLjU1Mi0uNDItLjk0LTEuMDI5LS45NC0uNTg0IDAtMS4wMDkuMzg4LTEuMDA5Ljk0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItcXVlc3Rpb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItcXVlc3Rpb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItcXVlc3Rpb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItcXVlc3Rpb246YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItcXVlc3Rpb246YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1xdWVzdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J001LjI1NSA1Ljc4NmEuMjM3LjIzNyAwIDAgMCAuMjQxLjI0N2guODI1Yy4xMzggMCAuMjQ4LS4xMTMuMjY2LS4yNS4wOS0uNjU2LjU0LTEuMTM0IDEuMzQyLTEuMTM0LjY4NiAwIDEuMzE0LjM0MyAxLjMxNCAxLjE2OCAwIC42MzUtLjM3NC45MjctLjk2NSAxLjM3MS0uNjczLjQ4OS0xLjIwNiAxLjA2LTEuMTY4IDEuOTg3bC4wMDMuMjE3YS4yNS4yNSAwIDAgMCAuMjUuMjQ2aC44MTFhLjI1LjI1IDAgMCAwIC4yNS0uMjV2LS4xMDVjMC0uNzE4LjI3My0uOTI3IDEuMDEtMS40ODYuNjA5LS40NjMgMS4yNDQtLjk3NyAxLjI0NC0yLjA1NiAwLTEuNTExLTEuMjc2LTIuMjQxLTIuNjczLTIuMjQxLTEuMjY3IDAtMi42NTUuNTktMi43NSAyLjI4Nm0xLjU1NyA1Ljc2M2MwIC41MzMuNDI1LjkyNyAxLjAxLjkyNy42MDkgMCAxLjAyOC0uMzk0IDEuMDI4LS45MjcgMC0uNTUyLS40Mi0uOTQtMS4wMjktLjk0LS41ODQgMC0xLjAwOS4zODgtMS4wMDkuOTQnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTUuMjU1IDUuNzg2YS4yMzcuMjM3IDAgMCAwIC4yNDEuMjQ3aC44MjVjLjEzOCAwIC4yNDgtLjExMy4yNjYtLjI1LjA5LS42NTYuNTQtMS4xMzQgMS4zNDItMS4xMzQuNjg2IDAgMS4zMTQuMzQzIDEuMzE0IDEuMTY4IDAgLjYzNS0uMzc0LjkyNy0uOTY1IDEuMzcxLS42NzMuNDg5LTEuMjA2IDEuMDYtMS4xNjggMS45ODdsLjAwMy4yMTdhLjI1LjI1IDAgMCAwIC4yNS4yNDZoLjgxMWEuMjUuMjUgMCAwIDAgLjI1LS4yNXYtLjEwNWMwLS43MTguMjczLS45MjcgMS4wMS0xLjQ4Ni42MDktLjQ2MyAxLjI0NC0uOTc3IDEuMjQ0LTIuMDU2IDAtMS41MTEtMS4yNzYtMi4yNDEtMi42NzMtMi4yNDEtMS4yNjcgMC0yLjY1NS41OS0yLjc1IDIuMjg2bTEuNTU3IDUuNzYzYzAgLjUzMy40MjUuOTI3IDEuMDEuOTI3LjYwOSAwIDEuMDI4LS4zOTQgMS4wMjgtLjkyNyAwLS41NTItLjQyLS45NC0xLjAyOS0uOTQtLjU4NCAwLTEuMDA5LjM4OC0xLjAwOS45NCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLXF1ZXN0aW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLXF1ZXN0aW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLXF1ZXN0aW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLXF1ZXN0aW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLXF1ZXN0aW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtcXVlc3Rpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNS4yNTUgNS43ODZhLjIzNy4yMzcgMCAwIDAgLjI0MS4yNDdoLjgyNWMuMTM4IDAgLjI0OC0uMTEzLjI2Ni0uMjUuMDktLjY1Ni41NC0xLjEzNCAxLjM0Mi0xLjEzNC42ODYgMCAxLjMxNC4zNDMgMS4zMTQgMS4xNjggMCAuNjM1LS4zNzQuOTI3LS45NjUgMS4zNzEtLjY3My40ODktMS4yMDYgMS4wNi0xLjE2OCAxLjk4N2wuMDAzLjIxN2EuMjUuMjUgMCAwIDAgLjI1LjI0NmguODExYS4yNS4yNSAwIDAgMCAuMjUtLjI1di0uMTA1YzAtLjcxOC4yNzMtLjkyNyAxLjAxLTEuNDg2LjYwOS0uNDYzIDEuMjQ0LS45NzcgMS4yNDQtMi4wNTYgMC0xLjUxMS0xLjI3Ni0yLjI0MS0yLjY3My0yLjI0MS0xLjI2NyAwLTIuNjU1LjU5LTIuNzUgMi4yODZtMS41NTcgNS43NjNjMCAuNTMzLjQyNS45MjcgMS4wMS45MjcuNjA5IDAgMS4wMjgtLjM5NCAxLjAyOC0uOTI3IDAtLjU1Mi0uNDItLjk0LTEuMDI5LS45NC0uNTg0IDAtMS4wMDkuMzg4LTEuMDA5Ljk0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J001LjI1NSA1Ljc4NmEuMjM3LjIzNyAwIDAgMCAuMjQxLjI0N2guODI1Yy4xMzggMCAuMjQ4LS4xMTMuMjY2LS4yNS4wOS0uNjU2LjU0LTEuMTM0IDEuMzQyLTEuMTM0LjY4NiAwIDEuMzE0LjM0MyAxLjMxNCAxLjE2OCAwIC42MzUtLjM3NC45MjctLjk2NSAxLjM3MS0uNjczLjQ4OS0xLjIwNiAxLjA2LTEuMTY4IDEuOTg3bC4wMDMuMjE3YS4yNS4yNSAwIDAgMCAuMjUuMjQ2aC44MTFhLjI1LjI1IDAgMCAwIC4yNS0uMjV2LS4xMDVjMC0uNzE4LjI3My0uOTI3IDEuMDEtMS40ODYuNjA5LS40NjMgMS4yNDQtLjk3NyAxLjI0NC0yLjA1NiAwLTEuNTExLTEuMjc2LTIuMjQxLTIuNjczLTIuMjQxLTEuMjY3IDAtMi42NTUuNTktMi43NSAyLjI4Nm0xLjU1NyA1Ljc2M2MwIC41MzMuNDI1LjkyNyAxLjAxLjkyNy42MDkgMCAxLjAyOC0uMzk0IDEuMDI4LS45MjcgMC0uNTUyLS40Mi0uOTQtMS4wMjktLjk0LS41ODQgMC0xLjAwOS4zODgtMS4wMDkuOTQnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1xdWVzdGlvbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1xdWVzdGlvbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LXF1ZXN0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTUuMjU1IDUuNzg2YS4yMzcuMjM3IDAgMCAwIC4yNDEuMjQ3aC44MjVjLjEzOCAwIC4yNDgtLjExMy4yNjYtLjI1LjA5LS42NTYuNTQtMS4xMzQgMS4zNDItMS4xMzQuNjg2IDAgMS4zMTQuMzQzIDEuMzE0IDEuMTY4IDAgLjYzNS0uMzc0LjkyNy0uOTY1IDEuMzcxLS42NzMuNDg5LTEuMjA2IDEuMDYtMS4xNjggMS45ODdsLjAwMy4yMTdhLjI1LjI1IDAgMCAwIC4yNS4yNDZoLjgxMWEuMjUuMjUgMCAwIDAgLjI1LS4yNXYtLjEwNWMwLS43MTguMjczLS45MjcgMS4wMS0xLjQ4Ni42MDktLjQ2MyAxLjI0NC0uOTc3IDEuMjQ0LTIuMDU2IDAtMS41MTEtMS4yNzYtMi4yNDEtMi42NzMtMi4yNDEtMS4yNjcgMC0yLjY1NS41OS0yLjc1IDIuMjg2bTEuNTU3IDUuNzYzYzAgLjUzMy40MjUuOTI3IDEuMDEuOTI3LjYwOSAwIDEuMDI4LS4zOTQgMS4wMjgtLjkyNyAwLS41NTItLjQyLS45NC0xLjAyOS0uOTQtLjU4NCAwLTEuMDA5LjM4OC0xLjAwOS45NCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNS4yNTUgNS43ODZhLjIzNy4yMzcgMCAwIDAgLjI0MS4yNDdoLjgyNWMuMTM4IDAgLjI0OC0uMTEzLjI2Ni0uMjUuMDktLjY1Ni41NC0xLjEzNCAxLjM0Mi0xLjEzNC42ODYgMCAxLjMxNC4zNDMgMS4zMTQgMS4xNjggMCAuNjM1LS4zNzQuOTI3LS45NjUgMS4zNzEtLjY3My40ODktMS4yMDYgMS4wNi0xLjE2OCAxLjk4N2wuMDAzLjIxN2EuMjUuMjUgMCAwIDAgLjI1LjI0NmguODExYS4yNS4yNSAwIDAgMCAuMjUtLjI1di0uMTA1YzAtLjcxOC4yNzMtLjkyNyAxLjAxLTEuNDg2LjYwOS0uNDYzIDEuMjQ0LS45NzcgMS4yNDQtMi4wNTYgMC0xLjUxMS0xLjI3Ni0yLjI0MS0yLjY3My0yLjI0MS0xLjI2NyAwLTIuNjU1LjU5LTIuNzUgMi4yODZtMS41NTcgNS43NjNjMCAuNTMzLjQyNS45MjcgMS4wMS45MjcuNjA5IDAgMS4wMjgtLjM5NCAxLjAyOC0uOTI3IDAtLjU1Mi0uNDItLjk0LTEuMDI5LS45NC0uNTg0IDAtMS4wMDkuMzg4LTEuMDA5Ljk0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtcGx1czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1wbHVzOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLXBsdXM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtcGx1czpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1wbHVzOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtcGx1czpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J004IDRhLjUuNSAwIDAgMSAuNS41djNoM2EuNS41IDAgMCAxIDAgMWgtM3YzYS41LjUgMCAwIDEtMSAwdi0zaC0zYS41LjUgMCAwIDEgMC0xaDN2LTNBLjUuNSAwIDAgMSA4IDQnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTggNGEuNS41IDAgMCAxIC41LjV2M2gzYS41LjUgMCAwIDEgMCAxaC0zdjNhLjUuNSAwIDAgMS0xIDB2LTNoLTNhLjUuNSAwIDAgMSAwLTFoM3YtM0EuNS41IDAgMCAxIDggNCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLXBsdXM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItcGx1czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1wbHVzOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLXBsdXM6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItcGx1czpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLXBsdXM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNOCA0YS41LjUgMCAwIDEgLjUuNXYzaDNhLjUuNSAwIDAgMSAwIDFoLTN2M2EuNS41IDAgMCAxLTEgMHYtM2gtM2EuNS41IDAgMCAxIDAtMWgzdi0zQS41LjUgMCAwIDEgOCA0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J004IDRhLjUuNSAwIDAgMSAuNS41djNoM2EuNS41IDAgMCAxIDAgMWgtM3YzYS41LjUgMCAwIDEtMSAwdi0zaC0zYS41LjUgMCAwIDEgMC0xaDN2LTNBLjUuNSAwIDAgMSA4IDQnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1wbHVzOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLXBsdXM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtcGx1czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1wbHVzOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLXBsdXM6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1wbHVzOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTggNGEuNS41IDAgMCAxIC41LjV2M2gzYS41LjUgMCAwIDEgMCAxaC0zdjNhLjUuNSAwIDAgMS0xIDB2LTNoLTNhLjUuNSAwIDAgMSAwLTFoM3YtM0EuNS41IDAgMCAxIDggNCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNOCA0YS41LjUgMCAwIDEgLjUuNXYzaDNhLjUuNSAwIDAgMSAwIDFoLTN2M2EuNS41IDAgMCAxLTEgMHYtM2gtM2EuNS41IDAgMCAxIDAtMWgzdi0zQS41LjUgMCAwIDEgOCA0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtcGx1czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1wbHVzOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LXBsdXM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtcGx1czpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1wbHVzOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtcGx1czpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J004IDRhLjUuNSAwIDAgMSAuNS41djNoM2EuNS41IDAgMCAxIDAgMWgtM3YzYS41LjUgMCAwIDEtMSAwdi0zaC0zYS41LjUgMCAwIDEgMC0xaDN2LTNBLjUuNSAwIDAgMSA4IDQnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTggNGEuNS41IDAgMCAxIC41LjV2M2gzYS41LjUgMCAwIDEgMCAxaC0zdjNhLjUuNSAwIDAgMS0xIDB2LTNoLTNhLjUuNSAwIDAgMSAwLTFoM3YtM0EuNS41IDAgMCAxIDggNCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWRhc2g6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtZGFzaDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1kYXNoOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWRhc2g6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtZGFzaDpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLWRhc2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLWRhc2g6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItZGFzaDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1kYXNoOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLWRhc2g6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItZGFzaDpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLWRhc2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLWRhc2g6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtZGFzaDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1kYXNoOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLWRhc2g6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtZGFzaDpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLWRhc2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWRhc2g6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtZGFzaDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1kYXNoOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWRhc2g6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtZGFzaDpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LWRhc2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWdlYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtZ2VhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1nZWFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWdlYXI6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtZ2VhcjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLWdlYXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggNC43NTRhMy4yNDYgMy4yNDYgMCAxIDAgMCA2LjQ5MiAzLjI0NiAzLjI0NiAwIDAgMCAwLTYuNDkyTTUuNzU0IDhhMi4yNDYgMi4yNDYgMCAxIDEgNC40OTIgMCAyLjI0NiAyLjI0NiAwIDAgMS00LjQ5MiAwJy8lM0UlM0NwYXRoIGQ9J005Ljc5NiAxLjM0M2MtLjUyNy0xLjc5LTMuMDY1LTEuNzktMy41OTIgMGwtLjA5NC4zMTlhLjg3My44NzMgMCAwIDEtMS4yNTUuNTJsLS4yOTItLjE2Yy0xLjY0LS44OTItMy40MzMuOTAyLTIuNTQgMi41NDFsLjE1OS4yOTJhLjg3My44NzMgMCAwIDEtLjUyIDEuMjU1bC0uMzE5LjA5NGMtMS43OS41MjctMS43OSAzLjA2NSAwIDMuNTkybC4zMTkuMDk0YS44NzMuODczIDAgMCAxIC41MiAxLjI1NWwtLjE2LjI5MmMtLjg5MiAxLjY0LjkwMSAzLjQzNCAyLjU0MSAyLjU0bC4yOTItLjE1OWEuODczLjg3MyAwIDAgMSAxLjI1NS41MmwuMDk0LjMxOWMuNTI3IDEuNzkgMy4wNjUgMS43OSAzLjU5MiAwbC4wOTQtLjMxOWEuODczLjg3MyAwIDAgMSAxLjI1NS0uNTJsLjI5Mi4xNmMxLjY0Ljg5MyAzLjQzNC0uOTAyIDIuNTQtMi41NDFsLS4xNTktLjI5MmEuODczLjg3MyAwIDAgMSAuNTItMS4yNTVsLjMxOS0uMDk0YzEuNzktLjUyNyAxLjc5LTMuMDY1IDAtMy41OTJsLS4zMTktLjA5NGEuODczLjg3MyAwIDAgMS0uNTItMS4yNTVsLjE2LS4yOTJjLjg5My0xLjY0LS45MDItMy40MzMtMi41NDEtMi41NGwtLjI5Mi4xNTlhLjg3My44NzMgMCAwIDEtMS4yNTUtLjUyem0tMi42MzMuMjgzYy4yNDYtLjgzNSAxLjQyOC0uODM1IDEuNjc0IDBsLjA5NC4zMTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTMgMS4xMTVsLjI5MS0uMTZjLjc2NC0uNDE1IDEuNi40MiAxLjE4NCAxLjE4NWwtLjE1OS4yOTJhMS44NzMgMS44NzMgMCAwIDAgMS4xMTYgMi42OTJsLjMxOC4wOTRjLjgzNS4yNDYuODM1IDEuNDI4IDAgMS42NzRsLS4zMTkuMDk0YTEuODczIDEuODczIDAgMCAwLTEuMTE1IDIuNjkzbC4xNi4yOTFjLjQxNS43NjQtLjQyIDEuNi0xLjE4NSAxLjE4NGwtLjI5MS0uMTU5YTEuODczIDEuODczIDAgMCAwLTIuNjkzIDEuMTE2bC0uMDk0LjMxOGMtLjI0Ni44MzUtMS40MjguODM1LTEuNjc0IDBsLS4wOTQtLjMxOWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5Mi0xLjExNWwtLjI5Mi4xNmMtLjc2NC40MTUtMS42LS40Mi0xLjE4NC0xLjE4NWwuMTU5LS4yOTFBMS44NzMgMS44NzMgMCAwIDAgMS45NDUgOC45M2wtLjMxOS0uMDk0Yy0uODM1LS4yNDYtLjgzNS0xLjQyOCAwLTEuNjc0bC4zMTktLjA5NEExLjg3MyAxLjg3MyAwIDAgMCAzLjA2IDQuMzc3bC0uMTYtLjI5MmMtLjQxNS0uNzY0LjQyLTEuNiAxLjE4NS0xLjE4NGwuMjkyLjE1OWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5Mi0xLjExNXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDQuNzU0YTMuMjQ2IDMuMjQ2IDAgMSAwIDAgNi40OTIgMy4yNDYgMy4yNDYgMCAwIDAgMC02LjQ5Mk01Ljc1NCA4YTIuMjQ2IDIuMjQ2IDAgMSAxIDQuNDkyIDAgMi4yNDYgMi4yNDYgMCAwIDEtNC40OTIgMCcvJTNFJTNDcGF0aCBkPSdNOS43OTYgMS4zNDNjLS41MjctMS43OS0zLjA2NS0xLjc5LTMuNTkyIDBsLS4wOTQuMzE5YS44NzMuODczIDAgMCAxLTEuMjU1LjUybC0uMjkyLS4xNmMtMS42NC0uODkyLTMuNDMzLjkwMi0yLjU0IDIuNTQxbC4xNTkuMjkyYS44NzMuODczIDAgMCAxLS41MiAxLjI1NWwtLjMxOS4wOTRjLTEuNzkuNTI3LTEuNzkgMy4wNjUgMCAzLjU5MmwuMzE5LjA5NGEuODczLjg3MyAwIDAgMSAuNTIgMS4yNTVsLS4xNi4yOTJjLS44OTIgMS42NC45MDEgMy40MzQgMi41NDEgMi41NGwuMjkyLS4xNTlhLjg3My44NzMgMCAwIDEgMS4yNTUuNTJsLjA5NC4zMTljLjUyNyAxLjc5IDMuMDY1IDEuNzkgMy41OTIgMGwuMDk0LS4zMTlhLjg3My44NzMgMCAwIDEgMS4yNTUtLjUybC4yOTIuMTZjMS42NC44OTMgMy40MzQtLjkwMiAyLjU0LTIuNTQxbC0uMTU5LS4yOTJhLjg3My44NzMgMCAwIDEgLjUyLTEuMjU1bC4zMTktLjA5NGMxLjc5LS41MjcgMS43OS0zLjA2NSAwLTMuNTkybC0uMzE5LS4wOTRhLjg3My44NzMgMCAwIDEtLjUyLTEuMjU1bC4xNi0uMjkyYy44OTMtMS42NC0uOTAyLTMuNDMzLTIuNTQxLTIuNTRsLS4yOTIuMTU5YS44NzMuODczIDAgMCAxLTEuMjU1LS41MnptLTIuNjMzLjI4M2MuMjQ2LS44MzUgMS40MjgtLjgzNSAxLjY3NCAwbC4wOTQuMzE5YTEuODczIDEuODczIDAgMCAwIDIuNjkzIDEuMTE1bC4yOTEtLjE2Yy43NjQtLjQxNSAxLjYuNDIgMS4xODQgMS4xODVsLS4xNTkuMjkyYTEuODczIDEuODczIDAgMCAwIDEuMTE2IDIuNjkybC4zMTguMDk0Yy44MzUuMjQ2LjgzNSAxLjQyOCAwIDEuNjc0bC0uMzE5LjA5NGExLjg3MyAxLjg3MyAwIDAgMC0xLjExNSAyLjY5M2wuMTYuMjkxYy40MTUuNzY0LS40MiAxLjYtMS4xODUgMS4xODRsLS4yOTEtLjE1OWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5MyAxLjExNmwtLjA5NC4zMThjLS4yNDYuODM1LTEuNDI4LjgzNS0xLjY3NCAwbC0uMDk0LS4zMTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTItMS4xMTVsLS4yOTIuMTZjLS43NjQuNDE1LTEuNi0uNDItMS4xODQtMS4xODVsLjE1OS0uMjkxQTEuODczIDEuODczIDAgMCAwIDEuOTQ1IDguOTNsLS4zMTktLjA5NGMtLjgzNS0uMjQ2LS44MzUtMS40MjggMC0xLjY3NGwuMzE5LS4wOTRBMS44NzMgMS44NzMgMCAwIDAgMy4wNiA0LjM3N2wtLjE2LS4yOTJjLS40MTUtLjc2NC40Mi0xLjYgMS4xODUtMS4xODRsLjI5Mi4xNTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTItMS4xMTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItZ2VhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWljb24tdGVydGlhcnktMi1nZWFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLWdlYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItZ2VhcjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1nZWFyOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItZ2VhcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCA0Ljc1NGEzLjI0NiAzLjI0NiAwIDEgMCAwIDYuNDkyIDMuMjQ2IDMuMjQ2IDAgMCAwIDAtNi40OTJNNS43NTQgOGEyLjI0NiAyLjI0NiAwIDEgMSA0LjQ5MiAwIDIuMjQ2IDIuMjQ2IDAgMCAxLTQuNDkyIDAnLyUzRSUzQ3BhdGggZD0nTTkuNzk2IDEuMzQzYy0uNTI3LTEuNzktMy4wNjUtMS43OS0zLjU5MiAwbC0uMDk0LjMxOWEuODczLjg3MyAwIDAgMS0xLjI1NS41MmwtLjI5Mi0uMTZjLTEuNjQtLjg5Mi0zLjQzMy45MDItMi41NCAyLjU0MWwuMTU5LjI5MmEuODczLjg3MyAwIDAgMS0uNTIgMS4yNTVsLS4zMTkuMDk0Yy0xLjc5LjUyNy0xLjc5IDMuMDY1IDAgMy41OTJsLjMxOS4wOTRhLjg3My44NzMgMCAwIDEgLjUyIDEuMjU1bC0uMTYuMjkyYy0uODkyIDEuNjQuOTAxIDMuNDM0IDIuNTQxIDIuNTRsLjI5Mi0uMTU5YS44NzMuODczIDAgMCAxIDEuMjU1LjUybC4wOTQuMzE5Yy41MjcgMS43OSAzLjA2NSAxLjc5IDMuNTkyIDBsLjA5NC0uMzE5YS44NzMuODczIDAgMCAxIDEuMjU1LS41MmwuMjkyLjE2YzEuNjQuODkzIDMuNDM0LS45MDIgMi41NC0yLjU0MWwtLjE1OS0uMjkyYS44NzMuODczIDAgMCAxIC41Mi0xLjI1NWwuMzE5LS4wOTRjMS43OS0uNTI3IDEuNzktMy4wNjUgMC0zLjU5MmwtLjMxOS0uMDk0YS44NzMuODczIDAgMCAxLS41Mi0xLjI1NWwuMTYtLjI5MmMuODkzLTEuNjQtLjkwMi0zLjQzMy0yLjU0MS0yLjU0bC0uMjkyLjE1OWEuODczLjg3MyAwIDAgMS0xLjI1NS0uNTJ6bS0yLjYzMy4yODNjLjI0Ni0uODM1IDEuNDI4LS44MzUgMS42NzQgMGwuMDk0LjMxOWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5MyAxLjExNWwuMjkxLS4xNmMuNzY0LS40MTUgMS42LjQyIDEuMTg0IDEuMTg1bC0uMTU5LjI5MmExLjg3MyAxLjg3MyAwIDAgMCAxLjExNiAyLjY5MmwuMzE4LjA5NGMuODM1LjI0Ni44MzUgMS40MjggMCAxLjY3NGwtLjMxOS4wOTRhMS44NzMgMS44NzMgMCAwIDAtMS4xMTUgMi42OTNsLjE2LjI5MWMuNDE1Ljc2NC0uNDIgMS42LTEuMTg1IDEuMTg0bC0uMjkxLS4xNTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTMgMS4xMTZsLS4wOTQuMzE4Yy0uMjQ2LjgzNS0xLjQyOC44MzUtMS42NzQgMGwtLjA5NC0uMzE5YTEuODczIDEuODczIDAgMCAwLTIuNjkyLTEuMTE1bC0uMjkyLjE2Yy0uNzY0LjQxNS0xLjYtLjQyLTEuMTg0LTEuMTg1bC4xNTktLjI5MUExLjg3MyAxLjg3MyAwIDAgMCAxLjk0NSA4LjkzbC0uMzE5LS4wOTRjLS44MzUtLjI0Ni0uODM1LTEuNDI4IDAtMS42NzRsLjMxOS0uMDk0QTEuODczIDEuODczIDAgMCAwIDMuMDYgNC4zNzdsLS4xNi0uMjkyYy0uNDE1LS43NjQuNDItMS42IDEuMTg1LTEuMTg0bC4yOTIuMTU5YTEuODczIDEuODczIDAgMCAwIDIuNjkyLTEuMTE1eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggNC43NTRhMy4yNDYgMy4yNDYgMCAxIDAgMCA2LjQ5MiAzLjI0NiAzLjI0NiAwIDAgMCAwLTYuNDkyTTUuNzU0IDhhMi4yNDYgMi4yNDYgMCAxIDEgNC40OTIgMCAyLjI0NiAyLjI0NiAwIDAgMS00LjQ5MiAwJy8lM0UlM0NwYXRoIGQ9J005Ljc5NiAxLjM0M2MtLjUyNy0xLjc5LTMuMDY1LTEuNzktMy41OTIgMGwtLjA5NC4zMTlhLjg3My44NzMgMCAwIDEtMS4yNTUuNTJsLS4yOTItLjE2Yy0xLjY0LS44OTItMy40MzMuOTAyLTIuNTQgMi41NDFsLjE1OS4yOTJhLjg3My44NzMgMCAwIDEtLjUyIDEuMjU1bC0uMzE5LjA5NGMtMS43OS41MjctMS43OSAzLjA2NSAwIDMuNTkybC4zMTkuMDk0YS44NzMuODczIDAgMCAxIC41MiAxLjI1NWwtLjE2LjI5MmMtLjg5MiAxLjY0LjkwMSAzLjQzNCAyLjU0MSAyLjU0bC4yOTItLjE1OWEuODczLjg3MyAwIDAgMSAxLjI1NS41MmwuMDk0LjMxOWMuNTI3IDEuNzkgMy4wNjUgMS43OSAzLjU5MiAwbC4wOTQtLjMxOWEuODczLjg3MyAwIDAgMSAxLjI1NS0uNTJsLjI5Mi4xNmMxLjY0Ljg5MyAzLjQzNC0uOTAyIDIuNTQtMi41NDFsLS4xNTktLjI5MmEuODczLjg3MyAwIDAgMSAuNTItMS4yNTVsLjMxOS0uMDk0YzEuNzktLjUyNyAxLjc5LTMuMDY1IDAtMy41OTJsLS4zMTktLjA5NGEuODczLjg3MyAwIDAgMS0uNTItMS4yNTVsLjE2LS4yOTJjLjg5My0xLjY0LS45MDItMy40MzMtMi41NDEtMi41NGwtLjI5Mi4xNTlhLjg3My44NzMgMCAwIDEtMS4yNTUtLjUyem0tMi42MzMuMjgzYy4yNDYtLjgzNSAxLjQyOC0uODM1IDEuNjc0IDBsLjA5NC4zMTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTMgMS4xMTVsLjI5MS0uMTZjLjc2NC0uNDE1IDEuNi40MiAxLjE4NCAxLjE4NWwtLjE1OS4yOTJhMS44NzMgMS44NzMgMCAwIDAgMS4xMTYgMi42OTJsLjMxOC4wOTRjLjgzNS4yNDYuODM1IDEuNDI4IDAgMS42NzRsLS4zMTkuMDk0YTEuODczIDEuODczIDAgMCAwLTEuMTE1IDIuNjkzbC4xNi4yOTFjLjQxNS43NjQtLjQyIDEuNi0xLjE4NSAxLjE4NGwtLjI5MS0uMTU5YTEuODczIDEuODczIDAgMCAwLTIuNjkzIDEuMTE2bC0uMDk0LjMxOGMtLjI0Ni44MzUtMS40MjguODM1LTEuNjc0IDBsLS4wOTQtLjMxOWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5Mi0xLjExNWwtLjI5Mi4xNmMtLjc2NC40MTUtMS42LS40Mi0xLjE4NC0xLjE4NWwuMTU5LS4yOTFBMS44NzMgMS44NzMgMCAwIDAgMS45NDUgOC45M2wtLjMxOS0uMDk0Yy0uODM1LS4yNDYtLjgzNS0xLjQyOCAwLTEuNjc0bC4zMTktLjA5NEExLjg3MyAxLjg3MyAwIDAgMCAzLjA2IDQuMzc3bC0uMTYtLjI5MmMtLjQxNS0uNzY0LjQyLTEuNiAxLjE4NS0xLjE4NGwuMjkyLjE1OWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5Mi0xLjExNXonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1nZWFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLWdlYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtZ2VhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1nZWFyOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLWdlYXI6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1nZWFyOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDQuNzU0YTMuMjQ2IDMuMjQ2IDAgMSAwIDAgNi40OTIgMy4yNDYgMy4yNDYgMCAwIDAgMC02LjQ5Mk01Ljc1NCA4YTIuMjQ2IDIuMjQ2IDAgMSAxIDQuNDkyIDAgMi4yNDYgMi4yNDYgMCAwIDEtNC40OTIgMCcvJTNFJTNDcGF0aCBkPSdNOS43OTYgMS4zNDNjLS41MjctMS43OS0zLjA2NS0xLjc5LTMuNTkyIDBsLS4wOTQuMzE5YS44NzMuODczIDAgMCAxLTEuMjU1LjUybC0uMjkyLS4xNmMtMS42NC0uODkyLTMuNDMzLjkwMi0yLjU0IDIuNTQxbC4xNTkuMjkyYS44NzMuODczIDAgMCAxLS41MiAxLjI1NWwtLjMxOS4wOTRjLTEuNzkuNTI3LTEuNzkgMy4wNjUgMCAzLjU5MmwuMzE5LjA5NGEuODczLjg3MyAwIDAgMSAuNTIgMS4yNTVsLS4xNi4yOTJjLS44OTIgMS42NC45MDEgMy40MzQgMi41NDEgMi41NGwuMjkyLS4xNTlhLjg3My44NzMgMCAwIDEgMS4yNTUuNTJsLjA5NC4zMTljLjUyNyAxLjc5IDMuMDY1IDEuNzkgMy41OTIgMGwuMDk0LS4zMTlhLjg3My44NzMgMCAwIDEgMS4yNTUtLjUybC4yOTIuMTZjMS42NC44OTMgMy40MzQtLjkwMiAyLjU0LTIuNTQxbC0uMTU5LS4yOTJhLjg3My44NzMgMCAwIDEgLjUyLTEuMjU1bC4zMTktLjA5NGMxLjc5LS41MjcgMS43OS0zLjA2NSAwLTMuNTkybC0uMzE5LS4wOTRhLjg3My44NzMgMCAwIDEtLjUyLTEuMjU1bC4xNi0uMjkyYy44OTMtMS42NC0uOTAyLTMuNDMzLTIuNTQxLTIuNTRsLS4yOTIuMTU5YS44NzMuODczIDAgMCAxLTEuMjU1LS41MnptLTIuNjMzLjI4M2MuMjQ2LS44MzUgMS40MjgtLjgzNSAxLjY3NCAwbC4wOTQuMzE5YTEuODczIDEuODczIDAgMCAwIDIuNjkzIDEuMTE1bC4yOTEtLjE2Yy43NjQtLjQxNSAxLjYuNDIgMS4xODQgMS4xODVsLS4xNTkuMjkyYTEuODczIDEuODczIDAgMCAwIDEuMTE2IDIuNjkybC4zMTguMDk0Yy44MzUuMjQ2LjgzNSAxLjQyOCAwIDEuNjc0bC0uMzE5LjA5NGExLjg3MyAxLjg3MyAwIDAgMC0xLjExNSAyLjY5M2wuMTYuMjkxYy40MTUuNzY0LS40MiAxLjYtMS4xODUgMS4xODRsLS4yOTEtLjE1OWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5MyAxLjExNmwtLjA5NC4zMThjLS4yNDYuODM1LTEuNDI4LjgzNS0xLjY3NCAwbC0uMDk0LS4zMTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTItMS4xMTVsLS4yOTIuMTZjLS43NjQuNDE1LTEuNi0uNDItMS4xODQtMS4xODVsLjE1OS0uMjkxQTEuODczIDEuODczIDAgMCAwIDEuOTQ1IDguOTNsLS4zMTktLjA5NGMtLjgzNS0uMjQ2LS44MzUtMS40MjggMC0xLjY3NGwuMzE5LS4wOTRBMS44NzMgMS44NzMgMCAwIDAgMy4wNiA0LjM3N2wtLjE2LS4yOTJjLS40MTUtLjc2NC40Mi0xLjYgMS4xODUtMS4xODRsLjI5Mi4xNTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTItMS4xMTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCA0Ljc1NGEzLjI0NiAzLjI0NiAwIDEgMCAwIDYuNDkyIDMuMjQ2IDMuMjQ2IDAgMCAwIDAtNi40OTJNNS43NTQgOGEyLjI0NiAyLjI0NiAwIDEgMSA0LjQ5MiAwIDIuMjQ2IDIuMjQ2IDAgMCAxLTQuNDkyIDAnLyUzRSUzQ3BhdGggZD0nTTkuNzk2IDEuMzQzYy0uNTI3LTEuNzktMy4wNjUtMS43OS0zLjU5MiAwbC0uMDk0LjMxOWEuODczLjg3MyAwIDAgMS0xLjI1NS41MmwtLjI5Mi0uMTZjLTEuNjQtLjg5Mi0zLjQzMy45MDItMi41NCAyLjU0MWwuMTU5LjI5MmEuODczLjg3MyAwIDAgMS0uNTIgMS4yNTVsLS4zMTkuMDk0Yy0xLjc5LjUyNy0xLjc5IDMuMDY1IDAgMy41OTJsLjMxOS4wOTRhLjg3My44NzMgMCAwIDEgLjUyIDEuMjU1bC0uMTYuMjkyYy0uODkyIDEuNjQuOTAxIDMuNDM0IDIuNTQxIDIuNTRsLjI5Mi0uMTU5YS44NzMuODczIDAgMCAxIDEuMjU1LjUybC4wOTQuMzE5Yy41MjcgMS43OSAzLjA2NSAxLjc5IDMuNTkyIDBsLjA5NC0uMzE5YS44NzMuODczIDAgMCAxIDEuMjU1LS41MmwuMjkyLjE2YzEuNjQuODkzIDMuNDM0LS45MDIgMi41NC0yLjU0MWwtLjE1OS0uMjkyYS44NzMuODczIDAgMCAxIC41Mi0xLjI1NWwuMzE5LS4wOTRjMS43OS0uNTI3IDEuNzktMy4wNjUgMC0zLjU5MmwtLjMxOS0uMDk0YS44NzMuODczIDAgMCAxLS41Mi0xLjI1NWwuMTYtLjI5MmMuODkzLTEuNjQtLjkwMi0zLjQzMy0yLjU0MS0yLjU0bC0uMjkyLjE1OWEuODczLjg3MyAwIDAgMS0xLjI1NS0uNTJ6bS0yLjYzMy4yODNjLjI0Ni0uODM1IDEuNDI4LS44MzUgMS42NzQgMGwuMDk0LjMxOWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5MyAxLjExNWwuMjkxLS4xNmMuNzY0LS40MTUgMS42LjQyIDEuMTg0IDEuMTg1bC0uMTU5LjI5MmExLjg3MyAxLjg3MyAwIDAgMCAxLjExNiAyLjY5MmwuMzE4LjA5NGMuODM1LjI0Ni44MzUgMS40MjggMCAxLjY3NGwtLjMxOS4wOTRhMS44NzMgMS44NzMgMCAwIDAtMS4xMTUgMi42OTNsLjE2LjI5MWMuNDE1Ljc2NC0uNDIgMS42LTEuMTg1IDEuMTg0bC0uMjkxLS4xNTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTMgMS4xMTZsLS4wOTQuMzE4Yy0uMjQ2LjgzNS0xLjQyOC44MzUtMS42NzQgMGwtLjA5NC0uMzE5YTEuODczIDEuODczIDAgMCAwLTIuNjkyLTEuMTE1bC0uMjkyLjE2Yy0uNzY0LjQxNS0xLjYtLjQyLTEuMTg0LTEuMTg1bC4xNTktLjI5MUExLjg3MyAxLjg3MyAwIDAgMCAxLjk0NSA4LjkzbC0uMzE5LS4wOTRjLS44MzUtLjI0Ni0uODM1LTEuNDI4IDAtMS42NzRsLjMxOS0uMDk0QTEuODczIDEuODczIDAgMCAwIDMuMDYgNC4zNzdsLS4xNi0uMjkyYy0uNDE1LS43NjQuNDItMS42IDEuMTg1LTEuMTg0bC4yOTIuMTU5YTEuODczIDEuODczIDAgMCAwIDIuNjkyLTEuMTE1eicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWdlYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtZ2VhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1nZWFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWdlYXI6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtZ2VhcjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LWdlYXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggNC43NTRhMy4yNDYgMy4yNDYgMCAxIDAgMCA2LjQ5MiAzLjI0NiAzLjI0NiAwIDAgMCAwLTYuNDkyTTUuNzU0IDhhMi4yNDYgMi4yNDYgMCAxIDEgNC40OTIgMCAyLjI0NiAyLjI0NiAwIDAgMS00LjQ5MiAwJy8lM0UlM0NwYXRoIGQ9J005Ljc5NiAxLjM0M2MtLjUyNy0xLjc5LTMuMDY1LTEuNzktMy41OTIgMGwtLjA5NC4zMTlhLjg3My44NzMgMCAwIDEtMS4yNTUuNTJsLS4yOTItLjE2Yy0xLjY0LS44OTItMy40MzMuOTAyLTIuNTQgMi41NDFsLjE1OS4yOTJhLjg3My44NzMgMCAwIDEtLjUyIDEuMjU1bC0uMzE5LjA5NGMtMS43OS41MjctMS43OSAzLjA2NSAwIDMuNTkybC4zMTkuMDk0YS44NzMuODczIDAgMCAxIC41MiAxLjI1NWwtLjE2LjI5MmMtLjg5MiAxLjY0LjkwMSAzLjQzNCAyLjU0MSAyLjU0bC4yOTItLjE1OWEuODczLjg3MyAwIDAgMSAxLjI1NS41MmwuMDk0LjMxOWMuNTI3IDEuNzkgMy4wNjUgMS43OSAzLjU5MiAwbC4wOTQtLjMxOWEuODczLjg3MyAwIDAgMSAxLjI1NS0uNTJsLjI5Mi4xNmMxLjY0Ljg5MyAzLjQzNC0uOTAyIDIuNTQtMi41NDFsLS4xNTktLjI5MmEuODczLjg3MyAwIDAgMSAuNTItMS4yNTVsLjMxOS0uMDk0YzEuNzktLjUyNyAxLjc5LTMuMDY1IDAtMy41OTJsLS4zMTktLjA5NGEuODczLjg3MyAwIDAgMS0uNTItMS4yNTVsLjE2LS4yOTJjLjg5My0xLjY0LS45MDItMy40MzMtMi41NDEtMi41NGwtLjI5Mi4xNTlhLjg3My44NzMgMCAwIDEtMS4yNTUtLjUyem0tMi42MzMuMjgzYy4yNDYtLjgzNSAxLjQyOC0uODM1IDEuNjc0IDBsLjA5NC4zMTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTMgMS4xMTVsLjI5MS0uMTZjLjc2NC0uNDE1IDEuNi40MiAxLjE4NCAxLjE4NWwtLjE1OS4yOTJhMS44NzMgMS44NzMgMCAwIDAgMS4xMTYgMi42OTJsLjMxOC4wOTRjLjgzNS4yNDYuODM1IDEuNDI4IDAgMS42NzRsLS4zMTkuMDk0YTEuODczIDEuODczIDAgMCAwLTEuMTE1IDIuNjkzbC4xNi4yOTFjLjQxNS43NjQtLjQyIDEuNi0xLjE4NSAxLjE4NGwtLjI5MS0uMTU5YTEuODczIDEuODczIDAgMCAwLTIuNjkzIDEuMTE2bC0uMDk0LjMxOGMtLjI0Ni44MzUtMS40MjguODM1LTEuNjc0IDBsLS4wOTQtLjMxOWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5Mi0xLjExNWwtLjI5Mi4xNmMtLjc2NC40MTUtMS42LS40Mi0xLjE4NC0xLjE4NWwuMTU5LS4yOTFBMS44NzMgMS44NzMgMCAwIDAgMS45NDUgOC45M2wtLjMxOS0uMDk0Yy0uODM1LS4yNDYtLjgzNS0xLjQyOCAwLTEuNjc0bC4zMTktLjA5NEExLjg3MyAxLjg3MyAwIDAgMCAzLjA2IDQuMzc3bC0uMTYtLjI5MmMtLjQxNS0uNzY0LjQyLTEuNiAxLjE4NS0xLjE4NGwuMjkyLjE1OWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5Mi0xLjExNXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDQuNzU0YTMuMjQ2IDMuMjQ2IDAgMSAwIDAgNi40OTIgMy4yNDYgMy4yNDYgMCAwIDAgMC02LjQ5Mk01Ljc1NCA4YTIuMjQ2IDIuMjQ2IDAgMSAxIDQuNDkyIDAgMi4yNDYgMi4yNDYgMCAwIDEtNC40OTIgMCcvJTNFJTNDcGF0aCBkPSdNOS43OTYgMS4zNDNjLS41MjctMS43OS0zLjA2NS0xLjc5LTMuNTkyIDBsLS4wOTQuMzE5YS44NzMuODczIDAgMCAxLTEuMjU1LjUybC0uMjkyLS4xNmMtMS42NC0uODkyLTMuNDMzLjkwMi0yLjU0IDIuNTQxbC4xNTkuMjkyYS44NzMuODczIDAgMCAxLS41MiAxLjI1NWwtLjMxOS4wOTRjLTEuNzkuNTI3LTEuNzkgMy4wNjUgMCAzLjU5MmwuMzE5LjA5NGEuODczLjg3MyAwIDAgMSAuNTIgMS4yNTVsLS4xNi4yOTJjLS44OTIgMS42NC45MDEgMy40MzQgMi41NDEgMi41NGwuMjkyLS4xNTlhLjg3My44NzMgMCAwIDEgMS4yNTUuNTJsLjA5NC4zMTljLjUyNyAxLjc5IDMuMDY1IDEuNzkgMy41OTIgMGwuMDk0LS4zMTlhLjg3My44NzMgMCAwIDEgMS4yNTUtLjUybC4yOTIuMTZjMS42NC44OTMgMy40MzQtLjkwMiAyLjU0LTIuNTQxbC0uMTU5LS4yOTJhLjg3My44NzMgMCAwIDEgLjUyLTEuMjU1bC4zMTktLjA5NGMxLjc5LS41MjcgMS43OS0zLjA2NSAwLTMuNTkybC0uMzE5LS4wOTRhLjg3My44NzMgMCAwIDEtLjUyLTEuMjU1bC4xNi0uMjkyYy44OTMtMS42NC0uOTAyLTMuNDMzLTIuNTQxLTIuNTRsLS4yOTIuMTU5YS44NzMuODczIDAgMCAxLTEuMjU1LS41MnptLTIuNjMzLjI4M2MuMjQ2LS44MzUgMS40MjgtLjgzNSAxLjY3NCAwbC4wOTQuMzE5YTEuODczIDEuODczIDAgMCAwIDIuNjkzIDEuMTE1bC4yOTEtLjE2Yy43NjQtLjQxNSAxLjYuNDIgMS4xODQgMS4xODVsLS4xNTkuMjkyYTEuODczIDEuODczIDAgMCAwIDEuMTE2IDIuNjkybC4zMTguMDk0Yy44MzUuMjQ2LjgzNSAxLjQyOCAwIDEuNjc0bC0uMzE5LjA5NGExLjg3MyAxLjg3MyAwIDAgMC0xLjExNSAyLjY5M2wuMTYuMjkxYy40MTUuNzY0LS40MiAxLjYtMS4xODUgMS4xODRsLS4yOTEtLjE1OWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5MyAxLjExNmwtLjA5NC4zMThjLS4yNDYuODM1LTEuNDI4LjgzNS0xLjY3NCAwbC0uMDk0LS4zMTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTItMS4xMTVsLS4yOTIuMTZjLS43NjQuNDE1LTEuNi0uNDItMS4xODQtMS4xODVsLjE1OS0uMjkxQTEuODczIDEuODczIDAgMCAwIDEuOTQ1IDguOTNsLS4zMTktLjA5NGMtLjgzNS0uMjQ2LS44MzUtMS40MjggMC0xLjY3NGwuMzE5LS4wOTRBMS44NzMgMS44NzMgMCAwIDAgMy4wNiA0LjM3N2wtLjE2LS4yOTJjLS40MTUtLjc2NC40Mi0xLjYgMS4xODUtMS4xODRsLjI5Mi4xNTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTItMS4xMTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtaG9tZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1ob21lOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLWhvbWU6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtaG9tZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1ob21lOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtaG9tZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOC43MDcgMS41YTEgMSAwIDAgMC0xLjQxNCAwTC42NDYgOC4xNDZhLjUuNSAwIDAgMCAuNzA4LjcwOEwyIDguMjA3VjEzLjVBMS41IDEuNSAwIDAgMCAzLjUgMTVoOWExLjUgMS41IDAgMCAwIDEuNS0xLjVWOC4yMDdsLjY0Ni42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMMTMgNS43OTNWMi41YS41LjUgMCAwIDAtLjUtLjVoLTFhLjUuNSAwIDAgMC0uNS41djEuMjkzek0xMyA3LjIwN1YxMy41YS41LjUgMCAwIDEtLjUuNWgtOWEuNS41IDAgMCAxLS41LS41VjcuMjA3bDUtNXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004LjcwNyAxLjVhMSAxIDAgMCAwLTEuNDE0IDBMLjY0NiA4LjE0NmEuNS41IDAgMCAwIC43MDguNzA4TDIgOC4yMDdWMTMuNUExLjUgMS41IDAgMCAwIDMuNSAxNWg5YTEuNSAxLjUgMCAwIDAgMS41LTEuNVY4LjIwN2wuNjQ2LjY0N2EuNS41IDAgMCAwIC43MDgtLjcwOEwxMyA1Ljc5M1YyLjVhLjUuNSAwIDAgMC0uNS0uNWgtMWEuNS41IDAgMCAwLS41LjV2MS4yOTN6TTEzIDcuMjA3VjEzLjVhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAwIDEtLjUtLjVWNy4yMDdsNS01eicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLWhvbWU6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItaG9tZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1ob21lOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLWhvbWU6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItaG9tZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLWhvbWU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTguNzA3IDEuNWExIDEgMCAwIDAtMS40MTQgMEwuNjQ2IDguMTQ2YS41LjUgMCAwIDAgLjcwOC43MDhMMiA4LjIwN1YxMy41QTEuNSAxLjUgMCAwIDAgMy41IDE1aDlhMS41IDEuNSAwIDAgMCAxLjUtMS41VjguMjA3bC42NDYuNjQ3YS41LjUgMCAwIDAgLjcwOC0uNzA4TDEzIDUuNzkzVjIuNWEuNS41IDAgMCAwLS41LS41aC0xYS41LjUgMCAwIDAtLjUuNXYxLjI5M3pNMTMgNy4yMDdWMTMuNWEuNS41IDAgMCAxLS41LjVoLTlhLjUuNSAwIDAgMS0uNS0uNVY3LjIwN2w1LTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOC43MDcgMS41YTEgMSAwIDAgMC0xLjQxNCAwTC42NDYgOC4xNDZhLjUuNSAwIDAgMCAuNzA4LjcwOEwyIDguMjA3VjEzLjVBMS41IDEuNSAwIDAgMCAzLjUgMTVoOWExLjUgMS41IDAgMCAwIDEuNS0xLjVWOC4yMDdsLjY0Ni42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMMTMgNS43OTNWMi41YS41LjUgMCAwIDAtLjUtLjVoLTFhLjUuNSAwIDAgMC0uNS41djEuMjkzek0xMyA3LjIwN1YxMy41YS41LjUgMCAwIDEtLjUuNWgtOWEuNS41IDAgMCAxLS41LS41VjcuMjA3bDUtNXonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1ob21lOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLWhvbWU6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtaG9tZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1ob21lOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLWhvbWU6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1ob21lOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004LjcwNyAxLjVhMSAxIDAgMCAwLTEuNDE0IDBMLjY0NiA4LjE0NmEuNS41IDAgMCAwIC43MDguNzA4TDIgOC4yMDdWMTMuNUExLjUgMS41IDAgMCAwIDMuNSAxNWg5YTEuNSAxLjUgMCAwIDAgMS41LTEuNVY4LjIwN2wuNjQ2LjY0N2EuNS41IDAgMCAwIC43MDgtLjcwOEwxMyA1Ljc5M1YyLjVhLjUuNSAwIDAgMC0uNS0uNWgtMWEuNS41IDAgMCAwLS41LjV2MS4yOTN6TTEzIDcuMjA3VjEzLjVhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAwIDEtLjUtLjVWNy4yMDdsNS01eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTguNzA3IDEuNWExIDEgMCAwIDAtMS40MTQgMEwuNjQ2IDguMTQ2YS41LjUgMCAwIDAgLjcwOC43MDhMMiA4LjIwN1YxMy41QTEuNSAxLjUgMCAwIDAgMy41IDE1aDlhMS41IDEuNSAwIDAgMCAxLjUtMS41VjguMjA3bC42NDYuNjQ3YS41LjUgMCAwIDAgLjcwOC0uNzA4TDEzIDUuNzkzVjIuNWEuNS41IDAgMCAwLS41LS41aC0xYS41LjUgMCAwIDAtLjUuNXYxLjI5M3pNMTMgNy4yMDdWMTMuNWEuNS41IDAgMCAxLS41LjVoLTlhLjUuNSAwIDAgMS0uNS0uNVY3LjIwN2w1LTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtaG9tZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1ob21lOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LWhvbWU6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtaG9tZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1ob21lOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtaG9tZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOC43MDcgMS41YTEgMSAwIDAgMC0xLjQxNCAwTC42NDYgOC4xNDZhLjUuNSAwIDAgMCAuNzA4LjcwOEwyIDguMjA3VjEzLjVBMS41IDEuNSAwIDAgMCAzLjUgMTVoOWExLjUgMS41IDAgMCAwIDEuNS0xLjVWOC4yMDdsLjY0Ni42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMMTMgNS43OTNWMi41YS41LjUgMCAwIDAtLjUtLjVoLTFhLjUuNSAwIDAgMC0uNS41djEuMjkzek0xMyA3LjIwN1YxMy41YS41LjUgMCAwIDEtLjUuNWgtOWEuNS41IDAgMCAxLS41LS41VjcuMjA3bDUtNXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004LjcwNyAxLjVhMSAxIDAgMCAwLTEuNDE0IDBMLjY0NiA4LjE0NmEuNS41IDAgMCAwIC43MDguNzA4TDIgOC4yMDdWMTMuNUExLjUgMS41IDAgMCAwIDMuNSAxNWg5YTEuNSAxLjUgMCAwIDAgMS41LTEuNVY4LjIwN2wuNjQ2LjY0N2EuNS41IDAgMCAwIC43MDgtLjcwOEwxMyA1Ljc5M1YyLjVhLjUuNSAwIDAgMC0uNS0uNWgtMWEuNS41IDAgMCAwLS41LjV2MS4yOTN6TTEzIDcuMjA3VjEzLjVhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAwIDEtLjUtLjVWNy4yMDdsNS01eicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNOCAzYTUgNSAwIDEgMS00LjU0NiAyLjkxNC41LjUgMCAwIDAtLjkwOC0uNDE3QTYgNiAwIDEgMCA4IDJ6Jy8lM0UlM0NwYXRoIGQ9J004IDQuNDY2Vi41MzRhLjI1LjI1IDAgMCAwLS40MS0uMTkyTDUuMjMgMi4zMDhhLjI1LjI1IDAgMCAwIDAgLjM4NGwyLjM2IDEuOTY2QS4yNS4yNSAwIDAgMCA4IDQuNDY2Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J004IDNhNSA1IDAgMSAxLTQuNTQ2IDIuOTE0LjUuNSAwIDAgMC0uOTA4LS40MTdBNiA2IDAgMSAwIDggMnonLyUzRSUzQ3BhdGggZD0nTTggNC40NjZWLjUzNGEuMjUuMjUgMCAwIDAtLjQxLS4xOTJMNS4yMyAyLjMwOGEuMjUuMjUgMCAwIDAgMCAuMzg0bDIuMzYgMS45NjZBLjI1LjI1IDAgMCAwIDggNC40NjYnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTggM2E1IDUgMCAxIDEtNC41NDYgMi45MTQuNS41IDAgMCAwLS45MDgtLjQxN0E2IDYgMCAxIDAgOCAyeicvJTNFJTNDcGF0aCBkPSdNOCA0LjQ2NlYuNTM0YS4yNS4yNSAwIDAgMC0uNDEtLjE5Mkw1LjIzIDIuMzA4YS4yNS4yNSAwIDAgMCAwIC4zODRsMi4zNiAxLjk2NkEuMjUuMjUgMCAwIDAgOCA0LjQ2NicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNOCAzYTUgNSAwIDEgMS00LjU0NiAyLjkxNC41LjUgMCAwIDAtLjkwOC0uNDE3QTYgNiAwIDEgMCA4IDJ6Jy8lM0UlM0NwYXRoIGQ9J004IDQuNDY2Vi41MzRhLjI1LjI1IDAgMCAwLS40MS0uMTkyTDUuMjMgMi4zMDhhLjI1LjI1IDAgMCAwIDAgLjM4NGwyLjM2IDEuOTY2QS4yNS4yNSAwIDAgMCA4IDQuNDY2Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWljb24tdGVydGlhcnktMy1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J004IDNhNSA1IDAgMSAxLTQuNTQ2IDIuOTE0LjUuNSAwIDAgMC0uOTA4LS40MTdBNiA2IDAgMSAwIDggMnonLyUzRSUzQ3BhdGggZD0nTTggNC40NjZWLjUzNGEuMjUuMjUgMCAwIDAtLjQxLS4xOTJMNS4yMyAyLjMwOGEuMjUuMjUgMCAwIDAgMCAuMzg0bDIuMzYgMS45NjZBLjI1LjI1IDAgMCAwIDggNC40NjYnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTggM2E1IDUgMCAxIDEtNC41NDYgMi45MTQuNS41IDAgMCAwLS45MDgtLjQxN0E2IDYgMCAxIDAgOCAyeicvJTNFJTNDcGF0aCBkPSdNOCA0LjQ2NlYuNTM0YS4yNS4yNSAwIDAgMC0uNDEtLjE5Mkw1LjIzIDIuMzA4YS4yNS4yNSAwIDAgMCAwIC4zODRsMi4zNiAxLjk2NkEuMjUuMjUgMCAwIDAgOCA0LjQ2NicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWNvdW50ZXJjbG9ja3dpc2U6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNOCAzYTUgNSAwIDEgMS00LjU0NiAyLjkxNC41LjUgMCAwIDAtLjkwOC0uNDE3QTYgNiAwIDEgMCA4IDJ6Jy8lM0UlM0NwYXRoIGQ9J004IDQuNDY2Vi41MzRhLjI1LjI1IDAgMCAwLS40MS0uMTkyTDUuMjMgMi4zMDhhLjI1LjI1IDAgMCAwIDAgLjM4NGwyLjM2IDEuOTY2QS4yNS4yNSAwIDAgMCA4IDQuNDY2Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J004IDNhNSA1IDAgMSAxLTQuNTQ2IDIuOTE0LjUuNSAwIDAgMC0uOTA4LS40MTdBNiA2IDAgMSAwIDggMnonLyUzRSUzQ3BhdGggZD0nTTggNC40NjZWLjUzNGEuMjUuMjUgMCAwIDAtLjQxLS4xOTJMNS4yMyAyLjMwOGEuMjUuMjUgMCAwIDAgMCAuMzg0bDIuMzYgMS45NjZBLjI1LjI1IDAgMCAwIDggNC40NjYnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXN1Y2Nlc3MtMjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKX0ubW9uc3Rlci1pY29uLXdhcm5pbmctMjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm1vbnN0ZXItaWNvbi1lcnJvci0yOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKX0ubW9uc3Rlci1pY29uLWVycm9yLTI6YmVmb3JlLC5tb25zdGVyLWljb24tc3VjY2Vzcy0yOmJlZm9yZSwubW9uc3Rlci1pY29uLXdhcm5pbmctMjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tc3VjY2Vzcy0zOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24td2FybmluZy0zOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKX0ubW9uc3Rlci1pY29uLWVycm9yLTM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItMzpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zdWNjZXNzLTM6YmVmb3JlLC5tb25zdGVyLWljb24td2FybmluZy0zOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1zdWNjZXNzLTE6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWNoZWNrLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1jaGVjay1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm1vbnN0ZXItaWNvbi13YXJuaW5nLTE6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWV4Y2xhbWF0aW9uLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWV4Y2xhbWF0aW9uLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItMTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS14LWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmkteC1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItMTpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zdWNjZXNzLTE6YmVmb3JlLC5tb25zdGVyLWljb24td2FybmluZy0xOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1zdWNjZXNzLTQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWNoZWNrLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1jaGVjay1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm1vbnN0ZXItaWNvbi13YXJuaW5nLTQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWV4Y2xhbWF0aW9uLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWV4Y2xhbWF0aW9uLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItNDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS14LWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmkteC1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItNDpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zdWNjZXNzLTQ6YmVmb3JlLC5tb25zdGVyLWljb24td2FybmluZy00OmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19YSxhOmFjdGl2ZSxhOmZvY3VzLGE6aG92ZXIsYTpsaW5rLGE6dmlzaXRlZHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtvdXRsaW5lOm5vbmU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dHJhbnNpdGlvbjpjb2xvciAuM3MgZWFzZS1pbi1vdXQsdGV4dC1kZWNvcmF0aW9uLWNvbG9yIC4zcyBlYXNlLWluLW91dH1hOmFjdGl2ZSxhOmZvY3VzLGE6aG92ZXJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEgKTt0ZXh0LWRlY29yYXRpb24tdGhpY2tuZXNzOjFweDt0ZXh0LXVuZGVybGluZS1vZmZzZXQ6MnB4fWE6Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpO291dGxpbmUtb2Zmc2V0OjJweH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspe2EsYTphY3RpdmUsYTpmb2N1cyxhOmhvdmVyLGE6bGluayxhOnZpc2l0ZWR7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1hbWJlci0yKX1hOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX19Lm1vbnN0ZXItc2tlbGV0b24tY29sLTEwey0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXNrZWxldG9uLWhlaWdodDoxMDAlOy0tbW9uc3Rlci1za2VsZXRvbi13aWR0aDoxMCU7LS1tb25zdGVyLXNrZWxldG9uOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKSAwLHRyYW5zcGFyZW50IHZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpKX0ubW9uc3Rlci1za2VsZXRvbi1jb2wtMTAsLm1vbnN0ZXItc2tlbGV0b24tY29sLTIwe2JhY2tncm91bmQtaW1hZ2U6dmFyKC0tbW9uc3Rlci1za2VsZXRvbik7YmFja2dyb3VuZC1wb3NpdGlvbjowIDA7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTp2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSB2YXIoLS1tb25zdGVyLXNrZWxldG9uLWhlaWdodCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcik7bWluLWhlaWdodDoxcHh9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTIwey0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXNrZWxldG9uLWhlaWdodDoxMDAlOy0tbW9uc3Rlci1za2VsZXRvbi13aWR0aDoyMCU7LS1tb25zdGVyLXNrZWxldG9uOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKSAwLHRyYW5zcGFyZW50IHZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpKX0ubW9uc3Rlci1za2VsZXRvbi1jb2wtMzB7LS1tb25zdGVyLXNrZWxldG9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0OjEwMCU7LS1tb25zdGVyLXNrZWxldG9uLXdpZHRoOjMwJTstLW1vbnN0ZXItc2tlbGV0b246bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpIDAsdHJhbnNwYXJlbnQgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkpfS5tb25zdGVyLXNrZWxldG9uLWNvbC0zMCwubW9uc3Rlci1za2VsZXRvbi1jb2wtNDB7YmFja2dyb3VuZC1pbWFnZTp2YXIoLS1tb25zdGVyLXNrZWxldG9uKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOnZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpIHZhcigtLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0KTtjb2xvcjp2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKTttaW4taGVpZ2h0OjFweH0ubW9uc3Rlci1za2VsZXRvbi1jb2wtNDB7LS1tb25zdGVyLXNrZWxldG9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0OjEwMCU7LS1tb25zdGVyLXNrZWxldG9uLXdpZHRoOjQwJTstLW1vbnN0ZXItc2tlbGV0b246bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpIDAsdHJhbnNwYXJlbnQgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkpfS5tb25zdGVyLXNrZWxldG9uLWNvbC01MHstLW1vbnN0ZXItc2tlbGV0b24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1za2VsZXRvbi1oZWlnaHQ6MTAwJTstLW1vbnN0ZXItc2tlbGV0b24td2lkdGg6NTAlOy0tbW9uc3Rlci1za2VsZXRvbjpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcikgMCx0cmFuc3BhcmVudCB2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSl9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTUwLC5tb25zdGVyLXNrZWxldG9uLWNvbC02MHtiYWNrZ3JvdW5kLWltYWdlOnZhcigtLW1vbnN0ZXItc2tlbGV0b24pO2JhY2tncm91bmQtcG9zaXRpb246MCAwO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6dmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi1oZWlnaHQpO2NvbG9yOnZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpO21pbi1oZWlnaHQ6MXB4fS5tb25zdGVyLXNrZWxldG9uLWNvbC02MHstLW1vbnN0ZXItc2tlbGV0b24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1za2VsZXRvbi1oZWlnaHQ6MTAwJTstLW1vbnN0ZXItc2tlbGV0b24td2lkdGg6NjAlOy0tbW9uc3Rlci1za2VsZXRvbjpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcikgMCx0cmFuc3BhcmVudCB2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSl9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTcwey0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXNrZWxldG9uLWhlaWdodDoxMDAlOy0tbW9uc3Rlci1za2VsZXRvbi13aWR0aDo3MCU7LS1tb25zdGVyLXNrZWxldG9uOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKSAwLHRyYW5zcGFyZW50IHZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpKX0ubW9uc3Rlci1za2VsZXRvbi1jb2wtNzAsLm1vbnN0ZXItc2tlbGV0b24tY29sLTgwe2JhY2tncm91bmQtaW1hZ2U6dmFyKC0tbW9uc3Rlci1za2VsZXRvbik7YmFja2dyb3VuZC1wb3NpdGlvbjowIDA7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTp2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSB2YXIoLS1tb25zdGVyLXNrZWxldG9uLWhlaWdodCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcik7bWluLWhlaWdodDoxcHh9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTgwey0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXNrZWxldG9uLWhlaWdodDoxMDAlOy0tbW9uc3Rlci1za2VsZXRvbi13aWR0aDo4MCU7LS1tb25zdGVyLXNrZWxldG9uOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKSAwLHRyYW5zcGFyZW50IHZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpKX0ubW9uc3Rlci1za2VsZXRvbi1jb2wtOTB7LS1tb25zdGVyLXNrZWxldG9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0OjEwMCU7LS1tb25zdGVyLXNrZWxldG9uLXdpZHRoOjkwJTstLW1vbnN0ZXItc2tlbGV0b246bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpIDAsdHJhbnNwYXJlbnQgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkpfS5tb25zdGVyLXNrZWxldG9uLWNvbC0xMDAsLm1vbnN0ZXItc2tlbGV0b24tY29sLTkwe2JhY2tncm91bmQtaW1hZ2U6dmFyKC0tbW9uc3Rlci1za2VsZXRvbik7YmFja2dyb3VuZC1wb3NpdGlvbjowIDA7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTp2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSB2YXIoLS1tb25zdGVyLXNrZWxldG9uLWhlaWdodCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcik7bWluLWhlaWdodDoxcHh9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTEwMHstLW1vbnN0ZXItc2tlbGV0b24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1za2VsZXRvbi1oZWlnaHQ6MTAwJTstLW1vbnN0ZXItc2tlbGV0b24td2lkdGg6MTAwJTstLW1vbnN0ZXItc2tlbGV0b246bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpIDAsdHJhbnNwYXJlbnQgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkpfS5tb25zdGVyLXNrZWxldG9uLWFuaW1hdGVke2FuaW1hdGlvbi1kdXJhdGlvbjoyLjI1czthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGU7YW5pbWF0aW9uLW5hbWU6c2hpbW1lcjthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmxpbmVhcjtib3JkZXItcmFkaXVzOjRweH1Aa2V5ZnJhbWVzIHNoaW1tZXJ7MCV7ZmlsdGVyOmJyaWdodG5lc3MoMSl9NTAle2ZpbHRlcjpicmlnaHRuZXNzKDEuNSl9dG97ZmlsdGVyOmJyaWdodG5lc3MoMSl9fSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBkaWZmIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGlmZi5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9vYnNlcnZlci5tanNcIjtcblxuZXhwb3J0IHsgaGFuZGxlRGF0YVNvdXJjZUNoYW5nZXMsIGRhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGFuZGxlRGF0YVNvdXJjZUNoYW5nZXMoKSB7XG5cdGlmICghdGhpc1tkYXRhc291cmNlTGlua2VkRWxlbWVudFN5bWJvbF0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRsZXQgZGF0YSA9IHRoaXNbZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xdLmRhdGE7XG5cblx0Y29uc3QgYWN0dWFsRGF0YSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0T3B0aW9uKFwiZGF0YVwiKSk7XG5cdGNvbnN0IGFjdHVhbERhdGFBc09iaiA9IEpTT04ucGFyc2UoYWN0dWFsRGF0YSk7XG5cblx0Y29uc3QgcGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy5kYXRhXCIpO1xuXHRpZiAocGF0aCkge1xuXHRcdGRhdGEgPSBuZXcgUGF0aGZpbmRlcihkYXRhKS5nZXRWaWEocGF0aCk7XG5cdH1cblxuXHRpZiAoaXNPYmplY3QoZGF0YSkpIHtcblx0XHRjb25zdCB0bXAgPSBbXTtcblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0dG1wLnB1c2goZGF0YVtrZXldKTtcblx0XHR9XG5cdFx0ZGF0YSA9IHRtcDtcblx0fVxuXG5cdGNvbnN0IGluZGV4ID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLmluZGV4XCIpO1xuXHRpZiAoaW5kZXggIT09IHVuZGVmaW5lZCAmJiBpbmRleCAhPT0gbnVsbCkge1xuXHRcdGRhdGEgPSBkYXRhPy5baW5kZXhdO1xuXHR9XG5cblx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCB8fCBkYXRhID09PSBudWxsKSB7XG5cdFx0ZGF0YSA9IFtdO1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0ID0gZGlmZihkYXRhLCBhY3R1YWxEYXRhQXNPYmopO1xuXHRpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHF1ZXVlTWljcm90YXNrKCgpID0+IHtcblx0XHR0aGlzLnNldE9wdGlvbihcImRhdGFcIiwgZGF0YSk7XG5cdH0pO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEZvcm1TdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBGb3JtU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdEZvcm1TdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGZvcm0geyBcbmlucHV0LG1ldGVyLHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aCk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxMDAlO21hcmdpbjowO291dGxpbmU6bm9uZX1pbnB1dCxzZWxlY3QsdGV4dGFyZWF7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O3BhZGRpbmc6LjRyZW0gLjZyZW19dGV4dGFyZWF7bWluLWhlaWdodDo2cmVtO3Jlc2l6ZTp2ZXJ0aWNhbH1pbnB1dFt0eXBlPWNvbG9yXXtoZWlnaHQ6MnJlbTttYXJnaW46MDtwYWRkaW5nOi4xcmVtO3dpZHRoOjJyZW19aW5wdXQ6aG92ZXI6bm90KFt0eXBlPXJhZGlvXSk6bm90KFt0eXBlPWNoZWNrYm94XSk6bm90KFt0eXBlPXJhbmdlXSksc2VsZWN0OmhvdmVyLHRleHRhcmVhOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9aW5wdXQ6Zm9jdXMsc2VsZWN0OmZvY3VzLHRleHRhcmVhOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDozcHh9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sLCBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uLy4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IGdldExpbmtlZE9iamVjdHMsIGhhc09iamVjdExpbmsgfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9EQVRBU09VUkNFX1NFTEVDVE9SLFxuXHRBVFRSSUJVVEVfREFUQVRBQkxFX0lOREVYLFxufSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4vZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IERhdGFzZXRTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9kYXRhc2V0Lm1qc1wiO1xuaW1wb3J0IHtcblx0aGFuZGxlRGF0YVNvdXJjZUNoYW5nZXMsXG5cdGRhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sLFxufSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuaW1wb3J0IHsgRm9ybVN0eWxlU2hlZXQgfSBmcm9tIFwiLi4vc3R5bGVzaGVldC9mb3JtLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhU2V0IH07XG5cbi8qKlxuICogVGhlIGRhdGEgc2V0IGNvbXBvbmVudCBpcyB1c2VkIHRvIHNob3cgdGhlIGRhdGEgb2YgYSBkYXRhIHNvdXJjZS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2RhdGFzZXQucG5nXCI+XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1kYXRhc2V0IC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWRhdGFzZXQnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1kYXRhc2V0PjwvbW9uc3Rlci1kYXRhc2V0PlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCAnQHNjaHVrYWkvY29tcG9uZW50LWRhdGF0YWJsZS9zb3VyY2UvZGF0YXNldC5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1kYXRhc2V0Jyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgZGF0YXNldC5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIERhdGFTZXRcbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBkYXRhIHNldFxuICovXG5jbGFzcyBEYXRhU2V0IGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2RhdGFzZXRAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hpY2ggYXR0cmlidXRlcyBhcmUgdG8gYmUgbW9uaXRvcmVkIGJ5IGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKWAuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ1tdfVxuXHQgKiBAc2luY2UgMS4xNS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzO1xuXHRcdGF0dHJpYnV0ZXMucHVzaChBVFRSSUJVVEVfREFUQVRBQkxFX0lOREVYKTtcblx0XHRyZXR1cm4gYXR0cmlidXRlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGRhdGFzb3VyY2UgVGhlIGRhdGFzb3VyY2Vcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGRhdGFzb3VyY2Uuc2VsZWN0b3IgVGhlIHNlbGVjdG9yIG9mIHRoZSBkYXRhc291cmNlXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtYXBwaW5nIFRoZSBtYXBwaW5nXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtYXBwaW5nLmRhdGEgVGhlIGRhdGFcblx0ICogQHByb3BlcnR5IHtudW1iZXJ9IG1hcHBpbmcuaW5kZXggVGhlIGluZGV4XG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IGRhdGEgVGhlIGRhdGFcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRjb25zdCBvYmogPSBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXG5cdFx0XHRkYXRhc291cmNlOiB7XG5cdFx0XHRcdHNlbGVjdG9yOiBudWxsLFxuXHRcdFx0fSxcblxuXHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRkYXRhOiBcImRhdGFzZXRcIixcblx0XHRcdFx0aW5kZXg6IDAsXG5cdFx0XHR9LFxuXG5cdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogQHNpbmNlIDMuNzAuMFxuXHRcdFx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHRcdFx0ICovXG5cdFx0XHRcdHJlZnJlc2hPbk11dGF0aW9uOiB0cnVlLFxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBAc2luY2UgMy43MC4wXG5cdFx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHRcdCAqL1xuXHRcdFx0cmVmcmVzaE9uTXV0YXRpb246IHtcblx0XHRcdFx0c2VsZWN0b3I6IFwiaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWFcIixcblx0XHRcdH0sXG5cblx0XHRcdGRhdGE6IHt9LFxuXHRcdH0pO1xuXG5cdFx0dXBkYXRlT3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzLCBvYmopO1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWRhdGFzZXRcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGNyZWF0ZWQuXG5cdCAqIEBzaW5jZSAzLjcwLjBcblx0ICogQHJldHVybiB7RGF0YVNldH1cblx0ICovXG5cdHJlZnJlc2goKSB7XG5cdFx0Ly8gbWFrZXMgc3VyZSB0aGF0IGhhbmRsZURhdGFTb3VyY2VDaGFuZ2VzIGlzIGNhbGxlZFxuXHRcdHRoaXMuc2V0T3B0aW9uKFwiZGF0YVwiLCB7fSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRpZiAoIXRoaXNbZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJObyBkYXRhc291cmNlXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBpbnRlcm5hbFVwZGF0ZUNsb25lRGF0YSA9IHRoaXMuZ2V0SW50ZXJuYWxVcGRhdGVDbG9uZURhdGEoKTtcblx0XHRcdGlmICghaW50ZXJuYWxVcGRhdGVDbG9uZURhdGEpIHtcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIk5vIHVwZGF0ZSBkYXRhXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBpbnRlcm5hbERhdGEgPSBpbnRlcm5hbFVwZGF0ZUNsb25lRGF0YT8uW1wiZGF0YVwiXTtcblx0XHRcdGlmIChcblx0XHRcdFx0aW50ZXJuYWxEYXRhID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0aW50ZXJuYWxEYXRhID09PSBudWxsIHx8XG5cdFx0XHRcdGludGVybmFsRGF0YSA9PT0gXCJcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJObyBkYXRhXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSB0aGlzLmdldE9wdGlvbihcIm1hcHBpbmcuZGF0YVwiKTtcblx0XHRcdFx0Y29uc3QgaW5kZXggPSB0aGlzLmdldE9wdGlvbihcIm1hcHBpbmcuaW5kZXhcIik7XG5cblx0XHRcdFx0bGV0IHBhdGhXaXRoSW5kZXg7XG5cblx0XHRcdFx0aWYgKGlzU3RyaW5nKHBhdGgpICYmIHBhdGggIT09IFwiXCIpIHtcblx0XHRcdFx0XHRwYXRoV2l0aEluZGV4ID0gcGF0aCArIFwiLlwiICsgaW5kZXg7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGF0aFdpdGhJbmRleCA9IFN0cmluZyhpbmRleCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBkYXRhID0gdGhpc1tkYXRhc291cmNlTGlua2VkRWxlbWVudFN5bWJvbF0/LmRhdGE7XG5cdFx0XHRcdGlmICghZGF0YSkge1xuXHRcdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJObyBkYXRhXCIpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB1bnJlZiA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuXHRcdFx0XHRjb25zdCByZWYgPSBKU09OLnBhcnNlKHVucmVmKTtcblxuXHRcdFx0XHRuZXcgUGF0aGZpbmRlcihyZWYpLnNldFZpYShwYXRoV2l0aEluZGV4LCBpbnRlcm5hbERhdGEpO1xuXG5cdFx0XHRcdHRoaXNbZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xdLmRhdGEgPSByZWY7XG5cblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIGFzc2VtYmxpbmcgdGhlIGNvbXBvbmVudC5cblx0ICpcblx0ICogSXQgY2FsbHMgdGhlIHBhcmVudCdzIGFzc2VtYmxlIG1ldGhvZCBmaXJzdCwgdGhlbiBpbml0aWFsaXplcyBjb250cm9sIHJlZmVyZW5jZXMgYW5kIGV2ZW50IGhhbmRsZXJzLlxuXHQgKiBJZiB0aGUgYGRhdGFzb3VyY2Uuc2VsZWN0b3JgIG9wdGlvbiBpcyBwcm92aWRlZCBhbmQgaXMgYSBzdHJpbmcsIGl0IHNlYXJjaGVzIGZvciB0aGUgY29ycmVzcG9uZGluZ1xuXHQgKiBlbGVtZW50IGluIHRoZSBET00gdXNpbmcgdGhhdCBzZWxlY3Rvci5cblx0ICpcblx0ICogSWYgdGhlIHNlbGVjdG9yIG1hdGNoZXMgZXhhY3RseSBvbmUgZWxlbWVudCwgaXQgY2hlY2tzIGlmIHRoZSBlbGVtZW50IGlzIGFuIGluc3RhbmNlIG9mIHRoZSBgRGF0YXNvdXJjZWAgY2xhc3MuXG5cdCAqXG5cdCAqIElmIGl0IGlzLCB0aGUgY29tcG9uZW50J3MgYGRhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sYCBwcm9wZXJ0eSBpcyBzZXQgdG8gdGhlIGVsZW1lbnQsIGFuZCB0aGUgY29tcG9uZW50XG5cdCAqIGF0dGFjaGVzIGFuIG9ic2VydmVyIHRvIHRoZSBkYXRhc291cmNlJ3MgY2hhbmdlcy5cblx0ICpcblx0ICogVGhlIG9ic2VydmVyIGlzIGEgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgYGhhbmRsZURhdGFTb3VyY2VDaGFuZ2VzYCBtZXRob2QgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGNvbXBvbmVudC5cblx0ICogQWRkaXRpb25hbGx5LCB0aGUgY29tcG9uZW50IGF0dGFjaGVzIGFuIG9ic2VydmVyIHRvIGl0c2VsZiwgd2hpY2ggYWxzbyBjYWxscyB0aGUgYGhhbmRsZURhdGFTb3VyY2VDaGFuZ2VzYFxuXHQgKiBtZXRob2QgaW4gdGhlIGNvbXBvbmVudCdzIGNvbnRleHQuXG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXG5cdFx0aWYgKCF0aGlzW2RhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sXSkge1xuXHRcdFx0Y29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldE9wdGlvbihcImRhdGFzb3VyY2Uuc2VsZWN0b3JcIik7XG5cblx0XHRcdGlmIChpc1N0cmluZyhzZWxlY3RvcikpIHtcblx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyh0aGlzLCBzZWxlY3Rvcik7XG5cdFx0XHRcdGlmIChlbGVtZW50ID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIHNlbGVjdG9yIG11c3QgbWF0Y2ggZXhhY3RseSBvbmUgZWxlbWVudFwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBEYXRhc291cmNlKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgZWxlbWVudCBtdXN0IGJlIGEgZGF0YXNvdXJjZVwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXNbZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xdID0gZWxlbWVudDtcblx0XHRcdFx0ZWxlbWVudC5kYXRhc291cmNlLmF0dGFjaE9ic2VydmVyKFxuXHRcdFx0XHRcdG5ldyBPYnNlcnZlcihoYW5kbGVEYXRhU291cmNlQ2hhbmdlcy5iaW5kKHRoaXMpKSxcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBzZWxlY3RvciBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucmVmcmVzaE9uTXV0YXRpb25cIikgJiZcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwicmVmcmVzaE9uTXV0YXRpb24uc2VsZWN0b3JcIilcblx0XHQpIHtcblx0XHRcdGluaXRNdXRhdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4gW0NTU1N0eWxlU2hlZXRdXG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW0Zvcm1TdHlsZVNoZWV0LCBEYXRhc2V0U3R5bGVTaGVldF07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfREFUQVRBQkxFX0lOREVYXSA9ICgpID0+IHtcblx0XHRjb25zdCBpbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9EQVRBVEFCTEVfSU5ERVgpO1xuXHRcdGlmIChpbmRleCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJtYXBwaW5nLmluZGV4XCIsIHBhcnNlSW50KGluZGV4LCAxMCkpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlT3B0aW9uc0Zyb21Bcmd1bWVudHMob3B0aW9ucykge1xuXHRjb25zdCBpbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9EQVRBVEFCTEVfSU5ERVgpO1xuXG5cdGlmIChpbmRleCAhPT0gbnVsbCAmJiBpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b3B0aW9ucy5tYXBwaW5nLmluZGV4ID0gcGFyc2VJbnQoaW5kZXgsIDEwKTtcblx0fVxuXG5cdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0RBVEFTT1VSQ0VfU0VMRUNUT1IpO1xuXG5cdGlmIChzZWxlY3Rvcikge1xuXHRcdG9wdGlvbnMuZGF0YXNvdXJjZS5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdE11dGF0aW9uT2JzZXJ2ZXIoKSB7XG5cdGNvbnN0IGNvbmZpZyA9IHsgYXR0cmlidXRlczogZmFsc2UsIGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9O1xuXG5cdGNvbnN0IGNhbGxiYWNrID0gKG11dGF0aW9uTGlzdCwgb2JzZXJ2ZXIpID0+IHtcblx0XHRpZiAobXV0YXRpb25MaXN0Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBkb25lRmxhZyA9IGZhbHNlO1xuXHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25MaXN0KSB7XG5cdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJjaGlsZExpc3RcIikge1xuXHRcdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgbXV0YXRpb24uYWRkZWROb2Rlcykge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRcdFx0bm9kZS5tYXRjaGVzKHRoaXMuZ2V0T3B0aW9uKFwicmVmcmVzaE9uTXV0YXRpb24uc2VsZWN0b3JcIikpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRkb25lRmxhZyA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZG9uZUZsYWcpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChkb25lRmxhZykge1xuXHRcdFx0dGhpcy5yZWZyZXNoKCk7XG5cdFx0fVxuXHR9O1xuXG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuXHRvYnNlcnZlci5vYnNlcnZlKHRoaXMsIGNvbmZpZyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoRGF0YVNldCk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgRm9ybVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IEZvcm1TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0Rm9ybVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgZm9ybSB7IFxuLmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfWlucHV0LG1ldGVyLHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aCk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxMDAlO21hcmdpbjowO291dGxpbmU6bm9uZX1pbnB1dCxzZWxlY3QsdGV4dGFyZWF7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O3BhZGRpbmc6LjRyZW0gLjZyZW19dGV4dGFyZWF7bWluLWhlaWdodDo2cmVtO3Jlc2l6ZTp2ZXJ0aWNhbH1pbnB1dFt0eXBlPWNvbG9yXXtoZWlnaHQ6MnJlbTttYXJnaW46MDtwYWRkaW5nOi4xcmVtO3dpZHRoOjJyZW19aW5wdXQ6aG92ZXI6bm90KFt0eXBlPXJhZGlvXSk6bm90KFt0eXBlPWNoZWNrYm94XSk6bm90KFt0eXBlPXJhbmdlXSksc2VsZWN0OmhvdmVyLHRleHRhcmVhOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9aW5wdXQ6Zm9jdXMsc2VsZWN0OmZvY3VzLHRleHRhcmVhOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDozcHh9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpSYWxld2F5O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFGSjRBQklBQUFBQXQzQUFBRklRQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHb0U4Rys0NkhJVThCbUEvVTFSQlZFUUFoUWdJZ1FvSm54UVJDQXFCdWd5Qm1uQUxoQ0lBQVRZQ0pBT0lRQVFnQllVVUJ5QU1neHdiZmFRWGFKZWZtTnowWm9sM3Y2MGNQZVpNcEc0SEpTams1cUlJTmc2Q0dNZ2xaZi8vbjNGMGpPR0dEUkExclhlSW5jSklVa05IR242OXFNUkRVOFphampzOVVic210bnFuRTN2M3ZxaVFtZlJRcExrS1c2UVp3YWw2czVJVWlKTlVTVUcvT3dvRFk2QjY3NU9qU2prRFNTTXUycGVkcHU5dkpJTFVsSmQ3MDdEK2VMSHBqWURJNGUxdURuTGpISHZ4cERYR015ZHVMTG4xcXQwRkNRT3lGc0paRTEra0pxM1QrSWU3QkpGSU5PQU5iaTl2VFV6aEk3VzRHbVVMMGxXalQvRlFRaS9tKyt4dVBQMDJvbVJIZTVwbjREZ2ZOWmZuK1I5ejk3OXRtRWVOYXExUnhScUhUalRQTkEySkZFZ3JIZG8vbnQvVy81emJnR0N4aWE2RWtWaUEyRmhZR0l0Um1FMVp2VlV2cXRTdGI3TXZyZDNXNyt0MiswWGRvVG56empZYnA3bVNITEFDa2hNV2dDVEw2czBXdjBBVW9oSmZFcUUzb3BQZDU4aWtKbktsbyszdWFlU0hZSjZmY0ljWGpkK3JLVUVzYUVsVHFsVWxWUm0vTitlLzhpUDBMNUFLb3pObEozLzlpQndzaE02djVKSVVKeWtnVDNmZHJPbXE2TGNzK1orcS9Yc0FYRnhFRWlRSVVhS29zRm43Y3RUKzdCQlM1ZHFEb2xKWHVuYmw3cnR0ekQvdjM4NExmdEphZ0ZGQUxZUEU1QTdnbk1yWkJodDRsWHFzYlpLbWJkcTBUdE9tcG1nTml1Z00yUFlCYzczTXJqcTdHTHNvWEhjVHB0OXVQdkZEejhlTjNnK3N4clBRQXc2RFRGTnAvT1pJOWlpbk5pdFpoUm1wUU9Da2RvQmRBTmpWV2xhdk1pdHdETkpYL3BZSUFrVnduT1Avdlc1eHpvTXc3U0FGQUtVK1p6L2tuUC9aOWorT2Rmckw4S2UydmRLYm1waHV4SlN1TDhFVUFnZ0hJaUJIUCs0NDRFRHp2MVBUUTNZa09jT1NsVEhtajZVc2RmbzJMKy9qcFllN0lIV2NRVWdjZ2twTEZSMVlUVzhDR0tRWDliOEdGQUFBSDl0bzRSSFE2R0x2RlJyaTREaXdUekFBRERNS0RQci9mWjNWL3FkZ1Bta0d6S1RFbVdFWGI3UTN0dGdUWXFvMm5QNi8rOTdYZitGLzlKSEFWc0lJY0FDQlp3UnlrR1Q3Z0NSOFZvaEpjVU9PU0RqaVNiQXBoTW96bTJKUnB0QnRVVzY5WGJORkczSVZ5MktMb2s0OC9MZnNtNTI3SWFxQkxNdUJiT0ZJd2VGVWQwMXZlTCtZOHhXaHR6Y3FUbTJDSVRjNWVMSndTSTRmWWxMWUZJVkhBcy8vVDUzTjQvWXgxaEtHVStIU3FFcmRwUFBuczZmcXFXSnNOYlphQ2xRdGpsT0xVTXNoY2RvQTVUUXNzNEpMYzkwU3hDT01NVUs0S1A5TnNocHpwWDR2d3hLQ2hDQVNSRVJFL0xLc1dSbEp3TktBY1RuWEFoRXkzcjFLSGNaYS9ZZFg1ODQyMC9pYVhtdEdob0NBaUlpQVIyM3YvUDkrS1RBQ0FONWhka0MzeFVDNEVMc2dndmtSMmtyRWpZU0V2MEJLU21IQ2hJdllPQ0FKa0tRZ3lZTU0yUW9VTXpDbzE2Qko4NXFBV0NDZEhlazNBQjBPREwxTHEwUGdUZTNoU3cyZmhpNFhoUHVldVFXRUg2eHRJRVFBYkcyTm01b1Y1NFFGUCt5S2dPMkQ0VDV0L3d6MlhXOTIvcnBxcExUU0lQOHFWOXZMdk9kczBOTFd5WDUxSzZvZmJ2UFpFMXBhZjd3MzE4QzladGhxN2YzMmJmdUw2NFZaSHc1MTRZc201bGdmTmJmRzdXOWxzVUE0RUd6NzIzdnh3R3pwNGZSUittUDhMczVCN0tCMmVESlhjNnh3bEc2OTAydWc3QXpMQThOWTIxQjJkQi9QNXFmT1Y4dDFvbnlMNWpaRERmUUk1Umc4RDk4RnZIc3ZjbEh1SnNyZHZzSnJwYy9Uci9ndS9FZlpKelhVenBXYURqN003K1VQOC84RWtBQVZhQVMvQ1IrWHMvSk40WWFJY08xeEhaY1VhTU1ia2xycEt5N05mUUpLUWNVUmFnb0dtQ1crSEE2RU52YmczM3NsMnBJWVJtRTliSUhiMG1BNmtrNmxONUdkeU1ONUVibVFoeEhLbHdNZ1Q1OGNndzdwZFVSejduZk1jUWZjVTN2SWN6VmtkcmhYOFhIcTQwMTJ0Rk9kN2tUL2E3cDdtODNXQTcxRjdhTzlNK2RqdmRkNmo3ZnhtK0QxUHUzejN1aXJ2bXV5emE1M3RydjkzbFRiODJSVDJLYUZWVUtNTlAzNkJ2UU1DbzBHc0Vka0w4cyt6TGcxRXhiTTBOZ0NXQXhnemY4MkRHMUtYTWZjNHJqTmNRZkhLeFNDdVJ1Qkk1QW9kREREa0dkVjhDblZWRW1FTWFpbjRTYTBBWFRJMFJCTnBPWUFMVnExYVY5dnhKaVV6SEtXQ2lzNm1wMEJ1a3gwNjlHcjc0c25WTmJzb0Nta1ZNb3A1K3BER2FXejJzTERyMmlOdCtvWk8wYjM2WVNJaldjeHZubE4weDBWaGxZb1c0VVJqWFhLeUxHM1kzcW9MZEVhekhBRUVvVnVNbDNERGVFUlZwRy9qZVRFUjBDVVpFVTFtb3RxRm9pd0pGS1VhREZpYWNTbEJKckVqU1FLSi9DU0ZTbVNLazE2MVFsa2RLZXlTWFl6c2RYS2k2STlpa05KTXRDVUtsT3VRcVVxMVZIVDF6cTYrbHpmUU5BSWE1SnBSb3ZXYUVQN1p4dU5tVGpNTEJZdXEzWFVUZ05kUkRkNlVxOUEzM2NieEF6eERET04wSXhhTlZheGQvL3MvYWp4QUU2Sm5QYkZHWmt1QzN1YU5VOEVzRFNMWlZteE9qMVBkOEhReFhTcGVka1hhd2JXNndabzgrNkRyaXVRRkZ3NUlwdm5KaDYvWmdGSks5MzBhRU0yWEozeUpCMERIb3BoYnFnMHVya3ZNSWdZbHRiR1JQY2RrZDdWai9OVjRwYkFiYSsvRTRCakNnOXA1WmVyaS9wZE0wQ0cvN3RYWk54VkUrNmJZYXZRbjZ1bVd3eTNGWGY2Z2crWG5BdEhEZ2prUE5pVWJxcG93dkRVdmJSbGNqNVhaSFl6VjhKaTRObDF2anNPaHJNYXhPSHhlRHdlanovVklISlhuNkgwd2hnNnFGT0VVcVFvMFdMRTBvaExDVEtKMHlRNUxVOXlSUXBTcFVsZlpuQVNCa1dwbENsWG9WS1Y2cWliVEJ0TW1RS1lZV0hWVVVmdEdJdDYybGRuTUgzRXBpVTBxVlFxSGJDTHhPVStFNC8xWExmQkVoektoZ1VjZ1VTaGZ4d21EejlHNUVSQUFITDdGSFJLUXlybnd1eFFmNXJoSEJFQlJJb1NMVVlzelViYzRydE1kcGwyNkZnZDU1dGdRRzh4L2ZBWjJKekl2R2JtbHJjWEFtM3dYS2E3RWxmUGNTMnR4ZnErZWdmaUhHb0RNeHlCUktIdnkzU0ozMFE2VjgrNm1kZlpzYUZWM2VPVUtzV015bmtoeUwxdTRWSTBMMVNKTEl4WHlZenBMeU5xaVd6MFhUcGthVHluMVpEdGk5MG1ZMDJ2MHRVcXR6U0NsK3FySzdySXV2MXY5UkQwc2d4cUdiSm9HR2ZFa2xFMVl6cjI4TzFsMktld1g5TjRBRGFOMWI3TDBJYVJUWE91eTl5aXU4MnBPd0hRQkMrcGxkQ3JPbUswTWcvcjF2UllFbTNEQkVjZ1VlZ21VeDAzRzQrd2l0UWdPZkVSRUNWWlVZM200dG1FSXZ3VUtVcTBHTEUwNGxJQ1R1STB5VHF0RmNsRUNsS2xTYTg2V0VaM0pKdnNGV2k3SXhLSk9Cd09oOFBoY0VUclJOM3REcGxNSnBOaFJJYWlxQWlHWVJnbWNia3N5NE5vei9yb2ZRTDdLY2FsTkQwRk9XM1JHWnVPQlIyeG1WTXhrVWdrRGwwWDd1Sml1dFM4Yk5HYUUrdi9aUU93cWU4NkdJSWVFc0N1b3ZXWWZDcTJ0dnBNT0JON016TzY4R1dYTGh0bWdXMmZmZUhwMU11N3F3WDVORHdUa3BDU2NlZkJreGR2ZmluQVJJUklVYUxGaUtVUmx4SUFpWkUwclZxNjVJb1VTWlVtdmVxVU1ycHMvejFaV0VaNVlCZ0dBQUFBQUFDQTBXWnNkMUNwK0h3K24yL2NPbGs0ckRwU2wxSzNIcjM2amcxQ1R0d3pPY051Q1hZTmdpRFlob3RIMW9nT0xSU3V4OG5pbDRyMmlZYXYwbm9yelh2WjJuWmpaTGZhS0QrVlJnSC9mZ05tcGtGYmhnaUdpVWFjR2ZYTm1LNDlGUHZZOXR2YmNUbTc1KzNmZGFtVzZZU3R3a2R6YUNIWmN2cTBDUzRpVTVabU54TFhHQmUvclFvSGpNUDEvUUVHVk1aRkpnYkRESi81VDNleUJjdkdQU3FUaW1KY0MrWVFVanFHdjJuQzdxM25CMERPcXYyRzNWdmxJaEtJVzhNUlNCUzZ5WlRpTkdGWCtSR0NESHM4UFlJZFRqZEFVQXl2UWt3U0NwcGhOZDIwbXB1TWpRWEtCUWtXSWpRcG1KUlVLWXhLWGNMRGM2a0lmSGFUS2FPTVNjNE1zVlJZUTBlelU2RkxwVnVQM3RMSHV3cHJZZnRoaXdpSEZBV2tTcG1XUnQrNm5KNlUxOEN1eUo4NWoyeDBiMGQ3TjlwaWJxMGxiNE5uVStwTzd0RVVMaWhkVU8yaHJwdGdZWENzeEJGQTNsUTJubUZjM0ZiUmpHQmdDZDZCVUg3cW5YQmJhY2pzSzk5UmZJRE1BRmtCc29PK25aZzhQMEJCZ01JQXRRRWFuOVdRRXM5TUFITkc4NTU0d2ErQXJucXZUVGpwR1M3ZS9pbFBtakFSUG1uc3hXa2RBQVJ5T0w5eUFoeW14N1NHS2xrN0doNDh2RHZOZmRnK0lUQlpwRDlnemdNSUJ3d0JrNXRta0VYSXFxTU1hRVRnL0hVZTI2b0xUVHA0dzRnOVVrWjViZ2J4RUh0Q3lUTFlQSG1KVXEzdUpwcXp2U05jdW1iQmRYWVFza3UxQzkyTjhqVHZERkVVMHJ2ODE3Z21xc0dqUGZSdU5qdmVyVERtSENFNHErcWJ6T2p1SUl2UmFEaHpaMS9WSlVwaGhpT1FLSFF3c1o1VGpndUFCOEN1S3IrWUlNS2V3SW9NTzV4eDllNEFFQlREU1lwbTJPVHk4b0lveVlvYWplalVRYjhKd0QvWEI1aVNzd1VpZ2hBc1JHaFMwQ2d6SnpYTUNUVTFYRVpIYVRBWFRDUVNpY1hiWTRWQ29SZ0xFeHN0bGRDdHhaMWFVbmx1dEdodE9RdDE4L1JVZFZwa0RCdmJTNG5Fb05Gb05CcU5GaWRYbjBXSkxKQ3JVOENVYnFxTWhaR3BtK0Y4RWJCSVVhTEZpS1VSbHhLRUVpVlZMVk55UmdwU3BVbXZ1Z0FaaEFHbHlwU3JVS2xLdGJwbUE2d3JRTGNldmZxYUU3RFRXczZZSG0wRTJkY2xpV1dzV0Uzbm1TN0c1YjZ1R1ZuUG5OdXl5V2JId3hEanBXazZNK2oyMGVZTUxRLzAzVk1tS200Wm5nbEpTTW00OCtESml6ZS9LcmRDa1ZNbEtzeUltbWVaZjBHUXl3SkJFRnhDL3JnZ0NJSWdDSUl6OTBiREV3TVRqOGZqQVVBeGRTNlZzRGNzMWc4d2ZZQ1hyTmQ5OFNIOGdhams1dnVVUHFnNFhEUDlKbTdvR1d2R1h4U2RFTExmcnNFU0VzbVdYVGNNM2NMdEhGU0diU0hCQWpjQ2lVSVhKcUhuTWxPTFJCTGFzblVLMlN1eDF6cW5NQi9aTUdPeC96UHU4b2hEQURBQU9BQUNBQW1BQWtBRFlIZ2xDa0N1TFZBaVNJS0ZDUDBraFdOS1BGVXdiZHlMK3NEQnllZ2thSjJXRU10V3JFNi80dnBXN0c2ZTRtRHcwQmZ4WmhGdDlHdmZoUEVBbXlkNGNNdFVxc1BsNGF5N0d1YWs1dDBONTJPT3dKYUJnU05Ic2syTmg3cUVXWllWcThlK2tzeGpqM0VLU1hnOExOaWxRcUZRekUxZnY1dHZwUVFGdEZJbXlMdGl2VGVXa1FDazVaUmUyUWlKMlpyTFlEVjg2TUJZV1g1eEFQdW5rMXludFoyeDZhYk5yaVhBc2hXcmNma1U2M3kvai9tK2duek44STNZdHh6ZkNlT2lBUGk3WWgxd0JCS0Z6czcyV3JsaWZXYjNuK3NPbWtTaXpYSFRYcG12QW5PZ2VhKzdTOEYxRUhQOG5VNEluRlk0UTVtV3AzQkFMbGVzYTdCejRGdU9iRTRFWFJuaXlrOGh0Q09pazh2bGNzV1lJS3I0L2NITTNYWEljY3lPRHNCWEg5UjNOSUJqVXNkMWZpZGowaWluSDVyaVpmVU9EVGlGUXVsemVheDcrakhaVnl4ZjM4VTN4TGRyK1U3dTQzSDU5S2VnSzk1SnZ3dnlxbjNJZ3hMeVVHMlk0UWdrQ3YxQlREK0l2Q01QTWcwbFZZUkJuU0lRa2FKRWl4RkxJeTRsQ0NUMmhtMHNFQWdFSlREcnFiNGdKMkpZb3pTVUtWZWhVcFhxYk5yWitaaGVqYis1ckhyR3pjY0xRaEpTTXU0OGVQTGl6YS9LelFuTUNFS3dFS0ZKWVlHeU55SzFsdEpVL0o2V21GeFVxTHNJblhTczM0czRBSm5UTlA5SlY4MVpXMDhid294d2pNb0dnKzFnUFB4d0FNZVprQkVFK1ZzdXBzeG85Y1dTNWl2bmFTVXBGSlExVEVidGV5S2pNQUxsU1FoNlJLM2dDQ1FLM2VRVTRqYkVDN3VxL0F5Q0RIdUNCUVRzY01iVnV3TVVCQlREUTl5UUZNMnd5Um55RVN4S3NxSkdVM1JpRURQWEw5RFo1RjRJcEF1U1lDRkNrOElHWlZNRkNkT2tMdUUxSUtWRmxHZ3hZbW5FTmVOQkNWU0prbkpFaitTTUZFbVZKcjNxbURLSXpHbGtTYmJkOUhMazFmeCszZStWQ3BtS29oZ2x5VUJWcWt5NUNwV3FWS2NhVUczVWxmcG9rTWJheE5Bc0xWcTFhVTlHSWxPZnZKbE1wcGpKWkRKYlJqdGFOV2svcnpXb01JSWFOV2VzYXV0MDN5TU8yUHhJSTZNQkU5MXFmb0R5eENTd2dDT1FLSFNUNlFWdURoNWhGWGxwdHJnTWp5QktzcUlhTDE3R2Nka0E1OEE4Z0NZLzMyUExid2tuQ1FCQU5tdEN3Nk5vQnJWSXF6YnRPVXNXVTQwNWxDd1oxdER4NXAxbzdURWRKQmdTR0w3NzdCRWpvOTRhbzlvanRLOWJ2NS9oQU04UmE0NlNqZ21kZUx6TkRNaGlVSG51N1FtRERCWitJVUZpVGNKb0hjbElrU3BOK21aR2NUY0g1SWNCcGNxVVIwV29WS1U2NnFaM3VzZWdGM21uK2JGbHJpcTlCbW1uVjdQYjdHMFJ0Q2FzT3dLUVpFZ2g0ODZESnkvZS9KNkpyejJydnoxMThQazhQcC9QNXkvOU5QSmlyOWdKd3lsS3JVeTVDcFdxVkVmZFZGTnRocldnVlp2MlpJU1llcmVCb0pkSEtlYWVnMEo3VUJlcVI4U08xYW4zcEZBTUtMd0l0VlNKKytGbW5pSEVzRkVRVytwZWtvTTVIcWY1MGx4QkxMdjl6Q01BWlRQUTE3bjlYNWtIRlg3YzZRMkp2YitLU0lzU0xVWXNqYmhtdkpFRVd4TEhKRFhNU0s1SWtWUnAwcXVPSUtPTHpHbGtTYmJkOUhMa3lWZWdNQlc1VUt3a0dXd3BWYVpjaFVwVnFxT21qOXA1cWxOVDMvLzF4c2lBUkNLUlNBQkFCUURBZ0VBZ0VGNGtjSFBBNHkvZjJtN1lHbzVBb3RDVlNTSWFUZVZHRkFBbHgxUklaUnZHYzVqMEpJZW9jeHp6cEt0Y2F5Y3hJMWhTeVYrNjEvR0N3dXpBTWZRTXc2TFRLZDhvc0ZBY3JOVkRQSWVGczZMSEZ4bE55dGllRGpiOEdPUVFiaFNJdGowMmdJZzhPVmJVZmdGL0d0a2FDc01NUnlCUjZENTVtY1BqTGJZa0k4SjB3SndYZi9NMW5vOWRqVFZkV2hwaUQ0TWprQ2owR1lZNmtZMU41UTRFS2dVaFdJalFwTkNqYktvU0NOT2lYb1piVkY5L3pzTGRHWUdnVmJNendKd3o4K21xVTJzalkxQnJjamwzZkcvc2Z6NnE3b2cyWTM0dmZwZFVoZS9DWjJISDh5QUEveFE4RDNteUFJRE5BVnNDQUpiWm54aTJjSDVzMmNSSndWYU9tMldXc3RQR1p4WVpBMUtJUjdtdDNBekFtdGtGVUk1aWxEY0FtMlF3b2pGWEI2cjNJc0J5VnE1bCt0TmFiY3RyRitRckFRK2xraVVXemlIR0tXYzV1MUZVZE1LTWhueGl4bkFVNGxrYUFuby9uaHVTY0VuSHJRNlFFZG9SMkZJUTRHRm5ZSGtmQmdKVHdObDQyclFIN2RWNklCS3g0R0RJUFRTUEF0WUhjdWEvVXplUDFlcFpKTmF0T0FTcUZFUWtZQ1dTaktvbWN2SjRRL2xZbVI2YldpRVdXVklGQU5hSVRPVncyWlZIenI1TXpDLzBpL0Qxa3dFV1ZEL3pUOWI2REc2MzJpSzRVcUM3VFAyVU5ibmtFWTg2NFhZaUtsVytCUzNGVUt4SERRWW8rOEI5eXoxdzRoMDdCYTRRa2t6TDBMR0pHSXJyWitjTlh1QjNQdzZjZWRwQU1VNkd6UlFxRFc3bnRCK2NXaXNGeW8zV0NtUWpMME1tWG9CcU5XUkZJWkk3Z0RYaHRTY3Q4THBCZmtIc1JRNlhwVmZJUnZaQlU4cDg1RjRoSDhFS254bUVZbXUrSzZjWVkzZ1FlMSsvVHpKQUlSRjFjS3ZObW4yUTBNOGFPV3NYalQ5anZCQ3I1MjF4cXRXVkk2YXBMcGVoS2N4WnVXOUJXTEozUUdxZjlKVGl1dnZVMHdkZ2h3LzhJQlJJWDFWdU5ReXNCcVN0Vk5QWFpEdEwrTml2Y3dpMVBnRC81TzBveW0ySis3OG9uMHJ4Z0E5T0NsYTBnTjBKRVBIWS9ZUDRuaElhd2JFSjJIbFVuUjlEYnpmV01QQXZ4a3J0QTE0eDZqckFtWVVjZ1JmUmxabm5ZeHMyeStvd0xEd2tTMlZrM2RmakFBVVZJSmV3RDA2dHorQXV3NnBJcXhUbDRkbWpvR2xZUVhETWIzMUZKUHMrNjdqOVJOZ3NIWWd3d09jWXR1Zks2VmhDTE11YzRORlRidjlwRVFqRk5qTnIwTFdBSkIzWEdIbTR4N25CUmZYbUhRaFEwYnpxbU90VlRueWVTNngxSGJDL2Fyai9YZS83cU1PbDdNMGVVbkRQZ2h5aXNGOHFJb0ZiaGZFZ3F5RDRvM28ySzVSTHJNSllDYUM1Z3JId3VwRE5zVm9YRkkzKzlXWVBhMWx3dk9wOTFmdmFuR2hvbUppcDk3dXBOSG1PSCt5YjEraExJcGRkcjIxUmlBMTNKaWI3OWs2cFRCM2RGQW83MTRwUTF5UlpiVFhNeWRBN21RRTlSRkdoTC9PeHJIamRSbm8wWGRmOXlFZTBuWEZmT2VyelkrRE8zZmlCV0JGTUFtcUZiT2Vna0FxWFRWbzVmUzY2eU9JVmxMQ1NkY3A2OHVlNHlKZWxoVVB0VTZWbTJqbk5BUHF3V2FObm52MXc3SlA2eFFaYXdTSVBsT0ZNRVVHdXpQQ0JiMmRKVXlnWTZROXdyNkpVakpyNk5aY2JFWXdML2N4WmZlYzgyTE9zTUs0OXhYNjI4UDhOcTNUREVjSUFQWnd3aEx3NThoUEtrNUpTb0RCSmdpVExFU3RQQTUwbTdTcVltTlN4NkZOdjBpU2pVMDR6bVRiTllzNENxemZKZmxtQy9ZWkpnTkJ3REFhQmk4ZUJIVDVIQWs0SVFrS3VSRVIyY2VIQ2pTdFhZaEplTU42OEVmejR3Zmp6SnhFZ2dKU2NuRXlnVUF3bEpYZGgxSnlFQytjaGdnWXBUaHhLdkhoMkVpUnlsaVNKcDJUcEtEbzZXMlRJc0ZXbVRGNnk1RUR5NUVNS0ZQQldxQkJma1JJQ0JsVm8xYXBSYXRTeVU2Zk9WdlhxK1dqUXdGZVRKbjZhdGVNd01mRm4wY0ZlcDA0QnVuVFpvbHMzcEVjUHZsNjlrRDU5K0NaTjJ1YVVVNFJPTzQxcjJqU3VPZk4yV3JCQTZFMHlaTWtNNGJ3NWh3c1duQzVhY3Joa3hlbXlOWnNyTnR5dTJ2SzRac2R0elo3SE9zd0dFd3Voa1JpTTdUZzRFQzRlbkIxbmlKQVFib3VkRUJHUkhWeUlJUkxlY0Q1OElYNzg0UHo1UXdJRTJFbE9UcVFSWEhBUTE2VTRoQzdnZ0NFQWcwWUFCd29LRHJ1RWw2K0dxYkZOUExXR0F4REEyKzJtVVNOT2lCZzd0MFNrUzMxb3hlTWtqckZuMklJakp6ak1TVWhPdWtrb0VKU2lqeUdneDJJYS85WmMwM2IrbjgrZ3FrZ1MyOHM3NTZjalVwM3p3VHIrUlBlNlNlcmxVZFQ1YWV1Z2UvQUhnQno5RjRpbndFOHErSDRPdklXMzlGYmVXcnkvQnFNdnYvS1N1cGk5SGtyVmVmRzVaNElhdmZqeVd5K3A0c1ZYeWhlVlQ1bnhJcS96YnZiam9xWFgxWmUwaGowQVlGTVFaczJCa0FnRklHRnd4SFlOQjlYZGFtd3IzczcvQ0lmZ1laaWZoVDlnYTEweXd0emRaWS9oY25lVFlhL2tpejhLQ0JvcmhGWjRnMWxYQkdHV0tBNzUyRWxJZDlhTEs0U0ZOZFYzMjliRzdSSUlLVTRHRXZoanI4TFUxd2pBMjNzOUJtZ2JHalE5N29VS3dxaU92eVBaRVJJQ0tJekE2V1RwV1F3VjZvSmxlM1ZUbGo1VHlQS09qbTROYnZPZy9UOUdWZnhOQTloRmhRRFN3L2ZSanBDRjJXOE9BNjhpQ3lUK2YySC9ERzhDNmUrbTF4L0lJODc5TkEzNXJ3QUE2OFFXQVlnbFRUQXNZQUNFcWVOKzZteTN3WW9BNEYrak5vV2NOUzhPaWFqUVFQN3lNRmF3SWpRUmdTVU1MSTBRN24xUkFYNlJGOFlLSUlKVW9aM3lnQytRMlFvc0NrdE81bHVNSEdVYUUzZUxlOFZqMGhxcFdBcElFYWxPYXBHNnJkVys3cVJBRmNDZVlpa0E0QlBUc0xoL3dVV2ZPYng5UjZVOHFmQTRTS241ZzdZQ1hBU1FDUUJZTjNrQS8vMU4xZi9rNlMvMFkvMW9Ccjc0R1h4eCsyTmYwdSsvN2d2cUMvTHp6MEVmOU9SQnFqbjFQZ0xvWlE4YisxWjBjOGdOL2wvMkRXZk5tZktwWDEwMzd6Mkx4bjNsdEJYVGJFNVo4SVB2ZkcvR0pvU0R5NDZBTXhZMkRnRWhFVEVKR1NVTVRvV2dwa2N4TURKNzI0UjMvZUgxOFNDQ1M0SWt5WFF5Wk1xU3IwQ2hJc1VNYXRTcDE2QkpNeU1UTTR0T2Ivbk5XMzd5dnYvNTJPYys4WVhmL1RzdTNMTE1lVDliZFh0MmNOZXZYdkx5YVBqRkRVK05nUmNOdU9CMXIzbkRMQklHUnlOUUdEeE95am1vVklPTGg2K1VHQXdBa29QOHdKT09oaGJKQk5VdmhwVU5MWnFEVTZKMEtWS2x5Yk9iWGc2dEVoVktsYWxTN2x1VjJyVm8xY2FxVmdkdm5hTVFDY3VXWEhIVjVjaTRXVVFtVW1VME1NQW10Z1FzQlN6dEYzUmJCQmV3RklBdzVsNDFpamNiQm1RcDZ5M0FFTnQ4MmRBa3dqeG56N1A3OFZVVURCL1ZtdUFkK3g1NmNQKyt2WHZHUmtlR2gxWXNYN1oweWVqSThPS2JGeTFjTURRNE1IL2UzRG16Ky90NmU3cTdPanZhMjNLdExkbE1PcFZzYm1yY2dXQTA3UGNlZmVUaGg3cWRkcXZadVArdWRHMjFsc1RBUCtmejZkcjFtb3ArMExKMVRFZ2dTNkN1dkM1b3lBaXViMDEzWVBNTGJZelRiT0RBVFg1WUVpWXljcFU1SVZjUGZKRGxKK29PdWRzdkxPVXlDSEEwZXBTaFJkNGR1SDRLZ0VwTUVPV1pHYjVFRmNNalZKa0JVQlVCUlprQTJaS05Sc0FOMSsxMHhLOHRpNUx2dTlDUU9jWnd4b2J0VkpZU05ZU0ZJMy9lendpTEpkUUVsVkFWcWJGZlZqN0dGWUtVd2lMMk05Y1NkZ05tOExIY3NBSWx2M3QrcFR6aWtnalM4TGhucFJBNHlEcGJPN0JjZWtoTElSdHlyc28zaE9GYmlVMjlGZ21LWTVKODJ4UmQ4cXlsc0ZXa0VIL2JhbjhsbkR2M1p5NWU0RFZHaVozT1FSREJENDY0WG5XVG1vRkRSNTJ1WEpremxmeUNSTjBqRlVMZXFaVkxOUUVYbVZFbERvdFpOT2ZpelE0UkxiaTBLM1ZmUWl1T0tPRVNNRlR2MTNUdmk2Q1Z5VTdXeE1tS1czVWJ0RG1uSTE3eVgzSGNud2pnb2ZvVTRtYVNVbExuSVBvZDB3OHl2NjZvV0lNZFNpR1BVdjJ0Z21BNEVkYTEwRnJudFFtL2VsdGhmd3VoQUhXS3MrSnMvM3pxdFR4U2ZjWmRXdk1Ca0VrbzJPV2Q1aDhWeGtsMXdRMHRXcWZYeGpuYlhUd0R3NW9tV1o1cWR2SElEYktZeHlnOTcwcEp2ekF6OG4zNU9MUmtmU2JkRFRwWmdOTTlsUUptMmlVMy9IMG5neHZIMjlkQWVZMlFEUXZ4WjR6U2hwUWJoQWpCbXdWYkk3RjdJdko3a2lOMUZKR1dOdUFuMHpNRXlSbDBoMk4xN0pDS2lnQ1BLZnk5bkhOT3R6d25JendtZ3V2WlovVE1CY1FsSEFmdzVFeEhEc1hHdUZ1U2VvM3lDSm5aUmIzVzdVZjNhTlo3M0VZSzdrT1NsVkpzd1lZeUpDdGNHTTFHcmo5OGNuSGhrRm11N1BkT3duMVd6UjBoeFRuUlU4YUJKbXhxSDl3UUlJYy9mVVdCSGo4cXJJU2piTzJoUFc3bFJJYW9ESnBLcDZXclZIYjBvbDVMbktMeUZqMlRIZ215OTZBcFo2L2xxMWlOUFk4dndES3o1Z3MrRS9DWklDUHdjYWNxY25SaXIxUnpQc25DZ1FWYWc1VU1yS0dKNnk0K3lQWVpJN3lqS1RKS1NVTjRvVVQ3R1RkaXhPMERrZmNUVWRta2FCenFQYmk1U2lLZkphSkRES1kxWmwxMnUxUkFPa3dTcDd6SG42UWthaXBOTHI2RTBwSGdtSVEwTzN4Qm5XU3lZMjBjdUgyeldZeE5RM3cybUZ3UDh4azVjS2VEc2RVYWtLbExITkpHOHM1eHp5aE50dEVCaVJETlFzY0NsMnYyWkFuMUNpdHhNRWpMTXdHOXAxZER0ZHFpd0pUTkNmTFNxUlMwQXRWdXFRUElzUUNSWkltOHg2NklOd3BUQ01KQzJ2WUhyTk1XTXc1VHhKNFZpNEhnUlJva2lnRktQVHBuNDVKWWd4cWgwYm9xZ3VIUDZJZ2tRVEtWUHA5Qm1DdHlTT0pkNmJ5RTBsUTFkbmt0bGNpR1VtcFFPOXRCbjZBQlJCdlliaC9vWGFwbkNDNzVHR0l4bDhXK1paT2pvSFVodTdOQzI1VUpvTGRvdkMxVm9BaTJGQVhwK000TjFEeUF6VVVqZVN2NXdHN1piZjlFY1Q2ak1ic0oxQnBZL0p0b2w3TjBqcFFoZ0xoY1lmWWVVWjJCWHFHVUg4NVE4UlJ0ejJmUWRuem5sbEIxOGRDRE0zQk0wUlZtTFhHUEZWUmpFZFFoTFA5RGlKdnBOem9VQXZlZzlaQUxmSWpUVmI0ZXQ1dlBNOUFVVkMxMUpZQk15RXBKb0xhd0hWczNBMENORDBjZzIveG5YSk4rSUpXNEFLZjFHU1VhM1ZCY3VNclhsVVlUdWdab096UGZXS1J1YzhxWU1tbE9NS3dsN3gwa0t0c3dsZjJaUnNyajFoZzJ5enFCYVBsQWFNbGtSQzd6RzRXYUhjOEFCcmx5MG1EVmdQaEtnNjBLSUdzbG4xRkZRR29CSFkxVEd2OUtnSnAzVm9vM09CSXVBNDg1b3JoMGMwTkcyTFg2eVNBOXNHY0JhbjJRaG9iZ25pSjZGZXR1S1NIWExwNWVjTjFGaTFvM01nTW1LZHcwSXJGaGo4MUtpVUxEdlJKREk1S1NVbEtBRklLeFZ6Q3VnVXhYcEdnWmZBZ1BFRTkwTmV6S3pweHZIYlBUVnEyZE9hcTg0MkVOOXV5VHpLMkZZdCtXZFFaRGU0VWJlQjE4c3d2bFFVQ2lGcmJMK3lDN1dxbHpaT1ViMlZwWVFadTFtUFVrVDJYeTcyNk5qMGdwVW1vRVdJZXIvRkprZ2tnYkFBTDREaC8wbG81SkRCTUM3a2cwRHR6UG9nRjBLN0xXTFhSMDZQRU4wb29ISDFsdWVKa1FEUElXVTZNWk82TGEyc2d1bkY1MDhDMmxZR1pQbGN4MlhKMXR1WEZicmU1MUNJVVdTaGI0Zm9qNkxnR2NtbGcrVUNpU2l4Y0g5cko2VFRKZEFDMjRBcEdic2E1aGEvTklyK2g5SWVhWElDaVp1OEM0Skx6V1Q3Z0tZVDc2MzkrQUFqTGxwcGRYQUxibXQvemNkWjhuZkkvc3dYTmJaZHc5bVIxU083SWZnWktDLzRNQ3dwQ3c1c0QxajQwd0l1YmR0cEJOY3NWSG11VVB2aGFrc3hNOUY4Qkxrc1EzNk0vQk9KQVF0OFRCQlNVYlNvandLMzJFWWJlUXJ6dVlHYTluV0ZoT0tUbFFCdzlDRmo5alRHNEozTmdEdmV1QWcxVU9oYjRLQXA5cEhnYU1KS2IwU2xvTDdEb2RIc0xqcHRYaGt2T2Fhb2UwQ0hqRFU2dGtLQ0I0MmdaSnpSRGNQbzJ4TmVKclpEeGNYZVYzVjI4SndrMEhKaFUwOEx0R0RRTXFLT1AzVEdvQUk2WW5iRWtSd0RSazNPNGtpNjFJbnFUODEyeEtiaWlvQk1HRTVETHBNS3JpT3BvdkZMdGJJZTl4cU1xL1NUWXN5MFpRRjV5YVphdnAvYStIN3ViRG5wU3NpQndKRmFnQk1pN3dWV2M3VUhxbG13M2ZjTHZ2bW5WUlNGWVJRRW5neG5IdnV4OFExQ1Y3QUlBdUFJRGRBSDFBK0x3ZytnSGdQNEM5UUxnQkFOYWV2T1R3b3FNSFVvTmdtVm1FeURJN0xyeExIRFhYRWs3WkFNSTl6T2JHeUNHRGJrNkc1VWduVHBQYzMralpRTWpZR1V5dU5YZytNL1RpYkkyY0J4Z0p3a2IwYmdpNGZaZjVBQkNXVDdCRFNNOFllUy9KOG5vNElzeFFZazUxd1pLbTQ0Q2p3NnBUZlFqWGpVTHY5ZWpQT1ZLSjNQaFMyaUlmdWxBSzZzTUx1elk1T24vYkh6aFpETjJHYVBoNDY2WkxVVVpFbVdKM1hSRys4QSt2NVlPT2xGSU1SRkI0K0xqV3l1U3VTT2VwM3FyUFdyTkJvUnZHRFdiZ3FjdTk3MTVrWHoyQkVNRlVaWGZodkw5VUQvT3VtNjR3ejgxSWtzU1h2WnVJT3FjWVJDcHQrRFVpZ3N1RTNRN2J2Zzh6OXFFemY4bWZlSEZuNTVzSlJVdUxZeFEzZk1IWnVPN3ZoazhNMDkxUXhMQloxU2UyaVFOVjBkakV1Q0ZUYm55amVhcU5XdERVT2JxSmVKc0J1bklRN1BLV3F2SFBQRnhFWFRNS1JqZkFEYytNOWI3NVdpdEtlTjJUVHdQTWIwUEE5cTJGVVVHU2FMaHNsakRBVUFNTUxkS1lRSFZqY3dwZ1lLb3dhVVFDMTZycmh4QkRSVS9hWmdiRW9VcytBMTBUeGtzbmtTTGpaYXl5UmErUGhLS05qQlQ4TG9TcXJxQkdpcUdTUmlGNVRCQzdoNTNDaW9lRjRXRk1WMXpLNWpEUG9iakhnUDVhOXNCREQxaU84NFdjTDk0Q281RWRjSWtIbE5mSnRmbW1BRXQrQXAxSmF0dzd2NUx4YlNVM21lS0NXczEzY29kUVVZbEpWdis4dG11ckFHb0UxbnBNaFpleFRMb1BMMGtnN1VleTJNTEV1dk0weTQ1S2x3R2xXeEFobkhmTmpaYVdOY002ckpiTWltaTArc3p2OUJCcU91dGZQVkVqSGpJYk5kNXBhYU5tYkgzRkxKdmkxdGxPeE5zb3RkaU93VDluZVBPNytlU0dGRlR6MFRhZDlZZG1BL3BKOHFGYTVnc2Zhb2lzdzYxQW50OE92aisyNDJXSzNSVnIrY3lPQ0dUWFRaN1pxM3lISlFMUitxZnVTYmdQbDRVb1VubkZNcWx1SDlBUDhSaU8xa2Fsc3hlZUhYbmt1TkllOSs2MDZ6aWgxczhPSzg2ZWtNcjZxc0JzOHJ1VXE2eEZIMGdVZlZzT1lhbjNXU3RBUmY3RjUwdjZ3ZHVLYjBZdjJic3AydkN3U3FGYU1BcnJJTHZZVjBxeC9UczZjRDkvUjB2bWI3cStVajRRSkRIZkx3cWExTDJZU2FLZTZvY1dYVDZFaCtWd3VhUnlIc3BMdGlVTWVmcEpSVVlJdmRPcDVZRisvTWhnQkIycGZ3R2prS2NjZit3U0krQlZ6T1hMR2cxY3hXNERWZjlIT2FhSGlTczAvUjNkZlNpOGhkRnhZaDdNd2xGL2p5aHdEYWdGL0NlMnowaHd3RjRYNUpiRHNGSnVBd00wTnF0anNHTURDVjZHSzE5aGpVQURiUk43eUdkaE9oOHV3SEwzMEd6cXlsbWN2N2FJZzdRb2x6UG5Md3JiamNOdjM2WEthRlp6NGk4UFZIaGVRM29RcGFxTEpESTNTRGtFWExITUNKVFphUEt5ZlFUVVdyODZxSGNXNlpUZTVvTTd2YXRORFhrRmxja1VQNkdTVVFoVldpdEYyVzcxOWZQT1pIZTdnOFdyN0ZtMjR5OGhIa1RtUmdWN3ZqUFJYUHE0ZEQ4MGEwYVpnNDNmQlY1dFd2dkk2QUJZT2dmR3V0aThpL2txeFF1TEVHb0cxbzVmVG1tNm5zV1pyZGx1RTJicjBMZ2tkU2g3RjFNUzVwRDBEWkR3OFVpdFdLRm11c3gySDIxeEQvYm03eHhzOE9IMWxpWUpTVnc0WXVqd2h4UzMwQncyNUI3YUNiR3RnSFpVTEltNnVlYXR4ZXlwclZrcStsRm5CbVJWQWQyb1VUNUNWNlBMa1hYNGthS2JkZ1RtRmhqZXNvL0tqQzhJbWxnYkx5ckdLMzhTN0pqcXQxRTVhQ01pWG93YStVUGd5M2JKNTZkb0hJZ3hQUGdid0pyZFd0bE9HSjdNQ04rMDVpNlY3VW1qaWpoU21JL2VvZFhqSTJXeFFIamFtZlZPU1B5bldEdDU4Ym95OHl2TE40cTkzSmhwTDVwV0JuUkc2bGFhMXBFVjVtL3VJQXBSTjdSWG5UaklybW5BMnNIa1pwR2NHNnlzNlplV1h6NmQ4blRUZnRaaFFPYmFCWG1MVk1WcVprZ05ERmdEaTZYbFRZbTljVTJXWWpwelNTRkFTQnRxcXNTb2xpVVBLVWZiQUQxK3BpYldaNXlhWXppL2ZtV3NIUlhpY2ovOU5wMFp6ZmladEozMTExZWRnZkF0WDhXK21tdjI1MWRmRXdGQXRxRzh0ejJ5RHpMaUR0dmFiZXJXK0pxTmJoQ3h0U2dyTTZxNHNsVEpTNDF4YUNwQkdocHBEcnJpUVFXVjdOZ2RqNEY2aFNVam1vTFNCc3RaVGR2ZGZoQVluckJqVWl6bStnd1Z1OHpxaHNXYjN4L0YrNVhFVURVVFFYUUN4d2RIeHk1dmk2WUhuczI4VWlKaDBuN3hJV0MzNWwyc0dWUXFTTEhmMUNON2dDUUtrZUdnUjhhVFdxVy9CbGY1S0NBUWdUbXVMQ3hNelJqakxJc1I0UWczVmpvNithdlh0bXNDSm9aTU9rY2J6RjFLT0hHRDdaR3lrbGNXTXhzZWlEc1NtVXdDU1JieE0rT01WWWd4S2d3dlI1Wk5NQ1I0MU9RdUhzenVRMSthNyt1ZjNnTWVQM0dSR1hITTBHT2RiR2hmZjd6SWFSRUIrT3h2VGgwOThCczNmL0RBWTNwb0R5clFVdTZURUh5VWg1ZHRjaWMrT0NoUUZqZUYrUkR6NHR2cWREOUZ0T0NpQTJrZklIdmVrMlBMUmZ0QU84ZHhZdTRlMExpejdXQnl5K3dEeFg2Wkd1clphYnJ1ekd6V29PK21DK1pGa25Hc0tUdUx6TkhDSkM1SDhnVXpGczUzV3JCVk1nSzNJbE9CRkwvQkVRV205alRtY1I4VUVrMExKL1FFTURmZ1BIVFpDcXFXRi9vS2VldjRVUjRxR1ZVUzV6eEIwTmZ5clFkblQ4d2ZkRWFMdHBjajNKaDRGYS9HVDZZYzVadUFpMkRqdXdjK0liK25PSTd3Nk1hcU8rQ3ZLYTBqemFlZjREcVFvZVVJQWtka201dTVuUE83Wm13VHpBQTVWVWZ4b3VTMkdGQUlNQWhBMVMrZllZVklwUGNYaUZMRkNqbWdlT0V3QVVkRElIdzYwUGdwSk5EMk9GUkZid0lNRWF4aHBLV1c3Mlg3bG13OE9ZV09GdzJkWnNuMmROdjhKcCtmRkk0WmhtVDl3WmNaYTlnU3VBQlRydThodzVrMG1lQ2o3U3NlOWRLZ2dKUFJSZ1VzZVVWSGFrK3h4OE1RMUZHRGhNcWF1bG1uUExuQXREWUFDUzlPVzZKZXhlMUYrNHc5dkprejVVeCtxZ1c4NWpreHd6dzV3V0FXNW1IWnlmek9SYk5NekNPYzVqZFZwaFpzVXBzZStwR2dScHhtWjQrWjg5aTlwTzN4eGhnNVJoKy80YlVDakVwaDYwT1AxL0dXWnJXb3JpN2FaV3VRaStMWkp3WXAwYk5NZWZaaHd4NDk5aW42RkpjQUs0RG1BR1RJaUZXSnhEVHp3bEhmemZ6YXZRWWQ0eVlNeURTWVBDTE5tSkN6dUZGYnBvNUV1aWlRWkptUWxySXprRXhCR21LcDJMVGppa2lQc0tmUHZGMkpkRDR2MUUvczJlMjZzeGdDcnVDQjZNeVpMYnNJUDJUZDl1bk03cnNzdFAySDZGQmdVbE9CNjBDL3pZNHEzUXkwcHJuY0FTN0paTTgxMnlZZEpaTDQ0Z0lETnU0NjJZUmFUenk1SEtxN0xqeGpGT2NieGFYWnBCMHJiWmJVUFRPYi83cXhrZlRQT2daL2RLS1JnR3o3YmZJc29RMER4djN6OTgzTE40WW92b2FibU5aMm5qT0tIblo5c1JkVEdqSnF4SU9ZTWlkbkp3UlpEcGtUMjJwcGtkSVVOWEZTQmhYS0hHdUJoK2hsMytqNWJTcjJYTU83U0IzVkthWDJCanJPTW0xNHErUnNPR0JIc3dZRk5yK2tZTHpxQU0wM25qQjk5R2pxamthRHhNZk9hTnJXNkU5Vk1sQmlsVFZ4Y1dSaUFKZXYvUCtUNGE0TmJZcUVza2RzUzRhNHJWS0xLUUpOQkpRRmJTcmZqdEJtTW9FVUtTdmpmQWxBbFlUalMwUmgxTkhVdE1XSFc0Rm4zMFlVMEk0STlBUFU5cnd0dU4rYmVubFNjdGlFVFJZbTRnNGo3dDRBSkpHb2Nlb2tPUmdRTTh6MGZIOU5MTGFTUVJFOFdjQzRGZmthc0NiWmhYNms0c1NiR1hOTkxkSXZtUUhPQkdvR1Y0dGdOSzBzOTN4ZkF2cmk3ZW1NQWhhVWdjR0l5eWZmZVhTcGJIZzkvZDhtOTV1OC90K1R1Ny90KzdhNFR4L3NvL2U1TlB3enNwdktSck5UajF6cC9rL2Ivelgyb0UvLy8yU1dlK05xdmdtUmRVMGFLandSSXYxNnBFNUZVZW56YjNvNzVBamdIRU9rSUY5K0dYSTlmRU5ZS0g5Y1JrUHlxUTFHaFBYUytMTEdubVgyZUc1OWs1VFp1eXJGWE05RG1UN0tsNExtbVJ6WVlMaTVSMmZEa3NLSWJmQzVya3hnQURiNlIydVRmZW8xL0phSlA0WjJ0UWJ2NzVpYnVHOXZRYStvTStYYXVpS2FIWnM5MXJJeVFXK3JCbUlvZ3Y0WUV6aDMxOWZkdDZlZ3I4NjVkV1Y1NjRySitKU0srRzdpVStJZWJqL2VMeGZJOWhGWE92RXhjVmROQzk1U3h4MHA5SS9hVXoyYVZZeFh2YXE1YTlqaW03Mm1TY2JzQXoyTGEwT09icjB2Q1E5WUhkaEFwTGxYYS9XTXVvdytjLytxVnYwRHlxTXBYTEptZkVMWDhFYURidTF4ditFV3RKQnZvb1QwYStrVzJPbG00MlkzQWtSbURRWVg2UHJqWld2OTJwSmtVQk5pWDZnbzJkTGhlOFlqRVFPMXd5cWN2L1AyajJ1aTVIMlB5eXRPZDNKT0FNN3UxRTIyL0ZxbmZVUnJkdmIwNGk3b1g0TkRyeWZKTFJvdURJN2FtcnZWcTl3KzdhcDAxNGpGRnhxeE4vZXFWN3I4MmFtYWM3MTI1VUN3dVVkWDYraWxBaWxrdnNXdUdBaFZxbzJPK1ZPSytkV0NmUWNaN1NxQytPcTkvcnJNUElNenVNU2E3S0cyRmpOZ2lMY2szLytvNVZ0RE4xRnhEalJwc2l4TTNqWnd5d1NrQ3NJcnhCR2xtZXhLT3V5WFNxd1gxSXdXaktuVWFOU3J4djdtenFOdVRsVVVWWnEwM2NsYSt3L0xkQk82Vzg1c1VidElLSVlWS0w2SDdIaFdVck9yNENGcVpQRHhtKy9XaDVSUEhxWDRMUk55SWdqUEYwZVVsRElUdEhPZXFyYnVuL1ZUaWZVS3dXaWhtSXBBbzE0Ti9wL2dTcXpnN2x1ajByN1dLS042T0NQeGw0WExCMUJid0tFR3ZZd3F5elViTzduTnF2ckhtN3RvZnFCTTBkTG5kcXV2ZEVMQjhtQjVuMXpQV09qYTVKQXFTRVFyWGRDSDNQRGV3bjJoK3dvSmEvV1N3c1loSzlNaldzbDA2N290M0FGRHNsWG44N2RTaGlSbnZ2bWE2Qk92OG5RT21IVVFUUnd2WFc5L0Q2clFjUzAyWGozM0RiSS92eitmWElidVNwVnZWcXZIMVhmTnZYdXVtaGczVm15K3JRaHlqVjl5WG5SYTJiMmxMZGEvakg4YmJhVXQ3TjZhNFBpbFRaYzNtYmxqSmJveXpvdmNvdTh1ei91UElORHo4ODRST2o2d1cyMTB0eU8wb3JGVW9QWFhOUWJrOVpKWEdWa3JvRzZaTXk5WFVQTGEwejZyU2dxbGdYS2xiVkJicTQwcWNYOTMvdDBQY1p2c2tWSmx0TTFPeWJodktreXRLT1lNL3VWMHNWZ1RVZUlCRldGZzJ1VU8wRGZ6RjliV0JYdGpEanZTSUhsVjI4MmtuQmxML2IvOU5qcTR3TStNQmd0bkVSZUQ1bHpXWURTMkdxMHYvMENibTZSYTEzd0g1QS9ya3R5ZkxlM1kyczhxOXJ4Yi9LdXJHSWptSEhwUS9zYTlGKzNHMWpSbE5tWW9RdzVYMDhYMmZ2clRQbUtTWkR4ZGpNdlVwTEpIcERrZEJiY3h3UlQ2QnhHQ0JzUXgxS3J0U1Rtc2VBQ1pCeDJ3a1YzamZMVFkwSUo2Z2tpN0tlUWNYdWdMK3ViUWo1WFBidERvekJtem9jdFJhK3pOMmt5UXV3WWJLWDNuY29PMFdsa1FzSS9PQ1hyY2ZiN1BHSEpmeWY0VFB2OE9WaTJ0c0p5Yll6Y2JNcmdyQk9YR0pQdS9PaG1CRUpVZmpnbmlHQzZKN3dnQ3VHQzh4eVZSRk5rVW5kNUFWcUgzTEhBeTgxd2swdVJ5SldHZGI4ajcySUMwbGM3TmIyc2dmTTI2ZVVPMllmYncrMW1LU21YMEpsUFdaR3cxVVliNkRHa3laU2xEZXNOdDFiVVhsMFo1bzZFZmU1MEFXbXhzUWQxQnBNTVlkQTR2OVB1RFF3SFhpSDk2Q2I1c01lZlNCb01oWjhTYU0vcS85QzZiTEM1TkdZMHBLZ2haTy8zMnFUMFZVQVlxSFdER3FWYUpoOFRWSDk3TjBSbmlrYXBkeWwybkJKSVpWQnFqdzFDcmpnTGE2V0F6Wm5CM2VZRWhvc3JMNUFZSVoyYTJjeHJuYkwvV1JpVVJmZGkwNE14czI2VHNHMU9sWXYvUEg0Y0FoVG9nSittYXVFSWxpZTBJQXJKTEpORG1iSE1vRTBxci82aUxuQ1NqMTRkOE5INXFhVlc5UVJBdElvdTB5N05rdHV4RVhPTFVHYzZrMjJEOS9UYzJzL2pmblJBaEpJU2hqQXUrNlcyMTREMVFNZkVCZThuZ0krUWtlY09tTkgvNytTbWRNUEdkYmlFMHlhdGd2N052R3I4S0JiQ3lJQWwwMmxvY2RFZTYydXZjYTd1czJkY3V5Zks1eUNMMXN2SmVkNjJ6THJ3UzhuUjduZGloMlJXTkJ2aFN0N29wVzRzM0tHdjlKNEk0bjhmU0tDUHVYcU5BZWFOUlVDUXZObWFWVEJCdU54amhObmN3aXhvTUdkUnpybTh6R3VEMnpTbnpaMFlidWpKV2t5bHJNL1RZZDlZZEVveW1qTjNZYmIzclZyYndYQnpwb1BXSnZCM1VlYzg3MTUrNXNiWENLWk5wa0NLNDJEZmtjNDJFd3E3UlJYNmZQbzI1b3VmNWlkR1dldDg4cDJ0a1dxS3doRmdKV0hNdFJyTTVaNXkxLzY3VDNDUlI2MXN4WDR6VXU2TXBGRGRucklidVdnZlZ6YW5mMkZ0Sktjc24vNnJNclNuS2FFemEwK2MrSENwbStyei9lY2dUUk4rLy9iVldZd3AzaGFHYzNtOWRNanRRaHhOKzJDR0lvU3BKZkhzUXdnWGp2YVJsUDN0SENBSzArZE84MnBoUUdqZVljOVo5dU80dW5hdzBVK3V3cE5TT3FMUk5iZFgwTkR1c21BOE9WVDBua0RWOUpWQUY0QUZSbk04dE5qVGh0U0ZaVG05QTJsMkJOS2EzNXFuMkV5ZElUMkowTG83N29UblFremFkLzJzeEVVU0sveHBBcmJydWxCMWdKajM1ZlZHVzIwTVdhVlk5V3VSbTNWSXhyZWJmNHRwKzVaS094NXNoUFZObkpJRXVQOGNXOFlzY1NoM3BhcEpTOXJSODhQRE9MTEVHT2pjWEViKzVhLytsWnNsL2hHOU9ndnVidkNkL2NYMmRUaFZLS0EyVjZncjVKeHdJOFp4QUNGb3A5V3V1YXZOdDJsUXphYUxxRkdxdkdoVFNna3VSOG9iK3NCWU9lL1Zkb3U5RkZNOTU2cmhROE1PWWVGTkFHWGlHZkdaVU9icE1tT1ZMdmlUNS9tTTRDYmZUclM0OGp0aTlmL25KQ2RjeDZTMnpOUG5KL0x4SHROanJxYXRmS0RLUzVNMXZaMUN2ZmY3NjUyU0lWcCtlUWJvQXZxQU1HVjZQcjUzNGRQYU5wczlVM2ljOVR4S1Z0bis4U0FNekh0bFl2dnpocnkzdkY3NVhZSG5vcTJYTEh2N0svRzdCZTRVMWc0Zi9XVlcvUmlIeEM3MC96NkNPZnY3YTV6cmgvcHovSkwxSzh3YXJhT2J0MWxmNjVBOUNjMStaSTMrVTd3R21WWVRKb2g2U2tqMWcxNWNjMlM1NWQ4L0x3dUxZUE9BZUVJQUlCTTRnTDdvV3EyTC95VGNPclBMZTVZTFU4TTdPN3RzK2ZCc21Wdko5Y05WVUVYbnE2Q25TZ0RzckVQV1JSc0RaTUpzbisrYUZXNktZaHJHVTUyb1M1UmdhNXZtVkZRdVZDOHNoZVlWWkZqQVoxRnZqOVFuSEg5TFhlS3krOWljVEV5eTZpNVd6ZWh1aCsrcTcxeHg3RmxIdFhNU0VKNlpoaGVTUTVENXovVVVWaTVTTFhJbGR1T3kreEVmTUM1RDBzUXpwcmlYVTlSYW4vVE9KcWtFdFdIZTJ6S055ZWlKKzVvN2kwVlZZMjZ6cFh3Q2x4Y2ZTWkQ5Qzc1MS9wY3lZTXZDMTR6TEpWZXhVUmgvWDRuVnFVcFVJWExkcnNBdXBWdFZ0ZnV3WnI5Z0xNUElpUk1zVmpxOWdhSnpHclZKQ1NjZW13WWpmUHhBQm5sVHFRRlFkakk1SE5vZTFDNU8wMVpLaWdZV0JMWUJkTE5Zay9aZGV4Um9WNFNCMmZMdzFjMFhDSXZtenEwcXJ5RktCU2ppVGtmb1ladlRvN3dzckFNSFpmelJBNTlZakJaVzZQMTArdnNwZWorRWVCWnJaOHVlZDA4NTZ5c0M1QkRmdysxY3VFb3BvcmFaVWw5WVZHbkxzalJCWkV4UE5KZ0tCMXNabUhsNlRhQXpZOEcxZUdXRk5HNktDYytQMUlvMHRxOUxIS1lYVWZady9mOFdSTk43M0JmaDVra2dlcWY4WldTMll2a3MzRWo3cGZxaTcxbTVvSk1nR0k2Vk4xT0Y2TW8yL3I0bHVibEFUUnQ2cEJrQk45NW50WFl6SDJUL1B6TVYrWWVpNTg1eHVUVDFZUy84MlY3ZW5OVlpyYTNWUzZPR0JnQyt5c0lWK1kzZUtYcjNBRS9BTzBzNzVsOVlZMHBTTEdxbFVCa2lvRFIveFZEcXQ1Ny9BM2FrKzFUZHVMdUc5YVdmU0F4cVhiNDdSbGpXcThZQ2JEQW0zWUJBR082K0hPUXA1bUhNZHBqRVl1MU40RDZOWEJQZ0l0b2xoQStvbWhjbW5SZEJSTndzZ211VW1mKzh5RkkySUVIbFliRzFaTVF6QjBMRGtOd0hrRTdUVzRmenUzQzB4aHpWM2IybDYxWkFuNkJtU0tlRmFLU01JR0tsa2VBOXg2NHE5K1hOZHZuNW9tWTJXcnd6MTlkY3kvdG1NZnc2MDNPS1Vyd2oxenE1VjkzQWs4NnlaUnFQRmxyUlljcUk1cFBHOGp6M1RiRFRWV0MydHYrOHFGcXNJSTdHaFp5cysrVDFMWFRQM3k0L3p5TGNhYlQ3TjdkQUUzZFR0aWJqTW96eWtWb0tlQUdZMnhxRzZzMktJZTdSSmFnM2tUT29NWmNEOGJuVkVKcVlGNFZySGE2TDdpVEpwa2JNWGMwVHFPR3pLblZHYURVMkkxb1dwelV3ZjVBTlZZTStnbXlFMDdnUk1NaDBXSXNaeVVVbWhodW5YV1pNbTVmKy9IYnZzMDhtREtyT3JjYTVhc0c1aURqN2FKYlk0MFhuT3NFWmNVcXdiRHYvbGZyRGJVZFdweVhxSGF0Y3hiWFRUVGdiZUo3OGVYRjVuM3p5TFpQRnZyT0RnbmhPQnAvdkhUYVdMV2hINlRkbjgzZlI3c3RFeS9YNXY3c3JRSzFYWHZGMk5hWVBSTnFScURCaTQwZi9uNnhRbCtMNVE3WVorNDNwa0VOOVR6QUNZbW9HdWNUeFNpT2N0WW9BM0poQlp5S1hWd2p1Y3ZCbzVHSFJxMWNpS09ML3N1Z1Q0Q0dobStndzdLOEVLeHp2U3ZQNHhCOVlKbVdVN0p5OCtJcFU2REVBMS82NFJQYzBJTlQ2M1N5TVpHd1B2MzhlUHM2NEM3RmNMYXh1MHFjNnE2dDBRNlZFQ2NFTEpjS1ZjMmd1Q0lJMnFsWjkrdS9uWjF3Y2xHQ05va3dESHhyNGVScVNIdlh6dTFPeWZwSC8vejc5aEJzeXpUMjk5YlZVNGRobDFpWWNSNUVtdkJOTkVsTkkxQWxvcTF6RVVKbEY2Uk5MTjB3RDg4TGZ2N3AwK0NiNE9iSmVxMlhOV3cxdTlvQW9OSXAvbUpYd3BLL3ptaDkzNVBnUVBaUmFOUk5KTlBwVWZ2T2ZlT05sZGhGQW8yZ3FBVzhWQ1FkbFdGMjczRFpENmFaTnlWbTZPN0ZsZkRhcnlpcnZFOG1mUTN5NUxwSGZSSEFDNGVKZEU4dXZNclRYYUdxWkRKT3JVODJzYUZ3akVYZkRwanpnbFU0Zy9kUU00SjZhMDRqei8xVUxjaitUZi9ORlRpTldYeXV2OUhVQXczQXZlQlNNSC9DRHV5elNIUjlNTGZRK0JXOHNFUXRFMkVGZ21GQXFKcGRYZmgvU3k4M1dPZXllNUxGaUhnS0VwSjNobC83V0JiNEYxcmw1T1d3WElQaktaQngxeG9YQzE4OXdkdngvaXp1RmRYanFDUEkxUFZGOENPSzk2ajRkTWRqa0JkS3JpdFNIVTduZ0ozZC8zZjd6L0oxazhFelQzenhTTkJhcGgrYjZ5MVRXMHJGcU1Lb2RjKzFTMUZIMHlMcURDQXZEcHZMZy9iVUVxdGZGZnA2cHhwdGxMK0tDRFRzQjExeDJKbDRvNEwxeXZLY205VXVNVllNY3Y2WlFja3U5V091dU9za3VyYis0Y1BwVlBudC8xNFpzYlNDZE9CZVVZNWdPM0FVZTYwU0x2dytCU3NhcGF5cmVFSjBwc1pmLzNXaE9mRkh6bzdvTit6enp2LzNsOGpNVnByc3k4d0VsV1pTcU82SVJNZHVYa1Q0OUlwV29LcUM2K3EwR3ZjUWsxSHNhbGtUd3hkc043NnZoSHJJdkFQMllSWFpMaU5MOHJIc1hmTEpsUzNNV3d0ekhjdkRjZzMrZm1ibTlUOXY1YkgzOWMzRGorekxqbDJmRVMxNlZ1dkx1b29KRFgwOFBqOUN6bWNXL3U1ZkI2dTR0Y2h4dXhSdlJ6eXhWdDhiSm9WYk91bVJVdFl4cnh4bkRNdzJFenZOeDM1M1RueU85NmREM3NXLzhsKzV6V2JKM3NLVjM4MlhMeXl3M0tXM1JmNFBvdlBrMjNNcVJjb3Z0eXZYeW41aU5jKzlHbmk4REN5V3NDOWlrakhOVGVTek1mZkZOZjdjd2NDdkVlZk5aTGU4Z2xobUZHNFBpYjRqdE5DUkVLdWJuekpWNDF1bW1ELzhGTVd6K0Z2dEdCZDNDMHB2SmQwNGN6UlRXYSs1aHhFWmRBOHhmRmM1cmpJdXhkQSt4NHo3TGN5OC8yQ0E2cERnR0g4RVBsbnByRHFzT3p2SWNiOFVaRlhxNW1OMXdkNVNMam40K2JQeHN2Y2FxSU5VUlJvL3pXMlRhOXBYamR2OWYzRmt1TldLem96d3FncXJ4U1VYYW1lUWFYcFN5TVlXVzZsN0JZb1pMRm5lSDdyMHdobTZvQ0ttN01pR0ZHYWZINmYyN3NLV2FYcGVVbDNSajFBb1dWTkdPR0Z3eFlkMGxKUUxJbi9ycXh0VE9tU3NKZDNCNTFoQm16cFJvUDJWYklWaFI5bXJSTFY5aFgzTnRvVFRGakVUV25CK25DazdsT1UydnM5U0xYWmVJaWtUcWZhSmFldndKRnhibERxdmQzdnI5RGRXNy8rNkpGQVByL3YwN3IyUTZqUWZUUWU2THpXUFBCamcrdWQvNFFoSHdkTnZVZmRLUHN0bXhadGlxcnk3S3lnYThZeHlzb2JWOUdxdHRqNEN0Z3RiT0d2aXZycU03b002eU9zbHQ1WlpoL2tzcXFod2ZBQnJVOUpFdHIzS2JGZlJGUDRjMlNtNFA1N2ZTdXFXVlI3Ti9YUlM1dWNHbnByeDVUdlFDZS84VW9SZVRxSE1qTEQ4WXIvdWFHNUhzbnV4NlJBWTkyZWJ4UGVMM1R6UktKV2U3M0R2czlIWThDd080T3Izdlk2Mm1ucGVicGJzOGRtczhVc1hFWW5vQ2NjZ1ZFajhQUVY1Q3JCS3JVTElJS2x1NDZlMmNCeUlPVzZ5WmJDclpoL1Q5MVE3NjZRZFRxY0pXYk9pbzZYMEorMUY5ZDNJR29PM1FrQjFVaElyTE50SlQxL2RmLzZ0ZDlQL245MDYrWEZja3BCd1BtT29UTzZIVStYR2NJakh3T3lMUkRIcVduRUMwdyt1ZkoxSktnZ3BFd2NqVVJqdUVhZmRiMHlmOUxJbG9VWE1DRHdMOFZMbkZZQzhUVTdxVlYraXJScnkveFdTK05MZDAxUnlCQ1VUR3Y5MmI1WFYxSlpQNS9OVHZnSFVkMVI3ZkQyNFdmRGlDcE0yM20xM054Sm1LeDl1a3JybGhGN3pDNlpydDgrMXJmdGUyNFZlNGk5SGEwYU5VSit4WExCL1dmWmZFcnlwY3RYN0hpSHo5bDVOTG1CSjdBVEhFOGZ2SXdkanZHZDMrQ1lBamFUa2tsMy96M3dCVmo4dk1tenZEQVZiYXNBZ0tHMU9mQWpJbUoyV0VQWnNGTTJJWmI1TGRzU0wrN0JNejV3cnZONlJxeFNGVEQvK1c3QWlEL1R2T0lXSnI5azh0NTVYaCsxYVgyVTZxbmx4TXpHMmFRY0x2ekdYYWZ0MG9PY0ZXdkVWMlpxUXJCdERVTzRETEt2RDhmSmlVdlArZnRoQWZraWdHUWlsTkFqdEJVWXFYNC82ZUZrcyt1QzBYSHpxZEtXMDd5TmtKVHpudTIrL1JHNkRIZ2VsYWJtM3o5YlVkNVh6cTQydGpaWTlwU1h4a3NkLzdtbHN0bUh2RytPNlhVZTJJQk16bFN6OFZ4VDhVRmtoMmVReUorM3RmL0cySkNsZUhzYnpQOTBCYlJuQ2F1OUFtdWM2WlBHQ1JYcEhQRGxOYzlTbVl6MVBLUW4xeWViaDJodk1wUXRmYkl3cnBxTkxURzFObGwyaHh2c0czcWFWOUxiYXc1K2RiR2F2UXBOMXNIT3l1MndKTGY1VksrVU9ucEhUMm9veHY0cU1vZFZXZ0pIN0JOZ1pIZU92dGZkL3N0S0lOcmNuVlN6TnhDdXBQUWtBUDM0eXNUblFObXQ3VmJaYSszVU5wWWdqNVpIakJza0tLMFFRdHR6eGRYWHB4OGRjT0RydEp2QjNZdFgzOUc2ZjFUWlkvYlZmWkUvb2lKN3NVRExsdDl0L0taRGMxNXIvZGtldU1iNHVDdVY0OVpFUXlrbjJSWU10bTlSUU4vbDNXR0FCWGtGTDZJb0hmOG42ZHZBa2hHTHloN2JlZ3ZoYzRVU0NvSWNQbmVxYWVYWHZnZ3dBZWR3dDJ3STY0NURYbksxMjFIaFlCeWpWSzA2Tks0LzQ4YUx2b1hVeTJ0NFNwZS9rVjJ6L1RZV3FxajNiQTJHakdzN1dqYm83SFlPbXJXb0NVU1BiTjJ1Q1ZSc1crRVNEWHJSdngrY2lTWkd0WDRmYjVSS3FVZDlubnRWQnArOUl4MFluRUpiVVVhS1dWTkhjWFVLOHkxblpSN2lvOURMUHlmUFN5WFRDVngxNzRucWxsNDlva2IzYXdJTEtodVBhTFdQWFhOdXp1OTJ1SEVPYUo0K2VqNXZhK05xRjVEeG1RMEtIdHl4am5qMDZwNUI5YTk0ZjNhcDZvL01WVWF2ZjB6V1BKQTdoSjhLWWVjNWVXVEF2aE02a1ZKOHNVemlJRE12S1hVYjVCK0pKVzV0OUpSbWZRb1RoK3RabjE0b29wMXRMR3RlR1o3VTlPMG1jNWx5ZFdiQXpZWGJkeDJwK3BPL0M4elNRVkdqTy9CM3RsRDdPODgzRmsyTnFWV0hwcHBXcG5FazFuL21wWm9WNmFKZEpIbU83TzlRVkpTdjBodGE3Q1U0SnR5Y2JndC9tbERyZjRVWjhFUGdLVWcvQ2NJL2dHREpmV043RWtlK3dTYjlUdVhOMWttM0NCZUM3STVudDRDb0RBbG1pNFExRE44UVhkdkFWZzQyMDd4OWZmQklyaW8vcnMvSzF4YVY2UnM5eHM3WHprb1NDM2pReW1Cb0FuYzBmTUdwQmhocHJQZXR2eDlycmRYc3ptZTRRS2dzSjhZUHIwYWFidW5xZ0F4TVFUUUR2K05QY3d4ajJPeU02ZHUvM2ZubWovR3YxMWtQUUlCZk5CY0N3S1R3M1VnUzV3RnJBQWRSeFZ3UmdXOHFRSXVoMXRIS2xPa3I5cll5MThmYW93aVcyc2c2N1lHTDFqSlpNSlV3b2NxNFR1VnlCMi83UUtLN1hRYm9QR3dCcUxXUUQ3V1FMN1hRSDZ6WVEwSUkzN282KzJnYUFINzEyM2QzN2MvUERkY0swSUFoL3ViRVhLM0NXd0hwMkV5UE95Ykg5clltZjBCMlBzaEFQTXNTSFptY2V2NEZzZnV4ZjM5eGYyelYvLzdENHNYa2JnWmh0bDhxd1lPcUlFSDFHQ2YrOEVmTDlOcU01K0d6VmYybjIvK01FZTBtVWV0WmNCZS9TSG9ja1ljY0o3NEJyeDZkUmdBb0QwNEIwNzBxY2hvellMa1dvYjY1YTV2OG1lV0ptb21BR3B3bVBJZlFCZ1c1TzhXYWpBSHZvMWR2L3lpNDhiN2Jmd1RQWjNzeEFHdi9hZW9ZUUFndmw5S0V3RHM2UjY0MGZ2MXdiSHhTOUgrVDk4OXJTck5icTNuTkwxZkhsd0ErRVJET0lBZmgxemt3UlZIV2d1UFRtRWZXSy8vM1h0TjcwY2V6cVhiUkgvL3M2RDNiMytRc3p6c2xOSms3N2Q5R3hsc1RDSHB4ekk4dSsvVDc3ODRRdFc4c29IM1ErakpCSENSOGtyNFJ5QStmNnVETXo0TWNqWVA5N1NodjlIQ25wOEtmM2lHVWd2YmcvZER1TkR4U2FJQUtNVC8yMWNaOEtEOERMM3h1VGhGY1cyaTRwOVY3aFhMVzBCVkgxeUhsNHQ3UEwyL2xRdW91emhYNzRyd2h2MGFrYktucDg5N1BOTzdGSHpqb2l1V2xGTmVzK1Avc0JiUC8yS25IZHo4dW12clBaU3hGYkxpd1Z4eURVb3hwUmszbCsvOHpNZVBoNVIxR0FjQTdzclYrNC9wQW1KWDI1VnNpNGd2QXdxeFdEVGFFRkp1eURRMkVjbldYcWxLb3BLcHVhblJBRFRBaFpPMDdYWmJLamtibG5XcDdSM1lhQU5UUGI0cEdUZHp1VU9xZFkxV2llOG1EM2pvY1QwNlV5d1FBVWxBMjBZQm9LSmxYUkFKRE1sTmtNWjd5U290WkVRalFJL0VVY2xXbGRXT1hWUm1DbGVPZ3JZV1ZJMUJMN21iKzcyZTBkTnJzTDBDNGRaczNvRUtoYXh1TnNuQkViRnhNa1NFUisrWmpMWkhZaEpWVjNteG95VlJhVVQwcWpvdnJlZ2NWZFJzWGprbWFGRnRFZUpsamVRRlZRcG1VMDRRY2JDSGpBejFpVUlhd3ZsT1hrTzZMUjZrWGVvbVhNb2paUk5WM2ZxcXgzN0hoN2ZVZWdEVkMxK1pxRXdscTY2M3pjeTkzcTU3NCtxdUFyMHR0QlVxZitKdGpGaXBjMEJhK3lsNWE4Y203WXpOcktOQStJUUZPM3BmMWZyVmJlMURTcGhOV1J0b0hlSk5oZnNYUmVleHF2c0ZxU2ZVNzU2RTFpeXJzbkJaV3hwWWFHWW1JUkt2V1M3ejdPZy83aTRnZG00SkRhUmNtaGpySzFNNk4vUmFjbU9KaEdobDlZMDRIS3hralovY0d2S0NuQXJ0ZHV3SWRLMUlSaWhXdHN2b2I1SFlXVmFoQ0w1N2laWlM5U1VxK0RUSDg5MXVBSWp5bFZlbk5hMXRTaUdiSFNuMnpYbG5wOHVxZDducW1QbW5Dd1hteDIxWDh1UEh4emdmRUl0RXk1OXR0OSt1djdMWGRsUG95NWw2NzFsNE1BSjFvNVdvS0lGMkYrNlhaMVR0NjJMTjVndXhXV1dsRXRNa3hQZmR2TnhGcllnUjEyMVJsMnZhc29EOGVnNjNzRjR0UTdsUWVHeGJQZUxNQ1RpcXIxd0RMK3ZTSmZWMis2TVhmVzljRU1QSzBMLzg3a0VpOFkycmI5VkR0K1A5R3lMdjVjQldKMW91N2NLZEV4V2VyOGpQNHd2RFNzK3o2QnVQYUdLT0wvQ21saVNhNGJ5aUx1ZyttUkJSUmZCQU43R1NaMDJDNFhIOGVwZFdyL0NCOGdiVVpVcGVTczV4TlFESU9ZVkExRW1JZWlLWFdLWlJBMVZHVENUeG9tT29nT2pRRGNmWCt6MXJsT3loblV3dEVQWmlRRFNsU1EwWEhPVjVzaTllNlozcTY5Qm50QzIrNnZQb1B2Qys0KzBWYlR0NC8xLzh3WEl4RzQ2bUU0d24wSGkzL1hBUXBpTGdBRlpnMExqNUtIKzFYQnJIUW5waFRaMHYrM09qSXArNmIwZ3M2dW9TRTdxVndqdTN0ZWg5SjlCT1hjL0N3RHkvL2FVbUZxbEZMTW1INWxVMVI5aFJVdzRTYUkzMHFGSFdBbm1tU2xxbythdHVHNFhzc1MxNXpmMVNzeWw1YlozYjRwRlg4N2F5QWNkbWNaK3pvZWh6em9YRWRhUVNaa29vTHZtVjRMbXp1eDZ2RXdXN1JWQ0V0V3QzZEFVSzNmRmlaMWFkaTZWT1FYY2g2bXpHenoyaHpqZk1LUXFUamlqMnUyYXBqaVRQcmFSR0o3N2FOalRwY2Q2Z1BKQldBUDlYdGFwY1dQOXgrakw4amRQUHphL3dxaU51ZkRBdzYzYlhLa2xybXNBZStRVThKZnlmQTJ2cUYrUlAzWW4xM2VoaDUrdTVIcmJNUklZdzlQTHRvWDh3T1lHMWtYZUM0ZWE5WjAyTTNhTWF1bno5Y255YXZYcjdMRVFQSHErcXBoaUpIeTBKZ0pnQXlzem9tejNUbGxZQkNkYkl2Uk9jVWVMZ05aTHRMT3BGcHJYMDRXS09nVjVBbGl3OWV4MmJNMndmblkrbk52TVYvaXZ1L2hPenhGSFZibEpEV2FOSjZTUmx1Vkc5c1ZxMHhyVkVYVGZVS0J1TXE2Z1BRWGRVczFJeVZ0U3dKV3h2aGQraW5YUTlJQzVLaHhITE10NGZuSm9zdXRZTXRxWEFMQnZuUUZRQm1IT1dkbFZyK0RUUHhsSWdkMkdNcThsaFA0OFJEWE91RVFNWmk4OStZaWNTa3RnSklMbm1MaDRPaDBPMGVNcXpkbzlieW9md21PMzd1aFBySklkY0w3MnNFNXg4enFpb1ZZbWt4VkZGYTUvYmxhbzNBS2doL2tFT0FtUHV4NWJETk9RcTFiSUt3VW1KaGlZSEMzQ2NtWkx2a1dGVmtRNVplam5FOWNCL3NDSWk0bFUwa1k2ZXRSVU5hWHVvUUx5dEowTm95Mm9NQ2dyTGlKQ2RRUjNEQk9mK3l4VUNqdkxmUUZiRWVhL1RsNzJTdU5PdXBsVCtuQnRhV2dybHl6TmNST3hzYlgvVEZkSnkvMmd4UGEzb1UyR3BZYkNoTDJ2NUgyYXlJTldOUUwvem1LellxVUNzclYyYXNyZVhSTDcvY2w0YVQ2N1NNVEF4RWZKTHdoT2hOaFhPSnUvcDB3Ti92Q1ZNcUN6eE9qZk41ZUxSTE9DS0ljK01yMXhlNmZBd2JGc1c0TDRjMjdtK2F0b0FkQVRicGwvTjNSSmdiQjBuZk0yNkxmdUtrUFJzRFNFQTBWTVRqZERYWTdKNGY3OCtZRi9QNCtzaFYraGNsWlRHZnlQVG05MHVWS1BSY0JodXRLNUNLV1llOXBnYThjdUNxUmpoY01vNXhOaDRRY1k2SlIzYWs1WTQxbTVTUkI0V0ZGVXRzaXFBVWpVU01CWjY3UGNNSWRCTWEyaWNGSjdVN2oxV3NmMU9heUdjcXpFekMzaUFXVWE1Q2pXYWMzaXYwN0NTSlJJbUdGUGJpZDNPcjVXQ3dMZjIrNEoyTHNiVTJVRmhWU3dUckZxRHpJYzRDbUJOakpEV2xWYlRhRFFhNG1Za1hwZHNreUozZFRVZVQxeEd0bFRJSnVGTU9HbmhPbEhLa2hORUdoSno5QmwrakFsRE1Db0RRbXFaekJXeVVWU0lQSFZjNjJRRFpnOVBITndGWlRERWtJa2xtZ1FpWUxCUWtENEhZOVZvckt0YUFvU0xLQUZwTmNaVVNobXdJTzJzbFJXVE5qV21WbEI4ZjRSUnZ1RmV4d29xUTFaa0JhdmpodUppM2dvZHlmREpLd0x6QUZEdm9oYVdoRFJpSjkyalRvd245MzZ0dXdUaTNKbFlsTXR3T0N5dDE1dkYxYUJsQW1aQTgyb3RPZElHQ3gwV1FKb094Ni8zWTFuWm9mZm5sRGxvM2IvSDlyMFNJRExtd1lPdUpjOWRhZjJ0V1JLQUxhM0RWOXBCR0x0bWJ2YTNwQzRhSjYwUjZYcWJHYTdSKy9lVC9kNVFxbitvOG9kWTlXQytwdXlWMDFoaUNId2NvMjRVcFZGMUhSMFNtdjE0SWNxVXNOQmpwWXJhWG9wQkY1SmFoNmNxT2svSmFGWG1wOGxrMEphTWdoQ2tGQnZRRFB6ckZwUXVBT0lzYVkydjkyWXdwMTBnTkZFcGNyZGg3dGFlTUxSdFRNa3hHeVV4U1ZWZ0ZTbVhaYU5Qc3hzWStJWnA4SkdreHBPYkFGOU5kMGFXMFBQd25ycjhIakNiQkN0N3BjcmROeStIMjhtNlErcFhqNDgrVU1IS0MyRk5qMlEzZWYrM2FScUh1UkQrbWIvNVNlZnc5NE1hTUxDZkdWWlpDU2Y2UzQrSmUvUGhCK1NtSzFKZk9EVTZFMVpVcTVNdDZ2V2M5emFPVTlWbGtndnE1SXpoZVhxTGhZM3A5ZE1QNzVvLy9jWGhMR2VmSGV6YUs4OHpKVjFmOC81NWk2cjY5ZVFmWlhEMzFsNzRwT2JqZXJQWmZSazNjNGZ4L0xVeGVZZ3RiTTd1dy8xcW9lOXpiWW5wK1R5TUI3ZFcwOS9CZHl6S2JxdGVLSGtzR2x5UVVGYkt4ZDdOTmR4ZEVrWkFBQkE4aWxNUEd6dlJTZ0dCRUR6WU1Ybm5VRnpSVEhVU2dOWjdWVVQ2a2VBZTI1cHFmOVFYMWY4NHNXRGlJOVBIRWJVNFpXdExZTFBFVDZWMFFObTllbDlpMExROUhlOTRRdkNsdW5JRUdpUmNSbXBQbVpRcERRbm1GNmtoQUFQeHZ4OS8zMy8vOThMSC8xdFNOS0lmQU1CYSt3OFo1QUY4UEcvOXM2SW4rZTVzRGdHZ1lBQUFFTUMvSDhnanQ2dnIvMGE5VTc3WFgwQm9LQlZDZW83ZzNZU050NnZWUTZXZDRuL3dsZXE5UWxaTlptMUl6eS8yeXVjTC9Bb0lSeTREcGZ1TVEzMndKTXJQNkNMUFVEZmg2dWVCbGxyaFJmQWI4SU41VzVlU1ZjYXBPK3JhUGkreGJ6cmZYYXpvN09kOC83TFkxUTZnLzU2bDBwZVpCQXFvL3I0dDRGOHkzK2hpQ0dlNG5rQWowK1hXVWdrdS9teWNmVjJ2eEUwWkR2cTdUK2FVdGhPVXpWZjlPSkFWV0FtQXJ5NXZ3RDRuelNPZmVZMmRwVXR0MithQWZaNnFkME5sTHNjNCs0azRKV0Z2ZjlRVHF2dEdMZVJqWmhPQzl4WjUxY0wzc0lEOVE1VWpaZHV4MndXcWtLcHRGR1VJTFpsSEx3clpJVDdGVUpjaXBCRDhmS0U5dSs4LzRpMFg4dHZidk9ZRTNCQ1BqYkhsSGp0bUl0a3h2aXNpMm9FdWZKeTBJUVlOekQyNm84K0swYkZzbDR2WS91SUpRSFlvZU44K1dRUTZkd0pQUzFpSndrK3oyRlMycHllNnJjMHRiVDNCODFMZmgyUzdoaGZVbXJGeUxxMEVvbWlJYjUzK1lLVmU3NUxNZEF3RGtKc0NjLzBTQ3NUc3hVK1lXbS9LZXVmSytXamNzRjdaWkZ6YmhURWozcG41eXhVdEQ1VldEc3N1ZUN0aWMvQzJNZGZJNTd6STlyMlFIdU5TZkwyOEp5bHo1ZGs3RW5JUlAwdnRYd3h2TzJEck12YXJ4R0pFcTVYWExMK0xGOVJ4d2VsSWRoTngwYlRIdEpvUlBSS1VUaW55bFpJRTRFOVhuYVVUUURnb3hCMk1BcEFuU2tOSzVKN3U0U3ZCdG5PL3NtZS8zdDAwQXViSi9NSGZSK2s4WkVjRnlnTUFCTkNRZnJRMkZJd0R0VHNCK2g4Y2c4TUJDSXpEb1NZSEFKYkJ0d2JFM1hzYzY5Mi9OT0RVcmpZbEdrZzdGOUpBa1U3WElLQllXNE1EM3A3ZHo5SE1NcnNDQXJBcjcwSStmb2FjM1ZlUThMWDVSSUoyUmozTUd0VnJZQ1ZHMHRBNktOV3dvZHJlT3BWYS9ualhVNnlIV0p4WnV5Yko2dTZnVTRkNHcxN2F6RUpNb1Y4cjR3RCt5a3Jrb0VaOTFGWnE1SEx4OWlYb0F3OCtIREFJTTJwcVdYRHd6b2ZYUE53YnNnMmZSKzlrNnlLRmdMc0hKa1g4UXBmbWpWY2RZbUZTZ054ZXIyT1pZZ29FRFpLQjlYMW1zbVJLRW5scklEUU5RUGxBVURZdWxTZkdXTWN4ZUllZmVxTUk2dkJDMWF4dzQ5NXZJYmZ3QldId3hWVXZVSXlXanRUd1cxVGcrY1pURGIxOWphcnArZlZWRWdwNWZYN3M0MEs4TmpucXJqbjB0WTIxRmRNYjdZb3BpVTF4VldLVlB5YXh5S2NrNWxSTmlHMkViUnZnVWlrb1RnOTFTWFNnYkJKY2JTMHdhNlFCcGlScW1VMUlwYW9rS2k1V01aR05pcnBHU3VHVVJDWlFwVFdxaEsrS2VhcUlxd281OFFLYVA1WGgwZEZXa2FseGNGdlkvUFczUXJyNnc5ZGMxM2FsSm0yN3JpdnQybHdWaFY1RklscGtwYW9CRVZaNVlWYXhFRlhhQk5hL3RwamZ4ZFplenV0dytEYytJUC9KLzR5eTROemdyZ2JJd1gwRUdiVkNaYVd3bHJTU2NqNk8vRTArSUJGaDBkMGkrNDV2MzdkbU5aWEs5VFh3R3Y4TWZQYmV0Q3g2WEwrQXBDbERXL0hqTmlLKzd2cnExU3M0MjEyOGJiRy9NdmlNYzVHbzVKYzNLbWRkWjI4bzdFVTdWckNHQlBaNE50TDg5L3RsWEYwYklZbU5Jd0JCQVE9PSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlF1aWNrc2FuZDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBREkwQUJBQUFBQUFkWEFBQURIVEFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR2x3Ym5GWWNoekFHWUQ5VFZFRlVIQUNGQUJFSUNvR3FJSUdHVmd1RUtBQUJOZ0lrQTRoTUJDQUZoVUlISUF3SEcycGdSUWRpMkRnQWFQQVpGa1d3Y1FBRm0rOFRSZGttblVqMi95bEJtekdoZGVoYlpTRjBSN3VvN2hrWkNaR1Q2aG5wb2JaVFd4eTZjT0RoMEVnLzlvMEZSK0hBOHMzSjFiM3R3NTlYb3pnY0NOd2pabXR0d0NWeFg0aExvcEVrVGFSWHQwWklZMkl0NGpmOTJYc0N2TVJMVXdqMlFvMElraGN4S2tZcTVpUXRjZm5pbXJwWjBqcUh0R25nSmJsL3REcXppaXFkcXdBem9RMFRMeDg2TXpwWDV0STVUL3p2OTY5NzVyNEFvb3NSQkRKZkJibWtXZ3NJdG9xTmJHMlhKOUNrZW9iSGJmM3pCQm1vR0ExSTVhZ3hHTzFHVGFvTkVGVE02N0l1b245Rlh2emYraXVpd1FFSy9XL2FobWlieitWZEViVlZSNFlOK1BkL2pjekNUTzdMbndXZ0lxRmw1UUFsMjFZQjJwNUtKRmxMNkpmN1plQnpmdTRjRkozcStBT0M4UVY2NnpvYld3WWhXd0QvVjVzbXZFWG96RW1FVFd2dEtHMlRQRzNoV2NwUW05blFPdlI4SkZJVmdaQmQybWJGYytJMWZZWHZ3TlFrWml2cXlQMGU5Mzg2eTFiYTlkM3pCcUdMcXdBWDNYcHpiVEg2K3RiWHpHZ2tBMnVKZlF5ZWxmV2VKU3ZnQzBKRlVGMWF4TmRUVTJIVHBTajdsSmwvbmVtcTcrOXZTTWsvNkphZEdzc3FyZ0dlZXRuYU5WUEw0eitkN3F4L3NneG5GMlQ1ZWdIU1VXeVg3QUREVk1LeG94ejBCY2h1WHhpMkFzQ2F0VFB5dmdPT05UT2JyT1NjY0d1Q1FsemhFYktCL3ZydHoxaXJIOGhzWm5hNzluSW5oeTB5UkVMQ0p5TGdXZjg2LzNBZ1REQUFBTHBqTkVnM0pOTlFaTGhzWkxveXBGdzFwazRkY3RoaDVLaWp5QWtuRU1JQlFwK3VKL2lsa2hpcHVDUEhlZytHOWxwRm9RL2EreE9LYzZIRkF4QjJ6cnAzb3pBWGFpQnV4Vk04Vm1Da1dtVjd0dDgzVXFsNmk2eHd5YXN3Q3BWOStjelU1T2Zqck1ySC9CMWJkc1NaSzdtU1cvYS90Q212S29KRWloWWpWaUtQUHJ5bUtWRGtQLzlyTU1Nc2N5MncwRkxMckxQUkRudGRjeDB6S3pNL0U2aUFwQ2o2TC9rL2FLQTNBMjhPeVZ4YUM0T2xUNWFkdVBNUFdmWkIwdkJrUnRuY1lBR2RoU3VXYmxvMjUxclQ5ZUNPQ0tMZ2ZiWUdrcUJKNlZReWE0S1RHSUhVZzVmaHFSU1lFak1IUnhJSEkrbEozRlR6dE4wcFdoN0REREZQcHRvcHVONDRKL0FJa2cxU2VPcGNpOWhQMFJUUUVpV093enhOMDBaSFUrVXBTMUdGOEJZUEVEM0FCTEYxbnFMRmZBdFNJZHM0dFpRckVKQ3o5VEt0WjJUTVVWaGF4SE9MVzNpWVN0MHBvRWNZZ29TeDQ3VkRxY3loa2drRlBZSGR2TVN4OVY5K3Q3Nk5MWnFEQjJtOVlZaG10bXY0ejBsNzFhRFgvaGN6T3dRdXhxNmsxbFVDN25tbnRHL1AzU3p6S0dRL2Z3UlVEL2NPTVFpRElwVGdqeHZ2Yi9QYndFOXNsQTZpakxJVHhia0dscDJtWGhmVTFPNUEveUhlYWJSV0l6SWRXaldaMlcwOThTM05KbXhJVXhEMEpTMklRcWg3L0RMT1ZGVVk5SS8wNzFkcUpGeTRnTjlTTnlQc0Fxa2xKR1hQYWZlTSt4YkY1cUlZYy9JQUJ4bWxtNEJjQitvUE9SejE5Q00yb3VoMm9HdEVOTjJBSkZyQ1Z6TzROb0QzZXhXU0VLRzRzak1EdE9WSlNnWUxWM29TYUxZZWU2T3JFNTlKV3RJN1hxNkZNTkI2cEJhRHptU0c3eDlQL25jb0FRQzBZTzY1QVYvOFZxUjVwQzdPMEtKUlNUaVhNSGVhanp2cThmRDZURWF0ZFNlRWRDeUp5T1A3SFMwSE5zY2puNEVVSDdJVnY1QjlOY0h0NlErUXhyNU5nSmxFWXBCYmw3aVdGVGcyU3ZzdE5McGsxd2QwRU9CL0hLT1A1MW9Ba0tIYmswY3hnYVVTbUVkenZ2UkVYZlhuVUVxeHFHZ2R4LzFwVUJuNnlTVWJpTDhia0lsQ3BPQzJIRi9ZMHg1cXB4VEw2TG1sVVBiRk9KTWpZUURlWUpJY1lBaHRLVnFmckZLSW5nbWpPSTVleCtXYlNVQXJDR053aElEaWFLUFFWMTJlemFkQTA0Q0hHODVMWW1oMmdpTUVvaGd1RkNFN1d0MlJucFpPUDBMQW16akpOSk1sMUZxUTJ3ZmJVQkpiOCtnZGZpU0dTVzFnQzF0WjB6N1FWUWRkb1RTeXNqU2Viem9sZnlvaFN0Z2dCZWVMQ0hPRGZNeW8yQk9TOGExMmhpZHIzWVVoUkRWWFRBSXhFNnh3bXMwREVnMU1SRkhBR3RHWkpMRTZDdEJabDVKMkE3dWxUUDIwTWpRWHUrRkdjUmhqQ29WWHRvd1ppdGhlQWlnYmxuT1pJUmdEQ2dZS2VqakJRb1E2aFJoMkxJYXJHV0I3eitZaXRLQXVxRU1BbDlRRElnSGM5UnNZaVV6QU5nTXNaR0xMb1VheGFra1ZyZkRveksyMTBaYkswNFpwaTZDRUJWb3NNT0FBVVZnUWl3VjJITWpCRHVLVWdKT0lneVhoRU1uc1VDbFNhYVN4dzZUcmlPbU1SVjI0V1NHL0FyMW9iOExOOU1GYWZiRm9xTnJjY0NOeTRraWpxSXdCSmxOd0JDOG1XVmdsRyt0TVordjU1T01WNEVpRjJLQ0liVlNzbEZvWk5wbUZ3ODJYV3N3b0M1NktEK3FVcm9JekttbnU0R0FaZUpaL0VBQk00UVdRUnBGcWhvVllDUWZQZHBPaEhHYVd1eDRldUZpSG51NDAwcG8xTjdDWFZNbmZLalIyWWRGaXNjV3FGcXVCZE52QWE5ZHk4dEVUUCs3MTNMd2NEUHh2RGQwYXcrOW5leWZnZC9ZMzhDRUw1c0ppV0FuciszMy93WktjUW53S2pyWGlNQUJwRHVDb2FVaWtHSVNoQ0FFRnlFRVY1SmVsRmNIQnA5TG5lL2UvYTdiTUV3OEtwUDZaWlZtVlI4UzVvYkFtVlpKV09NNXkwajhCQUJRWVFUVW1ReWFaR0VUMXg5SERDVWtNRzJNMkhFT2h1WDVIalR1QnBTcEFLd2lYT21zcUJxREFYelFVSXdaK2ZPQkh2Z1poWWhQRzMvalZ5SXZKT0RkQklDMGpLNXNLbk43NnFVeHNJNVJqdEFwaXZ3Y21lQVFLOUZZS0dzRVN0Q1FRb2c3Nkc0WmVtcVRKVEFSVzFEOHlCVklRQlZNSWhhWnUvVkg3aFNPQlJGS1JtalFrU2JrZ1FIb2lyWXpoS0ZYWDdMSUpvTEM1YWFuaTB4Z1dMZ1JnVGdsa3JPYTFXTUp3blE5WHpsY2ZtQURzaFE0SDlFb2VueTVTb3JIcldnOXRzMHBJN3YvM3NFZXdBYXpydUMrR0NQQ2Z4cmtUOUNZQTlDOWJBNUJ4U0tLM2R4MEFZSS9leWlxbXRCdUFvMHRjTnVicjgwd2w0K200TVBqOW1LYVdQL0ZKMXRsdFBkVXpPNEcvaEw5V2pwVE5zbFZ1SXlmSTZYSlh1VmllRXdxdDRkYm1majhBQ0NKelNmZG40cE1vNDNLc2tYV3lzUVZwakQ5U3dtMEY5QVBBdndPQU54MnV2Y2IyQzl1QUM5K0VDODk0enpxZkdhUDdLT2Jocm5NN3oyMEJBWUJFUUg4bmdON0s5M1oxZXVWek5QcW43VFBISXZNY2RkVjFpNjJ6M245T21XV1QrWmFhYVlrTHpqbHZnV3VJaGlSUXNHYTBtb3RnWUdSaVpoRWxXcXc0ZGc1T2laSWtTNUZtamYrdDlRQUhva0o2Yi8zZ2JqTDExa2RmT2JRM2dCaDY2bXU5c3Y2M1R1ZFRvRkNSWW1WV3VXZTFTL2FiNjdEampqamh2cHNSY1V1TkxTN2I3SGJVdU91aTMvMFJEbGZjMEJBZXY2bTExVC8rOXErRkJBeEhoU2RTQ3hBdVJLZ3drVnJRMFFzaWE4MnFwYlphT2FPTkJDN3hGS2xpVE5OZUJyZU8ydW1nazY1NjZhNkhub1lZWUtCQlBFYWJZS3h4SmhudnJJbnk1Y2lWcDhSVXBXd21SMDJFalRiWWFaY2RDQTIvRUFCb0RRQnNQOUJ5UUw4Rk1QOEE4SjhETndjQUFEWjJGYnlFaE9NVUxDV3FvcGhJaUZGR1A2L0pTYmJubkpnVXhWMUR6TFFBaENKSXVFYkJvM2d5YVNVSlJTTmRFTEhTSHRJTTNISEdzU054ZmV3RW5jZnI2Y0NnTVdsN2phYUowMGV4UXRRUjlpaUc0Q1V3OGdTaUpubndTYjJyc0FpcFJFbG54Q1lNczZjU3lJK2UyUng2RXFiK0NyR0VIbU9vTkFPRnBKU3lObEFUaEhUTlBvQjlIUU9yeDRqNVhrek9nNFFPQ1dtY1BqUnhUQzNVOFlQb3VVVTdYN3pNdnJraVdvN2RKc1puUVFBRTdubjEvdDVmWjJSRVFtbzB3ZWl1dkprTGxnK3dST2tzNXhTOE04V0xsVG9FeEtSSnVONVpsdWM5VnhtR3AzWG9oU0ZaZzYwMmgwUHBmUWpnSEhMZFU5ZFlHWkdVakY4eEdQYWZwQ2lOQnE5VjZpMDZUMDRZWXA0b0sxNG9jM2VsckNpVkVZRGMvai95UVNuUE90YUpuekhCYWFoY0EwQ2ZBQ3E4Uzc1WnRBazBwVG5LTkF1dU1RV1FiRml2dG5QVXhuTUxRT3UyZkVtTmIxWnE1NUlNYzVRWnRtcDhWeWxSK0ZCWW95bFhwWDdWQkRBbWRtSXRIVjJGUnd4cTNmNHpKb3g0dDNLWmZwc2p5OHUvVldiVWc3WjFSOU1ncGJqSjR0bTRXQURNUWs0NXdEU2tVUmd0eUVtdzJNS1JUV0RGWmROL0ZHYVJmWkhiYTdPTFlPL3VUNGlIQjRxTWNxdEg3S1Z2MGJxd09aRi90ZVkrRFE0b0hVUVloUTRPVlFvYlRXTjFTN0RCOFBYYyt6dXg2T1EzeE8xRmRtRXFBL3Z5aUszdHVhSFNSYVc0ME9ZMDhaVkFQVFdNWHdLNFpFT3hCaEM4ZlR3YXNHaHhLU3Q3eVFsQm9UNTBvcngra05xb21HK3FJTTE0VHlYVmhTSUQxMHVFSTJDY3VGT3E1NENjUXZOengvcGNmOEdvZE5ZL1MzeG1hVit6Slpzdzc5aWxlOUYvVThyaFBWQzRtUWxjTURyYm9EWVM2Q05iNEFLd3hwK1JFRlZTMVRJNlVNWnc0d1lXUU5QUVc1dE5UbkZQZE5ndzBGTStkcWdIZzgyNko4c2lWaTN1blE0VGxzaTlnYjdHNDVtV0xuZC9EeisvUm5hOFJMRWU1OW1xcHI3U2hvcXRWd1NJdmZtR2RWMnY4eXBxalU3djVqNm5yUDExMXBnc2lMeE5qZTFXSEI4Yk1qcFdKODFkdFMycGFud1Rnd25OMjMzV3F3NGJESlNaR2xCSlRTRGxIZU1ZWlhadE85ZnVsV00vZTBETjNaek5GYnpmL2RzMnVYSUxLZ3hka3dOOVdFVFp1N2xzNXJrd3dSS3d5VnVWMkZNMmVhbGZHVmFoM0xVMHI1MXRXZk01V0ZIQ0ovV01ZWVVqaFd5K2NFbzhleVdCTVhFeldDVkxreWJZamoxdnJWSmRuT1JYZXhzcmdVRExxYmFoMm9pRDg1N0VTR0xhdnRrVExKUmZtTldFOGVhRzI5MFdtNUlzWGk1VGg3V3dsTzhjM0xTbjNldWk3V1I1SDh4RFkxMkxDYkN5RXhWKzZ4NGYzdFF3VURHcjNodGxPZkFHNjMxOHhrcnptc2picXdZdEVWU1c4dlI5S0xlaFo3b0ozb2thNWpXTFZuOXBXcWNybUQyVnZHT2FKOGVuK0tpT2RVYmtQWEpRZlc1eFpiN1cyUmVEdE9KVGEwTmJOend0UkpQQVo5UnRxU2F4MHFHbExrOTJndjFEWDVPVVErKzNZNnUwVUszUFB5RFJjOGVJbG1rU2NFWnAwd1MydzZ3Y0szK0txbkozNHllTmFidkY1L1J5RFIwajc4SHc4NUhtekdWT1MwV0lnOUpBZWxnTzQ5d05rdEk3aEEwVzlrd0p1ajlDRWwyR2FCTDVxa0pYSm1nc3NTNmFnTlZ2N29vR2lBZ3hhbCszcXdUWGZUaWxyQ21sVmxvOFkwTE0yRC9BTmhmdWlTSnJOWFZzQngwV3RQYmtWa3ZOYUhsa3dnQTFjT1F0SXl5RVVnME9ISGx6ZDkxUVczcmwzVzAvczNkd25mWUswZ0NPV3p3UHRJQ0hWbk5YN2VCZ1JuUmNHUVNyaml1YzF3bndxV1VsMTZ2Ulo5VmhYU2VNSVMwa2ZKQzcyOGtQay9yMkRFZFRQSTkwR0tBSm10dVJnMHBqSGFFNVMvbG15N0hRQ1kzZ0Jxa2Jia3BEaXQ3S01QcDlMa1FRU1ovUDVJcUR3UkNlUFJ6N2QzNjBPZ2FGVGpzZU41L0RPOG1hNGxDeGw1MVdjcE84VG55ZHVGbG1maGZ6Vm10NmVjaDhMZW04bitnUUtLS2hndzJFWCtwL0Rlc2k5R0FSVmdLOWtUbE9MVGtRSWFyWE1iSlp0YUVEMDZiNWJkSTRhSitFVFgrQWlRNUpkdHVjUTFYYUR6dkRGcTFzTGFKYzN0eEtRM3RRTGV5VXF5S1dWUTNGL3EwZEZqOFlEOGs2eWRkVkZhNStWcytEU0c2dUMvbk45Y2VudUVOcWxqSi80Y290L243ZitwaVllWVVwbytGWk9sRkd4UnZWMVd5NFZFUEdLTEpwWDdBQjN1Q3RMRjJibVdhSUJpTkY2aEI5MjNHL1QybXVkdElFMWZ6NjZUVXczQWJyUXJhbHdFRmhPM1pMTFpKR3pXend6d0xqRHMrejhvWms4NGdPd29IVUFIQWdMdzhYaDJhRk1yNjZqczVTb3hrdEpZQmVUclJqWDV6bkJrZG1JOU0rLzFocmNZall0ZFpyZ2JyVlRSNmMwNm8zbXVhQ2tOWmNqcmZQc1hsaXBhak5Md2F1Zkw1RVZTS0VBSGd6bzdFTXhZSlcwL29pSnh1TnRrbzBXbVUvTzQ0TmRVV3pJdXNOa2RaZmpkZlNWbzJ4OE9ESEg2THpUSHV6MnB3T1QvT2NCRWpKMVJValI4Yjg3NU5JRUJCdW0zQnR0NnpFb2RiMWhNZG9NaHJHR3FYVTQyQjBtNzNreUx1Um9hNThSeG5HaUt4bUlId3RnTlN1dmtBcXV2UjBLTkp3djM0WWU0WTkrcHZXMzVFMHRzRkYxZ3V1alRMVTM1ZnBVOER3bEFmUG5HN0gwM3pXOFgwZEpubXZKenlZNDV4OGxoRDZnMkpBVEVSNW14L3JFdDNtTnpxM09rYVV3SnZJZkd1K2ZxNVhmQk9IamFmdlFENklvd2hoYjluUWF4VDZKRGZTYjhWa3hybVZWbnF1NXJYSTVScTdSSHlNSlJpTkpuT0h0OGttdmJnZ3pZamduVG40ZHlleGNTek8zdlF5RG9KOWxXSWp1SXNSS1I4ZmJBQVhtenZzbHZNdWJib3ZUYW1jN0syYlJVZjJIMHlSakx0SnFlVHV5QWplOFlRY0pKQTFkY2R0enVWQ2UwL0VyaFlOSXd1MFlPekV0ZWIrU2xNS09VUXNFOXV1WnV2dVFYV2JYcFhsQ2J1dkpBUlhQeUFtekZHaEkrdU9HTUJIN0RQTzBvRFV3MU03OEFOM2hKNkVCK3FvMFlSaEk1OGJCWENJVUxJbXlnaFdWc2F5c0lTUUI1NmhxQjJISXBYek96TzlFbEZzZHh1Qk9YMGlQaFN4TlA5ZVZoeVNTSXAyRXpYa2FiUjdmZlF4a2VpVEQ0TDBGWUNHR2lOek1EZElqWGhoZHpYUHplUTZzSFV3RHlnZFVzd3grdW1LaXE0OW81UXJ5NEVKUGNodlgzMm1KMUVaUHZMcko2cGNhVnVtQzNwUXFYemoyZXZYNG9wVTd2TnUyYStPVitlcnh2SWoyVWJsNkEzblJza3hrV3c5Zk5BZWpWd01JRTVSSEVTbzV4cjF4TktzN2NjTjhOdzMxTWYvOXRSQUtORExIRDdjTDY1bW1lcGFvaGtuUGVMWW5jYitaR0FWczNRbWVzNXlCR3Y0eGJKUjdSdVdqS0lXd1E2bGZDdEZ0SEFlMFdDb28xREMrU0I2SnNkbnBFbVBnQjJnU1E2SlVpOFZGb0lCaFYza2hDaGYwMll4ajlKdmVnL1RLcVR3ZzNlSFBPNXNWa1dEWXZHQ1NhQnVxSTduYUE5b05CODcyTmdvdUlRYmtFckhiODhKMmROalM2SnBEclRmVjdyaDhXcnhrcjhjQjNaaDEyS25NbUtxSG8xcE9lbmh0RjQ2YXpFOUxhODd1Y1J2M0pSMnl5UTdtSU5sZmRuR2puVUpldC9GMXVqZStxTzZTdzZ2WVNwNkRSc2lHZ0o1QmN4WFZvM1I1TFYrWVYxdXV6aHZpWEQrYWIxWkdORHgyUHg0bnJhbWFjYnRxSEtvY3l2MzBlekIyOEdya2pYZTAreEFrQndhVE16TGRZbUZPOU8vZzJHSWVIQVNWTnJUejRVeHJJOFR4S2pqVkpxcnQxWHJkSTdETSszRGUrQ1ExZlc1L1YzVFhIZGZ4b3JFd01QVGJ4cnNSYVlwbmxLSE14eFpIcytKY2ZNYjdYR3BQQldtTGZ1Q1EvZlN6ZXYyUFJhdUN6NkFsbC9CNEVDRXZ0Rm85QnJHRWRacG5JT0krTGdnbjVCYnFPd1NiamkvMWhxQmEzNG45Zko5QUQzVThpYnVhbUdHZDNXMUx1UmxOb2h6bkxrdWlQZUQxajNDRERwNVRWTkdBK0ZoZFhvYVlFeU1UMHFUeDJSbndwczhJdEI5ZkhKM3lhNUZlZ0NsZlAwclJsbDlkN0NaMzMzai9oZzNHMk10YXZNMWZCVU5Cck4xVGVGV0Ywb2M3aXdDb1F2S21lU3BoQlJlSHR5dzB5aXc5MG42eHBnQ1l5a21vTktHaG1oMElWWlk4S0JrTzBXMXBxWUlpOU1pVFZHOTRKMmpoK2N2T1MwUnNlUUs1Z1VEOEVBcVAyQ2FyOUlqVmh0VjNzd1BWTnpUQjN2d1lDa2lXQlU3cjczTjQyQkFuNk4xRzlmbDlOWC9ENUErSjNrOVI2TlVXL055YnFUclZzenc1emZPRDhObzFvdFl2WDJTZ1lOWDEwRGM1WW9QdUpMVWo2NmRUdGNPbC9QRWJZWlBocmkzK08rL0U5K045amJlYVFyT1E1Z0oxN3gwQ0oybURvWVlvTkJsVE5XTkh1enhhL0R1Zmpyd3ZyRzBvZytZWWJGQ2IwVEJELzNvN2l0ek43ZHpYR29kejdmSjM2eHNET2t5T1NBNDROOHJIUHYvK1RNYURGcEpuNDM0Tjg1TS9tY3ErQ0tvaWdoeXdkamtsVnpTOThIZzZRR0JHVitrU2FhMUswbHlSNVRrRGNETi9ZSlRwUi96ZmJ6U2trNWV2RjdSdWRGWUtKcW1JaEVpUkVpcjA3RkVCTmF6NEVLejc4MEJOM3FLOXJPYis0WW8xOHo3NThuY2tnUzZPK1BnTEhaayt2WGVyN0lidThCcXRyYnMxZjMzbXg1MkhleVpKeDNvaUc4MFh6ZGJBNVMvK0VKN0x4RWZzMmRQejRZZ2FzZWh3UlJhTEtMVGtZZ1FKWGtQUmJBaDFqcVhtU3JkenZnbWZFKzJUWi9mbTRqdHkrZGorL2ZHODBpUjI2bi82NTFqK2JPZEVlVjNlWkw3NFFVaXNJYlJyM1NKRjVUb25XeGpmaUlHZWQzeGFjdVhZSS9YQzlYdGhZQVlrRFVZM3QxRWdUTk9Sa2dFOFE0VURTZ1VRY09IRUF1Z1BKNkY5dlVaUUo0bkxkUXIvKzlWK0dnYTR2c1F4Q0ROWDc1OTV5TlhwTS9mV3hBbnA5dytDNmpOSW4yNVU1b3NxUUdyR0hYcEJPNE5qYmN1Nnk1ZmN2Sm9kckh3bnBXYUZYV0RWR0ZxWGYzWld1Tno3RjlldnRyeWpHNWhhVG9IUDdYdnhiV3phMmlGZ05sWHB1S2NIeUs2dEhMNUpraXhTKzFqdXVudXdscUQzNy9XMEYzUVRjZElMVVcwR05nM0ZjMmtwNk5LaTVsQVRtZW1vQWtJVDVyWnhYejNmZG1wK1FObUc2UkZ4eDNHNnllWGlvcFprVnpmbGRZclRmVFp6eFk5Z28yK2dZWG1ZSWhTM2NrdDZFRVBlelkyM1pIaGpHMHdQdUh0MXpzejdZc2RHZVB1WllsZU1NSXNLYTBtYlRGcnVsTUd5M3NtSmVSQ3NwZjhQdXpRNEhJUnFkYUlYTGhFODY3WWdZQmRudFhrYzM2YlUvUDR3L2twWlQ4VTlGME0wQjBob0Zub05hMHVjV3d4Rmk1MHM3VDE1d04wd3FUWmZCN3JMVjh5bWhicWJjT0YvamFkYXZVZk4yc2haMEdRMXBiNE40MmtkR24wY1ZURDkxL1dNeWNuNWVxSVJULzErZEZrYjB2VDFnT0p1VnZyQ0lmMjJVdUtwcDkzNlNGVzBxbHNxRnVtSlBXT1RDendVNzRYc0tBK1dCeG5xRE5Wa0FmQXFJM2pXcXNoeW45SE1hOTlTdlpCbUd3L0tjQjFlalF5b1BGWTVzdS9PRVBENzBUeVdvUS9pZlZSM2w4cVRTQXV2VFVYNEY0U2VZMGFORnpRQWlWUUZnM1pEN0cvMzBFS04vcGNFc0FCU2pCWFk5ZGk3NHJsWHBKYzRkVjQ4amFJQnJBeTR3ekx3SURWWnUrM1dnZnN1ME5wT2NZd3czdlhIWlFjclJDM050UXNMUEdtRU1YMUE4c0gzMFladWdCWXVqeENMdzdlKzVORFRkZFE4ZWJHQitZZzVhWDBLcHF3SXVwU0xyM3lENUpuRnhUdmZhbnA2T0cwKzErZG1GMzZJZ0dzdzlCQmNQNTNuZkhQN05uM1FaWHBzeE0rS3B4RE5uMStBcVdCNGtkamJpYVl2dlBxUDdXUTRLL0RqRFVaNzEzL0RiRjdCR0tTS0owOFgrTDFUUlJ5eCtWVzcyb092QTEzQVF1clh1MDQ5dDNOOUZLWUU0VzNjNkU5NmEwMXlZZHZpNzcrREJSWHc5bVJDLzdMUEdKbGtBKzdSNzIyMWNHUWZjV295NlVLY3JmeEF2QWZCeUQ2Y05hY3RlcUhDYWUrcENsbUxHdEdCZ21DU1A3akJIUjF0ZDBYOTR1MzYxYkQrWWwyZ1lzOTl0a29BMXVjODY0UGZCVGljYXBxZXZocVhCZmUyYlBsaStQMUhqTVpGYXU0Qkd1Vk1HbDI2SWFLRGxKNHo2OVhSOUd4eFhIczUwV2JMYmk4QTE4UlRlRXJoNTFXWlpUMWhUVEZncHg4V2o3U1BpcVQ2c2syT0tIODVyNEM2NFVzREt6cW5CR1hmVVVvYUY4OTZuVUpua1N2K21IdlJJaUtNQmhVUU9uenpHdkgwcTkrYXNtWTlhcHFacXdXYzhhR0RPTUVNbGdlUXFCU2gwVWFRRDIySTdzZWZUYXJrRmdMTm5PcEEwZUgrcXdkNmcvb2RYK1Z5V3cwQjFhMW0veUxQYzVWUVo5ejFaSk84TFhiNFlvcmJkMS9XTG1lN1VFQjdCcjEyRmNGZy9aVm8yNlhJc0E5SnRpQktkYXpsb3hGUDBRUXdPSnBRVW9Famd3OTNWc1EzcHQwckNLTm9oNm5KeVhWR2NPd3dmTWFkY1hRK1VSdkgvNTM1KzAwZVk0RWc1L1pMK3dmVXkxcEdKVWtuWk9qbmJqRW1IRVlodXdZMHAreG00eFpNMUswMncxRFdjYzhic2luTXRtaVpXTnl1Q0JaL3RuaEhZanovZ1pPcUx1c2d3QnpRVmR0UEZRWGVZRHZIbFJ4Y3d0c1IySTFqUjlTS2lkdk9iMnBrN0QwL2tpS3VPWHgzcG1EdzVGQUhSYm1YVmxaK2FsU3hlKzRIU3VkaXhmYS9QSllZNkVlbW8wa3RKcjY4aDUyWWNHS3ZzSDlEN3g5RlY3TDlTN3dkS3dLQnVYbUJXN2ZiTXRaMEJJUnpGbFBjYjFtWThudHBzWDJZZ0F1czBjTTBxeFJMUFd0MTFLeHZmY2pxcmdDOWFyRTNtOEo3ZmVKUmNRVkpBZXM4NHI2dS9tZ2JVbnFkei9nMEMydUpvVjdrazkvS1dDVkxvd1c1T1JTN2x2WjJqLzZxQ09rZXcrZjUySTJyeXFqeDQrcTI1Ly8xeVQ5dERvL215K1NsWmx6OWxyOE9kZGp1Q0hHbGRyREJuRUdFd25KWEJYbWRKN1hxK0pLdEJQbVBSZXBld21XOTRST0dWRVk5SzQ4K3I4aUVoQXpuVHhnVkdkRTlPSzBFWG5TQ0ZkeHZGOGE0S1RDMU55OFpxMjc3Qk5MaUZjQ0hNRDVIZWhZdGNoRCtoWjc4RldCb0JBTitraEx5bXl5QUlHV2NsYTdMVzgxbGdpY0NRZHRkaWE4TVBBSGRrSHlIcUczcEl1aHVldk0vYml4Z1B5c1plNFJ3cjRzNExjdkgzVzVCRThnVi82dzErUndlak16Q1IrSnY4L0c5RVc4UXorUXdlSXhaS0NqQStuWDRjNnRuOVlhZlVOZmw4VStjMVdNZHd2WEE4ZGE2WjNSUnVEc1hhZ0FWdlQwWng5UTZway9xc0NLU0F6ODF6WHRmdEZmRUROVHcvbk1iaDZRV1JaVFk0S241L09GWGZmU0FqLzc2YkJBZGlZb1JGcDdjMk1yd1hCVFp0NXBEMXNtMkdJVmNFZnd0cDIwYWRmMmlaVVhJM3dEV2xDQVZaSTVWTGY2Nm1Nd0dZQXh6Q3ZsaUdvKzd2aUwxOVlqNElLejA3Wm9zTVBXL1BxZjAvckl6cCttUC9PN0p4eEgwTHpUWjh6R3RHc08zRUlUNXg2VlRyWFcrTDlsZ2U5VU1MUDVaYmZDdk9ZbEduT2llQnBFblJTQnhOKy9lQk5mMGpidHdFRTZCYW96VnhWNHFXT0xRNys2aWtmZEcrQkt3dXhDeUkrcjJiK2cyTk10a1g3UjdjZlZES1dpL2dDRWtEMWMxS3k4c0xYaHZnZU9Qdmg0cUpaNkU4R3I3TlRiRUZQYzJ2RHNXMlc4bWxqdEZwNmNDWldvc3J5UkhLM1E5RHZSODhtMjlOa1ZuWHVyaVFJT2lTc2FEcCt2MjFNNGZsVWNMellldkJBQzlyK01WcU52b0RSQ2dWRmpjeWdOWEs3Q3hZRmpiL2xvMDdWdlpRdGwwbXpuL090ditkSjExZHRyd0hrMVVBNnRkQ3dlczNrMG5VMkxTeHN4N05NU1BaZXRzbWFNdWtKSG9QWGRDUjlINm96b3hHbXIyV1l5SlpMT1pGQWRndzJrOUJDejNYNjkzT0x5R1RzeTNxK2VlSkpzZTkyeWFJZzY3MS9mOGVnbjRQQU14UUsyWHcwTHZmZEo5QjdjK1FkU1RQU3ZsQ3JaNExoLzJocW03dGJhWERiekFsaHVkU0VvN0FldVdtcXB6eTFYS1YxeTFWQnJwS1JMcVZTNWxacWVOOXE5QnNUbU5Vb1FNV1JOSUlHR0kwWGt5c0VTY2dWWm83SGhZckEwYUFsU293bzhGVmZ1eStYRm1vcmhPRUVvbjh1NXhzRjVZSXc1Y2lvbm9NSUZoMjFYUjBzSGl1dW1EdEpmdytubjVoU1ZGV0wrVjlSVTNGWXlJRkp2U0d3MnBOVXlpZ1g4S3VjRG1qYU9PM0J2bjA2WHNRaGJmT2FVZFBibnVTRFdtaklrazUyVFlWMWFOSTNobGtoV3JLRVpQaXdER3J5UGNQYjcvSXhsejdhcEhrVGgvWVd2Zm1zc0Y2UzRraGJ2RDNxSmtRVVdYQlhuZmlDVVVraUpqUUpsOExYdEU4cWRJNmpGYmRGMko3bXUyN3lYbDQzejk3QzlnMVNOMld3RW8rRERrT2JQZWxwRUhYa2QwbTNETklrdWpWTktORjlUSWV6ZjFxeHBwZENJbWhmOE53bmFydjRQL1ZPTU0vM3dRY3c2NERJSnUzQm5qeER3SURVak4zbmFNbW9qZXptNlBERGNGeCtPbDhPNVF1dzE4R1FtNEM4YTVoL1JTejZQY0ZXNmdCVEYyVEdWeFZRcU9uR1pJYUtHWXlhZE9CVXdXaHdwRk00WTFNcFlBZ0hYcS9CdGVPK2FLYmNHSVVXZ01LS3lOU1I2Tmg5dXVnWXM3Q0NxSEN6MHdxZ3AzWWZZYkhuRWxFWmhnV2ZKUDU0M2ZkK09TNDFJTXFzekdqTTZKR21VdnZnOXRIeUVndkNJWlRLM1dFSEFSQ0xtY2lkaVI4VEIzaVFCcXoxQnFScVdKL0RBUkU4UzFKL1U0SXhMMEVXQmdiNkkrUUx4NXhlUHhyZFY1U2ZyWitGMkdFanNVWlhWTkhnYURNZE5Xa3NRTlovSEFLY05HbVUwbnZFRUJJK3pPbUUxaXh4WFBtNG0xYkJKSFQra1ZIa3dvOHBYRUFrYXNad1RXQzJBRmZSVll3MC9VWTR0THExWXFMU2paeXVhUjZqNXdKYjRBbSt5VDNHV1ZYdWMzWWdOVTgzZ2JibGM4SktzZlVqUTBMNWozcFVGY1hJR2NvQVYwQzd3K2I1cVJpSld4QkVya244WnVYZXlXQW9XZmVtbEF4ZHB2TGR3L3JocVhidmFzRVhZOHNDMWhmeUtjcEI4YjdsYnlQMVhBZTRXc2NMenhVTmJkM1gyMU5ZM1BFRnp3WHVMdHQ1UmY1aUtQU1dRSWpzSXZyL1ZyWWJ3L09DN0NMOHZNL0JUSEhaNTVZYUpNcERPdDdSdGF0cFpPZHcybjE1RGgrdExqUzhBZnVYalBSemV1YjlRQnpWdmRyWUpoUUVVSDJta3YweTQ5OEJHd25mdmlqdG9GYlUzU2RxMlgvZDBTM3RMeXpTTDkxTno4Mk9nQlBnc2F1K3lnVCt0T0FnNTFIQ2ZYZEdmeW5HcUVSVHZhOEEycVBMN1BhMk4zTHMvblpkQUs5OXk2Q2syNTY1RExXM1V4TEpSWSsydDkveHV2clBaMHRwU1diNnQwcmZWMHJTUDA5SFd1cTYxZGJ5MVRRdWlFcnhNcEpmY3ByZERGVFVQVmJORk56dFlhajFsK2RXOG41cGJYdVEwcTF1YUQ0TW5vRkNpMzkwbnVoamY5eURZdnh5eUkzU2FGMTBYeDBybEppdzYzYTNrVTZwMUsyZHdrdnl4V3h5cjFjOFRPa0ZPWFdLS3FqM2JpdklFWDJIR2JicEFZdVhEanFwRDFzRStuMVp0bmNSSnJtbWdjbmlWRE91d3ZQV1NDdXl3bm45YVk3VXYwMURONnhEVHQxcWxROWU3aFV0YmhNS1dwY0pFQlNGYjllVVlYQUpINW5xMGt2c2hEbTFGcldXMzhvN0IyOUJsejg1OVd5UFBBMStiandhcCtQeGtodGQxSUtJdzlmemx5azdWMms1TW5tdVZYc210dFVOenJIM3h0dFlINkpxak9LSzJRK2VtdjE3NVBxUTM4VCs5bTZTN3lmVThxOEQrQnhoVFJlSEN2alRuV2tBTTkxSlkyUWtiNUFHUFFxV0pxQTc2bmx3K3cvZTlPWUJpcGk0ZDJrdEllT1JPdjFCRmNXK2FnQ2hBM2VzbEVYVUdiY0lHQVJUYzRuaFQxMUJaNjZYWHpURkxGTnlaSVQ1TUxXK3J5Qm1vZFcyVnJFWERSTVpxUkQvMnF5TUw3MlhnUXBHRUxmTm96NzBndm83QmtCenhXcDZlaEFWYWNucGV0WGtONnhKR2RnaUp5aHBKaDdhQ01JZ0RNY3BSVDhxaWFMdkw3R2FOVStabjR1aWxyZ2EzWW9NK2lLc0hIcWo5R3U0bmdycEZIb1dydmxGUVBzUGNweGxqcU9Mc3ZkbW1qYnJlbXNIcmE5K3VTc0dEK29WdXBic09iN0Z4WllVNnNxeFJiZHgwbldPeGtra2l1czR2bncvSzBXQ0pSNXVJNzVYWFQzMTRCcys5RFRuQnhieVJtTkc1d3c1QmdXUFVKaG5ac2wyV1czTjUrM1VyZGlVMExpcXhJQzlmSmh1Zk5sK1dUSnF1MExjU2treFg0ekZBZTVSV1JMVmNQajVUTTFORlJ0UDViYmZrYy9ZYk5OVUlpTG5wVEJMVHNyc3BnQ01aeDJuRmFrTXZKdWNvaWp3YVVNYUtlTDdRUXVlajZLTzIzSkZsUUl0VXVqWXpPL1NZdUUwN2ZidklSTkc4TW5jcG81ZDNsNWxLMGpJam1kdTQ5WTliWDZvMjZZbFpjN1BmSGY5MHZNZG1IbHdaUVR5SEROWDFHbDVrMWo3Y1A0LzVNTkVwNDBRSnpUTTNHTGl2MEpyZkJSNHVBZmYwcUJCTVcwS1U0Vm1xMk9NcWNMTWRURGV2YVBpQ21iWTR3WXlWTDFnWk5uVlJzajRITHBhQXVlYW5xNExjQ3BsWHBSS2lreW1VNllhYzRldStFSW8rMS9ONStzOUZ3aTkwUVAyTnJnQ0tHcFRETERLV0xhUlc2a2JQYW1OM0VabUtSSVFReWRVZWJFUzArWEdxZHFoYmdNU200dUg5aGI3d0FhcU9JVjJDNEtQVXZtSUVMMUFQZkEzNEs1bG1peFYzNkc4MEtMc2JVbzFDbnVyQ3lCUkY3a2NGUys5RXNZWC96UWZmOEIvYmZkUGt5enNwTUk0cWpwbnNYcnJBbzcvMXFkZm5TMFRNM0FhUzJVVHZSOGVMVnVMZWp1d0xsSGRid25VV1haRlZtb3hobmFMTGpqQ2JOZmlaMlFKSkxnaUsyOHFPdWt5bHl4WnlldUpQM0MvcEliUTZURjJ1aFhnYWNLWldGYnZnejNHdndoNWdhR2R0SUNIWmRBUHdQYUN6SXVqYWUxZk1kT0Y5MmQ0UXdXSHZPWDJMS0RKbGoyaTZOamZvaHFzZ2hGdXVHOWhLcmFYTjBvaFYwRU9rR2FMTEx6T012dWhYRTh2VTVkYm9jc1pvRE1sTUlUTnkrVFdpMEpLSUw1RFUrMC9wZDBmMFE0bTZDWFdwOE1IUUkrVjluaG5jd1NES01jb1EvY2h6Vjc5YktjKy92dmc1L1NGd083OTA3UEQ1dS9kVXl2ZXY5RDJqWDBaWmRBZVNSaS92ZjZxODNXT3pKeGlZV2hqS0g5cDZEbUtVZHR3MzVmNFN4cXRiSDdvalNjV0hGcm5XK0Q3bFltMU5rK0htYXlyd2RQUkN2ZlltOE1zbGp4b2ZFYzJNdURYMzJ3L01NK2lsdXZ6ckRad1RjZWx0dXA5dWh0MEdsNDhkK1FuSFcwNVVzanpYYS9ubjJiTnM4M1Q5RUhab3U4bnQ0OHNGT1BzMTc4OTNDYlhiMnNOTFdUR05qcFU0QU1PVHJMaFd5NDVQWHF1VlJxeE9WUVRXU0dOV2h5cjh5QjU0OG9KV1lBUFpYY0RoemNLTzkzKzhCK081Ujh4S3FONWNtb3lrRkNvMXJoWUZZSzJvaEdlelJ0UVZqRzZwOGpuQU9sVXBqK1BxYmNTL25sSUNOV1E0QzdCRWNQMU9iOS9ZbmM2dGE0STNMbkpJVmtiN05tSGRXS2oyd3I5WnpLVGk3NXNYSzFORGU1eGRZNG9wejhyRS9RZW5IL2NzV1hZcUZkbWJjUWpYMkFmaXRwQkVHcEc3ZlBJdXZmQ3JLeFZhdjlZUVltV2tqZzQzcUFMVGZKZHR6S29VeG54RS8zZlJPbS9SaktpN3V6QW5PYWdnU0ZuWG5wYnJJSEMyTE5lV292RmwycFpxcmduLzVLTGtzakVpSU1OaS9JaEVvL1JGWlpnL2F4WURLUy9ZSlV6clU3dGdoOXVEbTdqdHBDRklXYjg5MngySTJ5cXlNU3JlYnI5SXEyUFdzSjJNWHJ3ck5TSWgzUUE1QTIvWlVJSzAxZmJ3dm1ZRUY4cUdxcEJpTEdYcVhTOGV1d1ppTEk3VjlxYVBMaGoyMFVKUDkycVZGNlY0dlVRZFlzMzhsOUJWZ1NuY1lPRzdaVmt0aXRyZmZ2dEIyYjdRSitLR21uTmV2SlVqV2V2aGlCQ3ZVaUdOUGR5R2VBWEx0MEo0ZnBDYzJHa0Y5OVhUVWtHNFYvdHFwS1hIOWVtcEJ4Vm52MnVEWFhwZkU4bXNtbU5XbE9NWTJGK3d5VkRNR1NkQ1llUG1ZbTZUb2RPeUN6blQ1bkRJTkZIUUlpWDRZblU2b1YzcTlVZ3duY3lsT0dhU1pvK1hTYVFtVmp1ekJrM0dhS1FYUnhaeHVnMUp2cy8wdzJENGYxdnh5VVFlR0JaNXZUSUQrNGRjOHNkNFQrM1F2bGZBWEIrYUk3K1V6Yzd6RkErTE9aeGY1S0M4UW0xdmY4eElBZEJvVXpsMU5LUCtSSGRGNGZpcDVsY2FtblkzZDFTMXYxYi90V1BJWWk4UmhMMms1UTVuYVVHZzhUb2ExMmlUbUZtYlVBMFVUV2gwQ1RPbVMrcGlnSGNscERoeDhHYW92U1dqTFhRcjBWSUVvaC96MUtVVHRuM1hlT2c3OURDKzVDU1U2UnJkUGVtVFgvMXNpZHY2RDVnVmFWWnNKVFBuVXpzbFY2dkZVdlhWRXVuVkhJbEVjN1ZYWnBOTGJiS3ZNYkJzYjYva3MzK0xvZVhUVjlJUXNnTU45bDBiMmdKWm5QTnBPTTd1dlo0dVdiWWQ1OVJUT1R3M0pHWHBudnFxaGJYK0cwREtWQ3RnRWwxVUxSUGYzZXJna045UEY2NEVFSFdaUnQzRTI2MjFmUFNIYWoreFNMMkhobHp3ZFQyenF2aC93WmRzQ0VqTm80b3VJTGQ3SWNlMWJSSHdmcFZXQlpoamZaaVpUQXRGTlZNTGc2Z1dNaGhxbVdoSzBSM0Vwb0t0eHl1V3pTMXE1bXJwT3dxOGVWeTNDL0ZSZVJNSUhLZVpLRUkrZVlpdW9tbDJDUG9NRmpYNnE4Qmx2MGNFM1Z1b1FrOEs1eWVNcGROSElJa3MzeGhMQ1NYbGZFOHF2M3granc5UVlwaFM0ekxITmYzenRyRW1NSjA0RzAxMlVzUFg1K3RxdWtYYlYyaEtiVWtSVEk2YytEeERmbE1oeG9zQ0ljL3pnSmhIRlV0ZGp5bHZXQ2twdUw0MmRXRGZwT2x1YXFsWjFoTkJ0TnNMZkJHUnFVSm1JU3Y5WjRGRWVrdmdqV3RzYkdyOFFlNTJJN2k5SmZnUlhnT1F2VjdiSk5hdCtPdHRZL1F3eWt1TndINGpDMWI1WlV2WnA3K3VxMkZrdXJzNG1nT2hkclcvZDlqZ1RRNjdwZ0tEcjhobS9rN285bzdzNTA2eTJDZWVZM1B1TzhGbW5ienZidFlQTGEzL1cvclpGSlo3R2dJTTM2N1h3UFlqZ01wci9FTWc0WG9EbTVHdWwxZ0hzNy9DSVNhYjN6dWdrMDRNYUEwSVZFVXZybTN1cFdEUjhEY0tobHRRTUZ5TmdpRVRJL2duZTYya1RkNmMyZGJrNVdIRHJ4N1pKSXNxY0tZdlN1SlJsSWFpb0J0RndUc29DdjZVb2dUQWRjZ0pMY2dKenlJblBJS2M4S0dVb2k5MHdmU2FSdXdBb28rb3FicVIydWNScGc0L2NqM0JUSmo5S2VaeDRHZmptbUFYNVRtV1lDbFRNTnltendRbHhXbURSOVYrL2lPY0pQWmZtQjZIbCtBR2pZMG80dFJ0MXZjSHU0YkZhbjJ5eitBYlJqTmI4bzFTVGpkR0dxTk94WDRTSVRWcHlDUFhJOHloaVQzQkFpWWUzeklWK0toazVpUkNQbWpUKzNTbGVwK3VCdm5nNURHTFFmRVhBOEVBOW5icm5Yb0FzWHd4ZTcrdUl0QUlmbzM2OFVnM1FtQnErd2pvYmZReCtnUjlpajVEbjZNdndKZmdQZWtyVXZ3YXFTSytWZDdENytEM3pBOGUydmgySXpEOXRlbnhWRDZKQzQ1MTJ4dDhsajVIZlQ5UGZ4cCtvczRIdEFWZHdZektuS3ErUXN6eGV4bzNyR3dMY3JkMlZkUVFOMW1YeDFQY3dDMXU0c1BiekJORUx2MkxhTERkVXRQMm9iUXhLOGF6SG9PNFczaUQzVDQ5ZldlVTJlZlIzZjcveUxGWVptRFFYdmM5SzlsYWdVVUFNZUxlZnhhc0FqQ0hmVmdBWkI2SWRZczUwWHUxM2JxTEY5YjI0STlaRDJzRGJpMTQvejhneTFpeGx0amd2T1VCNUxvQWdCWFl6YWxKZ3NhTXJSMXRYWWRSUmxHSDlSUWRzRSs2eG1SZzh5SWVvOG94UnVNUUJTb1B1TU9NWU1MZHM0eEdDSitIMlNNaTVhYnVzL3dDVlk1dE5BMFhtMHk5eEdNMEp0QU9xMXBnSzBCZEtBZjdES0d2ME1mb3k5Ri9aR2xhbE52bHdubENjaGd0Ukw5bFc2QXI0S04rb1NkZ0l4WHBJSnlGMjdnTzJPL05BbGgxVlhlTk95UGQ5LzNTSUtBL1ZDazM5WTRFUFlpdUhlTUJISnBXa20zUWVKRUxQRVlMMFc5Z2daS2E5ekdIenY4Ykk3REhlLzRZYmhmZTJFOWlvTzlKTTMyM2J1YnNTa1F2aU13K24zUU5KVWU4dE90cnp5NXYyRWE2N0EyeFZaVHM0dTh5MWpqbnU1M05DM2tFYmlFL1pqc2l1bE9qMjBRNjhVNllFaW10eGt1dUMzdkw4WVpMbzJzRkVhZFF4dXZHOWxFMGV0Nitsays3TVFIb04wUFlsc2FYYit2YU4zdHIxeTQyZFZta2ZTYlY1eGkzQmJWMXUxMU05d0QwbE96TFhuWUNSOTB0NHd0K3JpdW9LQTE5eXV3RDJwTEFKd1E3WjN5K2NJbmk4a2c2MThuVVNBVDJPNlZLLzNXQklhMWhUMmV3N0VvRlNyYU1JaitUV0UwKzk0cmFIQUp3RVQ5K1o3cGxYRWpxM3hESDNRRGc1SUdPKzVMOEwyK0ovK2l3enhQTXhnRWlCZ0FJL2l5Wm9IQW1NUDAvZUU1azl5NmlOZTFrNnc3V3o0dWNycVRweHlaM0JlVUp2MlJ5cDNYRlRQWWR5TDdKSXdSNFJranpON2F6WGkyQ0lNRTBwVFhvZFpjN0lTamQrckw0Rkh4R0V5M0FSSFVBeDFWL0xadmlqbDh3V1YybTFmU0NmK3N3YzBXMDZPcWE1bTZTS3p5dFJuaFFWYWdNNk1jaFJna0pNWFlFOFloQjl1bUtvb1RwR1JxTmtLNGZ4NE9XK3UrNENyY0dZcmdUWjV2bUc5VFVqdGZuaXFZWlVXVDZVZzBlRTNoa2lVRzVuQnBnakYxNERYYm8rRFFSYmZwVjEzek1wbElKQ3VjK1ZMSnhHZ2F6eEZ3V0kzWkxuajY1WDUwMHhCMDNvWjBNTDRhU1A2R3ZRWEtidVBNclVxdm1hUWgzVUdaclJVWk5pWW85dFhUUlU3eEdsZFN5cFk0NWJBckxVTE16dEFiNjVpbWRJT2FSRFlwSVVGNUJzSW83S1E2L1V6U3d0STJTZWRTMWs3UW9JWFBTYzBHVEY0dXpXaHhMeHZ3TnhGN2g5cjEyTExZWElkOUZENXNyTy9TMzJiS2VXelpQSnFYL0FNM1FoMXB1ZlN0NzZqaVF2WUVsMW1NMGVNN1RNa3dBQTN0OVNEbTc2WmFYS0xaNTY1dnBPMGl4dmZReUNJMmo1Qk9oVi9rMlBpVjNzUnQ0S3FGbC9tRHVEblV6Nm03VnY3OFJQYjNJMWpQTVhWQ3FWWWlmK0VURkhuVzNyY2hNYjUxZTF1dVZwekwwbGdHVElBVU1hUlVGY0tBRHNJRUUwUUlabUtmeURVbEZaWWNvMmE2LzQzUURDYVhza2NNR09LMnM1S0Z6cVB5aTdzamZKOVM4TlZvamo4b1gxTWp1eWZFRVFJQ1BjV2ltQVdnakxCd2tKcTBPSmppZEhaejJpWTNPWnpzRWtkbnJFTmx5blNOWVlsNXloREtYWWc4ajFicVRDQWhzbkM3eTVLdFFLSnRYbG1JeWhVdThOTExCQlppeXVRT1V5RGJKZEVVbXlEV1pyTDlDZWFhWlloSUg3VVMwdUpYbWViVElpalpCY3JGODAyODZKeWV2N0V5MXhFUU9xc21UdzduS3RkQVVaZXp5VGVEbGt5M1hCR1VaNDNMS3BoN1FISzd4cWVBUWV2dG9jV1JsRXRKbEEwMVJaTXBSS1RWRlhlcnB4VnhGeGI2OG5GN2pzcTdHYmRVMjBCdWVJVkpPd3NmRnE0VFBCSVVTT0xpNEpNclFWejk5ZFpNaGFQQzRXVHNZeWdFblpxczRtcndZS2R4ZXVQbFlLVExKcURTL1Y0bzRoQ28rRHZOUWIvUUkrdkhvcmVmZ01UUE1tNFk1dTA3NVA2SklYaEgvZTEveW53RUEpIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9Ym9keSxodG1se2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9aHRtbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItcGFyYWdyYXBoLHB7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNjt0ZXh0LWFsaWduOmp1c3RpZnl9Lm1vbnN0ZXItaDEsaDF7Zm9udC1zaXplOjNyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTU7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDIsaDJ7Zm9udC1zaXplOjIuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yO21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI1O21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNCxoNHtmb250LXNpemU6MS41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg1LGg1e2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6Ym9sZGVyO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDYsaDZ7Zm9udC1zaXplOjEuM3JlbTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX1wK2gxe21hcmdpbi10b3A6My43NXJlbX1wK2gye21hcmdpbi10b3A6M3JlbX1wK2gze21hcmdpbi10b3A6Mi4yNXJlbX1wK2g0e21hcmdpbi10b3A6MS41cmVtfXAraDV7bWFyZ2luLXRvcDouNzVyZW19ZGl2K2gxLGRpditoMixkaXYraDMsZGl2K2g0LGRpditoNSxkaXYraDYscCtoNnttYXJnaW4tdG9wOjB9LmRlY297YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7dGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50fTo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX06OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfWtiZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtib3JkZXItcmFkaXVzOjEwcmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3BhZGRpbmc6LjI1ZW0gLjZlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9ZGV0YWlsc3ttYXJnaW4tYm90dG9tOjFyZW19c3VtbWFyeXtjdXJzb3I6cG9pbnRlcjtmb250LWZlYXR1cmUtc2V0dGluZ3M6XFxcInRudW1cXFwiO2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMWVtO3BhZGRpbmc6LjZyZW0gMXJlbX1kZXRhaWxzW29wZW5de3BhZGRpbmc6LjZyZW0gMXJlbSAuNzVyZW19ZGV0YWlsc1tvcGVuXSBzdW1tYXJ5e21hcmdpbi1ib3R0b206LjVyZW07cGFkZGluZzowfS5tb25zdGVyLW5vLXVzZXItc2VsZWN0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1Aa2V5ZnJhbWVzIGRldGFpbHMtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41ZW0pfX1kZXRhaWxzW29wZW5dPjpub3Qoc3VtbWFyeSl7YW5pbWF0aW9uOmRldGFpbHMtc2hvdyAuMTVzIGVhc2UtaW4tb3V0fWRldGFpbHNbb3Blbl0+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tb25vc3BhY2V7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2UpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmludmFsaWR7YmFja2dyb3VuZC1jb2xvcjpyZWR9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6MDt3aWR0aDoxMDAlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4uL2RhdGF0YWJsZS9kYXRhc2V0Lm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBkYXRhc291cmNlTGlua2VkRWxlbWVudFN5bWJvbCB9IGZyb20gXCIuLi9kYXRhdGFibGUvdXRpbC5tanNcIjtcbmltcG9ydCB7IEZvcm1TdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9mb3JtLm1qc1wiO1xuXG5leHBvcnQgeyBGb3JtIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRlYm91bmNlV3JpdGVCYWNrU3ltYm9sID0gU3ltYm9sKFwiZGVib3VuY2VXcml0ZUJhY2tcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRlYm91bmNlQmluZFN5bWJvbCA9IFN5bWJvbChcImRlYm91bmNlQmluZFwiKTtcblxuLyoqXG4gKiBBIGZvcm0gY29udHJvbCB0aGF0IGNhbiBiZSB1c2VkIHRvIGdyb3VwIGZvcm0gZWxlbWVudHMuXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvZm9ybS9mb3JtL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vZm9ybS1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGZvcm0gY29udHJvbFxuICogQGZpcmVzIG1vbnN0ZXItb3B0aW9ucy1zZXRcbiAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGVkXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZWRcbiAqL1xuY2xhc3MgRm9ybSBleHRlbmRzIERhdGFTZXQge1xuXHQvKipcblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3NlcyBDbGFzcyBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5mb3JtIEZvcm0gY2xhc3Ncblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlQmFjayBXcml0ZSBiYWNrIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHdyaXRlQmFjay5ldmVudHMgV3JpdGUgYmFjayBldmVudHNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGJpbmQgQmluZCBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVwb3J0VmFsaWRpdHkgUmVwb3J0IHZhbGlkaXR5IGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZXBvcnRWYWxpZGl0eS5zZWxlY3RvciBSZXBvcnQgdmFsaWRpdHkgc2VsZWN0b3Jcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5tdXRhdGlvbk9ic2VydmVyIE11dGF0aW9uIG9ic2VydmVyIGZlYXR1cmVcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy53cml0ZUJhY2sgV3JpdGUgYmFjayBmZWF0dXJlXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuYmluZCBCaW5kIGZlYXR1cmVcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRjb25zdCBvYmogPSBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGZvcm06IFwiXCIsXG5cdFx0XHR9LFxuXG5cdFx0XHR3cml0ZUJhY2s6IHtcblx0XHRcdFx0ZXZlbnRzOiBbXCJrZXl1cFwiLCBcImNsaWNrXCIsIFwiY2hhbmdlXCIsIFwiZHJvcFwiLCBcInRvdWNoZW5kXCIsIFwiaW5wdXRcIl0sXG5cdFx0XHR9LFxuXG5cdFx0XHRyZXBvcnRWYWxpZGl0eToge1xuXHRcdFx0XHRzZWxlY3RvcjogXCJpbnB1dCxzZWxlY3QsdGV4dGFyZWFcIixcblx0XHRcdH0sXG5cblx0XHRcdGV2ZW50UHJvY2Vzc2luZzogdHJ1ZSxcblx0XHR9KTtcblxuXHRcdG9ialtcImZlYXR1cmVzXCJdW1wibXV0YXRpb25PYnNlcnZlclwiXSA9IGZhbHNlO1xuXHRcdG9ialtcImZlYXR1cmVzXCJdW1wid3JpdGVCYWNrXCJdID0gdHJ1ZTtcblxuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWZvcm1cIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW0Zvcm1TdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0T3B0aW9uKFwiZGF0YXNvdXJjZS5zZWxlY3RvclwiKTtcblxuXHRcdGlmICghc2VsZWN0b3IpIHtcblx0XHRcdHRoaXNbZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xdID0gbmV3IERhdGFzb3VyY2UodGhpcyk7XG5cdFx0fVxuXG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdFx0aW5pdERhdGFTb3VyY2VIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBjcmVhdGVkLlxuXHQgKiBAc2luY2UgMy43MC4wXG5cdCAqIEByZXR1cm4ge0RhdGFTZXR9XG5cdCAqL1xuXHRyZWZyZXNoKCkge1xuXHRcdHRoaXMud3JpdGUoKTtcblx0XHRzdXBlci5yZWZyZXNoKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUnVuIHJlcG9ydFZhbGlkYXRpb24gb24gYWxsIGNoaWxkIGh0bWwgZm9ybSBjb250cm9scy5cblx0ICpcblx0ICogQHNpbmNlIDIuMTAuMFxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0cmVwb3J0VmFsaWRpdHkoKSB7XG5cdFx0bGV0IHZhbGlkID0gdHJ1ZTtcblxuXHRcdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRPcHRpb24oXCJyZXBvcnRWYWxpZGl0eS5zZWxlY3RvclwiKTtcblx0XHRjb25zdCBub2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIHNlbGVjdG9yKTtcblxuXHRcdG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRcdGlmICh0eXBlb2Ygbm9kZS5yZXBvcnRWYWxpZGl0eSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdGlmIChub2RlLnJlcG9ydFZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHZhbGlkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhU291cmNlSGFuZGxlcigpIHt9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2luaXRFdmVudEhhbmRsZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdHRoaXNbZGVib3VuY2VCaW5kU3ltYm9sXSA9IHt9O1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLndyaXRlQmFja1wiKSA9PT0gdHJ1ZSkge1xuXHRcdGNvbnN0IGV2ZW50cyA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGVCYWNrLmV2ZW50c1wiKTtcblx0XHRmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCAoZSkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMucmVwb3J0VmFsaWRpdHkoKSkge1xuXHRcdFx0XHRcdHRoaXMuY2xhc3NMaXN0LmFkZChcImludmFsaWRcIik7XG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsYXNzTGlzdC5yZW1vdmUoXCJpbnZhbGlkXCIpO1xuXHRcdFx0XHRcdH0sIDEwMDApO1xuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRoaXNbZGVib3VuY2VXcml0ZUJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0dGhpc1tkZWJvdW5jZVdyaXRlQmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRpZiAoZS5tZXNzYWdlICE9PSBcImhhcyBhbHJlYWR5IHJ1blwiKSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRkZWxldGUgdGhpc1tkZWJvdW5jZVdyaXRlQmFja1N5bWJvbF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpc1tkZWJvdW5jZVdyaXRlQmFja1N5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlKCk7XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge0ZpbHRlckJ1dHRvbn1cbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGZvcm0gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgaWY6dHJ1ZSwgY2xhc3MgcGF0aDpjbGFzc2VzLmZvcm1cIlxuICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJmb3JtXCJcbiAgICAgICAgICAgICAgICAgIHBhcnQ9XCJmb3JtXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgZGF0YS1tb25zdGVyLXJvbGU9XCJzbG90XCI+PC9zbG90PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoRm9ybSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSwgaXNJbnN0YW5jZSB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCIuL25vZGUubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBOb2RlTGlzdCB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBpbnN0YW5jZSB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5Ob2RlTGlzdCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIE5vZGVMaXN0IGNsYXNzXG4gKi9cbmNsYXNzIE5vZGVMaXN0IGV4dGVuZHMgU2V0IHtcblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBpbnZhbGlkIHZhbHVlIHR5cGVcblx0ICogQHBhcmFtIHtOb2RlTGlzdHxOb2RlfEFycmF5PE5vZGU+fXZhbHVlc1xuXHQgKi9cblx0Y29uc3RydWN0b3IodmFsdWVzKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG5cdFx0aWYgKGlzQXJyYXkodmFsdWVzKSkge1xuXHRcdFx0dmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB0aGlzLmFkZCh2YWx1ZSkpO1xuXHRcdH0gZWxzZSBpZiAoaXNJbnN0YW5jZSh2YWx1ZXMsIE5vZGVMaXN0KSkge1xuXHRcdFx0dmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB0aGlzLmFkZCh2YWx1ZSkpO1xuXHRcdH0gZWxzZSBpZiAoaXNJbnN0YW5jZSh2YWx1ZXMsIE5vZGUpKSB7XG5cdFx0XHR0aGlzLmFkZCh2YWx1ZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHZhbHVlIHR5cGVcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9ub2RlLWxpc3RcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTm9kZUxpc3R9XG5cdCAqL1xuXHRhZGQobm9kZSkge1xuXHRcdHN1cGVyLmFkZCh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRyZW1vdmUobm9kZSkge1xuXHRcdHN1cGVyLmRlbGV0ZSh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGhhcyhub2RlKSB7XG5cdFx0cmV0dXJuIHN1cGVyLmhhcyh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtOb2RlTGlzdH1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHN1cGVyLmNsZWFyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqL1xuXHR0b0FycmF5KCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge05vZGVMaXN0fVxuXHQgKi9cblx0dG9KU09OKCkge1xuXHRcdHJldHVybiB0aGlzLnRvQXJyYXkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtOb2RlTGlzdH1cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGNvbnN0IHBhcnRzID0gW107XG5cblx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy50b0FycmF5KCkpIHtcblx0XHRcdHBhcnRzLnB1c2gobm9kZS50b1N0cmluZygpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcGFydHMuam9pbihcIlxcblwiKTtcblx0fVxuXG5cdGdldCBsZW5ndGgoKSB7XG5cdFx0cmV0dXJuIHN1cGVyLnNpemU7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBOb2RlTGlzdCB9IGZyb20gXCIuL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBOb2RlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVybmFsVmFsdWVTeW1ib2wgPSBTeW1ib2woXCJpbnRlcm5hbERhdGFcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRyZWVTdHJ1Y3R1cmVTeW1ib2wgPSBTeW1ib2woXCJ0cmVlU3RydWN0dXJlXCIpO1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBpbnN0YW5jZSB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5Ob2RlKClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgTm9kZSBDbGFzc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9JdGVyYXRpb25fcHJvdG9jb2xzXG4gKi9cbmNsYXNzIE5vZGUgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7Kn0gW3ZhbHVlXVxuXHQgKi9cblx0Y29uc3RydWN0b3IodmFsdWUpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0gPSB2YWx1ZTtcblxuXHRcdHRoaXNbdHJlZVN0cnVjdHVyZVN5bWJvbF0gPSB7XG5cdFx0XHRwYXJlbnQ6IG51bGwsXG5cdFx0XHRjaGlsZE5vZGVzOiBuZXcgTm9kZUxpc3QoKSxcblx0XHRcdGxldmVsOiAwLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL25vZGVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHsqfVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsVmFsdWVTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7Kn1cblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0gPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuVHlwZXMuTm9kZXxudWxsfVxuXHQgKi9cblx0Z2V0IHBhcmVudCgpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQ7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtpbnRlZ2VyfVxuXHQgKi9cblx0Z2V0IGxldmVsKCkge1xuXHRcdHJldHVybiB0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRnZXQgY2hpbGROb2RlcygpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRzZXQgY2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzID0gdmFsaWRhdGVJbnN0YW5jZShcblx0XHRcdGNoaWxkTm9kZXMsXG5cdFx0XHROb2RlTGlzdCxcblx0XHQpO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbCh0aGlzLCB0aGlzLCAxLCBuZXcgU2V0KCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTm9kZX1cblx0ICogQHBhcmFtIHtOb2RlfSBub2RlXG5cdCAqL1xuXHRhcHBlbmRDaGlsZChub2RlKSB7XG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmFkZCh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLnBhcmVudCA9IHRoaXM7XG5cblx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsID0gdGhpcy5sZXZlbCArIDE7XG5cdFx0c2V0Q2hpbGRMZXZlbEFuZFBhcmVudC5jYWxsKHRoaXMsIG5vZGUsIDEsIG5ldyBTZXQoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlfVxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICovXG5cdHJlbW92ZUNoaWxkKG5vZGUpIHtcblx0XHR0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmNoaWxkTm9kZXMucmVtb3ZlKHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSkpO1xuXHRcdG5vZGVbdHJlZVN0cnVjdHVyZVN5bWJvbF0ucGFyZW50ID0gbnVsbDtcblxuXHRcdG5vZGVbdHJlZVN0cnVjdHVyZVN5bWJvbF0ubGV2ZWwgPSAwO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbCh0aGlzLCBub2RlLCAtMSwgbmV3IFNldCgpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aGFzQ2hpbGROb2RlcygpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmxlbmd0aCA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlfVxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICovXG5cdGhhc0NoaWxkKG5vZGUpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmhhcyhcblx0XHRcdHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMS4yOC4wXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGNvbnN0IHBhcnRzID0gW107XG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0pIHtcblx0XHRcdGxldCBsYWJlbCA9IHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF07XG5cdFx0XHRpZiAoIWlzUHJpbWl0aXZlKGxhYmVsKSlcblx0XHRcdFx0bGFiZWwgPSBKU09OLnN0cmluZ2lmeSh0aGlzW2ludGVybmFsVmFsdWVTeW1ib2xdKTtcblxuXHRcdFx0cGFydHMucHVzaChsYWJlbCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0cmV0dXJuIHBhcnRzLmpvaW4oXCJcXG5cIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY291bnQgPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoO1xuXHRcdGxldCBjb3VudGVyID0gMDtcblxuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmNoaWxkTm9kZXMpIHtcblx0XHRcdGNvdW50ZXIrKztcblx0XHRcdGNvbnN0IHByZWZpeCA9IChjb3VudCA9PT0gY291bnRlciA/IFwiXHUyNTE0XCIgOiBcIlx1MjUxQ1wiKS5wYWRTdGFydChcblx0XHRcdFx0MiAqIG5vZGUubGV2ZWwsXG5cdFx0XHRcdFwiIHxcIixcblx0XHRcdCk7XG5cdFx0XHRwYXJ0cy5wdXNoKHByZWZpeCArIG5vZGUudG9TdHJpbmcoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBhcnRzLmpvaW4oXCJcXG5cIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcGFyYW0ge2ludH0gb3BlcmFuZFxuICogQHBhcmFtIHtTZXR9IHZpc2l0ZWROb2Rlc1xuICogQHJldHVybiB7c2V0Q2hpbGRMZXZlbEFuZFBhcmVudH1cbiAqL1xuZnVuY3Rpb24gc2V0Q2hpbGRMZXZlbEFuZFBhcmVudChub2RlLCBvcGVyYW5kLCB2aXNpdGVkTm9kZXMpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKHZpc2l0ZWROb2Rlcy5oYXMobm9kZSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcInRoZSBub2RlIGhhcyBhbHJlYWR5IGJlZW4gdmlzaXRlZCBhbmQgY2Fubm90IGJlIHRyYXZlcnNlZCBhZ2FpblwiLFxuXHRcdCk7XG5cdH1cblxuXHR2aXNpdGVkTm9kZXMuYWRkKG5vZGUpO1xuXG5cdGlmIChub2RlICE9PSB0aGlzKSB7XG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQgPSB0aGlzO1xuXHR9XG5cblx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG5cdFx0Y2hpbGRbdHJlZVN0cnVjdHVyZVN5bWJvbF0ucGFyZW50ID0gbm9kZTtcblx0XHRjaGlsZFt0cmVlU3RydWN0dXJlU3ltYm9sXS5sZXZlbCA9XG5cdFx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsICsgb3BlcmFuZDtcblx0XHRzZXRDaGlsZExldmVsQW5kUGFyZW50LmNhbGwoc2VsZiwgY2hpbGQsIG9wZXJhbmQsIHZpc2l0ZWROb2Rlcyk7XG5cdH0pO1xuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwiLi4vdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4uL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IGFzc2VtYmxlUGFydHMgfSBmcm9tIFwiLi9idWlsZG1hcC5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuL2V4dGVuZC5tanNcIjtcblxuZXhwb3J0IHsgYnVpbGRUcmVlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBhcmVudFN5bWJvbCA9IFN5bWJvbChcInBhcmVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgcm9vdFN5bWJvbCA9IFN5bWJvbChcInJvb3RcIik7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gYnVpbGRUcmVlT3B0aW9uc1xuICogQHByb3BlcnR5IHthcnJheX0gb3B0aW9ucy5yb290UmVmZXJlbmNlcz1bbnVsbCwgdW5kZWZpbmVkXSBkZWZpbmVzIHRoZSB2YWx1ZXMgZm9yIGVsZW1lbnRzIHdpdGhvdXQgcGFyZW50c1xuICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGF+ZXhhbXBsZUZpbHRlckNhbGxiYWNrfSBvcHRpb25zLmZpbHRlciBmaWx0ZXJpbmcgb2YgdGhlIHZhbHVlc1xuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIHRyZWUgc3RydWN0dXJlIGZyb20gYSBnaXZlbiBzdWJqZWN0IHVzaW5nIGEgc2VsZWN0b3IgYW5kIHNwZWNpZmllZCBJRCBhbmQgcGFyZW50IElEIGtleXMuXG4gKlxuICogVGhlIGJ1aWxkVHJlZSBmdW5jdGlvbiBpcyBhIHBvd2VyZnVsIHRvb2wgZm9yIGNyZWF0aW5nIHRyZWUtbGlrZSBkYXRhIHN0cnVjdHVyZXMgZnJvbSBwbGFpbiBKYXZhU2NyaXB0XG4gKiBvYmplY3RzLiBJdCB0YWtlcyBpbiBmb3VyIHJlcXVpcmVkIHBhcmFtZXRlcnM6IHRoZSBzdWJqZWN0IG9iamVjdCB0aGF0IHlvdSB3YW50IHRvIHR1cm4gaW50byBhIHRyZWUsIGFcbiAqIHNlbGVjdG9yIHRoYXQgaWRlbnRpZmllcyB3aGljaCBwYXJ0cyBvZiB0aGUgc3ViamVjdCB0byB1c2Ugd2hlbiBidWlsZGluZyB0aGUgdHJlZSwgYW5kIHR3byBrZXlzXG4gKiAoaWRLZXkgYW5kIHBhcmVudElES2V5KSB0aGF0IHNwZWNpZnkgd2hpY2ggcHJvcGVydGllcyBpbiB0aGUgc3ViamVjdCByZXByZXNlbnQgdGhlIHVuaXF1ZSBpZGVudGlmaWVyc1xuICogYW5kIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gbm9kZXMgaW4gdGhlIHRyZWUuXG4gKlxuICogT3B0aW9uYWxseSwgeW91IGNhbiBhbHNvIHBhc3MgaW4gYW4gb3B0aW9ucyBvYmplY3QgdG8gZnVydGhlciBjb25maWd1cmUgdGhlIGJlaGF2aW9yIG9mIHRoZSBmdW5jdGlvbixcbiAqIHN1Y2ggYXMgc3BlY2lmeWluZyB3aGljaCB2YWx1ZXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgcm9vdHMgb2YgdGhlIHRyZWUsIG9yIHByb3ZpZGluZyBhIGN1c3RvbSBmaWx0ZXJcbiAqIGZ1bmN0aW9uIHRvIG9ubHkgaW5jbHVkZSBjZXJ0YWluIG5vZGVzIGluIHRoZSBmaW5hbCBvdXRwdXQuXG4gKlxuICogVGhlIGJ1aWxkVHJlZSBmdW5jdGlvbiB3b3JrcyBieSBmaXJzdCB1c2luZyB0aGUgYXNzZW1ibGVQYXJ0cyBoZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnRcbiAqIHBhcnRzIG9mIHRoZSBzdWJqZWN0IGJhc2VkIG9uIHRoZSBzZWxlY3RvciwgYW5kIHRoZW4gaXRlcmF0ZXMgb3ZlciB0aGUgcmVzdWx0aW5nIG1hcCB0byBjcmVhdGUgTm9kZVxuICogb2JqZWN0cyBhbmQgb3JnYW5pemUgdGhlbSBpbnRvIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXBzIGJhc2VkIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGlkS2V5IGFuZCBwYXJlbnRJREtleSBwcm9wZXJ0aWVzLlxuICpcbiAqIFRoZSByZXN1bHRpbmcgTm9kZUxpc3QgcmVwcmVzZW50cyB0aGUgdHJlZSBzdHJ1Y3R1cmUsIHdpdGggZWFjaCBOb2RlIG9iamVjdCBjb250YWluaW5nIHRoZSBvcmlnaW5hbFxuICogb2JqZWN0IGRhdGEgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIG1ldGFkYXRhIGFib3V0IGl0cyBwb3NpdGlvbiBpbiB0aGUgdHJlZS4gWW91IGNhbiB0aGVuIHVzZSB0aGUgY2hpbGROb2Rlc1xuICogcHJvcGVydHkgb2YgZWFjaCBOb2RlIHRvIGFjY2VzcyBpdHMgY2hpbGRyZW4sIG9yIHRoZSBwYXJlbnQgcHJvcGVydHkgdG8gYWNjZXNzIGl0cyBwYXJlbnQuXG4gKlxuICogT3ZlcmFsbCwgdGhlIGJ1aWxkVHJlZSBmdW5jdGlvbiBpcyBhIGZsZXhpYmxlIGFuZCBwb3dlcmZ1bCB3YXkgdG8gdHJhbnNmb3JtIGZsYXQgZGF0YSBpbnRvIGhpZXJhcmNoaWNhbFxuICogc3RydWN0dXJlcywgYW5kIGNhbiBiZSBlc3BlY2lhbGx5IHVzZWZ1bCBpbiBzY2VuYXJpb3Mgc3VjaCBhcyBkaXNwbGF5aW5nIGZvbGRlciBzdHJ1Y3R1cmVzIG9yXG4gKiB2aXN1YWxpemluZyBjb21wbGV4IGRhdGEgcmVsYXRpb25zaGlwcy5cbiAqXG4gKiBMZXQncyBzYXkgeW91IGhhdmUgYW4gYXJyYXkgb2YgZGF0YSBvYmplY3RzIHJlcHJlc2VudGluZyBhIGZpbGUgc3lzdGVtIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIGFuZCB5b3Ugd2FudFxuICogdG8gdHVybiBpdCBpbnRvIGEgdHJlZS1saWtlIHN0cnVjdHVyZSB3aGVyZSBlYWNoIG5vZGUgcmVwcmVzZW50cyBhIGZvbGRlciBvciBmaWxlLCBhbmQgY2hpbGQgbm9kZXNcbiAqIHJlcHJlc2VudCB0aGUgY29udGVudHMgb2YgdGhlIGZvbGRlcjpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCBmaWxlU3lzdGVtID0gW1xuICogICB7IGlkOiAnZm9sZGVyMScsIG5hbWU6ICdGb2xkZXIgMScsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6IG51bGwgfSxcbiAqICAgeyBpZDogJ2ZpbGUxJywgbmFtZTogJ0ZpbGUgMScsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGUyJywgbmFtZTogJ0ZpbGUgMicsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ3N1YmZvbGRlcjEnLCBuYW1lOiAnU3ViZm9sZGVyIDEnLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGUzJywgbmFtZTogJ0ZpbGUgMycsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGU0JywgbmFtZTogJ0ZpbGUgNCcsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ3N1YmZvbGRlcjInLCBuYW1lOiAnU3ViZm9sZGVyIDInLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGU1JywgbmFtZTogJ0ZpbGUgNScsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZpbGU2JywgbmFtZTogJ0ZpbGUgNicsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZvbGRlcjInLCBuYW1lOiAnRm9sZGVyIDInLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiBudWxsIH0sXG4gKiAgIHsgaWQ6ICdmaWxlNycsIG5hbWU6ICdGaWxlIDcnLCB0eXBlOiAnZmlsZScsIHBhcmVudDogJ2ZvbGRlcjInIH0sXG4gKiAgIHsgaWQ6ICdmaWxlOCcsIG5hbWU6ICdGaWxlIDgnLCB0eXBlOiAnZmlsZScsIHBhcmVudDogJ2ZvbGRlcjInIH0sXG4gKiAgIHsgaWQ6ICdzdWJmb2xkZXIzJywgbmFtZTogJ1N1YmZvbGRlciAzJywgdHlwZTogJ2ZvbGRlcicsIHBhcmVudDogJ2ZvbGRlcjInIH0sXG4gKiAgIHsgaWQ6ICdmaWxlOScsIG5hbWU6ICdGaWxlIDknLCB0eXBlOiAnZmlsZScsIHBhcmVudDogJ3N1YmZvbGRlcjMnIH0sXG4gKiAgIHsgaWQ6ICdmaWxlMTAnLCBuYW1lOiAnRmlsZSAxMCcsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMycgfSxcbiAqIF07XG4gKlxuICogY29uc3QgdHJlZSA9IGJ1aWxkVHJlZShmaWxlU3lzdGVtLCAnaWQnLCAnaWQnLCAncGFyZW50JywgeyByb290UmVmZXJlbmNlczogW251bGxdIH0pO1xuICpcbiAqIGNvbnNvbGUubG9nKHRyZWUudG9TdHJpbmcoKSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgYnVpbGRUcmVlIGZ1bmN0aW9uIHRha2VzIGluIHRoZSBhcnJheSBvZiBkYXRhIG9iamVjdHMsIGFzIHdlbGwgYXMgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmeWluZ1xuICogdGhlIGtleXMgdG8gdXNlIGZvciBpZGVudGlmeWluZyBub2RlcyBhbmQgdGhlaXIgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMuIEluIHRoaXMgZXhhbXBsZSwgd2UgdXNlIHRoZSBpZFxuICoga2V5IHRvIGlkZW50aWZ5IG5vZGVzLCBhbmQgdGhlIHBhcmVudCBrZXkgdG8gc3BlY2lmeSB0aGUgcGFyZW50IG9mIGVhY2ggbm9kZS5cbiAqXG4gKiBUaGUgcmVzdWx0aW5nIHRyZWUgb2JqZWN0IGlzIGEgbmVzdGVkIHRyZWUgc3RydWN0dXJlLCB3aGVyZSBlYWNoIG5vZGUgaXMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGZpbGUgb3JcbiAqIGZvbGRlciwgYW5kIGhhcyBjaGlsZCBub2RlcyByZXByZXNlbnRpbmcgaXRzIGNvbnRlbnRzLiBUaGUgdG9TdHJpbmcgbWV0aG9kIG9mIHRoZSB0cmVlIG9iamVjdFxuICogY2FuIGJlIHVzZWQgdG8gcHJpbnQgb3V0IHRoZSB0cmVlIGluIGEgcmVhZGFibGUgZm9ybWF0OlxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiAtIEZvbGRlciAxXG4gKiAgIC0gRmlsZSAxXG4gKiAgIC0gRmlsZSAyXG4gKiAgIC0gU3ViZm9sZGVyIDFcbiAqICAgICAtIEZpbGUgM1xuICogICAgIC0gRmlsZSA0XG4gKiAgIC0gU3ViZm9sZGVyIDJcbiAqICAgICAtIEZpbGUgNVxuICogICAgIC0gRmlsZSA2XG4gKiAtIEZvbGRlciAyXG4gKiAgIC0gRmlsZSA3XG4gKiAgIC0gRmlsZSA4XG4gKiAgIC0gU3ViZm9sZGVyIDNcbiAqICAgICAtIEZpbGUgOVxuICogICAgIC0gRmlsZSAxMFxuICogYGBgXG4gKlxuICogQG1lbWJlcm9mIE1vbnN0ZXIuRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdCAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYnVpbGQgdGhlIHRyZWUgZnJvbS5cbiAqIEBwYXJhbSB7c3RyaW5nfE1vbnN0ZXIuRGF0YX5leGFtcGxlU2VsZWN0b3JDYWxsYmFja30gc2VsZWN0b3IgLSBFaXRoZXIgYSBzdHJpbmcgdG8gc3BlY2lmeSBhIHByb3BlcnR5IG9mIGVhY2ggb2JqZWN0IHRvIHVzZSBhcyBhIHNlbGVjdG9yLCBvciBhIHNlbGVjdG9yIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgbWFwIG9mIG9iamVjdHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRLZXkgLSBUaGUgcHJvcGVydHkga2V5IHRvIHVzZSBhcyB0aGUgdW5pcXVlIElEIG9mIGVhY2ggbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRJREtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgdG8gdXNlIGFzIHRoZSBwYXJlbnQgSUQgb2YgZWFjaCBub2RlLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBtb2RpZnkgdGhlIGZ1bmN0aW9uIGJlaGF2aW9yLlxuICogQHBhcmFtIHtBcnJheTwqPn0gW29wdGlvbnMucm9vdFJlZmVyZW5jZXM9W251bGwsIHVuZGVmaW5lZF1dIC0gQW4gYXJyYXkgb2YgdmFsdWVzIHRvIHRyZWF0IGFzIHJvb3QgcmVmZXJlbmNlcyB3aGVuIGNyZWF0aW5nIHRoZSB0cmVlLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gW29wdGlvbnMuZmlsdGVyXSAtIEEgZmlsdGVyIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggbm9kZS5cbiAqXG4gKiBAcmV0dXJuIHsqfSBUaGUgcmVzdWx0aW5nIHRyZWUgc3RydWN0dXJlIGFzIGEgTm9kZUxpc3QuXG4gKlxuICogQHRocm93cyB7VHlwZUVycm9yfSBzZWxlY3RvciBpcyBuZWl0aGVyIGEgc3RyaW5nIG5vciBhIGZ1bmN0aW9uLlxuICogQHRocm93cyB7VHlwZUVycm9yfSB0aGUgc2VsZWN0b3IgY2FsbGJhY2sgbXVzdCByZXR1cm4gYSBtYXAuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9iamVjdCBoYXMgbm8gdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgaWQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKlxuICogQHNpbmNlIDEuMjYuMFxuICovXG5mdW5jdGlvbiBidWlsZFRyZWUoc3ViamVjdCwgc2VsZWN0b3IsIGlkS2V5LCBwYXJlbnRJREtleSwgb3B0aW9ucykge1xuXHRjb25zdCBub2RlcyA9IG5ldyBNYXAoKTtcblxuXHRjb25zdCBtYXhEZXB0aCA9IDEwMDtcblxuXHRpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XG5cdFx0b3B0aW9ucyA9IHt9O1xuXHR9XG5cblx0b3B0aW9ucyA9IGV4dGVuZChcblx0XHR7fSxcblx0XHR7XG5cdFx0XHRyb290UmVmZXJlbmNlczogW251bGwsIHVuZGVmaW5lZF0sXG5cdFx0XHRmaWx0ZXI6IHVuZGVmaW5lZCxcblx0XHR9LFxuXHRcdG9wdGlvbnMsXG5cdCk7XG5cblx0Y29uc3QgZmlsdGVyID0gb3B0aW9ucz8uZmlsdGVyO1xuXHRsZXQgcm9vdFJlZmVyZW5jZXMgPSBvcHRpb25zLnJvb3RSZWZlcmVuY2VzO1xuXHRpZiAoIWlzQXJyYXkocm9vdFJlZmVyZW5jZXMpKSB7XG5cdFx0cm9vdFJlZmVyZW5jZXMgPSBbcm9vdFJlZmVyZW5jZXNdO1xuXHR9XG5cblx0Y29uc3QgY2hpbGRNYXAgPSBhc3NlbWJsZVBhcnRzKHN1YmplY3QsIHNlbGVjdG9yLCBmaWx0ZXIsIGZ1bmN0aW9uIChvLCBrLCBtKSB7XG5cdFx0Y29uc3Qga2V5ID0gbz8uW2lkS2V5XTtcblx0XHRsZXQgcmVmID0gbz8uW3BhcmVudElES2V5XTtcblx0XHRpZiAocm9vdFJlZmVyZW5jZXMuaW5kZXhPZihyZWYpICE9PSAtMSkgcmVmID0gcm9vdFN5bWJvbDtcblxuXHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIG9iamVjdCBoYXMgbm8gdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgaWRcIik7XG5cdFx0fVxuXG5cdFx0b1twYXJlbnRTeW1ib2xdID0gcmVmO1xuXG5cdFx0Y29uc3Qgbm9kZSA9IG5ldyBOb2RlKG8pO1xuXHRcdHRoaXMuaGFzKHJlZilcblx0XHRcdD8gdGhpcy5nZXQocmVmKS5hZGQobm9kZSlcblx0XHRcdDogdGhpcy5zZXQocmVmLCBuZXcgTm9kZUxpc3QoKS5hZGQobm9kZSkpO1xuXHRcdG5vZGVzLnNldChrZXksIG5vZGUpO1xuXHR9KTtcblxuXHRub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0Y29uc3QgaWQgPSBub2RlPy5bXCJ2YWx1ZVwiXT8uW2lkS2V5XTtcblxuXHRcdGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgb2JqZWN0IGhhcyBubyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBpZFwiKTtcblx0XHR9XG5cblx0XHRpZiAoY2hpbGRNYXAuaGFzKGlkKSkge1xuXHRcdFx0bm9kZS5jaGlsZE5vZGVzID0gY2hpbGRNYXAuZ2V0KGlkKTtcblx0XHRcdGNoaWxkTWFwLmRlbGV0ZShpZCk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBsaXN0ID0gbmV3IE5vZGVMaXN0KCk7XG5cblx0Y2hpbGRNYXAuZm9yRWFjaCgocykgPT4ge1xuXHRcdGlmIChzIGluc3RhbmNlb2YgU2V0KSB7XG5cdFx0XHRzLmZvckVhY2goKG4pID0+IHtcblx0XHRcdFx0bGlzdC5hZGQobik7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBsaXN0O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0luc3RhbmNlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcIi4vbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4vbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IE5vZGVSZWN1cnNpdmVJdGVyYXRvciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpc05vZGVMaXN0U3ltYm9sID0gU3ltYm9sKFwiaXNOb2RlTGlzdFwiKTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVjdXJzaXZlIGl0ZXJhdG9yIGZvciB0cmF2ZXJzaW5nIG5vZGVzIGluIGEgRE9NIHRyZWUuXG4gKlxuICogQHNpbmNlIDEuMjYuMFxuICogQHN1bW1hcnkgQW4gaXRlcmF0b3IgdG8gcnVuIHJlY3Vyc2l2ZWx5IHRocm91Z2ggYSB0cmVlIG9mIG5vZGVzXG4gKiBAZXh0ZW5kcyBCYXNlXG4gKi9cbmNsYXNzIE5vZGVSZWN1cnNpdmVJdGVyYXRvciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIG5vZGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKG5vZGUpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1tpc05vZGVMaXN0U3ltYm9sXSA9IGZhbHNlO1xuXG5cdFx0Ly8gaXRlcmF0b3IgaXMgYSBOb2RlTGlzdFxuXHRcdGlmIChpc0luc3RhbmNlKG5vZGUsIE5vZGVMaXN0KSkge1xuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBub2RlO1xuXHRcdFx0Y29uc3QgbiA9IG5ldyBOb2RlKCk7XG5cdFx0XHRuLmNoaWxkTm9kZXMgPSBjaGlsZHJlbjtcblx0XHRcdHRoaXNbaXNOb2RlTGlzdFN5bWJvbF0gPSB0cnVlO1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBuO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gdmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy95aWVsZFxuXHQgKi9cblx0W1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiogKCkge1xuXHRcdC8qKlxuXHRcdCAqIFRoZSBlbmQgb2YgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBpcyByZWFjaGVkLiBJbiB0aGlzIGNhc2UsIGV4ZWN1dGlvbiBvZiB0aGUgZ2VuZXJhdG9yXG5cdFx0ICogZW5kcyBhbmQgYW4gSXRlcmF0b3JSZXN1bHQgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciBpbiB3aGljaCB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCBkb25lIGlzIHRydWUuXG5cdFx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMveWllbGRcblx0XHQgKi9cblx0XHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGl0ZXJhdG9yIGlzIGEgbm9kZWxpc3QgYW5kIHRoZSBtYWluIG5vZGUgaXMgb25seSBhIHBsYWNlaG9sZGVyXG5cdFx0aWYgKHRoaXNbaXNOb2RlTGlzdFN5bWJvbF0gIT09IHRydWUpIHtcblx0XHRcdHlpZWxkIHRoaXNbaW50ZXJuYWxTeW1ib2xdO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXS5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5jaGlsZE5vZGVzO1xuXG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgY2hpbGROb2Rlcykge1xuXHRcdFx0XHR5aWVsZCogbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEByZXR1cm4ge05vZGVSZWN1cnNpdmVJdGVyYXRvcn1cblx0ICovXG5cdGZvckVhY2goY2FsbGJhY2spIHtcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcykge1xuXHRcdFx0Y2FsbGJhY2sobm9kZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgVHJlZVNlbGVjdFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFRyZWVTZWxlY3RTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0VHJlZVNlbGVjdFN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgdHJlZXNlbGVjdCB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWJhZGdlXXtkaXNwbGF5OmlubGluZS1mbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25de2Rpc3BsYXk6ZmxleH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItc3RhdGU9b3Blbl1bZGF0YS1tb25zdGVyLWhhcy1jaGlsZHJlbj10cnVlXSBbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJde2NvbnRlbnQ6dXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7IHV0ZjgsIDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB3aWR0aD1cXFwiMTZcXFwiIGhlaWdodD1cXFwiMTZcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIj48cGF0aCBkPVxcXCJNMi41IDBjLS4xNjYgMC0uMzMuMDE2LS40ODcuMDQ4bC4xOTQuOThBMS41MSAxLjUxIDAgMCAxIDIuNSAxaC40NThWMEgyLjV6bTIuMjkyIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTZ2MWguOTE2VjB6bTEuODM0IDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6TTEzLjUgMGgtLjQ1OHYxaC40NThjLjEgMCAuMTk5LjAxLjI5My4wMjlsLjE5NC0uOTgxQTIuNTEgMi41MSAwIDAgMCAxMy41IDB6bTIuMDc5IDEuMTFhMi41MTEgMi41MTEgMCAwIDAtLjY5LS42ODlsLS41NTYuODMxYy4xNjQuMTEuMzA1LjI1MS40MTUuNDE1bC44My0uNTU2ek0xLjExLjQyMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjg5LjY5bC44MzEuNTU2Yy4xMS0uMTY0LjI1MS0uMzA1LjQxNS0uNDE1TDEuMTEuNDIyek0xNiAyLjVjMC0uMTY2LS4wMTYtLjMzLS4wNDgtLjQ4N2wtLjk4LjE5NGMuMDE4LjA5NC4wMjguMTkyLjAyOC4yOTN2LjQ1OGgxVjIuNXpNLjA0OCAyLjAxM0EyLjUxIDIuNTEgMCAwIDAgMCAyLjV2LjQ1OGgxVjIuNWMwLS4xLjAxLS4xOTkuMDI5LS4yOTNsLS45ODEtLjE5NHpNMCAzLjg3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNS43MDh2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxek0wIDcuNTQydi45MTZoMXYtLjkxNkgwem0xNSAuOTE2aDF2LS45MTZoLTF2LjkxNnpNMCA5LjM3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6bS0xNiAuOTE2di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTd2LjQ1OGMwIC4xNjYuMDE2LjMzLjA0OC40ODdsLjk4LS4xOTRBMS41MSAxLjUxIDAgMCAxIDEgMTMuNXYtLjQ1OEgwem0xNiAuNDU4di0uNDU4aC0xdi40NThjMCAuMS0uMDEuMTk5LS4wMjkuMjkzbC45ODEuMTk0Yy4wMzItLjE1OC4wNDgtLjMyLjA0OC0uNDg3ek0uNDIxIDE0Ljg5Yy4xODMuMjcyLjQxNy41MDYuNjkuNjg5bC41NTYtLjgzMWExLjUxIDEuNTEgMCAwIDEtLjQxNS0uNDE1bC0uODMuNTU2em0xNC40NjkuNjg5Yy4yNzItLjE4My41MDYtLjQxNy42ODktLjY5bC0uODMxLS41NTZjLS4xMS4xNjQtLjI1MS4zMDUtLjQxNS40MTVsLjU1Ni44M3ptLTEyLjg3Ny4zNzNjLjE1OC4wMzIuMzIuMDQ4LjQ4Ny4wNDhoLjQ1OHYtMUgyLjVjLS4xIDAtLjE5OS0uMDEtLjI5My0uMDI5bC0uMTk0Ljk4MXpNMTMuNSAxNmMuMTY2IDAgLjMzLS4wMTYuNDg3LS4wNDhsLS4xOTQtLjk4QTEuNTEgMS41MSAwIDAgMSAxMy41IDE1aC0uNDU4djFoLjQ1OHptLTkuNjI1IDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXptMS44MzQgMGguOTE2di0xaC0uOTE2djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXpNNC41IDcuNWEuNS41IDAgMCAwIDAgMWg3YS41LjUgMCAwIDAgMC0xaC03elxcXCIvPjwvc3ZnPicpO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEzcHg7bWFyZ2luLXJpZ2h0OjhweDt3aWR0aDoxM3B4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1zdGF0ZT1jbG9zZV1bZGF0YS1tb25zdGVyLWhhcy1jaGlsZHJlbj10cnVlXSBbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJde2NvbnRlbnQ6dXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7IHV0ZjgsIDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB3aWR0aD1cXFwiMTZcXFwiIGhlaWdodD1cXFwiMTZcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIj48cGF0aCBkPVxcXCJNMi41IDBjLS4xNjYgMC0uMzMuMDE2LS40ODcuMDQ4bC4xOTQuOThBMS41MSAxLjUxIDAgMCAxIDIuNSAxaC40NThWMEgyLjV6bTIuMjkyIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTZ2MWguOTE2VjB6bTEuODM0IDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6TTEzLjUgMGgtLjQ1OHYxaC40NThjLjEgMCAuMTk5LjAxLjI5My4wMjlsLjE5NC0uOTgxQTIuNTEgMi41MSAwIDAgMCAxMy41IDB6bTIuMDc5IDEuMTFhMi41MTEgMi41MTEgMCAwIDAtLjY5LS42ODlsLS41NTYuODMxYy4xNjQuMTEuMzA1LjI1MS40MTUuNDE1bC44My0uNTU2ek0xLjExLjQyMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjg5LjY5bC44MzEuNTU2Yy4xMS0uMTY0LjI1MS0uMzA1LjQxNS0uNDE1TDEuMTEuNDIyek0xNiAyLjVjMC0uMTY2LS4wMTYtLjMzLS4wNDgtLjQ4N2wtLjk4LjE5NGMuMDE4LjA5NC4wMjguMTkyLjAyOC4yOTN2LjQ1OGgxVjIuNXpNLjA0OCAyLjAxM0EyLjUxIDIuNTEgMCAwIDAgMCAyLjV2LjQ1OGgxVjIuNWMwLS4xLjAxLS4xOTkuMDI5LS4yOTNsLS45ODEtLjE5NHpNMCAzLjg3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNS43MDh2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxek0wIDcuNTQydi45MTZoMXYtLjkxNkgwem0xNSAuOTE2aDF2LS45MTZoLTF2LjkxNnpNMCA5LjM3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6bS0xNiAuOTE2di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTd2LjQ1OGMwIC4xNjYuMDE2LjMzLjA0OC40ODdsLjk4LS4xOTRBMS41MSAxLjUxIDAgMCAxIDEgMTMuNXYtLjQ1OEgwem0xNiAuNDU4di0uNDU4aC0xdi40NThjMCAuMS0uMDEuMTk5LS4wMjkuMjkzbC45ODEuMTk0Yy4wMzItLjE1OC4wNDgtLjMyLjA0OC0uNDg3ek0uNDIxIDE0Ljg5Yy4xODMuMjcyLjQxNy41MDYuNjkuNjg5bC41NTYtLjgzMWExLjUxIDEuNTEgMCAwIDEtLjQxNS0uNDE1bC0uODMuNTU2em0xNC40NjkuNjg5Yy4yNzItLjE4My41MDYtLjQxNy42ODktLjY5bC0uODMxLS41NTZjLS4xMS4xNjQtLjI1MS4zMDUtLjQxNS40MTVsLjU1Ni44M3ptLTEyLjg3Ny4zNzNjLjE1OC4wMzIuMzIuMDQ4LjQ4Ny4wNDhoLjQ1OHYtMUgyLjVjLS4xIDAtLjE5OS0uMDEtLjI5My0uMDI5bC0uMTk0Ljk4MXpNMTMuNSAxNmMuMTY2IDAgLjMzLS4wMTYuNDg3LS4wNDhsLS4xOTQtLjk4QTEuNTEgMS41MSAwIDAgMSAxMy41IDE1aC0uNDU4djFoLjQ1OHptLTkuNjI1IDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXptMS44MzQtMXYxaC45MTZ2LTFoLS45MTZ6bTEuODMzIDFoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXpNOC41IDQuNWEuNS41IDAgMCAwLTEgMHYzaC0zYS41LjUgMCAwIDAgMCAxaDN2M2EuNS41IDAgMCAwIDEgMHYtM2gzYS41LjUgMCAwIDAgMC0xaC0zdi0zelxcXCIvPjwvc3ZnPicpO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEzcHg7bWFyZ2luLXJpZ2h0OjhweDt3aWR0aDoxM3B4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PWhpZGRlbl17ZGlzcGxheTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PXZpc2libGVde2Rpc3BsYXk6ZmxleH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuPWZhbHNlXSBbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJde2NvbnRlbnQ6XFxcIiBcXFwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEzcHg7bWFyZ2luLXJpZ2h0OjhweDt3aWR0aDoxM3B4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjBcXFwiXXtkaXNwbGF5OmZsZXg7bWFyZ2luOjB9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiMVxcXCJde21hcmdpbjowIDAgMCAyMHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjJcXFwiXXttYXJnaW46MCAwIDAgNDBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCIzXFxcIl17bWFyZ2luOjAgMCAwIDYwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiNFxcXCJde21hcmdpbjowIDAgMCA4MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjVcXFwiXXttYXJnaW46MCAwIDAgMTAwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiNlxcXCJde21hcmdpbjowIDAgMCAxMTBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCI3XFxcIl17bWFyZ2luOjAgMCAwIDEyMHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjhcXFwiXXttYXJnaW46MCAwIDAgMTMwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWZpbHRlcmVkPXRydWVde2Rpc3BsYXk6bm9uZX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgYnVpbGRUcmVlIH0gZnJvbSBcIi4uLy4uL2RhdGEvYnVpbGR0cmVlLm1qc1wiO1xuaW1wb3J0IHsgZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9ST0xFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7XG5cdGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50LFxuXHRmaXJlQ3VzdG9tRXZlbnQsXG5cdGZpcmVFdmVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVSZWN1cnNpdmVJdGVyYXRvciB9IGZyb20gXCIuLi8uLi90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0ZPUk1fVVJMLCBBVFRSSUJVVEVfSU5URU5EIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSBcIi4vc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHsgU2VsZWN0U3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHsgVHJlZVNlbGVjdFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3RyZWUtc2VsZWN0Lm1qc1wiO1xuXG5leHBvcnQgeyBUcmVlU2VsZWN0LCBmb3JtYXRIaWVyYXJjaGljYWxTZWxlY3Rpb24gfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxOb2Rlc1N5bWJvbCA9IFN5bWJvbChcImludGVybmFsTm9kZXNcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGtleUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImtleUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBBIHRyZWUgc2VsZWN0IGNvbnRyb2wgaXMgYSBzZWxlY3QgY29udHJvbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBhIHZhbHVlIGZyb20gYSB0cmVlIHN0cnVjdHVyZS5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0XG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdFxuICpcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHRyZWUgc2VsZWN0IGNvbnRyb2wgd2l0aCBhIGxvdCBvZiBvcHRpb25zXG4gKiBAZmlyZXMgbW9uc3Rlci1vcHRpb25zLXNldFxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0ZWRcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZVxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlZFxuICovXG5jbGFzcyBUcmVlU2VsZWN0IGV4dGVuZHMgU2VsZWN0IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vdHJlZS1zZWxlY3RAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQGV4dGVuZHMgU2VsZWN0XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnJvb3RSZWZlcmVuY2VzPVsnMCcsIHVuZGVmaW5lZCwgbnVsbF1cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcuaWRUZW1wbGF0ZT1pZFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy5wYXJlbnRUZW1wbGF0ZT1wYXJlbnRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcuc2VsZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmb3JtYXR0ZXJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZvcm1hdHRlci5zZXBhcmF0b3I9XCIgLyBcIlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHJvb3RSZWZlcmVuY2VzOiBbXCIwXCIsIHVuZGVmaW5lZCwgbnVsbF0sXG5cdFx0XHRcdFx0aWRUZW1wbGF0ZTogXCJpZFwiLFxuXHRcdFx0XHRcdHBhcmVudFRlbXBsYXRlOiBcInBhcmVudFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmb3JtYXR0ZXI6IHtcblx0XHRcdFx0XHRzZWxlY3Rpb246IGZvcm1hdEhpZXJhcmNoaWNhbFNlbGVjdGlvbixcblx0XHRcdFx0XHRzZXBhcmF0b3I6IFwiIC8gXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdHJlZS1zZWxlY3RcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1NlbGVjdFN0eWxlU2hlZXQsIFRyZWVTZWxlY3RTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbXBvcnQgU2VsZWN0IE9wdGlvbnMgZnJvbSBkYXRhc2V0XG5cdCAqIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBjb250cm9sIGRlZmF1bHRzL29wdGlvbnNcblx0ICpcblx0ICogQHBhcmFtIHthcnJheXxvYmplY3R8TWFwfFNldH0gZGF0YVxuXHQgKiBAcmV0dXJuIHtTZWxlY3R9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtYXAgaXMgbm90IGl0ZXJhYmxlXG5cdCAqL1xuXHRpbXBvcnRPcHRpb25zKGRhdGEpIHtcblx0XHR0aGlzW2ludGVybmFsTm9kZXNTeW1ib2xdID0gbmV3IE1hcCgpO1xuXG5cdFx0Y29uc3QgbWFwcGluZ09wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm1hcHBpbmdcIiwge30pO1xuXG5cdFx0Y29uc3QgZmlsdGVyID0gbWFwcGluZ09wdGlvbnM/LltcImZpbHRlclwiXTtcblx0XHRjb25zdCByb290UmVmZXJlbmNlcyA9IG1hcHBpbmdPcHRpb25zPy5bXCJyb290UmVmZXJlbmNlc1wiXTtcblxuXHRcdGNvbnN0IGlkID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLmlkVGVtcGxhdGVcIiwgXCJpZFwiKTtcblx0XHRjb25zdCBwYXJlbnRJRCA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy5wYXJlbnRUZW1wbGF0ZVwiLCBcInBhcmVudFwiKTtcblxuXHRcdGNvbnN0IHNlbGVjdG9yID0gbWFwcGluZ09wdGlvbnM/LltcInNlbGVjdG9yXCJdO1xuXG5cdFx0Y29uc3Qgbm9kZXMgPSBidWlsZFRyZWUoZGF0YSwgc2VsZWN0b3IsIGlkLCBwYXJlbnRJRCwge1xuXHRcdFx0ZmlsdGVyLFxuXHRcdFx0cm9vdFJlZmVyZW5jZXMsXG5cdFx0fSk7XG5cblx0XHRjb25zdCBvcHRpb25zID0gW107XG5cdFx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0XHRjb25zdCBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3Iobm9kZSk7XG5cdFx0XHRmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcblx0XHRcdFx0Y29uc3QgZm9ybWF0dGVkVmFsdWVzID0gZm9ybWF0S2V5TGFiZWwuY2FsbCh0aGlzLCBuKTtcblxuXHRcdFx0XHRjb25zdCBsYWJlbCA9IGZvcm1hdHRlZFZhbHVlcy5sYWJlbDtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBmb3JtYXR0ZWRWYWx1ZXMudmFsdWU7XG5cdFx0XHRcdGNvbnN0IGludGVuZCA9IG4ubGV2ZWw7XG5cblx0XHRcdFx0Y29uc3QgdmlzaWJpbGl0eSA9IGludGVuZCA+IDAgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XG5cdFx0XHRcdGNvbnN0IHN0YXRlID0gXCJjbG9zZVwiO1xuXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxOb2Rlc1N5bWJvbF0uc2V0KHZhbHVlLCBuKTtcblxuXHRcdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdGxhYmVsLFxuXHRcdFx0XHRcdGludGVuZCxcblx0XHRcdFx0XHRzdGF0ZSxcblx0XHRcdFx0XHR2aXNpYmlsaXR5LFxuXHRcdFx0XHRcdFtcImhhcy1jaGlsZHJlblwiXTogbi5oYXNDaGlsZE5vZGVzKCksXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuc2V0T3B0aW9uKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3B0aW9ucy1zZXRcIiwge1xuXHRcdFx0b3B0aW9ucyxcblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlNlbGVjdH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBldmVudFxuICovXG5mdW5jdGlvbiBoYW5kbGVPcHRpb25LZXlib2FyZEV2ZW50cyhldmVudCkge1xuXHRzd2l0Y2ggKGV2ZW50Py5bXCJjb2RlXCJdKSB7XG5cdFx0Y2FzZSBcIkFycm93TGVmdFwiOlxuXHRcdFx0Y2xvc2VPck9wZW5DdXJyZW50T3B0aW9uLmNhbGwodGhpcywgZXZlbnQsIFwiY2xvc2VcIik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkFycm93UmlnaHRcIjpcblx0XHRcdGNsb3NlT3JPcGVuQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIGV2ZW50LCBcIm9wZW5cIik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtldmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gY2xvc2VPck9wZW5DdXJyZW50T3B0aW9uKGV2ZW50LCBtb2RlKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZXZlbnQsIEV2ZW50KTtcblxuXHRpZiAodHlwZW9mIGV2ZW50LmNvbXBvc2VkUGF0aCAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgZXZlbnRcIik7XG5cdH1cblxuXHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdGNvbnN0IG9wdGlvbk5vZGUgPSBwYXRoLnNoaWZ0KCk7XG5cblx0Y29uc3Qgc3RhdGUgPSBvcHRpb25Ob2RlLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1zdGF0ZVwiKTtcblx0aWYgKHN0YXRlICE9PSBtb2RlKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IG9wdGlvbk5vZGUucXVlcnlTZWxlY3Rvcihcblx0XHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWZvbGRlci1oYW5kbGVyXVwiLFxuXHRcdCk7XG5cdFx0aWYgKGhhbmRsZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0ZmlyZUV2ZW50KGhhbmRsZXIsIFwiY2xpY2tcIik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHJldHVybiB7YXJyYXk8bGFiZWwsIHZhbHVlPn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEtleUxhYmVsKG5vZGUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKTtcblxuXHRjb25zdCBsYWJlbCA9IG5ldyBGb3JtYXR0ZXIobm9kZS52YWx1ZSkuZm9ybWF0KFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy5sYWJlbFRlbXBsYXRlXCIsIFwiXCIpLFxuXHQpO1xuXHRjb25zdCB2YWx1ZSA9IG5ldyBGb3JtYXR0ZXIobm9kZS52YWx1ZSkuZm9ybWF0KFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy52YWx1ZVRlbXBsYXRlXCIsIFwiXCIpLFxuXHQpO1xuXG5cdHJldHVybiB7XG5cdFx0dmFsdWUsXG5cdFx0bGFiZWwsXG5cdH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVHJlZUxhYmVscyh2YWx1ZSkge1xuXHRsZXQgbm9kZSA9IHRoaXNbaW50ZXJuYWxOb2Rlc1N5bWJvbF0uZ2V0KHZhbHVlKTtcblx0aWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG5vZGUgPSB0aGlzW2ludGVybmFsTm9kZXNTeW1ib2xdLmdldChwYXJzZUludCh2YWx1ZSkpO1xuXHR9XG5cblx0Y29uc3QgcGFydHMgPSBbXTtcblxuXHRpZiAobm9kZSBpbnN0YW5jZW9mIE5vZGUpIHtcblx0XHRsZXQgcHRyID0gbm9kZTtcblx0XHR3aGlsZSAocHRyKSB7XG5cdFx0XHRjb25zdCBmb3JtYXR0ZWRWYWx1ZXMgPSBmb3JtYXRLZXlMYWJlbC5jYWxsKHRoaXMsIHB0cik7XG5cdFx0XHRwYXJ0cy51bnNoaWZ0KGZvcm1hdHRlZFZhbHVlcy5sYWJlbCk7XG5cdFx0XHRwdHIgPSBwdHIucGFyZW50O1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwYXJ0cztcbn1cblxuLyoqXG4gKiBUaGlzIGZvcm1hdHRlciBjYW4gZm9ybWF0IGEgbGFiZWwgaGllcmFyY2hpY2FsbHkuXG4gKiBUaGUgb3B0aW9uIGBmb3JtYXR0ZXIuc2VwYXJhdG9yYCBkZXRlcm1pbmVzIHRoZSBzZXBhcmF0b3IuXG4gKlxuICogYGBgXG4gKiBhIC8gYiAvIGNcbiAqIGBgYFxuICpcbiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHBhc3NlZCBhcyBhcmd1bWVudCBvZiB0aGUgb3B0aW9uIGBmb3JtYXR0ZXIuc2VsZWN0aW9uOmAuXG4gKlxuICogQHNpbmNlIDEuOS4wXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEhpZXJhcmNoaWNhbFNlbGVjdGlvbih2YWx1ZSkge1xuXHRyZXR1cm4gYnVpbGRUcmVlTGFiZWxzXG5cdFx0LmNhbGwodGhpcywgdmFsdWUpXG5cdFx0LmpvaW4odGhpcy5nZXRPcHRpb24oXCJmb3JtYXR0ZXIuc2VwYXJhdG9yXCIsIFwiIC8gXCIpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3Blbk9wdGlvbkV2ZW50SGFuZGxlciA9IFN5bWJvbChcIm9wZW5PcHRpb25FdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbb3Blbk9wdGlvbkV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJmb2xkZXItaGFuZGxlclwiLFxuXHRcdCk7XG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbnRhaW5lciA9IGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZWxlbWVudCwgQVRUUklCVVRFX1JPTEUsIFwib3B0aW9uXCIpO1xuXHRcdGNvbnN0IGluZGV4ID0gY29udGFpbmVyXG5cdFx0XHQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UpXG5cdFx0XHQuc3BsaXQoXCItXCIpXG5cdFx0XHQucG9wKCk7XG5cblx0XHRjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmdldE9wdGlvbihgb3B0aW9ucy4ke2luZGV4fS5zdGF0ZWApO1xuXG5cdFx0Y29uc3QgbmV3U3RhdGUgPSBjdXJyZW50U3RhdGUgPT09IFwiY2xvc2VcIiA/IFwib3BlblwiIDogXCJjbG9zZVwiO1xuXHRcdHRoaXMuc2V0T3B0aW9uKGBvcHRpb25zLiR7aW5kZXh9LnN0YXRlYCwgbmV3U3RhdGUpO1xuXG5cdFx0Y29uc3QgbmV3VmlzaWJpbGl0eSA9IG5ld1N0YXRlID09PSBcIm9wZW5cIiA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIjtcblxuXHRcdGlmIChjb250YWluZXIuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpKSB7XG5cdFx0XHRjb25zdCBpbnRlbmQgPSBjb250YWluZXIuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpO1xuXG5cdFx0XHRsZXQgcmVmID0gY29udGFpbmVyLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdGNvbnN0IGNoaWxkSW50ZW5kID0gcGFyc2VJbnQoaW50ZW5kKSArIDE7XG5cblx0XHRcdGNvbnN0IGNtcCA9IChhLCBiKSA9PiB7XG5cdFx0XHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJvcGVuXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gYSA9PT0gYjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBhID49IGI7XG5cdFx0XHR9O1xuXG5cdFx0XHR3aGlsZSAoXG5cdFx0XHRcdHJlZj8uaGFzQXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpICYmXG5cdFx0XHRcdGNtcChwYXJzZUludChyZWYuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpKSwgY2hpbGRJbnRlbmQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgcmVmSW5kZXggPSByZWZcblx0XHRcdFx0XHQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UpXG5cdFx0XHRcdFx0LnNwbGl0KFwiLVwiKVxuXHRcdFx0XHRcdC5wb3AoKTtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtyZWZJbmRleH0udmlzaWJpbGl0eWAsIG5ld1Zpc2liaWxpdHkpO1xuXG5cdFx0XHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZVwiKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtyZWZJbmRleH0uc3RhdGVgLCBcImNsb3NlXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVmID0gcmVmLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dGhpc1trZXlFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBwYXRoPy5bMF07XG5cblx0XHRsZXQgcm9sZTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkpIHtcblx0XHRcdFx0cm9sZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKTtcblx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRzaG93LmNhbGwodGhpcyk7XG5cdFx0XHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBlID0gZWxlbWVudC5jbG9zZXN0KGBbJHtBVFRSSUJVVEVfUk9MRX1dYCk7XG5cdFx0XHRcdGlmIChlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZS5oYXNBdHRyaWJ1dGUoKSkge1xuXHRcdFx0XHRcdHJvbGUgPSBlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHN3aXRjaCAocm9sZSkge1xuXHRcdFx0Y2FzZSBcIm9wdGlvbi1sYWJlbFwiOlxuXHRcdFx0Y2FzZSBcIm9wdGlvbi1jb250cm9sXCI6XG5cdFx0XHRjYXNlIFwib3B0aW9uXCI6XG5cdFx0XHRcdGhhbmRsZU9wdGlvbktleWJvYXJkRXZlbnRzLmNhbGwodGhpcywgZXZlbnQpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH07XG5cblx0dGhpcy5zaGFkb3dSb290LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXNba2V5RXZlbnRIYW5kbGVyXSk7XG5cdHRoaXMuc2hhZG93Um9vdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpc1tvcGVuT3B0aW9uRXZlbnRIYW5kbGVyXSk7XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1zZWxlY3QgZGF0YS1tb25zdGVyLXVybD1cImh0dHBzOi8vZXhhbXBsZS5jb20vXCI+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cdGlmIChpc1N0cmluZyh1cmwpKSB7XG5cdFx0b3B0aW9uc1tcInVybFwiXSA9IG5ldyBVUkwodXJsKS50b1N0cmluZygpO1xuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaW50ZW5kIHBhdGg6b3B0aW9ucy5pbnRlbmQsIFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItc3RhdGUgcGF0aDpvcHRpb25zLnN0YXRlLCBcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXZpc2liaWxpdHkgcGF0aDpvcHRpb25zLnZpc2liaWxpdHksIFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItZmlsdGVyZWQgcGF0aDpvcHRpb25zLmZpbHRlcmVkLFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuIHBhdGg6b3B0aW9ucy5oYXMtY2hpbGRyZW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZm9sZGVyLWhhbmRsZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgcGFydD1cIm9wdGlvblwiIHJvbGU9XCJvcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJcbiAgICAgICAgICAgIHR5cGUgcGF0aDp0eXBlLFxuICAgICAgICAgICAgcm9sZSBwYXRoOnJvbGUsXG4gICAgICAgICAgICB2YWx1ZSBwYXRoOm9wdGlvbnMudmFsdWUsIFxuICAgICAgICAgICAgbmFtZSBwYXRoOm5hbWUsIFxuICAgICAgICAgICAgcGFydCBwYXRoOnR5cGUgfCBwcmVmaXg6b3B0aW9uLSB8IHN1ZmZpeDogZm9ybVxuICAgICAgICAgICAgXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6b3B0aW9ucyB8IGluZGV4OmxhYmVsXCIgcGFydD1cIm9wdGlvbi1sYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHRlbXBsYXRlIGlkPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICBwYXJ0PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItdmFsdWUgcGF0aDpzZWxlY3Rpb24gfCBpbmRleDp2YWx1ZSwgXG4gICAgICAgICAgICAgICAgIGNsYXNzIHBhdGg6Y2xhc3NlcyB8IGluZGV4OmJhZGdlLCBcbiAgICAgICAgcGFydCBwYXRoOnR5cGUgfCBzdWZmaXg6LW9wdGlvbiB8IHByZWZpeDogZm9ybS1cIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6c2VsZWN0aW9uIHwgaW5kZXg6bGFiZWxcIiBwYXJ0PVwiYmFkZ2UtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJiYWRnZS1sYWJlbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cInJlbW92ZS1iYWRnZVwiIGRhdGEtbW9uc3Rlci1zZWxlY3QtdGhpc1xuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmZlYXR1cmVzLmNsZWFyIHwgPzo6aGlkZGVuIFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cInJlbW92ZS1iYWRnZVwiIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDxzbG90IGNsYXNzPVwiaGlkZGVuXCI+PC9zbG90PlxuXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICBcXCR7c2VsZWN0ZWR9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tZmlsdGVyLWNvbnRyb2xcIiByb2xlPVwic2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHJvbGU9XCJzZWFyY2hib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydD1cInBvcHBlci1maWx0ZXJcIiBuYW1lPVwicG9wcGVyLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwiY29udGVudFwiIGNsYXNzPVwiZmxleFwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwib3B0aW9ucyBwYXRoOm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJuby1vcHRpb25zXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJuby1vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5lbXB0eU9wdGlvbnNcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBwYXJ0PVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZSB8IHN1ZmZpeDpcXFxcIHN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUcmVlU2VsZWN0KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBUb2dnbGVTd2l0Y2hTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBUb2dnbGVTd2l0Y2hTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0VG9nZ2xlU3dpdGNoU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciB0b2dnbGVzd2l0Y2ggeyBcbjphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmF5LTE6I2Y2ZjZmNjstLW1vbnN0ZXItY29sb3ItZ3JheS0yOiNlMmUyZTI7LS1tb25zdGVyLWNvbG9yLWdyYXktMzojOGI4YjhiOy0tbW9uc3Rlci1jb2xvci1ncmF5LTQ6IzZmNmY2ZjstLW1vbnN0ZXItY29sb3ItZ3JheS01OiMzZTNlM2U7LS1tb25zdGVyLWNvbG9yLWdyYXktNjojMjIyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTE6I2ZmZjdmOTstLW1vbnN0ZXItY29sb3Itcm9zZS0yOiNmZmRjZTU7LS1tb25zdGVyLWNvbG9yLXJvc2UtMzojZmYzYjhkOy0tbW9uc3Rlci1jb2xvci1yb3NlLTQ6I2RiMDA3MjstLW1vbnN0ZXItY29sb3Itcm9zZS01OiM4MDAwNDA7LS1tb25zdGVyLWNvbG9yLXJvc2UtNjojNGMwMDIzOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMTojZmZmOGY4Oy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMjojZmZkZGRmOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMzojZmY0MjZjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNDojZGUwMDUxOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNTojODIwMDJjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNjojNTEwMDE4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMTojZmZmOGY2Oy0tbW9uc3Rlci1jb2xvci1yZWQtMjojZmZkZGQ4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMzojZmY0NjQ3Oy0tbW9uc3Rlci1jb2xvci1yZWQtNDojZTAwMDJiOy0tbW9uc3Rlci1jb2xvci1yZWQtNTojODMwMDE0Oy0tbW9uc3Rlci1jb2xvci1yZWQtNjojNTMwMDAzOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMTojZmZmOGY1Oy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMjojZmZkZWQxOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMzojZmQ0ZDAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNDojY2QzYzAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNTojNzUyMTAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNjojNDAxNjAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xOiNmZmY4ZjM7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTI6I2ZmZGZjNjstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMzojZDU3MzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi00OiNhYzVjMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTU6IzYzMzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNjojMzcxZDAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci0xOiNmZmY4ZWY7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTI6I2ZmZTBiMjstLW1vbnN0ZXItY29sb3ItYW1iZXItMzojYjk4MzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci00OiM5MjY3MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTU6IzUyMzgwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNjojMzAyMTAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMTojZmZmOWU1Oy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMjojZmZlNTNlOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMzojOWM4YjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNDojN2Q2ZjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNTojNDYzZDAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNjojMjkyMzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTE6I2Y3ZmZhYzstLW1vbnN0ZXItY29sb3ItbGltZS0yOiNkNWYyMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMzojODE5MzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTQ6IzY3NzYwMDstLW1vbnN0ZXItY29sb3ItbGltZS01OiMzOTQxMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNjojMjIyNjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTE6I2U1ZmZjMzstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0yOiM5OGZiMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMzojNWM5YjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTQ6IzQ5N2MwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS01OiMyNjQ1MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNjojMTgyNjAwOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0xOiNlMGZmZDk7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTI6IzcyZmY2YzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMzojMDBhMjFmOy0tbW9uc3Rlci1jb2xvci1ncmVlbi00OiMwMDgyMTc7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTU6IzAwNDkwODstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNjojMDYyODAwOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTE6I2RjZmZlNjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0yOiM1ZGZmYTI7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMzojMDBhMDVhOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTQ6IzAwODE0NzstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC01OiMwMDQ4MjU7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNjojMDAyODEyOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTE6I2RhZmZlZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0yOiM0MmZmYzY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMzojMDA5Zjc4Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTQ6IzAwN2Y1ZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS01OiMwMDQ3MzQ7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNjojMDAyODFiOy0tbW9uc3Rlci1jb2xvci10ZWFsLTE6I2Q3ZmZmNzstLW1vbnN0ZXItY29sb3ItdGVhbC0yOiMwMGZmZTQ7LS1tb25zdGVyLWNvbG9yLXRlYWwtMzojMDA5ZThjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTQ6IzAwN2M2ZTstLW1vbnN0ZXItY29sb3ItdGVhbC01OiMwMDQ0M2M7LS1tb25zdGVyLWNvbG9yLXRlYWwtNjojMDAyNzIyOy0tbW9uc3Rlci1jb2xvci1jeWFuLTE6I2M0ZmZmZTstLW1vbnN0ZXItY29sb3ItY3lhbi0yOiMwMGZhZmI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMzojMDA5OTlhOy0tbW9uc3Rlci1jb2xvci1jeWFuLTQ6IzAwN2E3YjstLW1vbnN0ZXItY29sb3ItY3lhbi01OiMwMDQzNDQ7LS1tb25zdGVyLWNvbG9yLWN5YW4tNjojMDAyNTI1Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMTojZGFmYWZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMjojOGRmMGZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMzojMDA5OGE5Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNDojMDA3OTg3Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNTojMDA0MDQ4Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNjojMDAyMjI3Oy0tbW9uc3Rlci1jb2xvci1za3ktMTojZTNmN2ZmOy0tbW9uc3Rlci1jb2xvci1za3ktMjojYWVlOWZmOy0tbW9uc3Rlci1jb2xvci1za3ktMzojMDA5NGI0Oy0tbW9uc3Rlci1jb2xvci1za3ktNDojMDA3NTkwOy0tbW9uc3Rlci1jb2xvci1za3ktNTojMDA0MDRmOy0tbW9uc3Rlci1jb2xvci1za3ktNjojMDAxZjI4Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0xOiNlOGY2ZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTI6I2I5ZTNmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMzojMDA5MmM1Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi00OiMwMDc0OWQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTU6IzAwM2M1NDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNjojMDAxZDJhOy0tbW9uc3Rlci1jb2xvci1henVyZS0xOiNlOGYyZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTI6I2M2ZTBmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMzojMDA4ZmRiOy0tbW9uc3Rlci1jb2xvci1henVyZS00OiMwMDcxYWY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTU6IzAwM2I1ZTstLW1vbnN0ZXItY29sb3ItYXp1cmUtNjojMDAxYzMwOy0tbW9uc3Rlci1jb2xvci1ibHVlLTE6I2YwZjRmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0yOiNkNGUwZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMzojMDA4OWZjOy0tbW9uc3Rlci1jb2xvci1ibHVlLTQ6IzAwNmRjYTstLW1vbnN0ZXItY29sb3ItYmx1ZS01OiMwMDM4NmQ7LS1tb25zdGVyLWNvbG9yLWJsdWUtNjojMDAxYTM5Oy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMTojZjNmM2ZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMjojZGVkZGZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMzojNjU3ZWZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNDojMDA2MWZjOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNTojMDAzMjhhOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNjojMDAxNjQ5Oy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMTojZjdmMWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMjojZThkYWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMzojOWI3MGZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNDojNzk0YWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNTojMmQwZmJmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNjojMGIwMDc0Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMTojZmRmNGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMjojZjdkOWZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMzojZDE1MGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNDojYjAxZmUzOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNTojNjYwMDg3Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNjojM2EwMDRmOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTE6I2ZmZjNmYzstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yOiNmZmQ3ZjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMzojZjkxMWUwOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQ6I2NhMDBiNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS01OiM3NDAwNjg7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNjojNDQwMDNjOy0tbW9uc3Rlci1jb2xvci1waW5rLTE6I2ZmZjdmYjstLW1vbnN0ZXItY29sb3ItcGluay0yOiNmZmRjZWM7LS1tb25zdGVyLWNvbG9yLXBpbmstMzojZmYyZmIyOy0tbW9uc3Rlci1jb2xvci1waW5rLTQ6I2QyMDA4ZjstLW1vbnN0ZXItY29sb3ItcGluay01OiM3OTAwNTE7LS1tb25zdGVyLWNvbG9yLXBpbmstNjojNGIwMDMwOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMTojZTViODc1Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMjojZDlhMzYyOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMzojYzA4YTRlOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNDojYTc3MTNiOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNTojOGY1YTI4Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNjojMzYwNTA1Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xOiNmN2Y1ZWY7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTI6I2U1ZTJkOTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMzojY2JjNmIzOy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC00OiNhMTlkOGE7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTU6IzdhNzU2NjstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNjojNTE0ZDNmfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLWJvcmRlci1jb2xvci0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0xKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTF7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLWNvbG9yLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMil9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLXRoZW1lLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMil9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ye2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTMpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtM3tjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLWJvcmRlci1jb2xvci00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci00KX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTR7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLWNvbG9yLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtZWxlbWVudCwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtYmFja2dyb3VuZC1pbmhlcml0e2JhY2tncm91bmQtY29sb3I6aW5oZXJpdCFpbXBvcnRhbnR9Lm1vbnN0ZXItdGhlbWUtb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1vZmZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3IpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7bWFyZ2luOjA7b3V0bGluZTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoe2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtZ3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjJzO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5sYWJlbHtkaXNwbGF5OmJsb2NrO21heC13aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjAgLjJlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt3aGl0ZS1zcGFjZTpub3dyYXB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2gtc2xpZGVye2JvdHRvbTo0cHg7bGVmdDo0cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NHB4O3RvcDo0cHg7dHJhbnNpdGlvbjouMnM7d2lkdGg6Y2FsYyg1MCUgLSA0cHgpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoW2RhdGEtbW9uc3Rlci1zdGF0ZT1vbl0gLmxhYmVsLm9mZnt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLnN3aXRjaFtkYXRhLW1vbnN0ZXItc3RhdGU9b2ZmXSAubGFiZWwub2ZmLFtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoW2RhdGEtbW9uc3Rlci1zdGF0ZT1vbl0gLmxhYmVsLm9ue3Zpc2liaWxpdHk6dmlzaWJsZX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLnN3aXRjaFtkYXRhLW1vbnN0ZXItc3RhdGU9b2ZmXSAubGFiZWwub257dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2hbZGF0YS1tb25zdGVyLXN0YXRlPW9uXSAuc3dpdGNoLXNsaWRlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udHJvbCB9IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tY29udHJvbC5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG5cdHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgVG9nZ2xlU3dpdGNoU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvdG9nZ2xlLXN3aXRjaC5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgVG9nZ2xlU3dpdGNoIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHN3aXRjaEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzd2l0Y2hFbGVtZW50XCIpO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBTVEFURV9PTiA9IFwib25cIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgU1RBVEVfT0ZGID0gXCJvZmZcIjtcblxuLyoqXG4gKiBBIHNpbXBsZSB0b2dnbGUgc3dpdGNoXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvZm9ybS90b2dnbGUtc3dpdGNoXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS90b2dnbGUtc3dpdGNoLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAzLjU3LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGJlYXV0aWZ1bCBzd2l0Y2ggZWxlbWVudFxuICogQGZpcmVzIG1vbnN0ZXItb3B0aW9ucy1zZXRcbiAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGVkXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZWRcbiAqL1xuY2xhc3MgVG9nZ2xlU3dpdGNoIGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZT1jdXJyZW50IHZhbHVlIG9mIHRoZSBlbGVtZW50XG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZGlzYWJsZWQ9ZGlzYWJsZWQ9ZmFsc2UgRGlzYWJsZWQgc3RhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMub249c3BlY2lmaWVzIHRoZSBjbGFzcyBmb3IgdGhlIG9uIHN0YXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5vZmY9c3BlY2lmaWVzIHRoZSBjbGFzcyBmb3IgdGhlIG9mZiBzdGF0ZS5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHZhbHVlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWVzLm9mZj1zcGVjaWZpZXMgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IGlmIGl0IGlzIG5vdCBzZWxlY3RlZFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMub249c3BlY2lmaWVzIHRoZSBsYWJlbCBmb3IgdGhlIG9uIHN0YXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLm9mZj1zcGVjaWZpZXMgdGhlIGxhYmVsIGZvciB0aGUgb2ZmIHN0YXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYWN0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYWN0aW9ucy5vbj1zcGVjaWZpZXMgdGhlIGFjdGlvbiBmb3IgdGhlIG9uIHN0YXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYWN0aW9ucy5vZmY9c3BlY2lmaWVzIHRoZSBhY3Rpb24gZm9yIHRoZSBvZmYgc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluPXNwZWNpZmllcyB0aGUgbWFpbiB0ZW1wbGF0ZSB1c2VkIGJ5IHRoZSBjb250cm9sLlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dmFsdWU6IG51bGwsXG5cdFx0XHRkaXNhYmxlZDogZmFsc2UsXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdG9uOiBcIm1vbnN0ZXItdGhlbWUtb25cIixcblx0XHRcdFx0b2ZmOiBcIm1vbnN0ZXItdGhlbWUtb2ZmXCIsXG5cdFx0XHRcdGhhbmRsZTogXCJtb25zdGVyLXRoZW1lLXByaW1hcnktMVwiLFxuXHRcdFx0fSxcblx0XHRcdHZhbHVlczoge1xuXHRcdFx0XHRvbjogXCJvblwiLFxuXHRcdFx0XHRvZmY6IFwib2ZmXCIsXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdHRvZ2dsZVN3aXRjaE9uOiBcIlx1MjcxNFwiLFxuXHRcdFx0XHR0b2dnbGVTd2l0Y2hPZmY6IFwiXHUyNzE2XCIsXG5cdFx0XHR9LFxuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0YWN0aW9uczoge1xuXHRcdFx0XHRvbjogKCkgPT4ge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBvbiBhY3Rpb24gaXMgbm90IGRlZmluZWRcIik7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9mZjogKCkgPT4ge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBvZmYgYWN0aW9uIGlzIG5vdCBkZWZpbmVkXCIpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtUb2dnbGVTd2l0Y2h9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdC8qKlxuXHRcdCAqIGluaXQgdmFsdWUgdG8gb2ZmXG5cdFx0ICogaWYgdGhlIHZhbHVlIHdhcyBub3QgZGVmaW5lZCBiZWZvcmUgaW5zZXJ0aW5nIGl0IGludG8gdGhlIEhUTUxcblx0XHQgKi9cblx0XHRpZiAoc2VsZi5nZXRPcHRpb24oXCJ2YWx1ZVwiKSA9PT0gbnVsbCkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb24oXCJ2YWx1ZVwiLCBzZWxmLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIikpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIHZhbHVlIGZyb20gYXR0cmlidXRlXG5cdFx0ICovXG5cdFx0aWYgKHNlbGYuaGFzQXR0cmlidXRlKFwidmFsdWVcIikpIHtcblx0XHRcdHNlbGYuc2V0T3B0aW9uKFwidmFsdWVcIiwgc2VsZi5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogdmFsaWRhdGUgdmFsdWVcblx0XHQgKi9cblx0XHR2YWxpZGF0ZUFuZFNldFZhbHVlLmNhbGwoc2VsZik7XG5cblx0XHRpZiAodGhpcy5zdGF0ZSA9PT0gU1RBVEVfT04pIHtcblx0XHRcdHRvZ2dsZUNsYXNzT24uY2FsbChzZWxmKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dG9nZ2xlQ2xhc3NPZmYuY2FsbChzZWxmKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBpcyBjYWxsZWQgd2hlbiBvcHRpb25zIGNoYW5nZWRcblx0XHQgKi9cblx0XHRzZWxmW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihcblx0XHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChpc09iamVjdCh0aGlzKSAmJiB0aGlzIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcikge1xuXHRcdFx0XHRcdHZhbGlkYXRlQW5kU2V0VmFsdWUuY2FsbChzZWxmKTtcblx0XHRcdFx0XHR0b2dnbGVDbGFzcy5jYWxsKHNlbGYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogdXBkYXRlciB0cmFuc2Zvcm1lciBtZXRob2RzIGZvciBwaXBlXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuXHQgKi9cblx0W3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInN0YXRlLWNhbGxiYWNrXCI6IChXZXJ0KSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnN0YXRlO1xuXHRcdFx0fSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4gW0NTU1N0eWxlU2hlZXRdXG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1RvZ2dsZVN3aXRjaFN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIHRvZ2dsZSBzd2l0Y2hcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS5jbGljaygpXG5cdCAqIGBgYFxuXHQgKi9cblx0Y2xpY2soKSB7XG5cdFx0dG9nZ2xlVmFsdWVzLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogdG9nZ2xlIHN3aXRjaCBvbi9vZmZcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS50b2dnbGUoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7VG9nZ2xlU3dpdGNofVxuXHQgKi9cblx0dG9nZ2xlKCkge1xuXHRcdHRoaXMuY2xpY2soKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiB0b2dnbGUgc3dpdGNoIG9uXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cdCAqIGUudG9nZ2xlT24oKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7VG9nZ2xlU3dpdGNofVxuXHQgKi9cblx0dG9nZ2xlT24oKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogdG9nZ2xlIHN3aXRjaCBvZmZcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS50b2dnbGVPZmYoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7VG9nZ2xlU3dpdGNofVxuXHQgKi9cblx0dG9nZ2xlT2ZmKCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGVsZW1lbnRcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogY29uc29sZS5sb2coZS5zdGF0ZSlcblx0ICogLy8gXHUyMUE2IG9mZlxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpID09PSB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKVxuXHRcdFx0PyBTVEFURV9PTlxuXHRcdFx0OiBTVEFURV9PRkY7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFN3aXRjaFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBjb25zb2xlLmxvZyhlLnZhbHVlKVxuXHQgKiAvLyBcdTIxQTYgb25cblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zdGF0ZSA9PT0gU1RBVEVfT05cblx0XHRcdD8gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIilcblx0XHRcdDogdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB2YWx1ZVxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBlLnZhbHVlPVwib25cIlxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG5cdCAqL1xuXHRzZXQgdmFsdWUodmFsdWUpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS90b2dnbGUtc3dpdGNoQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdG9nZ2xlLXN3aXRjaFwiO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1zd2l0Y2hdYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGVDbGFzc09uKCkge1xuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLm9mZlwiKSk7IC8vIGNoYW5nZSBjb2xvclxuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQodGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLm9uXCIpKTsgLy8gY2hhbmdlIGNvbG9yXG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlQ2xhc3NPZmYoKSB7XG5cdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmdldE9wdGlvbihcImNsYXNzZXMub25cIikpOyAvLyBjaGFuZ2UgY29sb3Jcblx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5vZmZcIikpOyAvLyBjaGFuZ2UgY29sb3Jcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGVDbGFzcygpIHtcblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVcIikgPT09IHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9uXCIpKSB7XG5cdFx0dG9nZ2xlQ2xhc3NPbi5jYWxsKHRoaXMpO1xuXHR9IGVsc2Uge1xuXHRcdHRvZ2dsZUNsYXNzT2ZmLmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGVWYWx1ZXMoKSB7XG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bGV0IGNhbGxiYWNrLCB2YWx1ZTtcblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJ2YWx1ZVwiKSA9PT0gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikpIHtcblx0XHR2YWx1ZSA9IHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9mZlwiKTtcblx0XHRjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwiYWN0aW9ucy5vZmZcIik7XG5cdH0gZWxzZSB7XG5cdFx0dmFsdWUgPSB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKTtcblx0XHRjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwiYWN0aW9ucy5vblwiKTtcblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdmFsdWUpO1xuXHR0aGlzPy5zZXRGb3JtVmFsdWUodmFsdWUpO1xuXG5cdGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdGNhbGxiYWNrLmNhbGwodGhpcyk7XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcInN0YXRlXCIsIHRoaXMuc3RhdGUpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQW5kU2V0VmFsdWUoKSB7XG5cdGNvbnN0IHZhbHVlID0gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZVwiKTtcblxuXHRjb25zdCB2YWxpZGF0ZWRWYWx1ZXMgPSBbXTtcblx0dmFsaWRhdGVkVmFsdWVzLnB1c2godGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikpO1xuXHR2YWxpZGF0ZWRWYWx1ZXMucHVzaCh0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIikpO1xuXG5cdGlmICh2YWxpZGF0ZWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpID09PSBmYWxzZSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0dGhpcyxcblx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHQnVGhlIHZhbHVlIFwiJyArXG5cdFx0XHRcdHZhbHVlICtcblx0XHRcdFx0J1wiIG11c3QgYmUgXCInICtcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikgK1xuXHRcdFx0XHQnXCIgb3IgXCInICtcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpLFxuXHRcdCk7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJkaXNhYmxlZFwiLCB0cnVlKTtcblx0XHR0aGlzLmZvcm1EaXNhYmxlZENhbGxiYWNrKHRydWUpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xuXHRcdHRoaXMuZm9ybURpc2FibGVkQ2FsbGJhY2soZmFsc2UpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2luaXRFdmVudEhhbmRsZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRpZiAoZXZlbnQuY29kZSA9PT0gXCJTcGFjZVwiKSB7XG5cdFx0XHRzZWxmW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsaWNrKCk7XG5cdFx0fVxuXHR9KTtcblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0dG9nZ2xlVmFsdWVzLmNhbGwoc2VsZik7XG5cdH0pO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJzd2l0Y2hcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1zdGF0ZSBwYXRoOnZhbHVlIHwgY2FsbDpzdGF0ZS1jYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbCBvblwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMudG9nZ2xlU3dpdGNoT25cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwgb2ZmXCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy50b2dnbGVTd2l0Y2hPZmZcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLmhhbmRsZSB8IHN1ZmZpeDpcXFxcIHN3aXRjaC1zbGlkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoVG9nZ2xlU3dpdGNoKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0aW5pdE1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9GT1JNX1JFTE9BRCwgQVRUUklCVVRFX0ZPUk1fVVJMIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgbG9hZEFuZEFzc2lnbkNvbnRlbnQgfSBmcm9tIFwiLi91dGlsL2ZldGNoLm1qc1wiO1xuXG5leHBvcnQgeyBUZW1wbGF0ZSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkID0gU3ltYm9sKFwid2FzSW5pdGlhbGl6ZWRcIik7XG5cbi8qKlxuICogQSBUZW1wbGF0ZSBjb250cm9sIGlzIGEgY29udHJvbCB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWQgY29udGVudCBmcm9tIGEgVVJMIGFuZCBkaXNwbGF5IGl0IGluIHRoZSBTaGFkb3dSb290LlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGUvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS4xMS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSB0ZW1wbGF0ZSBjb250cm9sXG4gKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG4gKi9cbmNsYXNzIFRlbXBsYXRlIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVsb2FkPXVuZGVmaW5lZCAgY3VycmVudGx5IHRoZSBvbmx5IHZhbHVlIGRlZmluZWQgaXMgYG9uc2hvd2AuIEN1cnJlbnRseSB0aGUgb25seSB2YWx1ZSBkZWZpbmVkIGlzIG9uc2hvdy4gdGhpcyByZW1vdmVzIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gdGhpcyBtZWFucyB0aGF0IHRoZSBjb250ZW50IGlzIG9ubHkgbG9hZGVkIG9uY2UuIHJlbG9hZGluZyBvZiB0aGUgY29udGVudCBkb2VzIG5vdCBvY2N1ci5cblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qcm9jZXNzb3JbXX0gcHJvY2Vzc29yc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2ggRmV0Y2ggW3NlZSBVc2luZyBGZXRjaCBtb3ppbGxhLm9yZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSS9Vc2luZ19GZXRjaClcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZGlyZWN0PWVycm9yXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2guaGVhZGVycz17XCJhY2NlcHRcIjpcInRleHQvaHRtbFwifX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHVybDogdW5kZWZpbmVkLFxuXHRcdFx0XHRyZWxvYWQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0cHJvY2Vzc29yczogW10sXG5cdFx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdFx0cmVkaXJlY3Q6IFwiZXJyb3JcIixcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0bW9kZTogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdFx0YWNjZXB0OiBcInRleHQvaHRtbFwiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIGF0dHJpYnV0ZXMgYXJlIHRvIGJlIG1vbml0b3JlZCBieSBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKClgLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmdbXX1cblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdGNvbnN0IGxpc3QgPSBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdFx0bGlzdC5wdXNoKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cdFx0cmV0dXJuIGxpc3Q7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdFtpbml0TWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlcltpbml0TWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0Ly8gZGF0YS1tb25zdGVyLW9wdGlvbnNcblx0XHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfRk9STV9VUkxdID0gKHVybCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCkpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJ1cmxcIiwgbmV3IFVSTCh1cmwsIGRvY3VtZW50LmxvY2F0aW9uKS50b1N0cmluZygpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwidXJsXCIsIHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBkZWZhdWx0IHNsb3Rcblx0ICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcblx0ICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcblx0ICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkZvcm19XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdGVtcGxhdGVcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2FkIGNvbnRlbnQgZnJvbSB1cmxcblx0ICpcblx0ICogSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhhdCB3aXRoIHRoaXMgZnVuY3Rpb24gdGhlIGxvYWRpbmcgaXMgZXhlY3V0ZWRcblx0ICogZGlyZWN0bHkuIGl0IGlzIGxvYWRlZCBhcyB3ZWxsIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IHZpc2libGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdXJsXG5cdCAqL1xuXHRmZXRjaCh1cmwpIHtcblx0XHRpZiAoaXNTdHJpbmcodXJsKSB8fCB1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCwgYCR7dXJsfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsb2FkQ29udGVudC5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJvY2Vzc29yXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZGVzdGluYXRpb25cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzb3VyY2VcbiAqIEBzaW5jZSAxLjExLjhcbiAqL1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhpcyBzZWxlY3QuXG4gKlxuICogYGBgXG4gKiA8bW9uc3Rlci1zZWxlY3QgZGF0YS1tb25zdGVyLXVybD1cImh0dHBzOi8vZXhhbXBsZS5jb20vXCI+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cblx0aWYgKGlzU3RyaW5nKHVybCkpIHtcblx0XHRvcHRpb25zW1widXJsXCJdID0gbmV3IFVSTCh1cmwsIGRvY3VtZW50LmxvY2F0aW9uKS50b1N0cmluZygpO1xuXHR9XG5cblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1JFTE9BRCkpIHtcblx0XHRvcHRpb25zW1wicmVsb2FkXCJdID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKS50b0xvd2VyQ2FzZSgpO1xuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG4gKi9cbmZ1bmN0aW9uIGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW2ludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWRdID0gdHJ1ZTtcblxuXHRjb25zdCBvcHRpb25zID0ge1xuXHRcdHRocmVzaG9sZDogWzAuNV0sXG5cdH07XG5cblx0Y29uc3QgY2FsbGJhY2sgPSAoZW50cmllcywgb2JzZXJ2ZXIpID0+IHtcblx0XHRmb3IgKGNvbnN0IFssIGVudHJ5XSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nID09PSB0cnVlKSB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcInJlbG9hZFwiKSA9PT0gXCJvbnNob3dcIikge1xuXHRcdFx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0bG9hZENvbnRlbnQuY2FsbCh0aGlzKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuXHRvYnNlcnZlci5vYnNlcnZlKHRoaXMpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBkZWZhdWx0IHNsb3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyB1cmxcbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcbiAqIEB0aHJvd3Mge0Vycm9yfSByZXF1ZXN0IGZhaWxlZFxuICogQHRocm93cyB7RXJyb3J9IG5vdCBmb3VuZFxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IGNsaWVudCBlcnJvclxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2ZcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG4gKi9cbmZ1bmN0aW9uIGxvYWRDb250ZW50KCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCB1cmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiLCB1bmRlZmluZWQpO1xuXHRpZiAoIWlzU3RyaW5nKHVybCkgfHwgdXJsID09PSBcIlwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyB1cmxcIik7XG5cdH1cblxuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSk7XG5cblx0Y29uc3QgZGVmYXVsdFNsb3QgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcInNsb3RbbmFtZT1kZWZhdWx0XVwiKTtcblx0aWYgKCEoZGVmYXVsdFNsb3QgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGRlZmF1bHQgc2xvdFwiKTtcblx0fVxuXG5cdGRlZmF1bHRTbG90LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0bGV0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udGFpbmVyXWAsXG5cdCk7XG5cdGlmICghKGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0Y29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0XHRjb250YWluZXIuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcImNvbnRhaW5lclwiKTtcblx0XHR0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblx0fVxuXG5cdGxvYWRBbmRBc3NpZ25Db250ZW50KGNvbnRhaW5lciwgdXJsLCBvcHRpb25zKVxuXHRcdC50aGVuKCgpID0+IHtcblx0XHRcdGRlZmF1bHRTbG90LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0XHRcdHJ1blByb2Nlc3NvcnMuY2FsbCh0aGlzKTtcblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7cnVuUHJvY2Vzc29yc31cbiAqL1xuZnVuY3Rpb24gcnVuUHJvY2Vzc29ycygpIHtcblx0Y29uc3QgcHJvY2Vzc29ycyA9IHRoaXMuZ2V0T3B0aW9uKFwicHJvY2Vzc29yc1wiKTtcblx0aWYgKCFpc0FycmF5KHByb2Nlc3NvcnMpKSByZXR1cm47XG5cblx0Zm9yIChjb25zdCBbLCBwcm9jZXNzb3JdIG9mIHByb2Nlc3NvcnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3Qgc291cmNlID0gcHJvY2Vzc29yPy5zb3VyY2U7XG5cdFx0Y29uc3QgZGVzdGluYXRpb24gPSBwcm9jZXNzb3I/LmRlc3RpbmF0aW9uO1xuXG5cdFx0aWYgKGlzU3RyaW5nKHNvdXJjZSkgJiYgaXNTdHJpbmcoZGVzdGluYXRpb24pKSB7XG5cdFx0XHRjb25zdCBzb3VyY2VOb2RlID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3Ioc291cmNlKTtcblx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uTm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZGVzdGluYXRpb24pO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHNvdXJjZU5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRkZXN0aW5hdGlvbk5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0KSB7XG5cdFx0XHRcdGRlc3RpbmF0aW9uTm9kZS5pbm5lckhUTUwgPSBzb3VyY2VOb2RlLmNsb25lTm9kZSh0cnVlKS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHNsb3QgbmFtZT1cImRlZmF1bHRcIj48L3Nsb3Q+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlbXBsYXRlKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBIb3N0U3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgSG9zdFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRIb3N0U3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBob3N0IHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn06d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0ZXh0LXNpemUtYWRqdXN0OjEwMCV9OndoZXJlKGgxKXtmb250LXNpemU6MmVtO21hcmdpbi1ibG9jay1lbmQ6LjY3ZW07bWFyZ2luLWJsb2NrLXN0YXJ0Oi42N2VtfTp3aGVyZShkbCxvbCx1bCkgOndoZXJlKGRsLG9sLHVsKXttYXJnaW4tYmxvY2stZW5kOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OjB9OndoZXJlKGhyKXtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbG9yOmluaGVyaXQ7aGVpZ2h0OjB9OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHByZSxzYW1wKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKHNtYWxsKXtmb250LXNpemU6ODAlfTp3aGVyZSh0YWJsZSl7Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcjt0ZXh0LWluZGVudDowfTp3aGVyZShidXR0b24saW5wdXQsc2VsZWN0KXttYXJnaW46MH06d2hlcmUoYnV0dG9uKXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259OndoZXJlKHByb2dyZXNzKXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06d2hlcmUoc2VsZWN0KXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZSh0ZXh0YXJlYSl7bWFyZ2luOjB9OndoZXJlKGlucHV0W3R5cGU9c2VhcmNoIGldKXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi41NH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5bGU6bm9uZTtwYWRkaW5nOjB9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6MXB4IGRvdHRlZCBCdXR0b25UZXh0fTp3aGVyZSg6LW1vei11aS1pbnZhbGlkKXtib3gtc2hhZG93Om5vbmV9OndoZXJlKGRpYWxvZyl7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjpzb2xpZDtjb2xvcjojMDAwO2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtsZWZ0OjA7bWFyZ2luOmF1dG87cGFkZGluZzoxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50fTp3aGVyZShkaWFsb2c6bm90KFtvcGVuXSkpe2Rpc3BsYXk6bm9uZX06d2hlcmUoc3VtbWFyeSl7ZGlzcGxheTpsaXN0LWl0ZW19aHRtbHtoZWlnaHQ6MTAwJX1ib2R5LGh0bWx7bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCl9Ym9keXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowO3dvcmQtYnJlYWs6YnJlYWstd29yZH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9aW5wdXQsbWV0ZXIscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhe2FjY2VudC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjEwMCU7bWFyZ2luOjA7b3V0bGluZTpub25lfWlucHV0LHNlbGVjdCx0ZXh0YXJlYXtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7cGFkZGluZzouNHJlbSAuNnJlbX10ZXh0YXJlYXttaW4taGVpZ2h0OjZyZW07cmVzaXplOnZlcnRpY2FsfWlucHV0W3R5cGU9Y29sb3Jde2hlaWdodDoycmVtO21hcmdpbjowO3BhZGRpbmc6LjFyZW07d2lkdGg6MnJlbX1pbnB1dDpob3Zlcjpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKTpub3QoW3R5cGU9cmFuZ2VdKSxzZWxlY3Q6aG92ZXIsdGV4dGFyZWE6aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31pbnB1dDpmb2N1cyxzZWxlY3Q6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjNweH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2U6XFxcIkNvbnNvbGFzXFxcIixcXFwiQ291cmllciBOZXdcXFwiLFxcXCJSb2JvdG8gTW9ub1xcXCIsXFxcIlNvdXJjZSBDb2RlIFByb1xcXCIsXFxcIkZpcmEgTW9ub1xcXCIsbW9ub3NwYWNlOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjNweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjJweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWxpZ24tY29udGVudDpzdHJldGNoO2JvcmRlcjowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bWFyZ2luOjA7bWluLWhlaWdodDoxMDB2aDtwYWRkaW5nOjB9W2RhdGEtbW9uc3Rlci1yb2xlPWhlYWRlcl17aGVpZ2h0OjY0cHg7bWFyZ2luOjAgMCAwIDYwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRlbnRdLFtkYXRhLW1vbnN0ZXItcm9sZT1mb290ZXJdLFtkYXRhLW1vbnN0ZXItcm9sZT1oZWFkZXJde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBwYXJzZUxvY2FsZSB9IGZyb20gXCIuLi9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCIuLi9wcm92aWRlci5tanNcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuLi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmV4cG9ydCB7IEVtYmVkIH07XG5cbi8qKlxuICogVGhlIEVtYmVkIHByb3ZpZGVyIHJldHJpZXZlcyBhIEpTT04gZmlsZSBmcm9tIHRoZSBnaXZlbiBTY3JpcHQgVGFnLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzA2Nn1cbiAqL1xuY2xhc3MgRW1iZWQgZXh0ZW5kcyBQcm92aWRlciB7XG5cdC8qKlxuXHQgKiBgYGBodG1sXG5cdCAqIDxzY3JpcHQgaWQ9XCJ0cmFuc2xhdGlvbnNcIiB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxuXHQgKiB7XG5cdCAqICAgICBcImhlbGxvXCI6IFwiSGFsbG9cIlxuXHQgKiB9XG5cdCAqIDwvc2NyaXB0PlxuXHQgKiBgYGBcblx0ICpcblx0ICpcblx0ICogYGBgamF2YXNjcmlwdFxuXHQgKiBuZXcgRW1iZWQoJ3RyYW5zbGF0aW9ucycpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fHN0cmluZ30gZWxlbWVudE9ySWRcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVsZW1lbnRPcklkLCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zID0ge307XG5cdFx0fVxuXG5cdFx0aWYgKGVsZW1lbnRPcklkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogQHByb3BlcnR5IHtIVE1MRWxlbWVudHxzdHJpbmd9XG5cdFx0XHQgKi9cblx0XHRcdHRoaXMudHJhbnNsYXRlRWxlbWVudCA9IGVsZW1lbnRPcklkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvKipcblx0XHRcdCAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR8c3RyaW5nfVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnRyYW5zbGF0ZUVsZW1lbnQgPSBnZXREb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKFxuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyhlbGVtZW50T3JJZCksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHByb3BlcnR5IHtPYmplY3R9IG9wdGlvbnNcblx0XHQgKi9cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IGV4dGVuZChcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR0aGlzLmRlZmF1bHRzLFxuXHRcdFx0dmFsaWRhdGVPYmplY3Qob3B0aW9ucyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZhdWx0c1xuXHQgKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Z2V0VHJhbnNsYXRpb25zKGxvY2FsZSkge1xuXHRcdGlmIChpc1N0cmluZyhsb2NhbGUpKSB7XG5cdFx0XHRsb2NhbGUgPSBwYXJzZUxvY2FsZShsb2NhbGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRpZiAodGhpcy50cmFuc2xhdGVFbGVtZW50ID09PSBudWxsKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJUZXh0IG5vdCBmb3VuZFwiKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCEodGhpcy50cmFuc2xhdGVFbGVtZW50IGluc3RhbmNlb2YgSFRNTFNjcmlwdEVsZW1lbnQpKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJFbGVtZW50IGlzIG5vdCBhIHNjcmlwdCB0YWdcIikpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnRyYW5zbGF0ZUVsZW1lbnQudHlwZSAhPT0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIHtcblx0XHRcdFx0cmVqZWN0KFxuXHRcdFx0XHRcdG5ldyBFcnJvcihcIkVsZW1lbnQgaXMgbm90IGEgc2NyaXB0IHRhZyB3aXRoIHR5cGUgYXBwbGljYXRpb24vanNvblwiKSxcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgdHJhbnNsYXRpb25zID0gbnVsbDtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRyYW5zbGF0aW9ucyA9IEpTT04ucGFyc2UodGhpcy50cmFuc2xhdGVFbGVtZW50LmlubmVySFRNTC50cmltKCkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRyYW5zbGF0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiVHJhbnNsYXRpb25zIG5vdCBmb3VuZCBvciBpbnZhbGlkXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB0ID0gbmV3IFRyYW5zbGF0aW9ucyhsb2NhbGUpO1xuXHRcdFx0dC5hc3NpZ25UcmFuc2xhdGlvbnModHJhbnNsYXRpb25zKTtcblxuXHRcdFx0cmVzb2x2ZSh0KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgdHJhbnNsYXRpb25zIGZvciB0aGUgY3VycmVudCBkb2N1bWVudC5cblx0ICpcblx0ICogYHNjcmlwdFtkYXRhLW1vbnN0ZXItcm9sZT10cmFuc2xhdGlvbnNdYCBpcyBzZWFyY2hlZCBmb3IgYW5kIHRoZSB0cmFuc2xhdGlvbnMgYXJlIGFzc2lnbmVkIHRvIHRoZSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gZWxlbWVudFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxBd2FpdGVkPCpbXT4+fFByb21pc2U8QXdhaXRlZDx1bmtub3duPltdPn1cblx0ICovXG5cdHN0YXRpYyBhc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoZWxlbWVudCkge1xuXHRcdGNvbnN0IGQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0ZWxlbWVudCA9IGQucXVlcnlTZWxlY3RvcihcImJvZHlcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdCA9IGQucXVlcnlTZWxlY3RvckFsbChcInNjcmlwdFtkYXRhLW1vbnN0ZXItcm9sZT10cmFuc2xhdGlvbnNdXCIpO1xuXHRcdGlmIChsaXN0ID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0XHR9XG5cblx0XHRjb25zdCBwcm9taXNlcyA9IFtdO1xuXG5cdFx0bGlzdC5mb3JFYWNoKCh0cmFuc2xhdGlvbkVsZW1lbnQpID0+IHtcblx0XHRcdGNvbnN0IHAgPSBuZXcgRW1iZWQodHJhbnNsYXRpb25FbGVtZW50LCB7fSk7XG5cdFx0XHRwcm9taXNlcy5wdXNoKHAuYXNzaWduVG9FbGVtZW50KHVuZGVmaW5lZCwgZWxlbWVudCkpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldERvY3VtZW50LCBnZXRXaW5kb3cgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBkb21SZWFkeSwgd2luZG93UmVhZHkgfTtcblxuLyoqXG4gKiBUaGlzIHZhcmlhYmxlIGlzIGEgcHJvbWlzZSBmdWxmaWxsZWQgYXMgc29vbiBhcyB0aGUgZG9tIGlzIGF2YWlsYWJsZS5cbiAqXG4gKiBUaGUgRE9NQ29udGVudExvYWRlZCBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSBvcmlnaW5hbCBIVE1MIGRvY3VtZW50IGlzIGZ1bGx5IGxvYWRlZCBhbmQgcGFyc2VkXG4gKiB3aXRob3V0IHdhaXRpbmcgZm9yIHN0eWxlc2hlZXRzLCBpbWFnZXMsIGFuZCBzdWJmcmFtZXMgdG8gZmluaXNoIGxvYWRpbmcuXG4gKlxuICogZG9jdW1lbnQucmVhZHlTdGF0ZSBjaGFuZ2VzIHRvIGludGVyYWN0aXZlXG4gKiB3aW5kb3cncyBET01Db250ZW50TG9hZGVkIGV2ZW50IGdldHMgZmlyZWRcbiAqIGRvY3VtZW50LnJlYWR5U3RhdGUgY2hhbmdlcyB0byBjb21wbGV0ZVxuICogd2luZG93J3MgbG9hZCBldmVudCBnZXRzIGZpcmVkIGxvYWRcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMxLjBcbiAqIEBzdW1tYXJ5IHZhcmlhYmxlIHRvIGNoZWNrIGlmIGRvbSBpcyByZWFkeVxuICogQHR5cGUge1Byb21pc2V9XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9ET01Db250ZW50TG9hZGVkX2V2ZW50XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9yZWFkeVN0YXRlXG4gKi9cbmNvbnN0IGRvbVJlYWR5ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImxvYWRpbmdcIikge1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIHJlc29sdmUpO1xuXHR9IGVsc2Uge1xuXHRcdHJlc29sdmUoKTtcblx0fVxufSk7XG5cbi8qKlxuICogVGhpcyB2YXJpYWJsZSBpcyBhIHByb21pc2UgaXMgZnVsZmlsbGVkIGFzIHNvb24gYXMgdGhlIHdpbmRvd3MgaXMgYXZhaWxhYmxlLlxuICpcbiAqIFRoZSBsb2FkIGV2ZW50IGZpcmVzIHdoZW4gdGhlIGVudGlyZSBwYWdlIGlzIGxvYWRlZCwgaW5jbHVkaW5nIGFsbCBkZXBlbmRlbnQgcmVzb3VyY2VzIHN1Y2ggYXMgc3R5bGVzaGVldHMsXG4gKiBhc3NldHMsIGFuZCBpbWFnZXMuIFVubGlrZSBET01Db250ZW50TG9hZGVkLCB3aGljaCBmaXJlcyBhcyBzb29uIGFzIHRoZSBET00gb2YgdGhlIHBhZ2UgaXMgbG9hZGVkLFxuICogd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgcmVzb3VyY2VzIHRvIGZpbmlzaCBsb2FkaW5nLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMzEuMFxuICogQHN1bW1hcnkgdmFyaWFibGUgdG8gY2hlY2sgaWYgd2luZG93IGlzIHJlYWR5XG4gKiBAdHlwZSB7UHJvbWlzZX1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvdy9sb2FkX2V2ZW50XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9yZWFkeVN0YXRlXG4gKi9cbmNvbnN0IHdpbmRvd1JlYWR5ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXHRjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG5cdFx0cmVzb2x2ZSgpO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCByZXNvbHZlKTtcblx0fVxufSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgQmFzZVdpdGhPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiLi4vdHlwZXMvc3RhY2subWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IEZvY3VzTWFuYWdlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBLRVlfRE9DVU1FTlQgPSBcImRvY3VtZW50XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9DT05URVhUID0gXCJjb250ZXh0XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHN0YWNrU3ltYm9sID0gU3ltYm9sKFwic3RhY2tcIik7XG5cbi8qKlxuICogV2l0aCB0aGUgZm9jdXMgbWFuYWdlciB0aGUgZm9jdXMgY2FuIGJlIHN0b3JlZCBpbiBhIGRvY3VtZW50LCByZWNhbGxlZCBhbmQgbW92ZWQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGxvY2FsZVxuICogQHN1bW1hcnkgSGFuZGxlIHRoZSBmb2N1c1xuICovXG5jbGFzcyBGb2N1c01hbmFnZXIgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZSh0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpLCBIVE1MRG9jdW1lbnQpO1xuXG5cdFx0dGhpc1tzdGFja1N5bWJvbF0gPSBuZXcgU3RhY2soKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2ZvY3VzbWFuYWdlclwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge0hUTUxEb2N1bWVudH0gZG9jdW1lbnQgdGhlIGRvY3VtZW50IG9iamVjdCBpbnRvIHdoaWNoIHRoZSBub2RlIGlzIHRvIGJlIGFwcGVuZGVkXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdFtLRVlfRE9DVU1FTlRdOiBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKSxcblx0XHRcdFtLRVlfQ09OVEVYVF06IHVuZGVmaW5lZCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1lbWJlcnMgdGhlIGN1cnJlbnQgZm9jdXMgb24gYSBzdGFjay5cblx0ICogU2V2ZXJhbCBmb2N1cyBjYW4gYmUgc3RvcmVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5Gb2N1c01hbmFnZXJ9XG5cdCAqL1xuXHRzdG9yZUZvY3VzKCkge1xuXHRcdGNvbnN0IGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7XG5cdFx0aWYgKGFjdGl2ZSBpbnN0YW5jZW9mIE5vZGUpIHtcblx0XHRcdHRoaXNbc3RhY2tTeW1ib2xdLnB1c2goYWN0aXZlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGxhc3QgZm9jdXMgb24gdGhlIHN0YWNrIGlzIHNldCBhZ2FpblxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5Gb2N1c01hbmFnZXJ9XG5cdCAqL1xuXHRyZXN0b3JlRm9jdXMoKSB7XG5cdFx0Y29uc3QgbGFzdCA9IHRoaXNbc3RhY2tTeW1ib2xdLnBvcCgpO1xuXHRcdGlmIChsYXN0IGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0dGhpcy5mb2N1cyhsYXN0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnRcblx0ICogQHBhcmFtIHtib29sZWFufSBwcmV2ZW50U2Nyb2xsXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdGZvY3VzKGVsZW1lbnQsIHByZXZlbnRTY3JvbGwpIHtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIE5vZGUpO1xuXG5cdFx0ZWxlbWVudC5mb2N1cyh7XG5cdFx0XHRwcmV2ZW50U2Nyb2xsOiBwcmV2ZW50U2Nyb2xsID8/IGZhbHNlLFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7RWxlbWVudH1cblx0ICovXG5cdGdldEFjdGl2ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKS5hY3RpdmVFbGVtZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNlbGVjdCBhbGwgZWxlbWVudHMgdGhhdCBjYW4gYmUgZm9jdXNlZFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHF1ZXJ5XG5cdCAqIEByZXR1cm4ge2FycmF5fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKi9cblx0Z2V0Rm9jdXNhYmxlKHF1ZXJ5KSB7XG5cdFx0bGV0IGNvbnRleHRFbGVtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0NPTlRFWFQpO1xuXHRcdGlmIChjb250ZXh0RWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb250ZXh0RWxlbWVudCA9IHRoaXMuZ2V0T3B0aW9uKEtFWV9ET0NVTUVOVCk7XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVJbnN0YW5jZShjb250ZXh0RWxlbWVudCwgTm9kZSk7XG5cblx0XHRpZiAocXVlcnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsaWRhdGVTdHJpbmcocXVlcnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBbXG5cdFx0XHQuLi5jb250ZXh0RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdFx0XHQnZGV0YWlscywgYnV0dG9uLCBpbnB1dCwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pLCBzZWxlY3QsIHRleHRhcmVhLCBhW2hyZWZdLCBib2R5Jyxcblx0XHRcdCksXG5cdFx0XS5maWx0ZXIoKGVsZW1lbnQpID0+IHtcblx0XHRcdGlmIChxdWVyeSAhPT0gdW5kZWZpbmVkICYmICFlbGVtZW50Lm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikpIHJldHVybiBmYWxzZTtcblx0XHRcdGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpID09PSBcInRydWVcIikgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdGlmIChyZWN0LndpZHRoID09PSAwKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRpZiAocmVjdC5oZWlnaHQgPT09IDApIHJldHVybiBmYWxzZTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5XG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdGZvY3VzTmV4dChxdWVyeSkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldEFjdGl2ZSgpO1xuXHRcdGNvbnN0IGZvY3VzYWJsZSA9IHRoaXMuZ2V0Rm9jdXNhYmxlKHF1ZXJ5KTtcblxuXHRcdGlmICghaXNBcnJheShmb2N1c2FibGUpIHx8IGZvY3VzYWJsZS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmIChjdXJyZW50IGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBmb2N1c2FibGUuaW5kZXhPZihjdXJyZW50KTtcblxuXHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbaW5kZXggKyAxXSB8fCBmb2N1c2FibGVbMF0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbMF0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVswXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5XG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdGZvY3VzUHJldihxdWVyeSkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldEFjdGl2ZSgpO1xuXHRcdGNvbnN0IGZvY3VzYWJsZSA9IHRoaXMuZ2V0Rm9jdXNhYmxlKHF1ZXJ5KTtcblxuXHRcdGlmICghaXNBcnJheShmb2N1c2FibGUpIHx8IGZvY3VzYWJsZS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmIChjdXJyZW50IGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBmb2N1c2FibGUuaW5kZXhPZihjdXJyZW50KTtcblxuXHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbaW5kZXggLSAxXSB8fCBmb2N1c2FibGVbZm9jdXNhYmxlLmxlbmd0aCAtIDFdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZm9jdXMoZm9jdXNhYmxlW2ZvY3VzYWJsZS5sZW5ndGggLSAxXSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXMoZm9jdXNhYmxlW2ZvY3VzYWJsZS5sZW5ndGggLSAxXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IHBhcnNlRGF0YVVSTCB9IGZyb20gXCIuL2RhdGF1cmwubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4vaXMubWpzXCI7XG5cbmV4cG9ydCB7IGVxdWlwV2l0aEludGVybmFsIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IHByb3BlcnR5TmFtZSA9IFwiaW50ZXJuYWxEZWZhdWx0c1wiO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZXh0ZW5kcyB0aGUgZ2l2ZW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBtZXRob2RzOlxuICpcbiAqIC0gYXR0YWNoSW50ZXJuYWxPYnNlcnZlclxuICogLSBkZXRhY2hJbnRlcm5hbE9ic2VydmVyXG4gKiAtIGNvbnRhaW5zSW50ZXJuYWxPYnNlcnZlclxuICogLSBzZXRJbnRlcm5hbFxuICogLSBzZXRJbnRlcm5hbHNcbiAqIC0gZ2V0SW50ZXJuYWxcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjE1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGVxdWlwV2l0aEludGVybmFsKCkge1xuXHR2YWxpZGF0ZU9iamVjdCh0aGlzKTtcblxuXHRpZiAoIWhhc0dldHRlcih0aGlzLCBwcm9wZXJ0eU5hbWUpKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5TmFtZSwge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHRjb25zdCBkZWZhdWx0cyA9IGV4dGVuZCh7fSwgdGhpc1twcm9wZXJ0eU5hbWVdIHx8IHt9KTtcblx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBuZXcgUHJveHlPYnNlcnZlcihkZWZhdWx0cyk7XG5cblx0LyoqXG5cdCAqIEF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0dGhpc1tcImF0dGFjaEludGVybmFsT2JzZXJ2ZXJcIl0gPSAob2JzZXJ2ZXIpID0+IHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIERldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHR0aGlzW1wiZGV0YWNoSW50ZXJuYWxPYnNlcnZlclwiXSA9IChvYnNlcnZlcikgPT4ge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmRldGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYSBvYnNlcnZlciBpcyBhdHRhY2hlZFxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0dGhpc1tcImNvbnRhaW5zSW50ZXJuYWxPYnNlcnZlclwiXSA9IChvYnNlcnZlcikgPT4ge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5jb250YWluc09ic2VydmVyKG9ic2VydmVyKTtcblx0fTtcblxuXHQvKipcblx0ICogU2V0IGFuIGludGVybmFsIHZhbHVlLCBuZXN0ZWQgaW50ZXJuYWxzIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICovXG5cdHRoaXNbXCJzZXRJbnRlcm5hbFwiXSA9IChwYXRoLCB2YWx1ZSkgPT4ge1xuXHRcdG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKSkuc2V0VmlhKHBhdGgsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogc2V0IG11bHRpcGxlIGludGVybmFscyBhdCBvbmNlXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuXHQgKi9cblx0dGhpc1tcInNldEludGVybmFsc1wiXSA9IChvcHRpb25zKSA9PiB7XG5cdFx0aWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG5cdFx0XHRvcHRpb25zID0gcGFyc2VPcHRpb25zSlNPTihvcHRpb25zKTtcblx0XHR9XG5cblx0XHRleHRlbmQodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLCBkZWZhdWx0cywgb3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBpbnRlcm5hbHMgY2FuIGJlIHNwZWNpZmllZCBieSBwYXRoIGBhLmIuY2Bcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWVcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHRoaXNbXCJnZXRJbnRlcm5hbFwiXSA9IChwYXRoLCBkZWZhdWx0VmFsdWUpID0+IHtcblx0XHRsZXQgdmFsdWU7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFsdWUgPSBuZXcgUGF0aGZpbmRlcih0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpKS5nZXRWaWEoXG5cdFx0XHRcdHBhdGgsXG5cdFx0XHQpO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvYmpcbiAqIEBwYXJhbSBwcm9wXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBoYXNHZXR0ZXIob2JqLCBwcm9wKSB7XG5cdHdoaWxlIChpc09iamVjdChvYmopKSB7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKT8uW1wiZ2V0XCJdKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0b2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3B0aW9uc0pTT04oZGF0YSkge1xuXHRsZXQgb2JqID0ge307XG5cblx0aWYgKCFpc1N0cmluZyhkYXRhKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyB0aGUgY29uZmlndXJhdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgZGF0YSB1cmwuXG5cdHRyeSB7XG5cdFx0Y29uc3QgZGF0YVVybCA9IHBhcnNlRGF0YVVSTChkYXRhKTtcblx0XHRkYXRhID0gZGF0YVVybC5jb250ZW50O1xuXHR9IGNhdGNoIChlKSB7fVxuXG5cdHRyeSB7XG5cdFx0b2JqID0gSlNPTi5wYXJzZShkYXRhKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHRocm93IGU7XG5cdH1cblxuXHRyZXR1cm4gdmFsaWRhdGVPYmplY3Qob2JqKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN0YXRlU3ltYm9sLCBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IElEIH0gZnJvbSBcIi4uL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9DTEFTUyxcblx0QVRUUklCVVRFX0lELFxuXHRBVFRSSUJVVEVfVElUTEUsXG59IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUmVzb3VyY2UsIEtFWV9ET0NVTUVOVCwgS0VZX1FVRVJZLCByZWZlcmVuY2VTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgS0VZX0RPQ1VNRU5UID0gXCJkb2N1bWVudFwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBLRVlfUVVFUlkgPSBcInF1ZXJ5XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9USU1FT1VUID0gXCJ0aW1lb3V0XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlZmVyZW5jZVN5bWJvbCA9IFN5bWJvbChcInJlZmVyZW5jZVwiKTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgcmVzb3VyY2VzIHRvIGJlIGxvYWRlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKi9cbmNsYXNzIFJlc291cmNlIGV4dGVuZHMgQmFzZVdpdGhPcHRpb25zIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fHVuZGVmaW5lZH0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0bGV0IHVyaSA9IHRoaXMuZ2V0T3B0aW9uKHRoaXMuY29uc3RydWN0b3IuZ2V0VVJMQXR0cmlidXRlKCkpO1xuXG5cdFx0aWYgKHVyaSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHNvdXJjZVwiKTtcblx0XHR9IGVsc2UgaWYgKHVyaSBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdFx0dXJpID0gdXJpLnRvU3RyaW5nKCk7XG5cdFx0fSBlbHNlIGlmICghaXNTdHJpbmcodXJpKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdXJsIHR5cGVcIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bdGhpcy5jb25zdHJ1Y3Rvci5nZXRVUkxBdHRyaWJ1dGUoKV0gPSB1cmk7XG5cdFx0dGhpc1tpbnRlcm5hbFN0YXRlU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHtcblx0XHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0XHRlcnJvcjogdW5kZWZpbmVkLFxuXHRcdH0pO1xuXG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0Nvbm5lY3RlZCgpIHtcblx0XHRpZiAodGhpc1tyZWZlcmVuY2VTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHJldHVybiB0aGlzW3JlZmVyZW5jZVN5bWJvbF0uaXNDb25uZWN0ZWQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIG92ZXJyaWRkZW4gYnkgdGhlIHNwZWNpYWwgY2xhc3NlcyBhbmQgY3JlYXRlcyB0aGUgRE9NIG9iamVjdC5cblx0ICogVGhpcyBtZXRob2QgaXMgYWxzbyBjYWxsZWQgaW1wbGljaXRseSwgaWYgbm90IHlldCBkb25lIGV4cGxpY2l0bHksIGJ5IGNhbGxpbmcgYGNvbm5lY3QoKWAuXG5cdCAqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1xuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZX1cblx0ICovXG5cdGNyZWF0ZSgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIHRoZSBIVE1MRWxlbWVudCB0byB0aGUgc3BlY2lmaWVkIGRvY3VtZW50LlxuXHQgKiBJZiB0aGUgZWxlbWVudCBoYXMgbm90IHlldCBiZWVuIGNyZWF0ZWQsIGBjcmVhdGUoKWAgaXMgY2FsbGVkIGltcGxpY2l0bHkuXG5cdCAqXG5cdCAqIHRocm93cyB7RXJyb3J9IHRhcmdldCBub3QgZm91bmRcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2V9XG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdGlmICghKHRoaXNbcmVmZXJlbmNlU3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0dGhpcy5jcmVhdGUoKTtcblx0XHR9XG5cblx0XHRhcHBlbmRUb0RvY3VtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtEb2N1bWVudH0gZG9jdW1lbnQgdGhlIGRvY3VtZW50IG9iamVjdCBpbnRvIHdoaWNoIHRoZSBub2RlIGlzIHRvIGJlIGFwcGVuZGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzcmMvaHJlZiB1cmwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVzb3VyY2Vcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHF1ZXJ5IGRlZmluZXMgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSByZXNvdXJjZSBpcyB0byBiZSBob29rZWQgaW50byB0aGUgZG9tLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaWQgZWxlbWVudCBhdHRyaWJ1dGUgaWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRpdGxlIGVsZW1lbnQgYXR0cmlidXRlIHRpdGxlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzcyBlbGVtZW50IGF0dHJpYnV0ZSBjbGFzc1xuXHQgKiBAcHJvcGVydHkge2ludH0gdGltZW91dCB0aW1lb3V0XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdFt0aGlzLmNvbnN0cnVjdG9yLmdldFVSTEF0dHJpYnV0ZSgpXTogdW5kZWZpbmVkLFxuXHRcdFx0W0tFWV9ET0NVTUVOVF06IGdldEdsb2JhbE9iamVjdChcImRvY3VtZW50XCIpLFxuXHRcdFx0W0tFWV9RVUVSWV06IFwiaGVhZFwiLFxuXHRcdFx0W0tFWV9USU1FT1VUXTogMTAwMDAsXG5cdFx0XHRbQVRUUklCVVRFX0lEXTogbmV3IElEKFwicmVzb3VyY2VcIikudG9TdHJpbmcoKSxcblx0XHRcdFtBVFRSSUJVVEVfQ0xBU1NdOiB1bmRlZmluZWQsXG5cdFx0XHRbQVRUUklCVVRFX1RJVExFXTogdW5kZWZpbmVkLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpdGggYGF2YWlsYWJsZSgpYCB5b3UgY2FuIGNoZWNrIGlmIGEgcmVzb3VyY2UgaXMgYXZhaWxhYmxlLlxuXHQgKiBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gdGhlIHRhZyBpcyBpbmNsdWRlZCBhbmQgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGF2YWlsYWJsZSgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRpZiAoIShzZWxmW3JlZmVyZW5jZVN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIm5vIGVsZW1lbnRcIik7XG5cdFx0fVxuXG5cdFx0aWYgKCFzZWxmLmlzQ29ubmVjdGVkKCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcImVsZW1lbnQgbm90IGNvbm5lY3RlZFwiKTtcblx0XHR9XG5cblx0XHRpZiAoc2VsZltpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJsb2FkZWRcIl0gPT09IHRydWUpIHtcblx0XHRcdGlmIChzZWxmW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImVycm9yXCJdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uZ2V0U3ViamVjdCgpW1wiZXJyb3JcIl0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0cmVqZWN0KFwidGltZW91dFwiKTtcblx0XHRcdH0sIHNlbGYuZ2V0T3B0aW9uKFwidGltZW91dFwiKSk7XG5cblx0XHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IE9ic2VydmVyKCgpID0+IHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRzZWxmW2ludGVybmFsU3RhdGVTeW1ib2xdLmRldGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXNcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2VcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIHRocm93cyB7RXJyb3J9IHRhcmdldCBub3QgZm91bmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kVG9Eb2N1bWVudCgpIHtcblx0Y29uc3QgdGFyZ2V0Tm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRPcHRpb24oS0VZX1FVRVJZLCBcImhlYWRcIikpO1xuXHRpZiAoISh0YXJnZXROb2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGFyZ2V0IG5vdCBmb3VuZFwiKTtcblx0fVxuXG5cdGFkZEV2ZW50cy5jYWxsKHRoaXMpO1xuXHR0YXJnZXROb2RlLmFwcGVuZENoaWxkKHRoaXNbcmVmZXJlbmNlU3ltYm9sXSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2FkZEV2ZW50c31cbiAqL1xuZnVuY3Rpb24gYWRkRXZlbnRzKCkge1xuXHRjb25zdCBvbkVycm9yID0gKCkgPT4ge1xuXHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25FcnJvcik7XG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIG9uTG9hZCk7XG5cblx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdLnNldFN1YmplY3Qoe1xuXHRcdFx0bG9hZGVkOiB0cnVlLFxuXHRcdFx0ZXJyb3I6IGAke1xuXHRcdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF1bdGhpcy5jb25zdHJ1Y3Rvci5nZXRVUkxBdHRyaWJ1dGUoKV1cblx0XHRcdH0gaXMgbm90IGF2YWlsYWJsZWAsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm47XG5cdH07XG5cblx0Y29uc3Qgb25Mb2FkID0gKCkgPT4ge1xuXHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25FcnJvcik7XG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIG9uTG9hZCk7XG5cdFx0dGhpc1tpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJsb2FkZWRcIl0gPSB0cnVlO1xuXHR9O1xuXG5cdHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBvbkxvYWQsIGZhbHNlKTtcblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbkVycm9yLCBmYWxzZSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTdGF0ZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9TUkMsXG5cdEFUVFJJQlVURV9USVRMRSxcblx0QVRUUklCVVRFX1RZUEUsXG5cdFRBR19TQ1JJUFQsXG59IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRLRVlfRE9DVU1FTlQsXG5cdEtFWV9RVUVSWSxcblx0cmVmZXJlbmNlU3ltYm9sLFxuXHRSZXNvdXJjZSxcbn0gZnJvbSBcIi4uL3Jlc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhIH07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGVtYmVkIGRhdGEuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBEYXRhIFJlc291cmNlIGNsYXNzXG4gKi9cbmNsYXNzIERhdGEgZXh0ZW5kcyBSZXNvdXJjZSB7XG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbW9kZT1jb3JzIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9mZXRjaFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY3JlZGVudGlhbHM9c2FtZS1vcmlnaW4gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL2ZldGNoXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlPWFwcGxpY2F0aW9uL2pzb24ge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci10eXBlfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRtb2RlOiBcImNvcnNcIixcblx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHR0eXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZS5EYXRhfVxuXHQgKi9cblx0Y3JlYXRlKCkge1xuXHRcdGNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIHRoZSBIVE1MRWxlbWVudCB0byB0aGUgc3BlY2lmaWVkIGRvY3VtZW50XG5cdCAqXG5cdCAqIHRocm93cyB7RXJyb3J9IHRhcmdldCBub3QgZm91bmRcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2V9XG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGlmICghKHRoaXNbcmVmZXJlbmNlU3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0dGhpcy5jcmVhdGUoKTtcblx0XHR9XG5cblx0XHRhcHBlbmRUb0RvY3VtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZS9kYXRhXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG5cdFx0cmV0dXJuIEFUVFJJQlVURV9TUkM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuRGF0YX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpO1xuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFRBR19TQ1JJUFQpO1xuXG5cdGZvciAoY29uc3Qga2V5IG9mIFtcblx0XHRBVFRSSUJVVEVfVFlQRSxcblx0XHRBVFRSSUJVVEVfSUQsXG5cdFx0QVRUUklCVVRFX0NMQVNTLFxuXHRcdEFUVFJJQlVURV9USVRMRSxcblx0XSkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihrZXkpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXVtrZXldID0gdGhpcy5nZXRPcHRpb24oa2V5KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIHRocm93cyB7RXJyb3J9IHRhcmdldCBub3QgZm91bmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kVG9Eb2N1bWVudCgpIHtcblx0Y29uc3QgdGFyZ2V0Tm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRPcHRpb24oS0VZX1FVRVJZLCBcImhlYWRcIikpO1xuXHRpZiAoISh0YXJnZXROb2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGFyZ2V0IG5vdCBmb3VuZFwiKTtcblx0fVxuXG5cdHRhcmdldE5vZGUuYXBwZW5kQ2hpbGQodGhpc1tyZWZlcmVuY2VTeW1ib2xdKTtcblxuXHRnZXRHbG9iYWxGdW5jdGlvbihcImZldGNoXCIpKHRoaXMuZ2V0T3B0aW9uKEFUVFJJQlVURV9TUkMpLCB7XG5cdFx0bWV0aG9kOiBcIkdFVFwiLCAvLyAqR0VULCBQT1NULCBQVVQsIERFTEVURSwgZXRjLlxuXHRcdG1vZGU6IHRoaXMuZ2V0T3B0aW9uKFwibW9kZVwiLCBcImNvcnNcIiksIC8vIG5vLWNvcnMsICpjb3JzLCBzYW1lLW9yaWdpblxuXHRcdGNhY2hlOiBcIm5vLWNhY2hlXCIsIC8vICpkZWZhdWx0LCBuby1jYWNoZSwgcmVsb2FkLCBmb3JjZS1jYWNoZSwgb25seS1pZi1jYWNoZWRcblx0XHRjcmVkZW50aWFsczogdGhpcy5nZXRPcHRpb24oXCJjcmVkZW50aWFsc1wiLCBcInNhbWUtb3JpZ2luXCIpLCAvLyBpbmNsdWRlLCAqc2FtZS1vcmlnaW4sIG9taXRcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6IHRoaXMuZ2V0T3B0aW9uKFwidHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIiksXG5cdFx0fSxcblx0XHRyZWRpcmVjdDogXCJmb2xsb3dcIiwgLy8gbWFudWFsLCAqZm9sbG93LCBlcnJvclxuXHRcdHJlZmVycmVyUG9saWN5OiBcIm5vLXJlZmVycmVyXCIsIC8vIG5vLXJlZmVycmVyLFxuXHR9KVxuXHRcdC50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcblx0XHR9KVxuXHRcdC50aGVuKCh0ZXh0KSA9PiB7XG5cdFx0XHRjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpO1xuXHRcdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLmFwcGVuZENoaWxkKHRleHROb2RlKTtcblxuXHRcdFx0dGhpc1tpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJsb2FkZWRcIl0gPSB0cnVlO1xuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdLnNldFN1YmplY3Qoe1xuXHRcdFx0XHRsb2FkZWQ6IHRydWUsXG5cdFx0XHRcdGVycm9yOiBlLnRvU3RyaW5nKCksXG5cdFx0XHR9KTtcblxuXHRcdFx0dGFyZ2V0Tm9kZS5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHR9KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfQ0xBU1MsXG5cdEFUVFJJQlVURV9IUkVGLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9OT05DRSxcblx0QVRUUklCVVRFX1NSQyxcblx0QVRUUklCVVRFX1RJVExFLFxuXHRBVFRSSUJVVEVfVFlQRSxcblx0VEFHX0xJTkssXG59IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBLRVlfRE9DVU1FTlQsIHJlZmVyZW5jZVN5bWJvbCwgUmVzb3VyY2UgfSBmcm9tIFwiLi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBMaW5rIH07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGVtYmVkIGV4dGVybmFsIHJlc291cmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rXG4gKi9cbmNsYXNzIExpbmsgZXh0ZW5kcyBSZXNvdXJjZSB7XG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItYXN9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcm9zc09yaWdpbj1hbm9ueW1vdXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1jcm9zc29yaWdpbn1cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkaXNhYmxlZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaHJlZiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1ocmVmfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaHJlZmxhbmcge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItaHJlZmxhbmd9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbWFnZXNpemVzIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWltYWdlc2l6ZXN9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbWFnZXNyY3NldCB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1pbWFnZXNyY3NldH1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGludGVncml0eSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1pbnRlZ3JpdHl9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZWRpYSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1tZWRpYX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHByZWZldGNoIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLXByZWZldGNofVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVmZXJyZXJwb2xpY3kge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcmVmZXJyZXJwb2xpY3l9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWwge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcmVsfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci10eXBlfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gc2l6ZXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItc2l6ZXN9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBub25jZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLW5vbmNlfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRhczogdW5kZWZpbmVkLFxuXHRcdFx0Y3Jvc3NPcmlnaW46IFwiYW5vbnltb3VzXCIsXG5cdFx0XHRkaXNhYmxlZDogdW5kZWZpbmVkLFxuXHRcdFx0aHJlZjogdW5kZWZpbmVkLFxuXHRcdFx0aHJlZmxhbmc6IHVuZGVmaW5lZCxcblx0XHRcdGltYWdlc2l6ZXM6IHVuZGVmaW5lZCxcblx0XHRcdGltYWdlc3Jjc2V0OiB1bmRlZmluZWQsXG5cdFx0XHRpbnRlZ3JpdHk6IHVuZGVmaW5lZCxcblx0XHRcdG1lZGlhOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVmZXRjaDogdW5kZWZpbmVkLFxuXHRcdFx0cmVmZXJyZXJwb2xpY3k6IHVuZGVmaW5lZCxcblx0XHRcdHJlbDogdW5kZWZpbmVkLFxuXHRcdFx0c2l6ZXM6IHVuZGVmaW5lZCxcblx0XHRcdHR5cGU6IHVuZGVmaW5lZCxcblx0XHRcdG5vbmNlOiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZS9saW5rXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLkxpbmt9XG5cdCAqL1xuXHRjcmVhdGUoKSB7XG5cdFx0Y3JlYXRlRWxlbWVudC5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG5cdFx0cmV0dXJuIEFUVFJJQlVURV9IUkVGO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLkxpbmt9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKTtcblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChUQUdfTElOSyk7XG5cblx0Zm9yIChjb25zdCBrZXkgb2YgW1xuXHRcdFwiYXNcIixcblx0XHRcImNyb3NzT3JpZ2luXCIsXG5cdFx0XCJkaXNhYmxlZFwiLFxuXHRcdFwiaHJlZlwiLFxuXHRcdFwiaHJlZmxhbmdcIixcblx0XHRcImltYWdlc2l6ZXNcIixcblx0XHRcImltYWdlc3Jjc2V0XCIsXG5cdFx0XCJpbnRlZ3JpdHlcIixcblx0XHRcIm1lZGlhXCIsXG5cdFx0XCJwcmVmZXRjaFwiLFxuXHRcdFwicmVmZXJyZXJwb2xpY3lcIixcblx0XHRcInNpemVzXCIsXG5cdFx0XCJyZWxcIixcblx0XHRcInR5cGVcIixcblx0XHRBVFRSSUJVVEVfSFJFRixcblx0XHRBVFRSSUJVVEVfSUQsXG5cdFx0QVRUUklCVVRFX0NMQVNTLFxuXHRcdEFUVFJJQlVURV9USVRMRSxcblx0XHRBVFRSSUJVVEVfTk9OQ0UsXG5cdF0pIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oa2V5KSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF1ba2V5XSA9IHRoaXMuZ2V0T3B0aW9uKGtleSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgTGluayB9IGZyb20gXCIuLi9saW5rLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgU3R5bGVzaGVldCB9O1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBlbWJlZCBleHRlcm5hbCByZXNvdXJjZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBSZXNvdXJjZSBjbGFzc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGlua1xuICovXG5jbGFzcyBTdHlsZXNoZWV0IGV4dGVuZHMgTGluayB7XG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVsIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLXJlbH1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0cmVsOiBcInN0eWxlc2hlZXRcIixcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldFwiKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9DTEFTUyxcblx0QVRUUklCVVRFX0lELFxuXHRBVFRSSUJVVEVfTk9OQ0UsXG5cdEFUVFJJQlVURV9TUkMsXG5cdEFUVFJJQlVURV9USVRMRSxcblx0QVRUUklCVVRFX1RZUEUsXG5cdFRBR19TQ1JJUFQsXG59IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBLRVlfRE9DVU1FTlQsIHJlZmVyZW5jZVN5bWJvbCwgUmVzb3VyY2UgfSBmcm9tIFwiLi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBTY3JpcHQgfTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZW1iZWQgc2NyaXB0cy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKi9cbmNsYXNzIFNjcmlwdCBleHRlbmRzIFJlc291cmNlIHtcblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYXN5bmM9dHJ1ZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWFzeW5jfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY3Jvc3NPcmlnaW49YW5vbnltb3VzIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItY3Jvc3NvcmlnaW59XG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGVmZXI9ZmFsc2Uge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1kZWZlcn1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGludGVncml0eSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWludGVncml0eX1cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBub21vZHVsZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLW5vbW9kdWxlfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbm9uY2Uge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1ub25jZX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlZmVycmVycG9saWN5IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItcmVmZXJyZXJwb2xpY3l9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItdHlwZX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcblx0XHRcdGRlZmVyOiBmYWxzZSxcblx0XHRcdGludGVncml0eTogdW5kZWZpbmVkLFxuXHRcdFx0bm9tb2R1bGU6IGZhbHNlLFxuXHRcdFx0bm9uY2U6IHVuZGVmaW5lZCxcblx0XHRcdHJlZmVycmVycG9saWN5OiB1bmRlZmluZWQsXG5cdFx0XHR0eXBlOiBcInRleHQvamF2YXNjcmlwdFwiLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2Uvc2NyaXB0XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLlNjcmlwdH1cblx0ICovXG5cdGNyZWF0ZSgpIHtcblx0XHRjcmVhdGVFbGVtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcblx0XHRyZXR1cm4gQVRUUklCVVRFX1NSQztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZS5TY3JpcHR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKTtcblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChUQUdfU0NSSVBUKTtcblxuXHRmb3IgKGNvbnN0IGtleSBvZiBbXG5cdFx0XCJjcm9zc09yaWdpblwiLFxuXHRcdFwiZGVmZXJcIixcblx0XHRcImFzeW5jXCIsXG5cdFx0XCJpbnRlZ3JpdHlcIixcblx0XHRcIm5vbW9kdWxlXCIsXG5cdFx0QVRUUklCVVRFX05PTkNFLFxuXHRcdFwicmVmZXJyZXJwb2xpY3lcIixcblx0XHRBVFRSSUJVVEVfVFlQRSxcblx0XHRBVFRSSUJVVEVfU1JDLFxuXHRcdEFUVFJJQlVURV9JRCxcblx0XHRBVFRSSUJVVEVfQ0xBU1MsXG5cdFx0QVRUUklCVVRFX1RJVExFLFxuXHRdKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKGtleSkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdW2tleV0gPSB0aGlzLmdldE9wdGlvbihrZXkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBlcXVpcFdpdGhJbnRlcm5hbCB9IGZyb20gXCIuLi90eXBlcy9pbnRlcm5hbC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfSFJFRiwgQVRUUklCVVRFX1NSQyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IFJlc291cmNlIH0gZnJvbSBcIi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBEYXRhIH0gZnJvbSBcIi4vcmVzb3VyY2UvZGF0YS5tanNcIjtcbmltcG9ydCB7IFN0eWxlc2hlZXQgfSBmcm9tIFwiLi9yZXNvdXJjZS9saW5rL3N0eWxlc2hlZXQubWpzXCI7XG5pbXBvcnQgeyBTY3JpcHQgfSBmcm9tIFwiLi9yZXNvdXJjZS9zY3JpcHQubWpzXCI7XG5cbmV4cG9ydCB7IFJlc291cmNlTWFuYWdlciB9O1xuXG4vKipcbiAqIFRoZSBSZXNvdXJjZU1hbmFnZXIgaXMgYSBzaW5nbGV0b24gdGhhdCBtYW5hZ2VzIGFsbCByZXNvdXJjZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBSZXNvdXJjZSBjbGFzc1xuICovXG5jbGFzcyBSZXNvdXJjZU1hbmFnZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIHRocm93IHtFcnJvcn0gdW5zdXBwb3J0ZWQgZG9jdW1lbnQgdHlwZVxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXHRcdGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG5cblx0XHRpZiAoISh0aGlzLmdldE9wdGlvbihcImRvY3VtZW50XCIpIGluc3RhbmNlb2YgRG9jdW1lbnQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBkb2N1bWVudCB0eXBlXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjE1LjAgdXNlIGdldEludGVybmFsIGluc3RlYWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGJhc2V1cmxcblx0ICovXG5cdGdldE9wdGlvbihrZXkpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRJbnRlcm5hbChrZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBiYXNldXJsXG5cdCAqL1xuXHRnZXRCYXNlVVJMKCkge1xuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiZG9jdW1lbnRcIik/LmJhc2VVUkw7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGJhc2V1cmxcblx0ICogQGRlcHJlY2F0ZWQgc2luY2UgMy4xNS4wIHVzZSBpbnRlcm5hbERlZmF1bHRzIGluc3RlYWRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gdGhpcy5pbnRlcm5hbERlZmF1bHRzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7SFRNTERvY3VtZW50fSBkb2N1bWVudD1kb2N1bWVudCBEb2N1bWVudFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVzb3VyY2VzXG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IHJlc291cmNlcy5zY3JpcHRzPVtdIGFycmF5IHdpdGgge0BsaW5rIE1vbnN0ZXIuRE9NLlJlc291cmNlLlNjcmlwdH0gb2JqZWN0c1xuXHQgKiBAcHJvcGVydHkge0FycmF5fSByZXNvdXJjZXMuc3R5bGVzaGVldHM9W10gYXJyYXkgd2l0aCB7QGxpbmsgTW9uc3Rlci5ET00uUmVzb3VyY2UuTGluay5TdHlsZXNoZWV0fSBvYmplY3RzXG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IHJlc291cmNlcy5kYXRhPVtdIGFycmF5IHdpdGgge0BsaW5rIE1vbnN0ZXIuRE9NLlJlc291cmNlLkRhdGF9IG9iamVjdHNcblx0ICovXG5cdGdldCBpbnRlcm5hbERlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHR7XG5cdFx0XHRcdGRvY3VtZW50OiBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKSxcblx0XHRcdFx0cmVzb3VyY2VzOiB7XG5cdFx0XHRcdFx0c2NyaXB0czogW10sXG5cdFx0XHRcdFx0c3R5bGVzaGVldHM6IFtdLFxuXHRcdFx0XHRcdGRhdGE6IFtdLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGVuZCBUYWdzIHRvIERPTVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCByZXNvdXJjZSBkZWZpbml0aW9uXG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdHJ1blJlc291cmNlTWV0aG9kLmNhbGwodGhpcywgXCJjb25uZWN0XCIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGF2YWlsYWJsZVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgcmVzb3VyY2UgZGVmaW5pdGlvblxuXHQgKi9cblx0YXZhaWxhYmxlKCkge1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChydW5SZXNvdXJjZU1ldGhvZC5jYWxsKHRoaXMsIFwiYXZhaWxhYmxlXCIpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSBzY3JpcHRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcblx0ICogQHBhcmFtIFtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHNlZSBNb25zdGVyLkRPTS5SZXNvdXJjZS5TY3JpcHRcblx0ICovXG5cdGFkZFNjcmlwdCh1cmwsIG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gYWRkUmVzb3VyY2UuY2FsbCh0aGlzLCBcInNjcmlwdHNcIiwgdXJsLCBvcHRpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgU3R5bGVzaGVldFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0gW09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2VNYW5hZ2VyfVxuXHQgKiBAc2VlIE1vbnN0ZXIuRE9NLlJlc291cmNlLkxpbmsuU3R5bGVzaGVldFxuXHQgKi9cblx0YWRkU3R5bGVzaGVldCh1cmwsIG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gYWRkUmVzb3VyY2UuY2FsbCh0aGlzLCBcInN0eWxlc2hlZXRzXCIsIHVybCwgb3B0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIERhdGEgVGFnXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG5cdCAqIEBwYXJhbSBbT2JqZWN0fHVuZGVmaW5lZH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG5cdCAqIEBzZWUgTW9uc3Rlci5ET00uUmVzb3VyY2UuRGF0YVxuXHQgKi9cblx0YWRkRGF0YSh1cmwsIG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gYWRkUmVzb3VyY2UuY2FsbCh0aGlzLCBcImRhdGFcIiwgdXJsLCBvcHRpb25zKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gcnVuUmVzb3VyY2VNZXRob2QobWV0aG9kKSB7XG5cdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdGZvciAoY29uc3QgdHlwZSBvZiBbXCJzY3JpcHRzXCIsIFwic3R5bGVzaGVldHNcIiwgXCJkYXRhXCJdKSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5nZXRPcHRpb24oYHJlc291cmNlcy4ke3R5cGV9YCk7XG5cdFx0aWYgKCFpc0FycmF5KHJlc291cmNlcykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XG5cdFx0XHRpZiAoIShyZXNvdXJjZSBpbnN0YW5jZW9mIFJlc291cmNlKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCByZXNvdXJjZSBkZWZpbml0aW9uXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXN1bHQucHVzaChyZXNvdXJjZVttZXRob2RdKCkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICogQHBhcmFtIFtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRSZXNvdXJjZSh0eXBlLCB1cmwsIG9wdGlvbnMpIHtcblx0aWYgKHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHR9XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0bGV0IHJlc291cmNlO1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRjYXNlIFwic2NyaXB0c1wiOlxuXHRcdFx0cmVzb3VyY2UgPSBuZXcgU2NyaXB0KGV4dGVuZCh7fSwgb3B0aW9ucywgeyBbQVRUUklCVVRFX1NSQ106IHVybCB9KSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwic3R5bGVzaGVldHNcIjpcblx0XHRcdHJlc291cmNlID0gbmV3IFN0eWxlc2hlZXQoZXh0ZW5kKHt9LCBvcHRpb25zLCB7IFtBVFRSSUJVVEVfSFJFRl06IHVybCB9KSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiZGF0YVwiOlxuXHRcdFx0cmVzb3VyY2UgPSBuZXcgRGF0YShleHRlbmQoe30sIG9wdGlvbnMsIHsgW0FUVFJJQlVURV9TUkNdOiB1cmwgfSkpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZSAke3R5cGV9YCk7XG5cdH1cblxuXHR0aGlzLmdldE9wdGlvbihcInJlc291cmNlc1wiKT8uW3R5cGVdLnB1c2gocmVzb3VyY2UpO1xuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBDb25maWdNYW5hZ2VyU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQ29uZmlnTWFuYWdlclN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRDb25maWdNYW5hZ2VyU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBjb25maWdtYW5hZ2VyIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpub25lfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBDb25maWdNYW5hZ2VyU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvY29uZmlnLW1hbmFnZXIubWpzXCI7XG5pbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IENvbmZpZ01hbmFnZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW5kZXhEQkluc3RhbmNlU3ltYm9sID0gU3ltYm9sKFwiaW5kZXhEQkluc3RhbmNlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbml0aWFsaXplZFByb21pc2VTeW1ib2wgPSBTeW1ib2woXCJpbml0aWFsaXplZFByb21pc2VTeW1ib2xcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IE1PREVfUkVBRE9OTFkgPSBcInJlYWRvbmx5XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IE1PREVfUkVBRF9XUklURSA9IFwicmVhZHdyaXRlXCI7XG5cbi8qKlxuICogVGhlIENvbmZpZyBNYW5hZ2VyIGNvbXBvbmVudCBpcyB1c2VkIHRvIGVuY2Fwc3VsYXRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25maWcgbWFuYWdlciBjb21wb25lbnRcbiAqL1xuY2xhc3MgQ29uZmlnTWFuYWdlciBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL2NvbXBvbmVudC1ob3N0L2NvbmZpZy1tYW5hZ2VyQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEB0eXBlIHtzeW1ib2x9XG5cdFx0ICovXG5cdFx0dGhpc1tpbml0aWFsaXplZFByb21pc2VTeW1ib2xdID0gW107XG5cdFx0dGhpc1tpbmRleERCSW5zdGFuY2VTeW1ib2xdID0gbnVsbDtcblx0XHR0aGlzW2luaXRpYWxpemVkUHJvbWlzZVN5bWJvbF0ucHVzaChvcGVuRGF0YWJhc2UuY2FsbCh0aGlzKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHJlYWR5KCkge1xuXHRcdHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2luaXRpYWxpemVkUHJvbWlzZVN5bWJvbF0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0aW5kZXhEQjoge1xuXHRcdFx0XHRuYW1lOiBcIm1vbnN0ZXJcIixcblx0XHRcdFx0dmVyc2lvbjogMixcblx0XHRcdFx0b2JqZWN0U3RvcmU6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbmZpZ1wiLFxuXHRcdFx0XHRcdGtleVBhdGg6IFwia2V5XCIsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cblx0ICovXG5cdGdldENvbmZpZyhrZXkpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpLnRoZW4oKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGdldEJsb2IuY2FsbCh0aGlzLCBrZXkpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn1cblx0ICovXG5cdGhhc0NvbmZpZyhrZXkpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBnZXRCbG9iLmNhbGwodGhpcywga2V5KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlPHVua25vd24+fVxuXHQgKi9cblx0c2V0Q29uZmlnKGtleSwgdmFsdWUpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpLnRoZW4oKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHNldEJsb2IuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcblx0XHR9KTtcblx0fVxuXG5cdGRlbGV0ZUNvbmZpZyhrZXkpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpLnRoZW4oKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGRlbGV0ZUJsb2IuY2FsbCh0aGlzLCBrZXkpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1jb25maWctbWFuYWdlclwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbQ29uZmlnTWFuYWdlclN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIG9wZW5EYXRhYmFzZSgpIHtcblx0Y29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG5cblx0Y29uc3QgbmFtZSA9IHRoaXMuZ2V0T3B0aW9uKFwiaW5kZXhEQi5uYW1lXCIpO1xuXHRjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLnZlcnNpb25cIik7XG5cdGNvbnN0IHN0b3JhZ2VOYW1lID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLm9iamVjdFN0b3JlLm5hbWVcIik7XG5cdGNvbnN0IEtleVBhdGggPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIub2JqZWN0U3RvcmUua2V5UGF0aFwiKTtcblxuXHRpZiAoIW5hbWUgfHwgIXZlcnNpb24pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgZGF0YWJhc2UgbmFtZSBhbmQgdmVyc2lvbiBtdXN0IGJlIHNldC5cIik7XG5cdH1cblxuXHRjb25zdCByZXF1ZXN0ID0gd2luZG93LmluZGV4ZWREQi5vcGVuKG5hbWUsIHZlcnNpb24pO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0cmVxdWVzdC5vbmVycm9yID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiRXJyb3Igb3BlbmluZyBkYXRhYmFzZVwiLCBldmVudCk7XG5cdFx0XHRyZWplY3QocmVxdWVzdC5lcnJvcik7XG5cdFx0fTtcblxuXHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50KSA9PiB7XG5cdFx0XHR0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0gPSBldmVudD8udGFyZ2V0Py5yZXN1bHQ7XG5cdFx0XHRyZXNvbHZlKHJlcXVlc3QucmVzdWx0KTtcblx0XHR9O1xuXG5cdFx0cmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoZXZlbnQpID0+IHtcblx0XHRcdGNvbnN0IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcblxuXHRcdFx0bGV0IG9iamVjdFN0b3JlO1xuXHRcdFx0aWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHN0b3JhZ2VOYW1lKSkge1xuXHRcdFx0XHRvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKHN0b3JhZ2VOYW1lLCB7IGtleVBhdGg6IEtleVBhdGggfSk7XG5cdFx0XHR9XG5cblx0XHRcdG9iamVjdFN0b3JlLnRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc29sZS5sb2coXCJEYXRhYmFzZSB1cGdyYWRlIGNvbXBsZXRlXCIpO1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9O1xuXHRcdH07XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlIGVpdGhlciBcInJlYWRvbmx5XCIgb3IgXCJyZWFkd3JpdGVcIlxuICovXG5mdW5jdGlvbiBnZXRPYmplY3RTdG9yZShtb2RlKSB7XG5cdGNvbnN0IHN0b3JhZ2VOYW1lID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLm9iamVjdFN0b3JlLm5hbWVcIik7XG5cblx0aWYgKCF0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgZGF0YWJhc2UgaXMgbm90IG9wZW4uXCIpO1xuXHR9XG5cblx0Ly8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSURCRGF0YWJhc2UvdHJhbnNhY3Rpb25cblx0Ly8gdHJhbnNhY3Rpb24oc3RvcmVOYW1lcywgbW9kZSwgb3B0aW9ucylcblx0Y29uc3QgdHggPSB0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0udHJhbnNhY3Rpb24oc3RvcmFnZU5hbWUsIG1vZGUpO1xuXHRyZXR1cm4gdHgub2JqZWN0U3RvcmUoc3RvcmFnZU5hbWUpO1xufVxuXG4vKipcbiAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmZ1bmN0aW9uIGNsZWFyT2JqZWN0U3RvcmUoKSB7XG5cdGNvbnN0IHN0b3JlID0gZ2V0T2JqZWN0U3RvcmUuY2FsbCh0aGlzLCBcInJlYWR3cml0ZVwiKTtcblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGNvbnN0IHJlcSA9IHN0b3JlLmNsZWFyKCk7XG5cdFx0cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdGNvbnNvbGUubG9nKFwiY2xlYXJPYmplY3RTdG9yZSBjb21wbGV0ZWRcIik7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fTtcblx0XHRyZXEub25lcnJvciA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJjbGVhck9iamVjdFN0b3JlOlwiLCBldnQudGFyZ2V0LmVycm9yQ29kZSk7XG5cdFx0XHRyZWplY3QoZXZ0LnRhcmdldC5lcnJvckNvZGUpO1xuXHRcdH07XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRCbG9iKGtleSkge1xuXHRjb25zdCBzdG9yZSA9IGdldE9iamVjdFN0b3JlLmNhbGwodGhpcywgTU9ERV9SRUFET05MWSk7XG5cblx0Y29uc3QgcmVxID0gc3RvcmUuZ2V0KGtleSk7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRyZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBldnQudGFyZ2V0LnJlc3VsdDtcblx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlLmJsb2IpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRyZWplY3QobmV3IEVycm9yKFwiVGhlIHZhbHVlIG9mIHRoZSBrZXkgJ1wiICsga2V5ICsgXCInIGlzIG5vdCBkZWZpbmVkLlwiKSk7XG5cdFx0fTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGRlbGV0ZUJsb2Ioa2V5KSB7XG5cdGNvbnN0IHN0b3JlID0gZ2V0T2JqZWN0U3RvcmUuY2FsbCh0aGlzLCBNT0RFX1JFQURfV1JJVEUpO1xuXG5cdGNvbnN0IHJlcSA9IHN0b3JlLmRlbGV0ZShrZXkpO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9O1xuXG5cdFx0cmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiZGVsZXRlQmxvYjpcIiwgZXZ0LnRhcmdldC5lcnJvckNvZGUpO1xuXHRcdFx0cmVqZWN0KGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHR9O1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gc2V0QmxvYihrZXksIGJsb2IpIHtcblx0Y29uc3Qgc3RvcmUgPSBnZXRPYmplY3RTdG9yZS5jYWxsKHRoaXMsIE1PREVfUkVBRF9XUklURSk7XG5cblx0Y29uc3QgS2V5UGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwiaW5kZXhEQi5vYmplY3RTdG9yZS5rZXlQYXRoXCIpO1xuXHRjb25zdCBvYmogPSB7fTtcblx0b2JqW0tleVBhdGhdID0ga2V5O1xuXHRvYmouYmxvYiA9IGJsb2I7XG5cdGNvbnN0IHJlcSA9IHN0b3JlLnB1dChvYmopO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9O1xuXG5cdFx0cmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwic2V0QmxvYjpcIiwgZXZ0LnRhcmdldC5lcnJvckNvZGUpO1xuXHRcdFx0cmVqZWN0KGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHR9O1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoQ29uZmlnTWFuYWdlcik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IFwiLi4vbm90aWZ5L25vdGlmeS5tanNcIjtcbmltcG9ydCB7IEhvc3RTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9ob3N0Lm1qc1wiO1xuaW1wb3J0IHsgZ2V0TG9jYWxlT2ZEb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgRW1iZWQgfSBmcm9tIFwiLi4vLi4vaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuLi8uLi9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7IHdpbmRvd1JlYWR5IH0gZnJvbSBcIi4uLy4uL2RvbS9yZWFkeS5tanNcIjtcbmltcG9ydCB7IEZvY3VzTWFuYWdlciB9IGZyb20gXCIuLi8uLi9kb20vZm9jdXNtYW5hZ2VyLm1qc1wiO1xuaW1wb3J0IHsgUmVzb3VyY2VNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2RvbS9yZXNvdXJjZW1hbmFnZXIubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGlzSXRlcmFibGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgXCIuL2NvbmZpZy1tYW5hZ2VyLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBIb3N0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHByb21pc2VzU3ltYm9sID0gU3ltYm9sKFwicHJvbWlzZXNTeW1ib2xcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG5vdGlmeUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJub3RpZnlFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvdmVybGF5RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm92ZXJsYXlFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbmZpZ01hbmFnZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBmb2N1c01hbmFnZXJTeW1ib2wgPSBTeW1ib2woXCJmb2N1c01hbmFnZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc291cmNlTWFuYWdlclN5bWJvbCA9IFN5bWJvbChcInJlc291cmNlTWFuYWdlclwiKTtcblxuLyoqXG4gKiBUaGUgSG9zdCBjb21wb25lbnQgaXMgdXNlZCB0byBlbmNhcHN1bGF0ZSB0aGUgY29udGVudCBvZiBhIHdlYiBhcHAuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9ob3N0LnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItaG9zdCAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ob3N0Jyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItaG9zdD48L21vbnN0ZXItaG9zdD5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgJ0BzY2h1a2FpL2NvbXBvbmVudC1zdGF0ZS9zb3VyY2UvaG9zdC5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ob3N0Jyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgaG9zdC5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEhvc3RcbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBzaW1wbGUgaG9zdCBjb21wb25lbnRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0I21vbnN0ZXItaG9zdC1jb25uZWN0ZWRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0I21vbnN0ZXItaG9zdC1kaXNjb25uZWN0ZWRcbiAqL1xuY2xhc3MgSG9zdCBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL2NvbXBvbmVudC1ob3N0L0hvc3RAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgRmVhdHVyZSBkZWZpbml0aW9uc1xuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSBrZXlcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGdldENvbmZpZyhrZXkpIHtcblx0XHRpZiAodGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGNvbmZpZyBtYW5hZ2VyIGVsZW1lbnRcIik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXS5nZXRDb25maWcoa2V5KTtcblx0fVxuXG5cdGhhc0NvbmZpZyhrZXkpIHtcblx0XHRpZiAodGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGNvbmZpZyBtYW5hZ2VyIGVsZW1lbnRcIik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXS5oYXNDb25maWcoa2V5KTtcblx0fVxuXG5cdGRlbGV0ZUNvbmZpZyhrZXkpIHtcblx0XHRpZiAodGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGNvbmZpZyBtYW5hZ2VyIGVsZW1lbnRcIik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXS5kZWxldGVDb25maWcoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHNldENvbmZpZyhrZXksIHZhbHVlKSB7XG5cdFx0aWYgKHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBjb25maWcgbWFuYWdlciBlbGVtZW50XCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXS5zZXRDb25maWcoa2V5LCB2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3QjbW9uc3Rlci1ob3N0LWNvbm5lY3RlZFxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdC8qKlxuXHRcdCAqIHNob3cgdGhlIHNjcm9sbCBiYXIgYWx3YXlzXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKi9cblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gXCJzY3JvbGxcIjtcblxuXHRcdGNvbnN0IGNsYXNzTmFtZXMgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuYm9keVwiKTtcblxuXHRcdGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVzKSkge1xuXHRcdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZXMpO1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItaG9zdC1jb25uZWN0ZWRcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3QjbW9uc3Rlci1ob3N0LWRpc2Nvbm5lY3RlZFxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gXCJcIjtcblxuXHRcdGNvbnN0IGNsYXNzTmFtZXMgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuYm9keVwiKTtcblx0XHRpZiAoIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZXMpKSB7XG5cdFx0XHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lcyk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzSXRlcmFibGUodGhpc1twcm9taXNlc1N5bWJvbF0pID09PSBmYWxzZSkge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0XHR9XG5cblx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKFxuXHRcdFx0bmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFx0XCJtb25zdGVyLWhvc3QtY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0eyBvbmNlOiB0cnVlIH0sXG5cdFx0XHRcdCk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1ob3N0LWRpc2Nvbm5lY3RlZFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXSA9IFtdO1xuXHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdLnB1c2god2luZG93UmVhZHkpO1xuXG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdFx0aW5pdFRyYW5zbGF0aW9ucy5jYWxsKHRoaXMpO1xuXG5cdFx0dGhpc1tmb2N1c01hbmFnZXJTeW1ib2xdID0gbmV3IEZvY3VzTWFuYWdlcih0aGlzKTtcblx0XHR0aGlzW3Jlc291cmNlTWFuYWdlclN5bWJvbF0gPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKHRoaXMpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdLnB1c2godGhpc1tyZXNvdXJjZU1hbmFnZXJTeW1ib2xdLmF2YWlsYWJsZSgpKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaXNDb25uZWN0ZWQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKFxuXHRcdFx0XHRuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcdFx0XCJtb25zdGVyLWhvc3QtY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7IG9uY2U6IHRydWUgfSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBQcm9taXNlIGlzIHJlc29sdmVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgY29ubmVjdGVkIHRvIHRoZSBET00gYW5kIGFsbCByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZS5cblx0ICogSWYgdGhlIGVsZW1lbnQgaXMgbm90IGNvbm5lY3RlZCB0byB0aGUgRE9NLCB0aGUgUHJvbWlzZSBpcyByZWplY3RlZC5cblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdG9uUmVhZHkoKSB7XG5cdFx0aWYgKGlzSXRlcmFibGUodGhpc1twcm9taXNlc1N5bWJvbF0pID09PSBmYWxzZSkge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwodGhpc1twcm9taXNlc1N5bWJvbF0pLnRoZW4oKCkgPT4ge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvbW9uc3Rlci9Nb25zdGVyLkRPTS5Gb2N1c01hbmFnZXIuaHRtbHxNb25zdGVyLkRPTS5Gb2N1c01hbmFnZXJ9XG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRnZXQgZm9jdXNNYW5hZ2VyKCkge1xuXHRcdHJldHVybiB0aGlzW2ZvY3VzTWFuYWdlclN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy9tb25zdGVyL01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlci5odG1sfE1vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdGdldCByZXNvdXJjZU1hbmFnZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcmVzb3VyY2VNYW5hZ2VyU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXG5cdCAqL1xuXHR0b2dnbGVPdmVybGF5KCkge1xuXHRcdGlmICh0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLnRvZ2dsZSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0hvc3R9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGVyZSBpcyBubyBvdmVybGF5IGVsZW1lbnQgZGVmaW5lZC5cblx0ICovXG5cdG9wZW5PdmVybGF5KCkge1xuXHRcdGlmICh0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLm9wZW4oKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtIb3N0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXG5cdCAqL1xuXHRjbG9zZU92ZXJsYXkoKSB7XG5cdFx0aWYgKHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBvdmVybGF5IGVsZW1lbnQgZGVmaW5lZC5cIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0uY2xvc2UoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItaG9zdFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbSG9zdFN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuSTE4bi5Mb2NhbGV9XG5cdCAqL1xuXHRnZXQgbG9jYWxlKCkge1xuXHRcdHJldHVybiBnZXRMb2NhbGVPZkRvY3VtZW50KCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7VHJhbnNsYXRpb25zfVxuXHQgKi9cblx0Z2V0IHRyYW5zbGF0aW9ucygpIHtcblx0XHRyZXR1cm4gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xNZXNzYWdlfSBtZXNzYWdlXG5cdCAqL1xuXHRwdXNoTm90aWZpY2F0aW9uKG1lc3NhZ2UpIHtcblx0XHRpZiAodGhpc1tub3RpZnlFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gbm90aWZ5IGVsZW1lbnQgZGVmaW5lZC5cIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tub3RpZnlFbGVtZW50U3ltYm9sXS5wdXNoKG1lc3NhZ2UpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJtb25zdGVyLW92ZXJsYXlcIik7XG5cdHRoaXNbbm90aWZ5RWxlbWVudFN5bWJvbF0gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJtb25zdGVyLW5vdGlmeVwiKTtcblx0dGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJtb25zdGVyLWNvbmZpZy1tYW5hZ2VyXCIsXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGluaXRUcmFuc2xhdGlvbnMoKSB7XG5cdGlmIChpc0l0ZXJhYmxlKHRoaXNbcHJvbWlzZXNTeW1ib2xdKSA9PT0gZmFsc2UpIHtcblx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXSA9IFtdO1xuXHR9XG5cblx0dGhpc1twcm9taXNlc1N5bWJvbF0ucHVzaChFbWJlZC5hc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwiaG9zdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmhvc3QtY29udGFpbmVyLmNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInBhcnQgcGF0aDpob3N0LWNvbnRhaW5lci5uYW1lLCBkYXRhLW1vbnN0ZXItcm9sZSBwYXRoOmhvc3QtY29udGFpbmVyLm5hbWVcIj48L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiaG9zdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KEhvc3QpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IE92ZXJsYXlTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBPdmVybGF5U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdE92ZXJsYXlTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIG92ZXJsYXkgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1pbnB1dCxtZXRlcixwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWF7YWNjZW50LWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGgpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTttYXJnaW46MDtvdXRsaW5lOm5vbmV9aW5wdXQsc2VsZWN0LHRleHRhcmVhe2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtwYWRkaW5nOi40cmVtIC42cmVtfXRleHRhcmVhe21pbi1oZWlnaHQ6NnJlbTtyZXNpemU6dmVydGljYWx9aW5wdXRbdHlwZT1jb2xvcl17aGVpZ2h0OjJyZW07bWFyZ2luOjA7cGFkZGluZzouMXJlbTt3aWR0aDoycmVtfWlucHV0OmhvdmVyOm5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pOm5vdChbdHlwZT1yYW5nZV0pLHNlbGVjdDpob3Zlcix0ZXh0YXJlYTpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWlucHV0OmZvY3VzLHNlbGVjdDpmb2N1cyx0ZXh0YXJlYTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6M3B4fUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNTttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudH06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjFlbTtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9ub3NwYWNle2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2U6XFxcIkNvbnNvbGFzXFxcIixcXFwiQ291cmllciBOZXdcXFwiLFxcXCJSb2JvdG8gTW9ub1xcXCIsXFxcIlNvdXJjZSBDb2RlIFByb1xcXCIsXFxcIkZpcmEgTW9ub1xcXCIsbW9ub3NwYWNlOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjNweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjJweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheV0uaGlkZS1lbXB0eXtkaXNwbGF5Om5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXlde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtoZWlnaHQ6MTAwJTtsZWZ0OjA7b3ZlcmZsb3cteDpoaWRkZW47cG9zaXRpb246Zml4ZWQ7dG9wOjA7dHJhbnNpdGlvbjouNXM7d2lkdGg6MDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMpfVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5XSBbZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheS1jbG9zZV17Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjQwcHg7bGVmdDoxMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMHB4O3dpZHRoOjQwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXldIFtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LWNsb3NlXTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMi4xNDYgMi44NTRhLjUuNSAwIDEgMSAuNzA4LS43MDhMOCA3LjI5M2w1LjE0Ni01LjE0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsNS4xNDcgNS4xNDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC01LjE0NiA1LjE0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTIuMTQ2IDIuODU0YS41LjUgMCAxIDEgLjcwOC0uNzA4TDggNy4yOTNsNS4xNDYtNS4xNDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDUuMTQ3IDUuMTQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtNS4xNDYgNS4xNDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktb3Blbl17Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjQwcHg7bGVmdDoxMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMHB4O3dpZHRoOjQwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktb3Blbl06YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTEgMmExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xek0xIDdhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXpNMSAxMmExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xeicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTEgMmExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xek0xIDdhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXpNMSAxMmExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xeicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheV0ub3Blbnt3aWR0aDoxMDAlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgXCIuLi9ub3RpZnkvbm90aWZ5Lm1qc1wiO1xuaW1wb3J0IHsgT3ZlcmxheVN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L292ZXJsYXkubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0ZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQsXG5cdGZpcmVDdXN0b21FdmVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IE92ZXJsYXkgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3ZlcmxheUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvdmVybGF5RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3ZlcmxheUNsb3NlRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm92ZXJsYXlDbG9zZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvdmVybGF5T3BlbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvdmVybGF5T3BlbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG9wZW5FdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJvcGVuRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfVkFMVUVfT1ZFUkxBWV9PUEVOID0gXCJvdmVybGF5LW9wZW5cIjtcblxuLyoqXG4gKiBUaGUgT3ZlcmxheSBjb21wb25lbnQgaXMgdXNlZCB0byBzaG93IGFuIG92ZXJsYXkgYW5kIGEgYnV0dG9uIHRvIG9wZW4gdGhlIG92ZXJsYXkuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9vdmVybGF5LnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItb3ZlcmxheSAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1vdmVybGF5Jyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItb3ZlcmxheT48L21vbnN0ZXItb3ZlcmxheT5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgJ0BzY2h1a2FpL2NvbXBvbmVudC1zdGF0ZS9zb3VyY2Uvb3ZlcmxheS5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1vdmVybGF5Jyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgb3ZlcmxheS5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBPdmVybGF5XG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgc2ltcGxlIG92ZXJsYXkgY29tcG9uZW50XG4gKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LWJlZm9yZS1vcGVuXG4gKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LW9wZW5cbiAqIEBmaXJlcyBtb25zdGVyLW92ZXJsYXktYmVmb3JlLWNsb3NlXG4gKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LWNsb3NlZFxuICovXG5jbGFzcyBPdmVybGF5IGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2hvc3Qvb3ZlcmxheUBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb250YWluZXIgQ29udGFpbmVyIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IGNvbnRhaW5lciBDb250YWluZXIgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRhaW5lcltdLm5hbWUgTmFtZSBvZiB0aGUgY29udGFpbmVyXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250YWluZXJbXS5jb250ZW50IENvbnRlbnQgb2YgdGhlIGNvbnRhaW5lclxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGFpbmVyW10uY2xhc3MgQ3NzIGNsYXNzIG9mIHRoZSBjb250YWluZXJcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXMgQ3NzIGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuYm9keSBDc3MgY2xhc3MgdG8gaGlkZSB0aGUgYm9keS4gVGhpcyBjbGFzcyBpcyByZW1vdmVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyByZWFkeS5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMub3ZlcmxheSBDc3MgY2xhc3MgdG8gaGlkZSB0aGUgb3ZlcmxheS4gVGhpcyBjbGFzcyBpcyByZW1vdmVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyByZWFkeS5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIEZlYXR1cmUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5lc2NhcGVLZXkgSWYgdHJ1ZSB0aGUgb3ZlcmxheSBjYW4gYmUgY2xvc2VkIHdpdGggdGhlIGVzY2FwZSBrZXlcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5vcGVuQnV0dG9uIElmIHRydWUgdGhlIG92ZXJsYXkgY2FuIGJlIG9wZW5lZCB3aXRoIGEgYnV0dG9uXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRvdmVybGF5OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRlbnRcIixcblx0XHRcdFx0XHRjb250ZW50OiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdFx0XHRjbGFzczogXCJcIixcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJvZHk6IFwiaGlkZGVuXCIsXG5cdFx0XHRcdG92ZXJsYXk6IFwiaGlkZS1lbXB0eVwiLFxuXHRcdFx0fSxcblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdGVzY2FwZUtleTogdHJ1ZSxcblx0XHRcdFx0b3BlbkJ1dHRvbjogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHQvKipcblx0XHQgKiBzaG93IHRoZSBzY3JvbGwgYmFyIGFsd2F5c1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IFwic2Nyb2xsXCI7XG5cblx0XHRjb25zdCBjbGFzc05hbWVzID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmJvZHlcIik7XG5cblx0XHRpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lcykpIHtcblx0XHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWVzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheX1cblx0ICovXG5cdHRvZ2dsZSgpIHtcblx0XHRpZiAodGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwib3BlblwiKSkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9wZW4oKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheX1cblx0ICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtb3BlblxuXHQgKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LW9wZW5cblx0ICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtY2xvc2Vcblx0ICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1jbG9zZWRcblx0ICovXG5cdG9wZW4oKSB7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vdmVybGF5LWJlZm9yZS1vcGVuXCIsIHt9KTtcblxuXHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlLWVtcHR5XCIpO1xuXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwib3BlblwiKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW92ZXJsYXktb3BlblwiLCB7fSk7XG5cdFx0XHR9LCAwKTtcblx0XHR9LCAwKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXl9XG5cdCAqL1xuXHRjbG9zZSgpIHtcblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW92ZXJsYXktYmVmb3JlLWNsb3NlXCIsIHt9KTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJvcGVuXCIpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3ZlcmxheS1jbG9zZWRcIiwge30pO1xuXHRcdFx0fSwgMCk7XG5cdFx0fSwgMCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLW92ZXJsYXlcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW092ZXJsYXlTdHlsZVNoZWV0XTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKFwib3ZlcmxheVwiKTtcblx0dGhpc1tvdmVybGF5Q2xvc2VFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktY2xvc2VdXCIsXG5cdCk7XG5cdHRoaXNbb3ZlcmxheU9wZW5FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktb3Blbl1cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbY2xvc2VFdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0dGhpcy5jbG9zZSgpO1xuXHR9O1xuXG5cdHRoaXNbb3ZlcmxheUNsb3NlRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcImNsaWNrXCIsXG5cdFx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdCk7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW29wZW5FdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdEFUVFJJQlVURV9WQUxVRV9PVkVSTEFZX09QRU4sXG5cdFx0KTtcblx0XHRpZiAoZWxlbWVudCkge1xuXHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0fVxuXHR9O1xuXG5cdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXNbb3BlbkV2ZW50SGFuZGxlclN5bWJvbF0pO1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmVzY2FwZUtleVwiKSA9PT0gdHJ1ZSkge1xuXHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG5cdFx0XHRcdGNvbnN0IGlzTm90Q29tYmluZWRLZXkgPSAhKFxuXHRcdFx0XHRcdGV2ZW50LmN0cmxLZXkgfHxcblx0XHRcdFx0XHRldmVudC5hbHRLZXkgfHxcblx0XHRcdFx0XHRldmVudC5zaGlmdEtleVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoaXNOb3RDb21iaW5lZEtleSkge1xuXHRcdFx0XHRcdHRoaXMudG9nZ2xlT3ZlcmxheSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJob3N0LW92ZXJsYXlcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmhvc3Qtb3ZlcmxheS5jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJwYXJ0IHBhdGg6aG9zdC1vdmVybGF5Lm5hbWUsIGRhdGEtbW9uc3Rlci1yb2xlIHBhdGg6aG9zdC1jb250YWluZXIub3ZlcmxheVwiPjwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJvdmVybGF5LW9wZW5cIiBwYXJ0PVwib3BlblwiXG5cdFx0XHQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmZlYXR1cmVzLm9wZW5CdXR0b24gfCBpZjp2aXNpYmxlOmhpZGRlblwiPjwvZGl2PlxuXG4gICAgICAgIDxkaXYgaWQ9XCJvdmVybGF5XCIgZGF0YS1tb25zdGVyLXJvbGU9XCJvdmVybGF5XCIgcGFydD1cIm92ZXJsYXlcIiBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiaG9zdC1vdmVybGF5IHBhdGg6b3ZlcmxheVwiXG4gICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMub3ZlcmxheVwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm92ZXJsYXktY2xvc2VcIiBwYXJ0PVwiY2xvc2VcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE92ZXJsYXkpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcblxuZXhwb3J0IHsgZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkgfTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHVuaXF1ZSBjb25maWd1cmF0aW9uIGtleSBiYXNlZCBvbiB0aGUgY3VycmVudCBicm93c2VyIGxvY2F0aW9uLFxuICogY29tcG9uZW50IG5hbWUsIGlkLCBhbmQgYSBwcmVmaXguXG4gKlxuICogQHNpbmNlIDMuNTUuMCB0aGUgZnVuY3Rpb24gcmVtb3ZlIHRoZSBoYXNoIGZyb20gdGhlIGtleVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb21wb25lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IC0gQSBwcmVmaXggdG8gdXNlIGluIHRoZSB1bmlxdWUga2V5LlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZ2VuZXJhdGVkIHVuaXF1ZSBjb25maWd1cmF0aW9uIGtleS5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkoY29tcG9uZW50TmFtZSwgaWQsIHByZWZpeCkge1xuXHQvLyBHZXQgdGhlIGJyb3dzZXIgbG9jYXRpb24gd2l0aG91dCBwYXJhbWV0ZXJzXG5cdGNvbnN0IHVybFdpdGhvdXRQYXJhbXMgPSBnZXRXaW5kb3coKS5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiP1wiKVswXTtcblxuXHQvLyBXaXRob3V0IGhhc2ggKHNpbmNlIDMuNTUuMClcblx0Y29uc3QgdXJsV2l0aG91dFBhcmFtc0FuZEhhc2ggPSB1cmxXaXRob3V0UGFyYW1zLnNwbGl0KFwiI1wiKVswXTtcblxuXHQvLyBDb21iaW5lIHRoZSBwYXJ0cyB0byBjcmVhdGUgYSB1bmlxdWUga2V5XG5cdGNvbnN0IHVuaXF1ZUtleSA9IGAke3ByZWZpeH1fJHt1cmxXaXRob3V0UGFyYW1zQW5kSGFzaH1fJHtjb21wb25lbnROYW1lfV8ke2lkfWA7XG5cblx0Ly8gUmVwbGFjZSBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBzcGFjZXMgd2l0aCB1bmRlcnNjb3Jlc1xuXHRyZXR1cm4gdW5pcXVlS2V5LnJlcGxhY2UoL1teXFx3XFxzXS9naSwgXCJfXCIpLnJlcGxhY2UoL1xccysvZywgXCJfXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IERldGFpbHNTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBEZXRhaWxzU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdERldGFpbHNTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGRldGFpbHMgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeSwubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5LC5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZTpcXFwiQ29uc29sYXNcXFwiLFxcXCJDb3VyaWVyIE5ld1xcXCIsXFxcIlJvYm90byBNb25vXFxcIixcXFwiU291cmNlIENvZGUgUHJvXFxcIixcXFwiRmlyYSBNb25vXFxcIixtb25vc3BhY2U7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTIpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6M3B4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHg7LS1tb25zdGVyLWRyYWdnZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aDo0cHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodDo1MHB4fXNwYW4ubW9uc3Rlci1meC1yaXBwbGV7YW5pbWF0aW9uOm1vbnN0ZXItZngtcmlwcGxlIC42cyBsaW5lYXI7YmFja2dyb3VuZC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNyk7Ym9yZGVyLXJhZGl1czo1MCU7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnNjYWxlKDApfUBrZXlmcmFtZXMgbW9uc3Rlci1meC1yaXBwbGV7dG97b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSg0KX19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQVRUUklCVVRFX1BSRUZJWCB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsYCBjYW4gYmUgdXNlZCB0byBwYXNzIGxhYmVscy5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfQlVUVE9OX0xBQkVMID0gYCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24tbGFiZWxgO1xuXG5leHBvcnQgeyBBVFRSSUJVVEVfQlVUVE9OX0xBQkVMIH07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQ29sbGFwc2VTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBDb2xsYXBzZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRDb2xsYXBzZVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgY29sbGFwc2UgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeSwubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5LC5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZTpcXFwiQ29uc29sYXNcXFwiLFxcXCJDb3VyaWVyIE5ld1xcXCIsXFxcIlJvYm90byBNb25vXFxcIixcXFwiU291cmNlIENvZGUgUHJvXFxcIixcXFwiRmlyYSBNb25vXFxcIixtb25vc3BhY2U7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTIpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6M3B4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHg7LS1tb25zdGVyLWRyYWdnZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aDo0cHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodDo1MHB4fXNwYW4ubW9uc3Rlci1meC1yaXBwbGV7YW5pbWF0aW9uOm1vbnN0ZXItZngtcmlwcGxlIC42cyBsaW5lYXI7YmFja2dyb3VuZC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNyk7Ym9yZGVyLXJhZGl1czo1MCU7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnNjYWxlKDApfUBrZXlmcmFtZXMgbW9uc3Rlci1meC1yaXBwbGV7dG97b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSg0KX19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjZ9Lm92ZXJmbG93LWhpZGRlbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdmVyZmxvdzpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIGJ1dHRvbntib3JkZXItbGVmdDowO2JvcmRlci1yaWdodDowO2JvcmRlci10b3A6MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLmJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2hlaWdodDowO2xpbmUtaGVpZ2h0OjEuNjt0cmFuc2l0aW9uOmhlaWdodCAuNHMgZWFzZS1pbi1vdXQ7d2lkdGg6MTAwJX06aXMoW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxdKSAucGFkZGluZ3twYWRkaW5nOjFyZW19OmlzKFtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXSkgLmRlY28tbGluZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTtib3JkZXI6MDtoZWlnaHQ6MnB4O21hcmdpbjowO3BhZGRpbmc6MH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezppcyhbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF0pIC5kZWNvLWxpbmV7YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9fTppcyhbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF0pIC5kZWNvLWxpbmV7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC40cyBlYXNlLWluLW91dH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLmFjdGl2ZVtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxde2hlaWdodDp2YXIoLS1tb25zdGVyLWhlaWdodCk7dHJhbnNpdGlvbjpoZWlnaHQgLjRzIGVhc2UtaW4tb3V0fSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IENvbGxhcHNlU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvY29sbGFwc2UubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBIb3N0IH0gZnJvbSBcIi4uL2hvc3QvaG9zdC5tanNcIjtcbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IH0gZnJvbSBcIi4uL2hvc3QvdXRpbC5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IENvbGxhcHNlLCBuYW1lU3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkZXRhaWxzRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRldGFpbHNFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRldGFpbHNTbG90RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRldGFpbHNTbG90RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJkZXRhaWxzQ29udGFpbmVyRWxlbWVudFwiKTtcbi8qKlxuXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGV0YWlsc0RlY29FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZGV0YWlsc0RlY29FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBuYW1lU3ltYm9sID0gU3ltYm9sKFwibmFtZVwiKTtcblxuLyoqXG4gKiBBIENvbGxhcHNlIGNvbXBvbmVudFxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2xheW91dC9jb2xsYXBzZS9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvY29sbGFwc2Utc2ltcGxlXG4gKlxuICogQHNpbmNlIDMuNzQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5ICBBIHNpbXBsZSBjb2xsYXBzZSBjb21wb25lbnQuXG4gKi9cbmNsYXNzIENvbGxhcHNlIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2xheW91dC9jb2xsYXBzZUBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0Ly8gdGhlIG5hbWUgaXMgb25seSB1c2VkIGZvciB0aGUgaG9zdCBjb25maWcgYW5kIHRoZSBldmVudCBuYW1lXG5cdFx0dGhpc1tuYW1lU3ltYm9sXSA9IFwiY29sbGFwc2VcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXMgQ1NTIGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuY29udGFpbmVyIENTUyBjbGFzcyBmb3IgdGhlIGNvbnRhaW5lclxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgRmVhdHVyZSBjb25maWd1cmF0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuYWNjb3JkaW9uIEVuYWJsZSBhY2NvcmRpb24gbW9kZVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLnBlcnNpc3RTdGF0ZSBFbmFibGUgcGVyc2lzdCBzdGF0ZSAoSG9zdCBhbmQgQ29uZmlnLU1hbmFnZXIgcmVxdWlyZWQpXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMudXNlU2Nyb2xsVmFsdWVzIFVzZSBzY3JvbGwgdmFsdWVzIChzY3JvbGxIZWlnaHQpIGluc3RlYWQgb2YgY2xpZW50SGVpZ2h0IGZvciB0aGUgaGVpZ2h0IGNhbGN1bGF0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb3BlbkJ5RGVmYXVsdCBPcGVuIHRoZSBkZXRhaWxzIGJ5IGRlZmF1bHRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0Y29udGFpbmVyOiBcInBhZGRpbmdcIixcblx0XHRcdH0sXG5cdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHRhY2NvcmRpb246IHRydWUsXG5cdFx0XHRcdHBlcnNpc3RTdGF0ZTogdHJ1ZSxcblx0XHRcdFx0dXNlU2Nyb2xsVmFsdWVzOiBmYWxzZSxcblx0XHRcdH0sXG5cdFx0XHRvcGVuQnlEZWZhdWx0OiBmYWxzZSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0U3RhdGVGcm9tSG9zdENvbmZpZy5jYWxsKHRoaXMpO1xuXHRcdGluaXRSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcIm9wZW5CeURlZmF1bHRcIikpIHtcblx0XHRcdHRoaXMub3BlbigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHR1cGRhdGVSZXNpemVPYnNlcnZlck9ic2VydmF0aW9uLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q29sbGFwc2V9XG5cdCAqL1xuXHR0b2dnbGUoKSB7XG5cdFx0aWYgKHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKSkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9wZW4oKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ2xvc2VkKCkge1xuXHRcdHJldHVybiAhdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc09wZW4oKSB7XG5cdFx0cmV0dXJuICF0aGlzLmlzQ2xvc2VkKCk7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbiB0aGUgY29sbGFwc2Vcblx0ICogQHJldHVybiB7Q29sbGFwc2V9XG5cdCAqIEBmaXJlcyBtb25zdGVyLWNvbGxhcHNlLWJlZm9yZS1vcGVuIFRoaXMgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHRoZSBjb2xsYXBzZSBpcyBvcGVuZWQuXG5cdCAqIEBmaXJlcyBtb25zdGVyLWNvbGxhcHNlLW9wZW4gVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciB0aGUgY29sbGFwc2UgaXMgb3BlbmVkLlxuXHQgKi9cblx0b3BlbigpIHtcblx0XHRsZXQgbm9kZTtcblx0XHRpZiAodGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLWJlZm9yZS1vcGVuXCIsIHt9KTtcblxuXHRcdGFkanVzdEhlaWdodC5jYWxsKHRoaXMpO1xuXHRcdHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5hY2NvcmRpb25cIikgPT09IHRydWUpIHtcblx0XHRcdG5vZGUgPSB0aGlzO1xuXHRcdFx0d2hpbGUgKG5vZGUubmV4dEVsZW1lbnRTaWJsaW5nIGluc3RhbmNlb2YgQ29sbGFwc2UpIHtcblx0XHRcdFx0bm9kZSA9IG5vZGUubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0XHRub2RlLmNsb3NlKCk7XG5cdFx0XHR9XG5cblx0XHRcdG5vZGUgPSB0aGlzO1xuXHRcdFx0d2hpbGUgKG5vZGUucHJldmlvdXNFbGVtZW50U2libGluZyBpbnN0YW5jZW9mIENvbGxhcHNlKSB7XG5cdFx0XHRcdG5vZGUgPSBub2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG5cdFx0XHRcdG5vZGUuY2xvc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR1cGRhdGVTdGF0ZUNvbmZpZy5jYWxsKHRoaXMpO1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLW9wZW5cIiwge30pO1xuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwib3ZlcmZsb3ctaGlkZGVuXCIpO1xuXHRcdFx0XHR9LCA1MDApO1xuXHRcdFx0fSwgMCk7XG5cdFx0fSwgMCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZSB0aGUgY29sbGFwc2Vcblx0ICogQHJldHVybiB7Q29sbGFwc2V9XG5cdCAqIEBmaXJlcyBtb25zdGVyLWNvbGxhcHNlLWJlZm9yZS1jbG9zZSBUaGlzIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSB0aGUgY29sbGFwc2UgaXMgY2xvc2VkLlxuXHQgKiBAZmlyZXMgbW9uc3Rlci1jb2xsYXBzZS1jbG9zZWQgVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciB0aGUgY29sbGFwc2UgaXMgY2xvc2VkLlxuXHQgKi9cblx0Y2xvc2UoKSB7XG5cdFx0aWYgKCF0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItXCIgKyB0aGlzW25hbWVTeW1ib2xdICsgXCItYmVmb3JlLWNsb3NlXCIsIHt9KTtcblx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwib3ZlcmZsb3ctaGlkZGVuXCIpO1xuXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHVwZGF0ZVN0YXRlQ29uZmlnLmNhbGwodGhpcyk7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItXCIgKyB0aGlzW25hbWVTeW1ib2xdICsgXCItY2xvc2VkXCIsIHt9KTtcblx0XHRcdH0sIDApO1xuXHRcdH0sIDApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWNvbGxhcHNlXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW0NvbGxhcHNlU3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgaW5zZXJ0ZWQgaW50byBhIGRvY3VtZW50LCBpbmNsdWRpbmcgaW50byBhIHNoYWRvdyB0cmVlLlxuXHQgKiBAcmV0dXJuIHtDb2xsYXBzZX1cblx0ICogQGZpcmVzIG1vbnN0ZXItY29sbGFwc2UtYWRqdXN0LWhlaWdodCBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIGhlaWdodCBpcyBhZGp1c3RlZC4gQXMgYSBkZXRhaWwsIHRoZSBoZWlnaHQgaXMgcGFzc2VkLlxuXHQgKi9cblx0YWRqdXN0SGVpZ2h0KCkge1xuXHRcdGFkanVzdEhlaWdodC5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGFkanVzdEhlaWdodCgpIHtcblx0bGV0IGhlaWdodCA9IDA7XG5cblx0aWYgKHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMudXNlU2Nyb2xsVmFsdWVzXCIpKSB7XG5cdFx0XHRoZWlnaHQgKz0gdGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uc2Nyb2xsSGVpZ2h0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoZWlnaHQgKz0gdGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xpZW50SGVpZ2h0O1xuXHRcdH1cblx0fVxuXG5cdGlmICh0aGlzW2RldGFpbHNEZWNvRWxlbWVudFN5bWJvbF0pIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy51c2VTY3JvbGxWYWx1ZXNcIikpIHtcblx0XHRcdGhlaWdodCArPSB0aGlzW2RldGFpbHNEZWNvRWxlbWVudFN5bWJvbF0uc2Nyb2xsSGVpZ2h0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoZWlnaHQgKz0gdGhpc1tkZXRhaWxzRGVjb0VsZW1lbnRTeW1ib2xdLmNsaWVudEhlaWdodCArIDE7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGhlaWdodCA9PT0gMCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnVzZVNjcm9sbFZhbHVlc1wiKSkge1xuXHRcdFx0aGVpZ2h0ID0gdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uc2Nyb2xsSGVpZ2h0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoZWlnaHQgPSB0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGllbnRIZWlnaHQ7XG5cdFx0fVxuXG5cdFx0aWYgKGhlaWdodCA9PT0gMCkge1xuXHRcdFx0aGVpZ2h0ID0gXCJhdXRvXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGhlaWdodCArPSBcInB4XCI7XG5cdH1cblxuXHR0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcIi0tbW9uc3Rlci1oZWlnaHRcIixcblx0XHRoZWlnaHQsXG5cdFx0XCJpbXBvcnRhbnRcIixcblx0KTtcblxuXHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLWFkanVzdC1oZWlnaHRcIiwge1xuXHRcdGhlaWdodCxcblx0fSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlc2l6ZU9ic2VydmVyT2JzZXJ2YXRpb24oKSB7XG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblxuXHRjb25zdCBzbG90dGVkTm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzKTtcblx0c2xvdHRlZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKG5vZGUpO1xuXHR9KTtcblxuXHRpZiAodGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0pIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKTtcblx0fVxuXG5cdHRoaXMuYWRqdXN0SGVpZ2h0KCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0aW5pdFNsb3RDaGFuZ2VkSGFuZGxlci5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gaW5pdFNsb3RDaGFuZ2VkSGFuZGxlcigpIHtcblx0dGhpc1tkZXRhaWxzU2xvdEVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJzbG90Y2hhbmdlXCIsICgpID0+IHtcblx0XHR1cGRhdGVSZXNpemVPYnNlcnZlck9ic2VydmF0aW9uLmNhbGwodGhpcyk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1cIixcblx0KTtcblx0dGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxdXCIsXG5cdCk7XG5cdHRoaXNbZGV0YWlsc1Nsb3RFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwic2xvdFwiKTtcblx0dGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1jb250YWluZXJdXCIsXG5cdCk7XG5cdHRoaXNbZGV0YWlsc0RlY29FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWRlY29dXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZmlnS2V5KCkge1xuXHRyZXR1cm4gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkodGhpc1tuYW1lU3ltYm9sXSwgdGhpcy5pZCwgXCJzdGF0ZVwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVTdGF0ZUNvbmZpZygpIHtcblx0aWYgKCF0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnBlcnNpc3RTdGF0ZVwiKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICghdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cdGNvbnN0IGhvc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibW9uc3Rlci1ob3N0XCIpO1xuXHRpZiAoIShob3N0ICYmIHRoaXMuaWQpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgY29uZmlnS2V5ID0gZ2V0Q29uZmlnS2V5LmNhbGwodGhpcyk7XG5cblx0dHJ5IHtcblx0XHRob3N0LnNldENvbmZpZyhjb25maWdLZXksIHRoaXMuaXNPcGVuKCkpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIFN0cmluZyhlcnJvcikpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKi9cbmZ1bmN0aW9uIGluaXRTdGF0ZUZyb21Ib3N0Q29uZmlnKCkge1xuXHRpZiAoIXRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucGVyc2lzdFN0YXRlXCIpKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cdGNvbnN0IGhvc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibW9uc3Rlci1ob3N0XCIpO1xuXG5cdGlmICghKGhvc3QgJiYgdGhpcy5pZCkpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGNvbnN0IGNvbmZpZ0tleSA9IGdldENvbmZpZ0tleS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gaG9zdFxuXHRcdC5nZXRDb25maWcoY29uZmlnS2V5KVxuXHRcdC50aGVuKChzdGF0ZSkgPT4ge1xuXHRcdFx0aWYgKHN0YXRlID09PSB0cnVlKSB7XG5cdFx0XHRcdHRoaXMub3BlbigpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZXJyb3IudG9TdHJpbmcoKSk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdGNoZWNrQW5kUmVhcnJhbmdlQ29udGVudC5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gY2hlY2tBbmRSZWFycmFuZ2VDb250ZW50KCkge1xuXHR0aGlzLmFkanVzdEhlaWdodCgpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiBjbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImRldGFpbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuY29udGFpbmVyXCIgcGFydD1cImNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlY28tbGluZVwiIGRhdGEtbW9uc3Rlci1yb2xlPVwiZGVjb1wiIHBhcnQ9XCJkZWNvXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KENvbGxhcHNlKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBEZXRhaWxzU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvZGV0YWlscy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9CVVRUT05fTEFCRUwgfSBmcm9tIFwiLi4vaG9zdC9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IH0gZnJvbSBcIi4uL2hvc3QvdXRpbC5tanNcIjtcbmltcG9ydCB7IENvbGxhcHNlLCBuYW1lU3ltYm9sIH0gZnJvbSBcIi4vY29sbGFwc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IERldGFpbHMgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBBIERldGFpbHMgY29tcG9uZW50XG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvbGF5b3V0L2RldGFpbHMvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L2RldGFpbHMtc2ltcGxlXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlscy13aXRoLWxhYmVsXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlscy1hcy1hY2NvcmRpb25cbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9kZXRhaWxzLXdpdGgteW91ci1vd24tZGVzaWduXG4gKlxuICogQHNpbmNlIDMuNzQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgc2ltcGxlIGJ1dCBjb29sIGRldGFpbCBjb21wb25lbnQuIFRoaXMgaXMgYmFzZWQgb24gdGhlIGNvbGxhcHNlIGNvbXBvbmVudCBhbmQgZXh0ZW5kcyBpdCB3aXRoIGEgYnV0dG9uLlxuICogQHN1bW1hcnkgWW91IGNhbiBhbHNvIGVhc2lseSBidWlsZCBhbiBhY2NvcmRpb24gZnJvbSB0aGUgY29tcG9uZW50LlxuICovXG5jbGFzcyBEZXRhaWxzIGV4dGVuZHMgQ29sbGFwc2Uge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlsc0BAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0Ly8gdGhlIG5hbWUgaXMgb25seSB1c2VkIGZvciB0aGUgaG9zdCBjb25maWcgYW5kIHRoZSBldmVudCBuYW1lXG5cdFx0dGhpc1tuYW1lU3ltYm9sXSA9IFwiZGV0YWlsc1wiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgVGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gYnV0dG9uIEJ1dHRvbiBjb25maWd1cmF0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBidXR0b24ubGFiZWwgQnV0dG9uIGxhYmVsXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIkRldGFpbHNcIixcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0QnV0dG9uTGFiZWwuY2FsbCh0aGlzKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRjb25zdCBjb250YWluRG9jdW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q7XG5cblx0XHRpZiAoY29udGFpbkRvY3VtZW50ICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBwcmV2aW91c0VsZW1lbnQgPSB0aGlzLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG5cdFx0XHRpZiAocHJldmlvdXNFbGVtZW50ICYmIHByZXZpb3VzRWxlbWVudC50YWdOYW1lID09PSBcIk1PTlNURVItREVUQUlMU1wiKSB7XG5cdFx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc3R5bGUuYm9yZGVyVG9wID0gXCIwXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1kZXRhaWxzXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBjc3MgPSBzdXBlci5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0Y3NzLnB1c2goRGV0YWlsc1N0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBjc3M7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9YnV0dG9uXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbYnV0dG9uRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdHRoaXMudG9nZ2xlKCk7XG5cdH07XG5cblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFwiY2xpY2tcIixcblx0XHR0aGlzW2J1dHRvbkV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaW5pdEJ1dHRvbkxhYmVsKCkge1xuXHRsZXQgbGFiZWw7XG5cdGNvbnN0IHNldExhYmVsID0gZmFsc2U7XG5cdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMKSkge1xuXHRcdGxhYmVsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCk7XG5cdH0gZWxzZSB7XG5cdFx0bGFiZWwgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5idXR0b25cIiwgXCJEZXRhaWxzXCIpO1xuXHR9XG5cblx0aWYgKCFpc1N0cmluZyhsYWJlbCkpIHtcblx0XHRsYWJlbCA9IFwiXCI7XG5cdH1cblxuXHRpZiAobGFiZWwgPT09IFwiXCIpIHtcblx0XHRsYWJlbCA9IHRoaXMuaW5uZXJUZXh0O1xuXHR9XG5cblx0bGFiZWwgPSBsYWJlbC50cmltKCk7XG5cblx0aWYgKGxhYmVsID09PSBcIlwiKSB7XG5cdFx0bGFiZWwgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5idXR0b25cIiwgXCJEZXRhaWxzXCIpO1xuXHR9XG5cblx0aWYgKGxhYmVsLmxlbmd0aCA+IDEwMCkge1xuXHRcdGxhYmVsID0gYCR7bGFiZWwuc3Vic3RyaW5nKDAsIDk5KX1cdTIwMjZgO1xuXHR9XG5cblx0dGhpcy5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCwgbGFiZWwpO1xuXHR0aGlzLnNldE9wdGlvbihcImxhYmVscy5idXR0b25cIiwgbGFiZWwpO1xuXG5cdHJldHVybiBsYWJlbDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRDb25maWdLZXkoKSB7XG5cdHJldHVybiBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleShcImRldGFpbHNcIiwgdGhpcy5pZCwgXCJzdGF0ZVwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdW1tYXJ5XCIgcGFydD1cInN1bW1hcnlcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHBhcnQ9XCJidXR0b25cIiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b24gfCBkZWZhdWx0OmNsaWNrIG1lXCI+Y2xpY2sgbWVcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImRldGFpbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuY29udGFpbmVyXCIgcGFydD1cImNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8c2xvdCBwYXJ0PVwic2xvdFwiPjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJkZWNvLWxpbmVcIiBjbGFzcz1cImRlY28tbGluZVwiIGRhdGEtbW9uc3Rlci1yb2xlPVwiZGVjb1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChEZXRhaWxzKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBEZXRhaWxzIGFzIE5ld0RldGFpbHMgfSBmcm9tIFwiLi4vbGF5b3V0L2RldGFpbHMubWpzXCI7XG5leHBvcnQgeyBEZXRhaWxzIH07XG5cbi8qKlxuICogQHNpbmNlIDEuMTAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBkZXByZWNhdGVkIHNpbmNlIDMuNjQuMCB1c2Uge0BsaW5rIE1vbnN0ZXIuQ29tcG9uZW50cy5MYXlvdXQuRGV0YWlsc31cbiAqL1xuY2xhc3MgRGV0YWlscyBleHRlbmRzIE5ld0RldGFpbHMge31cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyByYW5kb20gfSBmcm9tIFwiLi4vbWF0aC9yYW5kb20ubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuL2lkLm1qc1wiO1xuXG5leHBvcnQgeyBSYW5kb21JRCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5sZXQgaW50ZXJuYWxDb3VudGVyID0gMDtcblxuLyoqXG4gKiBUaGUgYFJhbmRvbUlEYCBjbGFzcyBwcm92aWRlcyBhIHVuaXF1ZSBJRCBmb3IgYW4gaXRlbS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IGNsYXNzIHRvIGdlbmVyYXRlIHJhbmRvbSBudW1iZXJzXG4gKi9cbmNsYXNzIFJhbmRvbUlEIGV4dGVuZHMgSUQge1xuXHQvKipcblx0ICogY3JlYXRlIG5ldyBvYmplY3Rcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpbnRlcm5hbENvdW50ZXIgKz0gMTtcblxuXHRcdHRoaXMuaWQgPVxuXHRcdFx0Z2V0R2xvYmFsKClcblx0XHRcdFx0LmJ0b2EocmFuZG9tKDEsIDEwMDAwKSlcblx0XHRcdFx0LnJlcGxhY2UoLz0vZywgXCJcIilcblx0XHRcdFx0LyoqIE5vIG51bWJlcnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgSUQsIGJlY2F1c2Ugb2YgcG9zc2libGUgcHJvYmxlbXMgd2l0aCBET00gKi9cblx0XHRcdFx0LnJlcGxhY2UoL15bMC05XSsvLCBcIlhcIikgKyBpbnRlcm5hbENvdW50ZXI7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyByYW5kb20gfSBmcm9tIFwiLi4vbWF0aC9yYW5kb20ubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi9nbG9iYWwubWpzXCI7XG5cbmV4cG9ydCB7IFVVSUQgfTtcblxuLyoqXG4gKiBUaGUgVVVJRCBjbGFzcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBnZXQgYSB1bmlxdWUgVVVJRCBmb3IgYW4gb2JqZWN0LlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZFxuICovXG5jbGFzcyBVVUlEIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGxldCB1dWlkID0gY3JlYXRlV2l0aENyeXB0bygpO1xuXG5cdFx0aWYgKHV1aWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dXVpZCA9IGNyZWF0ZVdpdGhSYW5kb20oKTtcblx0XHR9XG5cblx0XHRpZiAodXVpZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZFwiKTtcblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHZhbHVlOiB1dWlkLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdW1widmFsdWVcIl07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlV2l0aFJhbmRvbSgpIHtcblx0cmV0dXJuIFwieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4XCIucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xuXHRcdGNvbnN0IHIgPSAocmFuZG9tKDAsIDY1MDAwKSAqIDE2KSB8IDA7XG5cdFx0Y29uc3QgdiA9IGMgPT09IFwieFwiID8gciA6IChyICYgMHgzKSB8IDB4ODtcblx0XHRyZXR1cm4gdi50b1N0cmluZygxNilbMF07XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBjcmVhdGVXaXRoQ3J5cHRvKCkge1xuXHRjb25zdCBjcnlwdCA9IGdldEdsb2JhbE9iamVjdChcImNyeXB0b1wiKTtcblx0aWYgKCFpc09iamVjdChjcnlwdCkpIHJldHVybjtcblx0aWYgKHR5cGVvZiBjcnlwdD8uW1wicmFuZG9tVVVJRFwiXSkgcmV0dXJuO1xuXHRyZXR1cm4gY3J5cHQucmFuZG9tVVVJRCgpO1xufVxuIiwgImlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0Jykge1xuXG4gICAgKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgc2F5c3dobyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LCB0ZW0sXG4gICAgICAgICAgICAgICAgTSA9IHVhLm1hdGNoKC8ob3BlcmF8Y2hyb21lfHNhZmFyaXxmaXJlZm94fG1zaWV8dHJpZGVudCg/PVxcLykpXFwvP1xccyooXFxkKykvaSkgfHwgW107XG4gICAgICAgICAgICBpZiAoL3RyaWRlbnQvaS50ZXN0KE1bMV0pKSB7XG4gICAgICAgICAgICAgICAgdGVtID0gL1xcYnJ2WyA6XSsoXFxkKykvZy5leGVjKHVhKSB8fCBbXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0lFICcgKyAodGVtWzFdIHx8ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNWzFdID09PSAnQ2hyb21lJykge1xuICAgICAgICAgICAgICAgIHRlbSA9IHVhLm1hdGNoKC9cXGIoT1BSfEVkZ2UpXFwvKFxcZCspLyk7XG4gICAgICAgICAgICAgICAgaWYgKHRlbSAhPSBudWxsKSByZXR1cm4gdGVtLnNsaWNlKDEpLmpvaW4oJyAnKS5yZXBsYWNlKCdPUFInLCAnT3BlcmEnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE0gPSBNWzJdID8gW01bMV0sIE1bMl1dIDogW25hdmlnYXRvci5hcHBOYW1lLCBuYXZpZ2F0b3IuYXBwVmVyc2lvbiwgJy0/J107XG4gICAgICAgICAgICBpZiAoKHRlbSA9IHVhLm1hdGNoKC92ZXJzaW9uXFwvKFxcZCspL2kpKSAhPSBudWxsKSBNLnNwbGljZSgxLCAxLCB0ZW1bMV0pO1xuICAgICAgICAgICAgcmV0dXJuIE0uam9pbignICcpO1xuICAgICAgICB9KSgpO1xuXG5cbiAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoMScpXG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MICs9IFwiIFwiICsgc2F5c3dobztcblxuICAgIH0pKCk7XG5cblxufVxuIiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuLy8gbGFuZ3VhZ2U9aHRtbFxubGV0IGh0bWwxID0gYFxuICAgIDxtb25zdGVyLXRhYnMgaWQ9XCJteXRhYnNcIj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsPVwiVEFCMVwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICBEYXMgaXN0IHRhYiAxXG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsPVwiVEFCMlwiPlxuICAgICAgICAgICAgRGFzIGlzdCB0YWIgMlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIERhcyBpc3QgdGFiIDMgb2huZSBidXR0b25cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+PC9kaXY+XG4gICAgPC9tb25zdGVyLXRhYnM+XG5gO1xuXG5sZXQgVGFicztcblxuZGVzY3JpYmUoJ1RhYnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG5cbiAgICAgICAgICAgIGlmICghZ2xvYmFsWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IENyeXB0byA9IG1bJ0NyeXB0byddO1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWxbJ2NyeXB0byddID0gbmV3IENyeXB0bygpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvdGFicy5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFRhYnMgPSBtWydUYWJzJ107XG4gICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCk9PntcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgYnV0dG9ucyBhbmQgdGFicycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXl0YWJzJylcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHRhYnMpLmlzLmluc3RhbmNlb2YoVGFicyk7XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmF2ID0gdGFicy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ25hdicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnV0dG9ucyA9IHRhYnMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b25bcGFydD1idXR0b25dJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoYnV0dG9uc1swXSkuaXMuaW5zdGFuY2VvZihIVE1MQnV0dG9uRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QobmF2Lmhhc0NoaWxkTm9kZXMoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChidXR0b25zLmxlbmd0aCkudG8uYmUuZXF1YWwoNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMClcblxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fY29tbW9uSlMgPSAoY2IsIG1vZCkgPT4gZnVuY3Rpb24gX19yZXF1aXJlKCkge1xuICByZXR1cm4gbW9kIHx8ICgwLCBjYltfX2dldE93blByb3BOYW1lcyhjYilbMF1dKSgobW9kID0geyBleHBvcnRzOiB7fSB9KS5leHBvcnRzLCBtb2QpLCBtb2QuZXhwb3J0cztcbn07XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG5cbi8vIChkaXNhYmxlZCk6dXRpbFxudmFyIHJlcXVpcmVfdXRpbCA9IF9fY29tbW9uSlMoe1xuICBcIihkaXNhYmxlZCk6dXRpbFwiKCkge1xuICB9XG59KTtcblxuLy8gbGliL2NoYWkvdXRpbHMvaW5kZXguanNcbnZhciB1dGlsc19leHBvcnRzID0ge307XG5fX2V4cG9ydCh1dGlsc19leHBvcnRzLCB7XG4gIGFkZENoYWluYWJsZU1ldGhvZDogKCkgPT4gYWRkQ2hhaW5hYmxlTWV0aG9kLFxuICBhZGRMZW5ndGhHdWFyZDogKCkgPT4gYWRkTGVuZ3RoR3VhcmQsXG4gIGFkZE1ldGhvZDogKCkgPT4gYWRkTWV0aG9kLFxuICBhZGRQcm9wZXJ0eTogKCkgPT4gYWRkUHJvcGVydHksXG4gIGNoZWNrRXJyb3I6ICgpID0+IGNoZWNrX2Vycm9yX2V4cG9ydHMsXG4gIGNvbXBhcmVCeUluc3BlY3Q6ICgpID0+IGNvbXBhcmVCeUluc3BlY3QsXG4gIGVxbDogKCkgPT4gZGVlcF9lcWxfZGVmYXVsdCxcbiAgZXhwZWN0VHlwZXM6ICgpID0+IGV4cGVjdFR5cGVzLFxuICBmbGFnOiAoKSA9PiBmbGFnLFxuICBnZXRBY3R1YWw6ICgpID0+IGdldEFjdHVhbCxcbiAgZ2V0TWVzc2FnZTogKCkgPT4gZ2V0TWVzc2FnZTIsXG4gIGdldE5hbWU6ICgpID0+IGdldE5hbWUsXG4gIGdldE9wZXJhdG9yOiAoKSA9PiBnZXRPcGVyYXRvcixcbiAgZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXM6ICgpID0+IGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzLFxuICBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzOiAoKSA9PiBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzLFxuICBnZXRQYXRoSW5mbzogKCkgPT4gZ2V0UGF0aEluZm8sXG4gIGhhc1Byb3BlcnR5OiAoKSA9PiBoYXNQcm9wZXJ0eSxcbiAgaW5zcGVjdDogKCkgPT4gaW5zcGVjdDIsXG4gIGlzTmFOOiAoKSA9PiBpc05hTjIsXG4gIGlzTnVtZXJpYzogKCkgPT4gaXNOdW1lcmljLFxuICBpc1Byb3h5RW5hYmxlZDogKCkgPT4gaXNQcm94eUVuYWJsZWQsXG4gIGlzUmVnRXhwOiAoKSA9PiBpc1JlZ0V4cDIsXG4gIG9iakRpc3BsYXk6ICgpID0+IG9iakRpc3BsYXksXG4gIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZDogKCkgPT4gb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kLFxuICBvdmVyd3JpdGVNZXRob2Q6ICgpID0+IG92ZXJ3cml0ZU1ldGhvZCxcbiAgb3ZlcndyaXRlUHJvcGVydHk6ICgpID0+IG92ZXJ3cml0ZVByb3BlcnR5LFxuICBwcm94aWZ5OiAoKSA9PiBwcm94aWZ5LFxuICB0ZXN0OiAoKSA9PiB0ZXN0LFxuICB0cmFuc2ZlckZsYWdzOiAoKSA9PiB0cmFuc2ZlckZsYWdzLFxuICB0eXBlOiAoKSA9PiB0eXBlXG59KTtcblxuLy8gbm9kZV9tb2R1bGVzL2NoZWNrLWVycm9yL2luZGV4LmpzXG52YXIgY2hlY2tfZXJyb3JfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoY2hlY2tfZXJyb3JfZXhwb3J0cywge1xuICBjb21wYXRpYmxlQ29uc3RydWN0b3I6ICgpID0+IGNvbXBhdGlibGVDb25zdHJ1Y3RvcixcbiAgY29tcGF0aWJsZUluc3RhbmNlOiAoKSA9PiBjb21wYXRpYmxlSW5zdGFuY2UsXG4gIGNvbXBhdGlibGVNZXNzYWdlOiAoKSA9PiBjb21wYXRpYmxlTWVzc2FnZSxcbiAgZ2V0Q29uc3RydWN0b3JOYW1lOiAoKSA9PiBnZXRDb25zdHJ1Y3Rvck5hbWUsXG4gIGdldE1lc3NhZ2U6ICgpID0+IGdldE1lc3NhZ2Vcbn0pO1xuZnVuY3Rpb24gaXNFcnJvckluc3RhbmNlKG9iaikge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRXJyb3IgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBFcnJvcl1cIjtcbn1cbl9fbmFtZShpc0Vycm9ySW5zdGFuY2UsIFwiaXNFcnJvckluc3RhbmNlXCIpO1xuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gXCJbb2JqZWN0IFJlZ0V4cF1cIjtcbn1cbl9fbmFtZShpc1JlZ0V4cCwgXCJpc1JlZ0V4cFwiKTtcbmZ1bmN0aW9uIGNvbXBhdGlibGVJbnN0YW5jZSh0aHJvd24sIGVycm9yTGlrZSkge1xuICByZXR1cm4gaXNFcnJvckluc3RhbmNlKGVycm9yTGlrZSkgJiYgdGhyb3duID09PSBlcnJvckxpa2U7XG59XG5fX25hbWUoY29tcGF0aWJsZUluc3RhbmNlLCBcImNvbXBhdGlibGVJbnN0YW5jZVwiKTtcbmZ1bmN0aW9uIGNvbXBhdGlibGVDb25zdHJ1Y3Rvcih0aHJvd24sIGVycm9yTGlrZSkge1xuICBpZiAoaXNFcnJvckluc3RhbmNlKGVycm9yTGlrZSkpIHtcbiAgICByZXR1cm4gdGhyb3duLmNvbnN0cnVjdG9yID09PSBlcnJvckxpa2UuY29uc3RydWN0b3IgfHwgdGhyb3duIGluc3RhbmNlb2YgZXJyb3JMaWtlLmNvbnN0cnVjdG9yO1xuICB9IGVsc2UgaWYgKCh0eXBlb2YgZXJyb3JMaWtlID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBlcnJvckxpa2UgPT09IFwiZnVuY3Rpb25cIikgJiYgZXJyb3JMaWtlLnByb3RvdHlwZSkge1xuICAgIHJldHVybiB0aHJvd24uY29uc3RydWN0b3IgPT09IGVycm9yTGlrZSB8fCB0aHJvd24gaW5zdGFuY2VvZiBlcnJvckxpa2U7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuX19uYW1lKGNvbXBhdGlibGVDb25zdHJ1Y3RvciwgXCJjb21wYXRpYmxlQ29uc3RydWN0b3JcIik7XG5mdW5jdGlvbiBjb21wYXRpYmxlTWVzc2FnZSh0aHJvd24sIGVyck1hdGNoZXIpIHtcbiAgY29uc3QgY29tcGFyaXNvblN0cmluZyA9IHR5cGVvZiB0aHJvd24gPT09IFwic3RyaW5nXCIgPyB0aHJvd24gOiB0aHJvd24ubWVzc2FnZTtcbiAgaWYgKGlzUmVnRXhwKGVyck1hdGNoZXIpKSB7XG4gICAgcmV0dXJuIGVyck1hdGNoZXIudGVzdChjb21wYXJpc29uU3RyaW5nKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXJyTWF0Y2hlciA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBjb21wYXJpc29uU3RyaW5nLmluZGV4T2YoZXJyTWF0Y2hlcikgIT09IC0xO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbl9fbmFtZShjb21wYXRpYmxlTWVzc2FnZSwgXCJjb21wYXRpYmxlTWVzc2FnZVwiKTtcbmZ1bmN0aW9uIGdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpIHtcbiAgbGV0IGNvbnN0cnVjdG9yTmFtZSA9IGVycm9yTGlrZTtcbiAgaWYgKGlzRXJyb3JJbnN0YW5jZShlcnJvckxpa2UpKSB7XG4gICAgY29uc3RydWN0b3JOYW1lID0gZXJyb3JMaWtlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yTGlrZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY29uc3RydWN0b3JOYW1lID0gZXJyb3JMaWtlLm5hbWU7XG4gICAgaWYgKGNvbnN0cnVjdG9yTmFtZSA9PT0gXCJcIikge1xuICAgICAgY29uc3QgbmV3Q29uc3RydWN0b3JOYW1lID0gbmV3IGVycm9yTGlrZSgpLm5hbWU7XG4gICAgICBjb25zdHJ1Y3Rvck5hbWUgPSBuZXdDb25zdHJ1Y3Rvck5hbWUgfHwgY29uc3RydWN0b3JOYW1lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29uc3RydWN0b3JOYW1lO1xufVxuX19uYW1lKGdldENvbnN0cnVjdG9yTmFtZSwgXCJnZXRDb25zdHJ1Y3Rvck5hbWVcIik7XG5mdW5jdGlvbiBnZXRNZXNzYWdlKGVycm9yTGlrZSkge1xuICBsZXQgbXNnID0gXCJcIjtcbiAgaWYgKGVycm9yTGlrZSAmJiBlcnJvckxpa2UubWVzc2FnZSkge1xuICAgIG1zZyA9IGVycm9yTGlrZS5tZXNzYWdlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvckxpa2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICBtc2cgPSBlcnJvckxpa2U7XG4gIH1cbiAgcmV0dXJuIG1zZztcbn1cbl9fbmFtZShnZXRNZXNzYWdlLCBcImdldE1lc3NhZ2VcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2ZsYWcuanNcbmZ1bmN0aW9uIGZsYWcob2JqLCBrZXksIHZhbHVlKSB7XG4gIHZhciBmbGFncyA9IG9iai5fX2ZsYWdzIHx8IChvYmouX19mbGFncyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBmbGFnc1trZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZsYWdzW2tleV07XG4gIH1cbn1cbl9fbmFtZShmbGFnLCBcImZsYWdcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL3Rlc3QuanNcbmZ1bmN0aW9uIHRlc3Qob2JqLCBhcmdzKSB7XG4gIHZhciBuZWdhdGUgPSBmbGFnKG9iaiwgXCJuZWdhdGVcIiksIGV4cHIgPSBhcmdzWzBdO1xuICByZXR1cm4gbmVnYXRlID8gIWV4cHIgOiBleHByO1xufVxuX19uYW1lKHRlc3QsIFwidGVzdFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvdHlwZS1kZXRlY3QuanNcbmZ1bmN0aW9uIHR5cGUob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gIH1cbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBcIm51bGxcIjtcbiAgfVxuICBjb25zdCBzdHJpbmdUYWcgPSBvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXTtcbiAgaWYgKHR5cGVvZiBzdHJpbmdUYWcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gc3RyaW5nVGFnO1xuICB9XG4gIGNvbnN0IHR5cGUzID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikuc2xpY2UoOCwgLTEpO1xuICByZXR1cm4gdHlwZTM7XG59XG5fX25hbWUodHlwZSwgXCJ0eXBlXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvYXNzZXJ0aW9uLWVycm9yL2luZGV4LmpzXG52YXIgY2FuRWxpZGVGcmFtZXMgPSBcImNhcHR1cmVTdGFja1RyYWNlXCIgaW4gRXJyb3I7XG52YXIgQXNzZXJ0aW9uRXJyb3IgPSBjbGFzcyBfQXNzZXJ0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiQXNzZXJ0aW9uRXJyb3JcIik7XG4gIH1cbiAgbWVzc2FnZTtcbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIFwiQXNzZXJ0aW9uRXJyb3JcIjtcbiAgfVxuICBnZXQgb2soKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSBcIlVuc3BlY2lmaWVkIEFzc2VydGlvbkVycm9yXCIsIHByb3BzLCBzc2YpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIGlmIChjYW5FbGlkZUZyYW1lcykge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgc3NmIHx8IF9Bc3NlcnRpb25FcnJvcik7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gdGhpcykpIHtcbiAgICAgICAgdGhpc1trZXldID0gcHJvcHNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdG9KU09OKHN0YWNrKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBvazogZmFsc2UsXG4gICAgICBzdGFjazogc3RhY2sgIT09IGZhbHNlID8gdGhpcy5zdGFjayA6IHZvaWQgMFxuICAgIH07XG4gIH1cbn07XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2V4cGVjdFR5cGVzLmpzXG5mdW5jdGlvbiBleHBlY3RUeXBlcyhvYmosIHR5cGVzKSB7XG4gIHZhciBmbGFnTXNnID0gZmxhZyhvYmosIFwibWVzc2FnZVwiKTtcbiAgdmFyIHNzZmkgPSBmbGFnKG9iaiwgXCJzc2ZpXCIpO1xuICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiO1xuICBvYmogPSBmbGFnKG9iaiwgXCJvYmplY3RcIik7XG4gIHR5cGVzID0gdHlwZXMubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gdC50b0xvd2VyQ2FzZSgpO1xuICB9KTtcbiAgdHlwZXMuc29ydCgpO1xuICB2YXIgc3RyID0gdHlwZXMubWFwKGZ1bmN0aW9uKHQsIGluZGV4KSB7XG4gICAgdmFyIGFydCA9IH5bXCJhXCIsIFwiZVwiLCBcImlcIiwgXCJvXCIsIFwidVwiXS5pbmRleE9mKHQuY2hhckF0KDApKSA/IFwiYW5cIiA6IFwiYVwiO1xuICAgIHZhciBvciA9IHR5cGVzLmxlbmd0aCA+IDEgJiYgaW5kZXggPT09IHR5cGVzLmxlbmd0aCAtIDEgPyBcIm9yIFwiIDogXCJcIjtcbiAgICByZXR1cm4gb3IgKyBhcnQgKyBcIiBcIiArIHQ7XG4gIH0pLmpvaW4oXCIsIFwiKTtcbiAgdmFyIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCF0eXBlcy5zb21lKGZ1bmN0aW9uKGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIG9ialR5cGUgPT09IGV4cGVjdGVkO1xuICB9KSkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIGZsYWdNc2cgKyBcIm9iamVjdCB0ZXN0ZWQgbXVzdCBiZSBcIiArIHN0ciArIFwiLCBidXQgXCIgKyBvYmpUeXBlICsgXCIgZ2l2ZW5cIixcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9XG59XG5fX25hbWUoZXhwZWN0VHlwZXMsIFwiZXhwZWN0VHlwZXNcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2dldEFjdHVhbC5qc1xuZnVuY3Rpb24gZ2V0QWN0dWFsKG9iaiwgYXJncykge1xuICByZXR1cm4gYXJncy5sZW5ndGggPiA0ID8gYXJnc1s0XSA6IG9iai5fb2JqO1xufVxuX19uYW1lKGdldEFjdHVhbCwgXCJnZXRBY3R1YWxcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvaGVscGVycy5qc1xudmFyIGFuc2lDb2xvcnMgPSB7XG4gIGJvbGQ6IFtcIjFcIiwgXCIyMlwiXSxcbiAgZGltOiBbXCIyXCIsIFwiMjJcIl0sXG4gIGl0YWxpYzogW1wiM1wiLCBcIjIzXCJdLFxuICB1bmRlcmxpbmU6IFtcIjRcIiwgXCIyNFwiXSxcbiAgLy8gNSAmIDYgYXJlIGJsaW5raW5nXG4gIGludmVyc2U6IFtcIjdcIiwgXCIyN1wiXSxcbiAgaGlkZGVuOiBbXCI4XCIsIFwiMjhcIl0sXG4gIHN0cmlrZTogW1wiOVwiLCBcIjI5XCJdLFxuICAvLyAxMC0yMCBhcmUgZm9udHNcbiAgLy8gMjEtMjkgYXJlIHJlc2V0cyBmb3IgMS05XG4gIGJsYWNrOiBbXCIzMFwiLCBcIjM5XCJdLFxuICByZWQ6IFtcIjMxXCIsIFwiMzlcIl0sXG4gIGdyZWVuOiBbXCIzMlwiLCBcIjM5XCJdLFxuICB5ZWxsb3c6IFtcIjMzXCIsIFwiMzlcIl0sXG4gIGJsdWU6IFtcIjM0XCIsIFwiMzlcIl0sXG4gIG1hZ2VudGE6IFtcIjM1XCIsIFwiMzlcIl0sXG4gIGN5YW46IFtcIjM2XCIsIFwiMzlcIl0sXG4gIHdoaXRlOiBbXCIzN1wiLCBcIjM5XCJdLFxuICBicmlnaHRibGFjazogW1wiMzA7MVwiLCBcIjM5XCJdLFxuICBicmlnaHRyZWQ6IFtcIjMxOzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0Z3JlZW46IFtcIjMyOzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0eWVsbG93OiBbXCIzMzsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodGJsdWU6IFtcIjM0OzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0bWFnZW50YTogW1wiMzU7MVwiLCBcIjM5XCJdLFxuICBicmlnaHRjeWFuOiBbXCIzNjsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodHdoaXRlOiBbXCIzNzsxXCIsIFwiMzlcIl0sXG4gIGdyZXk6IFtcIjkwXCIsIFwiMzlcIl1cbn07XG52YXIgc3R5bGVzID0ge1xuICBzcGVjaWFsOiBcImN5YW5cIixcbiAgbnVtYmVyOiBcInllbGxvd1wiLFxuICBiaWdpbnQ6IFwieWVsbG93XCIsXG4gIGJvb2xlYW46IFwieWVsbG93XCIsXG4gIHVuZGVmaW5lZDogXCJncmV5XCIsXG4gIG51bGw6IFwiYm9sZFwiLFxuICBzdHJpbmc6IFwiZ3JlZW5cIixcbiAgc3ltYm9sOiBcImdyZWVuXCIsXG4gIGRhdGU6IFwibWFnZW50YVwiLFxuICByZWdleHA6IFwicmVkXCJcbn07XG52YXIgdHJ1bmNhdG9yID0gXCJcXHUyMDI2XCI7XG5mdW5jdGlvbiBjb2xvcmlzZSh2YWx1ZSwgc3R5bGVUeXBlKSB7XG4gIGNvbnN0IGNvbG9yID0gYW5zaUNvbG9yc1tzdHlsZXNbc3R5bGVUeXBlXV0gfHwgYW5zaUNvbG9yc1tzdHlsZVR5cGVdIHx8IFwiXCI7XG4gIGlmICghY29sb3IpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gYFxceDFCWyR7Y29sb3JbMF19bSR7U3RyaW5nKHZhbHVlKX1cXHgxQlske2NvbG9yWzFdfW1gO1xufVxuX19uYW1lKGNvbG9yaXNlLCBcImNvbG9yaXNlXCIpO1xuZnVuY3Rpb24gbm9ybWFsaXNlT3B0aW9ucyh7XG4gIHNob3dIaWRkZW4gPSBmYWxzZSxcbiAgZGVwdGggPSAyLFxuICBjb2xvcnMgPSBmYWxzZSxcbiAgY3VzdG9tSW5zcGVjdCA9IHRydWUsXG4gIHNob3dQcm94eSA9IGZhbHNlLFxuICBtYXhBcnJheUxlbmd0aCA9IEluZmluaXR5LFxuICBicmVha0xlbmd0aCA9IEluZmluaXR5LFxuICBzZWVuID0gW10sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3dcbiAgdHJ1bmNhdGU6IHRydW5jYXRlMiA9IEluZmluaXR5LFxuICBzdHlsaXplID0gU3RyaW5nXG59ID0ge30sIGluc3BlY3QzKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgc2hvd0hpZGRlbjogQm9vbGVhbihzaG93SGlkZGVuKSxcbiAgICBkZXB0aDogTnVtYmVyKGRlcHRoKSxcbiAgICBjb2xvcnM6IEJvb2xlYW4oY29sb3JzKSxcbiAgICBjdXN0b21JbnNwZWN0OiBCb29sZWFuKGN1c3RvbUluc3BlY3QpLFxuICAgIHNob3dQcm94eTogQm9vbGVhbihzaG93UHJveHkpLFxuICAgIG1heEFycmF5TGVuZ3RoOiBOdW1iZXIobWF4QXJyYXlMZW5ndGgpLFxuICAgIGJyZWFrTGVuZ3RoOiBOdW1iZXIoYnJlYWtMZW5ndGgpLFxuICAgIHRydW5jYXRlOiBOdW1iZXIodHJ1bmNhdGUyKSxcbiAgICBzZWVuLFxuICAgIGluc3BlY3Q6IGluc3BlY3QzLFxuICAgIHN0eWxpemVcbiAgfTtcbiAgaWYgKG9wdGlvbnMuY29sb3JzKSB7XG4gICAgb3B0aW9ucy5zdHlsaXplID0gY29sb3Jpc2U7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5fX25hbWUobm9ybWFsaXNlT3B0aW9ucywgXCJub3JtYWxpc2VPcHRpb25zXCIpO1xuZnVuY3Rpb24gaXNIaWdoU3Vycm9nYXRlKGNoYXIpIHtcbiAgcmV0dXJuIGNoYXIgPj0gXCJcXHVEODAwXCIgJiYgY2hhciA8PSBcIlxcdURCRkZcIjtcbn1cbl9fbmFtZShpc0hpZ2hTdXJyb2dhdGUsIFwiaXNIaWdoU3Vycm9nYXRlXCIpO1xuZnVuY3Rpb24gdHJ1bmNhdGUoc3RyaW5nLCBsZW5ndGgsIHRhaWwgPSB0cnVuY2F0b3IpIHtcbiAgc3RyaW5nID0gU3RyaW5nKHN0cmluZyk7XG4gIGNvbnN0IHRhaWxMZW5ndGggPSB0YWlsLmxlbmd0aDtcbiAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgaWYgKHRhaWxMZW5ndGggPiBsZW5ndGggJiYgc3RyaW5nTGVuZ3RoID4gdGFpbExlbmd0aCkge1xuICAgIHJldHVybiB0YWlsO1xuICB9XG4gIGlmIChzdHJpbmdMZW5ndGggPiBsZW5ndGggJiYgc3RyaW5nTGVuZ3RoID4gdGFpbExlbmd0aCkge1xuICAgIGxldCBlbmQgPSBsZW5ndGggLSB0YWlsTGVuZ3RoO1xuICAgIGlmIChlbmQgPiAwICYmIGlzSGlnaFN1cnJvZ2F0ZShzdHJpbmdbZW5kIC0gMV0pKSB7XG4gICAgICBlbmQgPSBlbmQgLSAxO1xuICAgIH1cbiAgICByZXR1cm4gYCR7c3RyaW5nLnNsaWNlKDAsIGVuZCl9JHt0YWlsfWA7XG4gIH1cbiAgcmV0dXJuIHN0cmluZztcbn1cbl9fbmFtZSh0cnVuY2F0ZSwgXCJ0cnVuY2F0ZVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RMaXN0KGxpc3QsIG9wdGlvbnMsIGluc3BlY3RJdGVtLCBzZXBhcmF0b3IgPSBcIiwgXCIpIHtcbiAgaW5zcGVjdEl0ZW0gPSBpbnNwZWN0SXRlbSB8fCBvcHRpb25zLmluc3BlY3Q7XG4gIGNvbnN0IHNpemUgPSBsaXN0Lmxlbmd0aDtcbiAgaWYgKHNpemUgPT09IDApXG4gICAgcmV0dXJuIFwiXCI7XG4gIGNvbnN0IG9yaWdpbmFsTGVuZ3RoID0gb3B0aW9ucy50cnVuY2F0ZTtcbiAgbGV0IG91dHB1dCA9IFwiXCI7XG4gIGxldCBwZWVrID0gXCJcIjtcbiAgbGV0IHRydW5jYXRlZCA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSAxKSB7XG4gICAgY29uc3QgbGFzdCA9IGkgKyAxID09PSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBzZWNvbmRUb0xhc3QgPSBpICsgMiA9PT0gbGlzdC5sZW5ndGg7XG4gICAgdHJ1bmNhdGVkID0gYCR7dHJ1bmNhdG9yfSgke2xpc3QubGVuZ3RoIC0gaX0pYDtcbiAgICBjb25zdCB2YWx1ZSA9IGxpc3RbaV07XG4gICAgb3B0aW9ucy50cnVuY2F0ZSA9IG9yaWdpbmFsTGVuZ3RoIC0gb3V0cHV0Lmxlbmd0aCAtIChsYXN0ID8gMCA6IHNlcGFyYXRvci5sZW5ndGgpO1xuICAgIGNvbnN0IHN0cmluZyA9IHBlZWsgfHwgaW5zcGVjdEl0ZW0odmFsdWUsIG9wdGlvbnMpICsgKGxhc3QgPyBcIlwiIDogc2VwYXJhdG9yKTtcbiAgICBjb25zdCBuZXh0TGVuZ3RoID0gb3V0cHV0Lmxlbmd0aCArIHN0cmluZy5sZW5ndGg7XG4gICAgY29uc3QgdHJ1bmNhdGVkTGVuZ3RoID0gbmV4dExlbmd0aCArIHRydW5jYXRlZC5sZW5ndGg7XG4gICAgaWYgKGxhc3QgJiYgbmV4dExlbmd0aCA+IG9yaWdpbmFsTGVuZ3RoICYmIG91dHB1dC5sZW5ndGggKyB0cnVuY2F0ZWQubGVuZ3RoIDw9IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKCFsYXN0ICYmICFzZWNvbmRUb0xhc3QgJiYgdHJ1bmNhdGVkTGVuZ3RoID4gb3JpZ2luYWxMZW5ndGgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBwZWVrID0gbGFzdCA/IFwiXCIgOiBpbnNwZWN0SXRlbShsaXN0W2kgKyAxXSwgb3B0aW9ucykgKyAoc2Vjb25kVG9MYXN0ID8gXCJcIiA6IHNlcGFyYXRvcik7XG4gICAgaWYgKCFsYXN0ICYmIHNlY29uZFRvTGFzdCAmJiB0cnVuY2F0ZWRMZW5ndGggPiBvcmlnaW5hbExlbmd0aCAmJiBuZXh0TGVuZ3RoICsgcGVlay5sZW5ndGggPiBvcmlnaW5hbExlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIG91dHB1dCArPSBzdHJpbmc7XG4gICAgaWYgKCFsYXN0ICYmICFzZWNvbmRUb0xhc3QgJiYgbmV4dExlbmd0aCArIHBlZWsubGVuZ3RoID49IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICB0cnVuY2F0ZWQgPSBgJHt0cnVuY2F0b3J9KCR7bGlzdC5sZW5ndGggLSBpIC0gMX0pYDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0cnVuY2F0ZWQgPSBcIlwiO1xuICB9XG4gIHJldHVybiBgJHtvdXRwdXR9JHt0cnVuY2F0ZWR9YDtcbn1cbl9fbmFtZShpbnNwZWN0TGlzdCwgXCJpbnNwZWN0TGlzdFwiKTtcbmZ1bmN0aW9uIHF1b3RlQ29tcGxleEtleShrZXkpIHtcbiAgaWYgKGtleS5tYXRjaCgvXlthLXpBLVpfXVthLXpBLVpfMC05XSokLykpIHtcbiAgICByZXR1cm4ga2V5O1xuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShrZXkpLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKS5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykucmVwbGFjZSgvKF5cInxcIiQpL2csIFwiJ1wiKTtcbn1cbl9fbmFtZShxdW90ZUNvbXBsZXhLZXksIFwicXVvdGVDb21wbGV4S2V5XCIpO1xuZnVuY3Rpb24gaW5zcGVjdFByb3BlcnR5KFtrZXksIHZhbHVlXSwgb3B0aW9ucykge1xuICBvcHRpb25zLnRydW5jYXRlIC09IDI7XG4gIGlmICh0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiKSB7XG4gICAga2V5ID0gcXVvdGVDb21wbGV4S2V5KGtleSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleSAhPT0gXCJudW1iZXJcIikge1xuICAgIGtleSA9IGBbJHtvcHRpb25zLmluc3BlY3Qoa2V5LCBvcHRpb25zKX1dYDtcbiAgfVxuICBvcHRpb25zLnRydW5jYXRlIC09IGtleS5sZW5ndGg7XG4gIHZhbHVlID0gb3B0aW9ucy5pbnNwZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgcmV0dXJuIGAke2tleX06ICR7dmFsdWV9YDtcbn1cbl9fbmFtZShpbnNwZWN0UHJvcGVydHksIFwiaW5zcGVjdFByb3BlcnR5XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2FycmF5LmpzXG5mdW5jdGlvbiBpbnNwZWN0QXJyYXkoYXJyYXksIG9wdGlvbnMpIHtcbiAgY29uc3Qgbm9uSW5kZXhQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoYXJyYXkpLnNsaWNlKGFycmF5Lmxlbmd0aCk7XG4gIGlmICghYXJyYXkubGVuZ3RoICYmICFub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKVxuICAgIHJldHVybiBcIltdXCI7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gNDtcbiAgY29uc3QgbGlzdENvbnRlbnRzID0gaW5zcGVjdExpc3QoYXJyYXksIG9wdGlvbnMpO1xuICBvcHRpb25zLnRydW5jYXRlIC09IGxpc3RDb250ZW50cy5sZW5ndGg7XG4gIGxldCBwcm9wZXJ0eUNvbnRlbnRzID0gXCJcIjtcbiAgaWYgKG5vbkluZGV4UHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3Qobm9uSW5kZXhQcm9wZXJ0aWVzLm1hcCgoa2V5KSA9PiBba2V5LCBhcnJheVtrZXldXSksIG9wdGlvbnMsIGluc3BlY3RQcm9wZXJ0eSk7XG4gIH1cbiAgcmV0dXJuIGBbICR7bGlzdENvbnRlbnRzfSR7cHJvcGVydHlDb250ZW50cyA/IGAsICR7cHJvcGVydHlDb250ZW50c31gIDogXCJcIn0gXWA7XG59XG5fX25hbWUoaW5zcGVjdEFycmF5LCBcImluc3BlY3RBcnJheVwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi90eXBlZGFycmF5LmpzXG52YXIgZ2V0QXJyYXlOYW1lID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoYXJyYXkpID0+IHtcbiAgaWYgKHR5cGVvZiBCdWZmZXIgPT09IFwiZnVuY3Rpb25cIiAmJiBhcnJheSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgIHJldHVybiBcIkJ1ZmZlclwiO1xuICB9XG4gIGlmIChhcnJheVtTeW1ib2wudG9TdHJpbmdUYWddKSB7XG4gICAgcmV0dXJuIGFycmF5W1N5bWJvbC50b1N0cmluZ1RhZ107XG4gIH1cbiAgcmV0dXJuIGFycmF5LmNvbnN0cnVjdG9yLm5hbWU7XG59LCBcImdldEFycmF5TmFtZVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RUeXBlZEFycmF5KGFycmF5LCBvcHRpb25zKSB7XG4gIGNvbnN0IG5hbWUgPSBnZXRBcnJheU5hbWUoYXJyYXkpO1xuICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoICsgNDtcbiAgY29uc3Qgbm9uSW5kZXhQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoYXJyYXkpLnNsaWNlKGFycmF5Lmxlbmd0aCk7XG4gIGlmICghYXJyYXkubGVuZ3RoICYmICFub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKVxuICAgIHJldHVybiBgJHtuYW1lfVtdYDtcbiAgbGV0IG91dHB1dCA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzdHJpbmcgPSBgJHtvcHRpb25zLnN0eWxpemUodHJ1bmNhdGUoYXJyYXlbaV0sIG9wdGlvbnMudHJ1bmNhdGUpLCBcIm51bWJlclwiKX0ke2kgPT09IGFycmF5Lmxlbmd0aCAtIDEgPyBcIlwiIDogXCIsIFwifWA7XG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSBzdHJpbmcubGVuZ3RoO1xuICAgIGlmIChhcnJheVtpXSAhPT0gYXJyYXkubGVuZ3RoICYmIG9wdGlvbnMudHJ1bmNhdGUgPD0gMykge1xuICAgICAgb3V0cHV0ICs9IGAke3RydW5jYXRvcn0oJHthcnJheS5sZW5ndGggLSBhcnJheVtpXSArIDF9KWA7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgb3V0cHV0ICs9IHN0cmluZztcbiAgfVxuICBsZXQgcHJvcGVydHlDb250ZW50cyA9IFwiXCI7XG4gIGlmIChub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgcHJvcGVydHlDb250ZW50cyA9IGluc3BlY3RMaXN0KG5vbkluZGV4UHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgYXJyYXlba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICB9XG4gIHJldHVybiBgJHtuYW1lfVsgJHtvdXRwdXR9JHtwcm9wZXJ0eUNvbnRlbnRzID8gYCwgJHtwcm9wZXJ0eUNvbnRlbnRzfWAgOiBcIlwifSBdYDtcbn1cbl9fbmFtZShpbnNwZWN0VHlwZWRBcnJheSwgXCJpbnNwZWN0VHlwZWRBcnJheVwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9kYXRlLmpzXG5mdW5jdGlvbiBpbnNwZWN0RGF0ZShkYXRlT2JqZWN0LCBvcHRpb25zKSB7XG4gIGNvbnN0IHN0cmluZ1JlcHJlc2VudGF0aW9uID0gZGF0ZU9iamVjdC50b0pTT04oKTtcbiAgaWYgKHN0cmluZ1JlcHJlc2VudGF0aW9uID09PSBudWxsKSB7XG4gICAgcmV0dXJuIFwiSW52YWxpZCBEYXRlXCI7XG4gIH1cbiAgY29uc3Qgc3BsaXQgPSBzdHJpbmdSZXByZXNlbnRhdGlvbi5zcGxpdChcIlRcIik7XG4gIGNvbnN0IGRhdGUgPSBzcGxpdFswXTtcbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShgJHtkYXRlfVQke3RydW5jYXRlKHNwbGl0WzFdLCBvcHRpb25zLnRydW5jYXRlIC0gZGF0ZS5sZW5ndGggLSAxKX1gLCBcImRhdGVcIik7XG59XG5fX25hbWUoaW5zcGVjdERhdGUsIFwiaW5zcGVjdERhdGVcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvZnVuY3Rpb24uanNcbmZ1bmN0aW9uIGluc3BlY3RGdW5jdGlvbihmdW5jLCBvcHRpb25zKSB7XG4gIGNvbnN0IGZ1bmN0aW9uVHlwZSA9IGZ1bmNbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCBcIkZ1bmN0aW9uXCI7XG4gIGNvbnN0IG5hbWUgPSBmdW5jLm5hbWU7XG4gIGlmICghbmFtZSkge1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoYFske2Z1bmN0aW9uVHlwZX1dYCwgXCJzcGVjaWFsXCIpO1xuICB9XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUoYFske2Z1bmN0aW9uVHlwZX0gJHt0cnVuY2F0ZShuYW1lLCBvcHRpb25zLnRydW5jYXRlIC0gMTEpfV1gLCBcInNwZWNpYWxcIik7XG59XG5fX25hbWUoaW5zcGVjdEZ1bmN0aW9uLCBcImluc3BlY3RGdW5jdGlvblwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9tYXAuanNcbmZ1bmN0aW9uIGluc3BlY3RNYXBFbnRyeShba2V5LCB2YWx1ZV0sIG9wdGlvbnMpIHtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSA0O1xuICBrZXkgPSBvcHRpb25zLmluc3BlY3Qoa2V5LCBvcHRpb25zKTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBrZXkubGVuZ3RoO1xuICB2YWx1ZSA9IG9wdGlvbnMuaW5zcGVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIHJldHVybiBgJHtrZXl9ID0+ICR7dmFsdWV9YDtcbn1cbl9fbmFtZShpbnNwZWN0TWFwRW50cnksIFwiaW5zcGVjdE1hcEVudHJ5XCIpO1xuZnVuY3Rpb24gbWFwVG9FbnRyaWVzKG1hcCkge1xuICBjb25zdCBlbnRyaWVzID0gW107XG4gIG1hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgZW50cmllcy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0pO1xuICByZXR1cm4gZW50cmllcztcbn1cbl9fbmFtZShtYXBUb0VudHJpZXMsIFwibWFwVG9FbnRyaWVzXCIpO1xuZnVuY3Rpb24gaW5zcGVjdE1hcChtYXAsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc2l6ZSA9IG1hcC5zaXplIC0gMTtcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBcIk1hcHt9XCI7XG4gIH1cbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSA3O1xuICByZXR1cm4gYE1hcHsgJHtpbnNwZWN0TGlzdChtYXBUb0VudHJpZXMobWFwKSwgb3B0aW9ucywgaW5zcGVjdE1hcEVudHJ5KX0gfWA7XG59XG5fX25hbWUoaW5zcGVjdE1hcCwgXCJpbnNwZWN0TWFwXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL251bWJlci5qc1xudmFyIGlzTmFOID0gTnVtYmVyLmlzTmFOIHx8ICgoaSkgPT4gaSAhPT0gaSk7XG5mdW5jdGlvbiBpbnNwZWN0TnVtYmVyKG51bWJlciwgb3B0aW9ucykge1xuICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoXCJOYU5cIiwgXCJudW1iZXJcIik7XG4gIH1cbiAgaWYgKG51bWJlciA9PT0gSW5maW5pdHkpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKFwiSW5maW5pdHlcIiwgXCJudW1iZXJcIik7XG4gIH1cbiAgaWYgKG51bWJlciA9PT0gLUluZmluaXR5KSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShcIi1JbmZpbml0eVwiLCBcIm51bWJlclwiKTtcbiAgfVxuICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZSgxIC8gbnVtYmVyID09PSBJbmZpbml0eSA/IFwiKzBcIiA6IFwiLTBcIiwgXCJudW1iZXJcIik7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZSh0cnVuY2F0ZShTdHJpbmcobnVtYmVyKSwgb3B0aW9ucy50cnVuY2F0ZSksIFwibnVtYmVyXCIpO1xufVxuX19uYW1lKGluc3BlY3ROdW1iZXIsIFwiaW5zcGVjdE51bWJlclwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9iaWdpbnQuanNcbmZ1bmN0aW9uIGluc3BlY3RCaWdJbnQobnVtYmVyLCBvcHRpb25zKSB7XG4gIGxldCBudW1zID0gdHJ1bmNhdGUobnVtYmVyLnRvU3RyaW5nKCksIG9wdGlvbnMudHJ1bmNhdGUgLSAxKTtcbiAgaWYgKG51bXMgIT09IHRydW5jYXRvcilcbiAgICBudW1zICs9IFwiblwiO1xuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKG51bXMsIFwiYmlnaW50XCIpO1xufVxuX19uYW1lKGluc3BlY3RCaWdJbnQsIFwiaW5zcGVjdEJpZ0ludFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9yZWdleHAuanNcbmZ1bmN0aW9uIGluc3BlY3RSZWdFeHAodmFsdWUsIG9wdGlvbnMpIHtcbiAgY29uc3QgZmxhZ3MgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KFwiL1wiKVsyXTtcbiAgY29uc3Qgc291cmNlTGVuZ3RoID0gb3B0aW9ucy50cnVuY2F0ZSAtICgyICsgZmxhZ3MubGVuZ3RoKTtcbiAgY29uc3Qgc291cmNlID0gdmFsdWUuc291cmNlO1xuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKGAvJHt0cnVuY2F0ZShzb3VyY2UsIHNvdXJjZUxlbmd0aCl9LyR7ZmxhZ3N9YCwgXCJyZWdleHBcIik7XG59XG5fX25hbWUoaW5zcGVjdFJlZ0V4cCwgXCJpbnNwZWN0UmVnRXhwXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL3NldC5qc1xuZnVuY3Rpb24gYXJyYXlGcm9tU2V0KHNldDIpIHtcbiAgY29uc3QgdmFsdWVzID0gW107XG4gIHNldDIuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gdmFsdWVzO1xufVxuX19uYW1lKGFycmF5RnJvbVNldCwgXCJhcnJheUZyb21TZXRcIik7XG5mdW5jdGlvbiBpbnNwZWN0U2V0KHNldDIsIG9wdGlvbnMpIHtcbiAgaWYgKHNldDIuc2l6ZSA9PT0gMClcbiAgICByZXR1cm4gXCJTZXR7fVwiO1xuICBvcHRpb25zLnRydW5jYXRlIC09IDc7XG4gIHJldHVybiBgU2V0eyAke2luc3BlY3RMaXN0KGFycmF5RnJvbVNldChzZXQyKSwgb3B0aW9ucyl9IH1gO1xufVxuX19uYW1lKGluc3BlY3RTZXQsIFwiaW5zcGVjdFNldFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9zdHJpbmcuanNcbnZhciBzdHJpbmdFc2NhcGVDaGFycyA9IG5ldyBSZWdFeHAoXCJbJ1xcXFx1MDAwMC1cXFxcdTAwMWZcXFxcdTAwN2YtXFxcXHUwMDlmXFxcXHUwMGFkXFxcXHUwNjAwLVxcXFx1MDYwNFxcXFx1MDcwZlxcXFx1MTdiNFxcXFx1MTdiNVxcXFx1MjAwYy1cXFxcdTIwMGZcXFxcdTIwMjgtXFxcXHUyMDJmXFxcXHUyMDYwLVxcXFx1MjA2ZlxcXFx1ZmVmZlxcXFx1ZmZmMC1cXFxcdWZmZmZdXCIsIFwiZ1wiKTtcbnZhciBlc2NhcGVDaGFyYWN0ZXJzID0ge1xuICBcIlxcYlwiOiBcIlxcXFxiXCIsXG4gIFwiXHRcIjogXCJcXFxcdFwiLFxuICBcIlxcblwiOiBcIlxcXFxuXCIsXG4gIFwiXFxmXCI6IFwiXFxcXGZcIixcbiAgXCJcXHJcIjogXCJcXFxcclwiLFxuICBcIidcIjogXCJcXFxcJ1wiLFxuICBcIlxcXFxcIjogXCJcXFxcXFxcXFwiXG59O1xudmFyIGhleCA9IDE2O1xudmFyIHVuaWNvZGVMZW5ndGggPSA0O1xuZnVuY3Rpb24gZXNjYXBlKGNoYXIpIHtcbiAgcmV0dXJuIGVzY2FwZUNoYXJhY3RlcnNbY2hhcl0gfHwgYFxcXFx1JHtgMDAwMCR7Y2hhci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKGhleCl9YC5zbGljZSgtdW5pY29kZUxlbmd0aCl9YDtcbn1cbl9fbmFtZShlc2NhcGUsIFwiZXNjYXBlXCIpO1xuZnVuY3Rpb24gaW5zcGVjdFN0cmluZyhzdHJpbmcsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ0VzY2FwZUNoYXJzLnRlc3Qoc3RyaW5nKSkge1xuICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHN0cmluZ0VzY2FwZUNoYXJzLCBlc2NhcGUpO1xuICB9XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUoYCcke3RydW5jYXRlKHN0cmluZywgb3B0aW9ucy50cnVuY2F0ZSAtIDIpfSdgLCBcInN0cmluZ1wiKTtcbn1cbl9fbmFtZShpbnNwZWN0U3RyaW5nLCBcImluc3BlY3RTdHJpbmdcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvc3ltYm9sLmpzXG5mdW5jdGlvbiBpbnNwZWN0U3ltYm9sKHZhbHVlKSB7XG4gIGlmIChcImRlc2NyaXB0aW9uXCIgaW4gU3ltYm9sLnByb3RvdHlwZSkge1xuICAgIHJldHVybiB2YWx1ZS5kZXNjcmlwdGlvbiA/IGBTeW1ib2woJHt2YWx1ZS5kZXNjcmlwdGlvbn0pYCA6IFwiU3ltYm9sKClcIjtcbiAgfVxuICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbn1cbl9fbmFtZShpbnNwZWN0U3ltYm9sLCBcImluc3BlY3RTeW1ib2xcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvcHJvbWlzZS5qc1xudmFyIGdldFByb21pc2VWYWx1ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gXCJQcm9taXNle1xcdTIwMjZ9XCIsIFwiZ2V0UHJvbWlzZVZhbHVlXCIpO1xudHJ5IHtcbiAgY29uc3QgeyBnZXRQcm9taXNlRGV0YWlscywga1BlbmRpbmcsIGtSZWplY3RlZCB9ID0gcHJvY2Vzcy5iaW5kaW5nKFwidXRpbFwiKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZ2V0UHJvbWlzZURldGFpbHMoUHJvbWlzZS5yZXNvbHZlKCkpKSkge1xuICAgIGdldFByb21pc2VWYWx1ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlLCBvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBbc3RhdGUsIGlubmVyVmFsdWVdID0gZ2V0UHJvbWlzZURldGFpbHModmFsdWUpO1xuICAgICAgaWYgKHN0YXRlID09PSBrUGVuZGluZykge1xuICAgICAgICByZXR1cm4gXCJQcm9taXNlezxwZW5kaW5nPn1cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgUHJvbWlzZSR7c3RhdGUgPT09IGtSZWplY3RlZCA/IFwiIVwiIDogXCJcIn17JHtvcHRpb25zLmluc3BlY3QoaW5uZXJWYWx1ZSwgb3B0aW9ucyl9fWA7XG4gICAgfSwgXCJnZXRQcm9taXNlVmFsdWVcIik7XG4gIH1cbn0gY2F0Y2ggKG5vdE5vZGUpIHtcbn1cbnZhciBwcm9taXNlX2RlZmF1bHQgPSBnZXRQcm9taXNlVmFsdWU7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvb2JqZWN0LmpzXG5mdW5jdGlvbiBpbnNwZWN0T2JqZWN0KG9iamVjdCwgb3B0aW9ucykge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KTtcbiAgY29uc3Qgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCkgOiBbXTtcbiAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09PSAwICYmIHN5bWJvbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwie31cIjtcbiAgfVxuICBvcHRpb25zLnRydW5jYXRlIC09IDQ7XG4gIG9wdGlvbnMuc2VlbiA9IG9wdGlvbnMuc2VlbiB8fCBbXTtcbiAgaWYgKG9wdGlvbnMuc2Vlbi5pbmNsdWRlcyhvYmplY3QpKSB7XG4gICAgcmV0dXJuIFwiW0NpcmN1bGFyXVwiO1xuICB9XG4gIG9wdGlvbnMuc2Vlbi5wdXNoKG9iamVjdCk7XG4gIGNvbnN0IHByb3BlcnR5Q29udGVudHMgPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcCgoa2V5KSA9PiBba2V5LCBvYmplY3Rba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICBjb25zdCBzeW1ib2xDb250ZW50cyA9IGluc3BlY3RMaXN0KHN5bWJvbHMubWFwKChrZXkpID0+IFtrZXksIG9iamVjdFtrZXldXSksIG9wdGlvbnMsIGluc3BlY3RQcm9wZXJ0eSk7XG4gIG9wdGlvbnMuc2Vlbi5wb3AoKTtcbiAgbGV0IHNlcCA9IFwiXCI7XG4gIGlmIChwcm9wZXJ0eUNvbnRlbnRzICYmIHN5bWJvbENvbnRlbnRzKSB7XG4gICAgc2VwID0gXCIsIFwiO1xuICB9XG4gIHJldHVybiBgeyAke3Byb3BlcnR5Q29udGVudHN9JHtzZXB9JHtzeW1ib2xDb250ZW50c30gfWA7XG59XG5fX25hbWUoaW5zcGVjdE9iamVjdCwgXCJpbnNwZWN0T2JqZWN0XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2NsYXNzLmpzXG52YXIgdG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIFN5bWJvbC50b1N0cmluZ1RhZyA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IGZhbHNlO1xuZnVuY3Rpb24gaW5zcGVjdENsYXNzKHZhbHVlLCBvcHRpb25zKSB7XG4gIGxldCBuYW1lID0gXCJcIjtcbiAgaWYgKHRvU3RyaW5nVGFnICYmIHRvU3RyaW5nVGFnIGluIHZhbHVlKSB7XG4gICAgbmFtZSA9IHZhbHVlW3RvU3RyaW5nVGFnXTtcbiAgfVxuICBuYW1lID0gbmFtZSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAoIW5hbWUgfHwgbmFtZSA9PT0gXCJfY2xhc3NcIikge1xuICAgIG5hbWUgPSBcIjxBbm9ueW1vdXMgQ2xhc3M+XCI7XG4gIH1cbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBuYW1lLmxlbmd0aDtcbiAgcmV0dXJuIGAke25hbWV9JHtpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKX1gO1xufVxuX19uYW1lKGluc3BlY3RDbGFzcywgXCJpbnNwZWN0Q2xhc3NcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvYXJndW1lbnRzLmpzXG5mdW5jdGlvbiBpbnNwZWN0QXJndW1lbnRzKGFyZ3MsIG9wdGlvbnMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiBcIkFyZ3VtZW50c1tdXCI7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gMTM7XG4gIHJldHVybiBgQXJndW1lbnRzWyAke2luc3BlY3RMaXN0KGFyZ3MsIG9wdGlvbnMpfSBdYDtcbn1cbl9fbmFtZShpbnNwZWN0QXJndW1lbnRzLCBcImluc3BlY3RBcmd1bWVudHNcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvZXJyb3IuanNcbnZhciBlcnJvcktleXMgPSBbXG4gIFwic3RhY2tcIixcbiAgXCJsaW5lXCIsXG4gIFwiY29sdW1uXCIsXG4gIFwibmFtZVwiLFxuICBcIm1lc3NhZ2VcIixcbiAgXCJmaWxlTmFtZVwiLFxuICBcImxpbmVOdW1iZXJcIixcbiAgXCJjb2x1bW5OdW1iZXJcIixcbiAgXCJudW1iZXJcIixcbiAgXCJkZXNjcmlwdGlvblwiLFxuICBcImNhdXNlXCJcbl07XG5mdW5jdGlvbiBpbnNwZWN0T2JqZWN0MihlcnJvciwgb3B0aW9ucykge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpLmZpbHRlcigoa2V5KSA9PiBlcnJvcktleXMuaW5kZXhPZihrZXkpID09PSAtMSk7XG4gIGNvbnN0IG5hbWUgPSBlcnJvci5uYW1lO1xuICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoO1xuICBsZXQgbWVzc2FnZSA9IFwiXCI7XG4gIGlmICh0eXBlb2YgZXJyb3IubWVzc2FnZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIG1lc3NhZ2UgPSB0cnVuY2F0ZShlcnJvci5tZXNzYWdlLCBvcHRpb25zLnRydW5jYXRlKTtcbiAgfSBlbHNlIHtcbiAgICBwcm9wZXJ0aWVzLnVuc2hpZnQoXCJtZXNzYWdlXCIpO1xuICB9XG4gIG1lc3NhZ2UgPSBtZXNzYWdlID8gYDogJHttZXNzYWdlfWAgOiBcIlwiO1xuICBvcHRpb25zLnRydW5jYXRlIC09IG1lc3NhZ2UubGVuZ3RoICsgNTtcbiAgb3B0aW9ucy5zZWVuID0gb3B0aW9ucy5zZWVuIHx8IFtdO1xuICBpZiAob3B0aW9ucy5zZWVuLmluY2x1ZGVzKGVycm9yKSkge1xuICAgIHJldHVybiBcIltDaXJjdWxhcl1cIjtcbiAgfVxuICBvcHRpb25zLnNlZW4ucHVzaChlcnJvcik7XG4gIGNvbnN0IHByb3BlcnR5Q29udGVudHMgPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcCgoa2V5KSA9PiBba2V5LCBlcnJvcltrZXldXSksIG9wdGlvbnMsIGluc3BlY3RQcm9wZXJ0eSk7XG4gIHJldHVybiBgJHtuYW1lfSR7bWVzc2FnZX0ke3Byb3BlcnR5Q29udGVudHMgPyBgIHsgJHtwcm9wZXJ0eUNvbnRlbnRzfSB9YCA6IFwiXCJ9YDtcbn1cbl9fbmFtZShpbnNwZWN0T2JqZWN0MiwgXCJpbnNwZWN0T2JqZWN0XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2h0bWwuanNcbmZ1bmN0aW9uIGluc3BlY3RBdHRyaWJ1dGUoW2tleSwgdmFsdWVdLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gMztcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBgJHtvcHRpb25zLnN0eWxpemUoU3RyaW5nKGtleSksIFwieWVsbG93XCIpfWA7XG4gIH1cbiAgcmV0dXJuIGAke29wdGlvbnMuc3R5bGl6ZShTdHJpbmcoa2V5KSwgXCJ5ZWxsb3dcIil9PSR7b3B0aW9ucy5zdHlsaXplKGBcIiR7dmFsdWV9XCJgLCBcInN0cmluZ1wiKX1gO1xufVxuX19uYW1lKGluc3BlY3RBdHRyaWJ1dGUsIFwiaW5zcGVjdEF0dHJpYnV0ZVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RIVE1MQ29sbGVjdGlvbihjb2xsZWN0aW9uLCBvcHRpb25zKSB7XG4gIHJldHVybiBpbnNwZWN0TGlzdChjb2xsZWN0aW9uLCBvcHRpb25zLCBpbnNwZWN0SFRNTCwgXCJcXG5cIik7XG59XG5fX25hbWUoaW5zcGVjdEhUTUxDb2xsZWN0aW9uLCBcImluc3BlY3RIVE1MQ29sbGVjdGlvblwiKTtcbmZ1bmN0aW9uIGluc3BlY3RIVE1MKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKTtcbiAgY29uc3QgbmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBoZWFkID0gb3B0aW9ucy5zdHlsaXplKGA8JHtuYW1lfWAsIFwic3BlY2lhbFwiKTtcbiAgY29uc3QgaGVhZENsb3NlID0gb3B0aW9ucy5zdHlsaXplKGA+YCwgXCJzcGVjaWFsXCIpO1xuICBjb25zdCB0YWlsID0gb3B0aW9ucy5zdHlsaXplKGA8LyR7bmFtZX0+YCwgXCJzcGVjaWFsXCIpO1xuICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoICogMiArIDU7XG4gIGxldCBwcm9wZXJ0eUNvbnRlbnRzID0gXCJcIjtcbiAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgIHByb3BlcnR5Q29udGVudHMgKz0gXCIgXCI7XG4gICAgcHJvcGVydHlDb250ZW50cyArPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcCgoa2V5KSA9PiBba2V5LCBlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpXSksIG9wdGlvbnMsIGluc3BlY3RBdHRyaWJ1dGUsIFwiIFwiKTtcbiAgfVxuICBvcHRpb25zLnRydW5jYXRlIC09IHByb3BlcnR5Q29udGVudHMubGVuZ3RoO1xuICBjb25zdCB0cnVuY2F0ZTIgPSBvcHRpb25zLnRydW5jYXRlO1xuICBsZXQgY2hpbGRyZW4gPSBpbnNwZWN0SFRNTENvbGxlY3Rpb24oZWxlbWVudC5jaGlsZHJlbiwgb3B0aW9ucyk7XG4gIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggPiB0cnVuY2F0ZTIpIHtcbiAgICBjaGlsZHJlbiA9IGAke3RydW5jYXRvcn0oJHtlbGVtZW50LmNoaWxkcmVuLmxlbmd0aH0pYDtcbiAgfVxuICByZXR1cm4gYCR7aGVhZH0ke3Byb3BlcnR5Q29udGVudHN9JHtoZWFkQ2xvc2V9JHtjaGlsZHJlbn0ke3RhaWx9YDtcbn1cbl9fbmFtZShpbnNwZWN0SFRNTCwgXCJpbnNwZWN0SFRNTFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9pbmRleC5qc1xudmFyIHN5bWJvbHNTdXBwb3J0ZWQgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5mb3IgPT09IFwiZnVuY3Rpb25cIjtcbnZhciBjaGFpSW5zcGVjdCA9IHN5bWJvbHNTdXBwb3J0ZWQgPyBTeW1ib2wuZm9yKFwiY2hhaS9pbnNwZWN0XCIpIDogXCJAQGNoYWkvaW5zcGVjdFwiO1xudmFyIG5vZGVJbnNwZWN0ID0gZmFsc2U7XG50cnkge1xuICBjb25zdCBub2RlVXRpbCA9IHJlcXVpcmVfdXRpbCgpO1xuICBub2RlSW5zcGVjdCA9IG5vZGVVdGlsLmluc3BlY3QgPyBub2RlVXRpbC5pbnNwZWN0LmN1c3RvbSA6IGZhbHNlO1xufSBjYXRjaCAobm9Ob2RlSW5zcGVjdCkge1xuICBub2RlSW5zcGVjdCA9IGZhbHNlO1xufVxudmFyIGNvbnN0cnVjdG9yTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgc3RyaW5nVGFnTWFwID0ge307XG52YXIgYmFzZVR5cGVzTWFwID0ge1xuICB1bmRlZmluZWQ6ICh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFwidW5kZWZpbmVkXCIsIFwidW5kZWZpbmVkXCIpLFxuICBudWxsOiAodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuc3R5bGl6ZShcIm51bGxcIiwgXCJudWxsXCIpLFxuICBib29sZWFuOiAodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuc3R5bGl6ZShTdHJpbmcodmFsdWUpLCBcImJvb2xlYW5cIiksXG4gIEJvb2xlYW46ICh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFN0cmluZyh2YWx1ZSksIFwiYm9vbGVhblwiKSxcbiAgbnVtYmVyOiBpbnNwZWN0TnVtYmVyLFxuICBOdW1iZXI6IGluc3BlY3ROdW1iZXIsXG4gIGJpZ2ludDogaW5zcGVjdEJpZ0ludCxcbiAgQmlnSW50OiBpbnNwZWN0QmlnSW50LFxuICBzdHJpbmc6IGluc3BlY3RTdHJpbmcsXG4gIFN0cmluZzogaW5zcGVjdFN0cmluZyxcbiAgZnVuY3Rpb246IGluc3BlY3RGdW5jdGlvbixcbiAgRnVuY3Rpb246IGluc3BlY3RGdW5jdGlvbixcbiAgc3ltYm9sOiBpbnNwZWN0U3ltYm9sLFxuICAvLyBBIFN5bWJvbCBwb2x5ZmlsbCB3aWxsIHJldHVybiBgU3ltYm9sYCBub3QgYHN5bWJvbGAgZnJvbSB0eXBlZGV0ZWN0XG4gIFN5bWJvbDogaW5zcGVjdFN5bWJvbCxcbiAgQXJyYXk6IGluc3BlY3RBcnJheSxcbiAgRGF0ZTogaW5zcGVjdERhdGUsXG4gIE1hcDogaW5zcGVjdE1hcCxcbiAgU2V0OiBpbnNwZWN0U2V0LFxuICBSZWdFeHA6IGluc3BlY3RSZWdFeHAsXG4gIFByb21pc2U6IHByb21pc2VfZGVmYXVsdCxcbiAgLy8gV2Vha1NldCwgV2Vha01hcCBhcmUgdG90YWxseSBvcGFxdWUgdG8gdXNcbiAgV2Vha1NldDogKHZhbHVlLCBvcHRpb25zKSA9PiBvcHRpb25zLnN0eWxpemUoXCJXZWFrU2V0e1xcdTIwMjZ9XCIsIFwic3BlY2lhbFwiKSxcbiAgV2Vha01hcDogKHZhbHVlLCBvcHRpb25zKSA9PiBvcHRpb25zLnN0eWxpemUoXCJXZWFrTWFwe1xcdTIwMjZ9XCIsIFwic3BlY2lhbFwiKSxcbiAgQXJndW1lbnRzOiBpbnNwZWN0QXJndW1lbnRzLFxuICBJbnQ4QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBVaW50OEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgVWludDhDbGFtcGVkQXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBJbnQxNkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgVWludDE2QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBJbnQzMkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgVWludDMyQXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBGbG9hdDMyQXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBGbG9hdDY0QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBHZW5lcmF0b3I6ICgpID0+IFwiXCIsXG4gIERhdGFWaWV3OiAoKSA9PiBcIlwiLFxuICBBcnJheUJ1ZmZlcjogKCkgPT4gXCJcIixcbiAgRXJyb3I6IGluc3BlY3RPYmplY3QyLFxuICBIVE1MQ29sbGVjdGlvbjogaW5zcGVjdEhUTUxDb2xsZWN0aW9uLFxuICBOb2RlTGlzdDogaW5zcGVjdEhUTUxDb2xsZWN0aW9uXG59O1xudmFyIGluc3BlY3RDdXN0b20gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSwgb3B0aW9ucywgdHlwZTMpID0+IHtcbiAgaWYgKGNoYWlJbnNwZWN0IGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZVtjaGFpSW5zcGVjdF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB2YWx1ZVtjaGFpSW5zcGVjdF0ob3B0aW9ucyk7XG4gIH1cbiAgaWYgKG5vZGVJbnNwZWN0ICYmIG5vZGVJbnNwZWN0IGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZVtub2RlSW5zcGVjdF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB2YWx1ZVtub2RlSW5zcGVjdF0ob3B0aW9ucy5kZXB0aCwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKFwiaW5zcGVjdFwiIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5pbnNwZWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5zcGVjdChvcHRpb25zLmRlcHRoLCBvcHRpb25zKTtcbiAgfVxuICBpZiAoXCJjb25zdHJ1Y3RvclwiIGluIHZhbHVlICYmIGNvbnN0cnVjdG9yTWFwLmhhcyh2YWx1ZS5jb25zdHJ1Y3RvcikpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3JNYXAuZ2V0KHZhbHVlLmNvbnN0cnVjdG9yKSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKHN0cmluZ1RhZ01hcFt0eXBlM10pIHtcbiAgICByZXR1cm4gc3RyaW5nVGFnTWFwW3R5cGUzXSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIFwiXCI7XG59LCBcImluc3BlY3RDdXN0b21cIik7XG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuZnVuY3Rpb24gaW5zcGVjdCh2YWx1ZSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBub3JtYWxpc2VPcHRpb25zKG9wdHMsIGluc3BlY3QpO1xuICBjb25zdCB7IGN1c3RvbUluc3BlY3QgfSA9IG9wdGlvbnM7XG4gIGxldCB0eXBlMyA9IHZhbHVlID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlMyA9PT0gXCJvYmplY3RcIikge1xuICAgIHR5cGUzID0gdG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpO1xuICB9XG4gIGlmICh0eXBlMyBpbiBiYXNlVHlwZXNNYXApIHtcbiAgICByZXR1cm4gYmFzZVR5cGVzTWFwW3R5cGUzXSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKGN1c3RvbUluc3BlY3QgJiYgdmFsdWUpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBpbnNwZWN0Q3VzdG9tKHZhbHVlLCBvcHRpb25zLCB0eXBlMyk7XG4gICAgaWYgKG91dHB1dCkge1xuICAgICAgaWYgKHR5cGVvZiBvdXRwdXQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICByZXR1cm4gaW5zcGVjdChvdXRwdXQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBjb25zdCBwcm90byA9IHZhbHVlID8gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA6IGZhbHNlO1xuICBpZiAocHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gaW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKHZhbHVlICYmIHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJmdW5jdGlvblwiICYmIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICByZXR1cm4gaW5zcGVjdEhUTUwodmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIGlmIChcImNvbnN0cnVjdG9yXCIgaW4gdmFsdWUpIHtcbiAgICBpZiAodmFsdWUuY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgICAgcmV0dXJuIGluc3BlY3RDbGFzcyh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuICBpZiAodmFsdWUgPT09IE9iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gaW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShTdHJpbmcodmFsdWUpLCB0eXBlMyk7XG59XG5fX25hbWUoaW5zcGVjdCwgXCJpbnNwZWN0XCIpO1xuXG4vLyBsaWIvY2hhaS9jb25maWcuanNcbnZhciBjb25maWcgPSB7XG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLmluY2x1ZGVTdGFja1xuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgaW5mbHVlbmNlcyB3aGV0aGVyIHN0YWNrIHRyYWNlXG4gICAqIGlzIGluY2x1ZGVkIGluIEFzc2VydGlvbiBlcnJvciBtZXNzYWdlLiBEZWZhdWx0IG9mIGZhbHNlXG4gICAqIHN1cHByZXNzZXMgc3RhY2sgdHJhY2UgaW4gdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgPSB0cnVlOyAgLy8gZW5hYmxlIHN0YWNrIG9uIGVycm9yXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgaW5jbHVkZVN0YWNrOiBmYWxzZSxcbiAgLyoqXG4gICAqICMjIyBjb25maWcuc2hvd0RpZmZcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGluZmx1ZW5jZXMgd2hldGhlciBvciBub3RcbiAgICogdGhlIGBzaG93RGlmZmAgZmxhZyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHRocm93blxuICAgKiBBc3NlcnRpb25FcnJvcnMuIGBmYWxzZWAgd2lsbCBhbHdheXMgYmUgYGZhbHNlYDsgYHRydWVgXG4gICAqIHdpbGwgYmUgdHJ1ZSB3aGVuIHRoZSBhc3NlcnRpb24gaGFzIHJlcXVlc3RlZCBhIGRpZmZcbiAgICogYmUgc2hvd24uXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgc2hvd0RpZmY6IHRydWUsXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLnRydW5jYXRlVGhyZXNob2xkXG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBzZXRzIGxlbmd0aCB0aHJlc2hvbGQgZm9yIGFjdHVhbCBhbmRcbiAgICogZXhwZWN0ZWQgdmFsdWVzIGluIGFzc2VydGlvbiBlcnJvcnMuIElmIHRoaXMgdGhyZXNob2xkIGlzIGV4Y2VlZGVkLCBmb3JcbiAgICogZXhhbXBsZSBmb3IgbGFyZ2UgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgdmFsdWUgaXMgcmVwbGFjZWQgd2l0aCBzb21ldGhpbmdcbiAgICogbGlrZSBgWyBBcnJheSgzKSBdYCBvciBgeyBPYmplY3QgKHByb3AxLCBwcm9wMikgfWAuXG4gICAqXG4gICAqIFNldCBpdCB0byB6ZXJvIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgdHJ1bmNhdGluZyBhbHRvZ2V0aGVyLlxuICAgKlxuICAgKiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlcmZ1bCB3aGVuIGRvaW5nIGFzc2VydGlvbnMgb24gYXJyYXlzOiBoYXZpbmcgdGhpc1xuICAgKiBzZXQgdG8gYSByZWFzb25hYmxlIGxhcmdlIHZhbHVlIG1ha2VzIHRoZSBmYWlsdXJlIG1lc3NhZ2VzIHJlYWRpbHlcbiAgICogaW5zcGVjdGFibGUuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCA9IDA7ICAvLyBkaXNhYmxlIHRydW5jYXRpbmdcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9XG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHRydW5jYXRlVGhyZXNob2xkOiA0MCxcbiAgLyoqXG4gICAqICMjIyBjb25maWcudXNlUHJveHlcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGRlZmluZXMgaWYgY2hhaSB3aWxsIHVzZSBhIFByb3h5IHRvIHRocm93XG4gICAqIGFuIGVycm9yIHdoZW4gYSBub24tZXhpc3RlbnQgcHJvcGVydHkgaXMgcmVhZCwgd2hpY2ggcHJvdGVjdHMgdXNlcnNcbiAgICogZnJvbSB0eXBvcyB3aGVuIHVzaW5nIHByb3BlcnR5LWJhc2VkIGFzc2VydGlvbnMuXG4gICAqXG4gICAqIFNldCBpdCB0byBmYWxzZSBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS5cbiAgICpcbiAgICogICAgIGNoYWkuY29uZmlnLnVzZVByb3h5ID0gZmFsc2U7ICAvLyBkaXNhYmxlIHVzZSBvZiBQcm94eVxuICAgKlxuICAgKiBUaGlzIGZlYXR1cmUgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCByZWdhcmRsZXNzIG9mIHRoaXMgY29uZmlnIHZhbHVlXG4gICAqIGluIGVudmlyb25tZW50cyB0aGF0IGRvbid0IHN1cHBvcnQgcHJveGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufVxuICAgKiBAcHVibGljXG4gICAqL1xuICB1c2VQcm94eTogdHJ1ZSxcbiAgLyoqXG4gICAqICMjIyBjb25maWcucHJveHlFeGNsdWRlZEtleXNcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGRlZmluZXMgd2hpY2ggcHJvcGVydGllcyBzaG91bGQgYmUgaWdub3JlZFxuICAgKiBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yIGlmIHRoZXkgZG8gbm90IGV4aXN0IG9uIHRoZSBhc3NlcnRpb24uXG4gICAqIFRoaXMgaXMgb25seSBhcHBsaWVkIGlmIHRoZSBlbnZpcm9ubWVudCBDaGFpIGlzIHJ1bm5pbmcgaW4gc3VwcG9ydHMgcHJveGllcyBhbmRcbiAgICogaWYgdGhlIGB1c2VQcm94eWAgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzIGVuYWJsZWQuXG4gICAqIEJ5IGRlZmF1bHQsIGB0aGVuYCBhbmQgYGluc3BlY3RgIHdpbGwgbm90IHRocm93IGFuIGVycm9yIGlmIHRoZXkgZG8gbm90IGV4aXN0IG9uIHRoZVxuICAgKiBhc3NlcnRpb24gb2JqZWN0IGJlY2F1c2UgdGhlIGAuaW5zcGVjdGAgcHJvcGVydHkgaXMgcmVhZCBieSBgdXRpbC5pbnNwZWN0YCAoZm9yIGV4YW1wbGUsIHdoZW5cbiAgICogdXNpbmcgYGNvbnNvbGUubG9nYCBvbiB0aGUgYXNzZXJ0aW9uIG9iamVjdCkgYW5kIGAudGhlbmAgaXMgbmVjZXNzYXJ5IGZvciBwcm9taXNlIHR5cGUtY2hlY2tpbmcuXG4gICAqXG4gICAqICAgICAvLyBCeSBkZWZhdWx0IHRoZXNlIGtleXMgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgaWYgdGhleSBkbyBub3QgZXhpc3Qgb24gdGhlIGFzc2VydGlvbiBvYmplY3RcbiAgICogICAgIGNoYWkuY29uZmlnLnByb3h5RXhjbHVkZWRLZXlzID0gWyd0aGVuJywgJ2luc3BlY3QnXTtcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHJveHlFeGNsdWRlZEtleXM6IFtcInRoZW5cIiwgXCJjYXRjaFwiLCBcImluc3BlY3RcIiwgXCJ0b0pTT05cIl0sXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLmRlZXBFcXVhbFxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgZGVmaW5lcyB3aGljaCBhIGN1c3RvbSBmdW5jdGlvbiB0byB1c2UgZm9yIGRlZXBFcXVhbFxuICAgKiBjb21wYXJpc29ucy5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGZ1bmN0aW9uIHVzZWQgaXMgdGhlIG9uZSBmcm9tIHRoZSBgZGVlcC1lcWxgIHBhY2thZ2Ugd2l0aG91dCBjdXN0b20gY29tcGFyYXRvci5cbiAgICpcbiAgICogICAgIC8vIHVzZSBhIGN1c3RvbSBjb21wYXJhdG9yXG4gICAqICAgICBjaGFpLmNvbmZpZy5kZWVwRXF1YWwgPSAoZXhwZWN0ZWQsIGFjdHVhbCkgPT4ge1xuICAgKiAgICAgICAgIHJldHVybiBjaGFpLnV0aWwuZXFsKGV4cGVjdGVkLCBhY3R1YWwsIHtcbiAgICogICAgICAgICAgICAgY29tcGFyYXRvcjogKGV4cGVjdGVkLCBhY3R1YWwpID0+IHtcbiAgICogICAgICAgICAgICAgICAgIC8vIGZvciBub24gbnVtYmVyIGNvbXBhcmlzb24sIHVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvclxuICAgKiAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGV4cGVjdGVkICE9PSAnbnVtYmVyJykgcmV0dXJuIG51bGw7XG4gICAqICAgICAgICAgICAgICAgICAvLyBhbGxvdyBhIGRpZmZlcmVuY2Ugb2YgMTAgYmV0d2VlbiBjb21wYXJlZCBudW1iZXJzXG4gICAqICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFjdHVhbCA9PT0gJ251bWJlcicgJiYgTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgMTBcbiAgICogICAgICAgICAgICAgfVxuICAgKiAgICAgICAgIH0pXG4gICAqICAgICB9O1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufVxuICAgKiBAcHVibGljXG4gICAqL1xuICBkZWVwRXF1YWw6IG51bGxcbn07XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2luc3BlY3QuanNcbmZ1bmN0aW9uIGluc3BlY3QyKG9iaiwgc2hvd0hpZGRlbiwgZGVwdGgsIGNvbG9ycykge1xuICB2YXIgb3B0aW9ucyA9IHtcbiAgICBjb2xvcnMsXG4gICAgZGVwdGg6IHR5cGVvZiBkZXB0aCA9PT0gXCJ1bmRlZmluZWRcIiA/IDIgOiBkZXB0aCxcbiAgICBzaG93SGlkZGVuLFxuICAgIHRydW5jYXRlOiBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgPyBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgOiBJbmZpbml0eVxuICB9O1xuICByZXR1cm4gaW5zcGVjdChvYmosIG9wdGlvbnMpO1xufVxuX19uYW1lKGluc3BlY3QyLCBcImluc3BlY3RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL29iakRpc3BsYXkuanNcbmZ1bmN0aW9uIG9iakRpc3BsYXkob2JqKSB7XG4gIHZhciBzdHIgPSBpbnNwZWN0MihvYmopLCB0eXBlMyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xuICBpZiAoY29uZmlnLnRydW5jYXRlVGhyZXNob2xkICYmIHN0ci5sZW5ndGggPj0gY29uZmlnLnRydW5jYXRlVGhyZXNob2xkKSB7XG4gICAgaWYgKHR5cGUzID09PSBcIltvYmplY3QgRnVuY3Rpb25dXCIpIHtcbiAgICAgIHJldHVybiAhb2JqLm5hbWUgfHwgb2JqLm5hbWUgPT09IFwiXCIgPyBcIltGdW5jdGlvbl1cIiA6IFwiW0Z1bmN0aW9uOiBcIiArIG9iai5uYW1lICsgXCJdXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlMyA9PT0gXCJbb2JqZWN0IEFycmF5XVwiKSB7XG4gICAgICByZXR1cm4gXCJbIEFycmF5KFwiICsgb2JqLmxlbmd0aCArIFwiKSBdXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlMyA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIikge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopLCBrc3RyID0ga2V5cy5sZW5ndGggPiAyID8ga2V5cy5zcGxpY2UoMCwgMikuam9pbihcIiwgXCIpICsgXCIsIC4uLlwiIDoga2V5cy5qb2luKFwiLCBcIik7XG4gICAgICByZXR1cm4gXCJ7IE9iamVjdCAoXCIgKyBrc3RyICsgXCIpIH1cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuX19uYW1lKG9iakRpc3BsYXksIFwib2JqRGlzcGxheVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0TWVzc2FnZS5qc1xuZnVuY3Rpb24gZ2V0TWVzc2FnZTIob2JqLCBhcmdzKSB7XG4gIHZhciBuZWdhdGUgPSBmbGFnKG9iaiwgXCJuZWdhdGVcIiksIHZhbCA9IGZsYWcob2JqLCBcIm9iamVjdFwiKSwgZXhwZWN0ZWQgPSBhcmdzWzNdLCBhY3R1YWwgPSBnZXRBY3R1YWwob2JqLCBhcmdzKSwgbXNnID0gbmVnYXRlID8gYXJnc1syXSA6IGFyZ3NbMV0sIGZsYWdNc2cgPSBmbGFnKG9iaiwgXCJtZXNzYWdlXCIpO1xuICBpZiAodHlwZW9mIG1zZyA9PT0gXCJmdW5jdGlvblwiKVxuICAgIG1zZyA9IG1zZygpO1xuICBtc2cgPSBtc2cgfHwgXCJcIjtcbiAgbXNnID0gbXNnLnJlcGxhY2UoLyNcXHt0aGlzXFx9L2csIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvYmpEaXNwbGF5KHZhbCk7XG4gIH0pLnJlcGxhY2UoLyNcXHthY3RcXH0vZywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG9iakRpc3BsYXkoYWN0dWFsKTtcbiAgfSkucmVwbGFjZSgvI1xce2V4cFxcfS9nLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb2JqRGlzcGxheShleHBlY3RlZCk7XG4gIH0pO1xuICByZXR1cm4gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgKyBtc2cgOiBtc2c7XG59XG5fX25hbWUoZ2V0TWVzc2FnZTIsIFwiZ2V0TWVzc2FnZVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvdHJhbnNmZXJGbGFncy5qc1xuZnVuY3Rpb24gdHJhbnNmZXJGbGFncyhhc3NlcnRpb24sIG9iamVjdCwgaW5jbHVkZUFsbCkge1xuICB2YXIgZmxhZ3MgPSBhc3NlcnRpb24uX19mbGFncyB8fCAoYXNzZXJ0aW9uLl9fZmxhZ3MgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIGlmICghb2JqZWN0Ll9fZmxhZ3MpIHtcbiAgICBvYmplY3QuX19mbGFncyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG4gIGluY2x1ZGVBbGwgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gaW5jbHVkZUFsbCA6IHRydWU7XG4gIGZvciAodmFyIGZsYWczIGluIGZsYWdzKSB7XG4gICAgaWYgKGluY2x1ZGVBbGwgfHwgZmxhZzMgIT09IFwib2JqZWN0XCIgJiYgZmxhZzMgIT09IFwic3NmaVwiICYmIGZsYWczICE9PSBcImxvY2tTc2ZpXCIgJiYgZmxhZzMgIT0gXCJtZXNzYWdlXCIpIHtcbiAgICAgIG9iamVjdC5fX2ZsYWdzW2ZsYWczXSA9IGZsYWdzW2ZsYWczXTtcbiAgICB9XG4gIH1cbn1cbl9fbmFtZSh0cmFuc2ZlckZsYWdzLCBcInRyYW5zZmVyRmxhZ3NcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9kZWVwLWVxbC9pbmRleC5qc1xuZnVuY3Rpb24gdHlwZTIob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gIH1cbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBcIm51bGxcIjtcbiAgfVxuICBjb25zdCBzdHJpbmdUYWcgPSBvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXTtcbiAgaWYgKHR5cGVvZiBzdHJpbmdUYWcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gc3RyaW5nVGFnO1xuICB9XG4gIGNvbnN0IHNsaWNlU3RhcnQgPSA4O1xuICBjb25zdCBzbGljZUVuZCA9IC0xO1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikuc2xpY2Uoc2xpY2VTdGFydCwgc2xpY2VFbmQpO1xufVxuX19uYW1lKHR5cGUyLCBcInR5cGVcIik7XG5mdW5jdGlvbiBGYWtlTWFwKCkge1xuICB0aGlzLl9rZXkgPSBcImNoYWkvZGVlcC1lcWxfX1wiICsgTWF0aC5yYW5kb20oKSArIERhdGUubm93KCk7XG59XG5fX25hbWUoRmFrZU1hcCwgXCJGYWtlTWFwXCIpO1xuRmFrZU1hcC5wcm90b3R5cGUgPSB7XG4gIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIGtleVt0aGlzLl9rZXldO1xuICB9LCBcImdldFwiKSxcbiAgc2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGtleSwgdGhpcy5fa2V5LCB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgXCJzZXRcIilcbn07XG52YXIgTWVtb2l6ZU1hcCA9IHR5cGVvZiBXZWFrTWFwID09PSBcImZ1bmN0aW9uXCIgPyBXZWFrTWFwIDogRmFrZU1hcDtcbmZ1bmN0aW9uIG1lbW9pemVDb21wYXJlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbWVtb2l6ZU1hcCkge1xuICBpZiAoIW1lbW9pemVNYXAgfHwgaXNQcmltaXRpdmUobGVmdEhhbmRPcGVyYW5kKSB8fCBpc1ByaW1pdGl2ZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciBsZWZ0SGFuZE1hcCA9IG1lbW9pemVNYXAuZ2V0KGxlZnRIYW5kT3BlcmFuZCk7XG4gIGlmIChsZWZ0SGFuZE1hcCkge1xuICAgIHZhciByZXN1bHQgPSBsZWZ0SGFuZE1hcC5nZXQocmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbl9fbmFtZShtZW1vaXplQ29tcGFyZSwgXCJtZW1vaXplQ29tcGFyZVwiKTtcbmZ1bmN0aW9uIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBtZW1vaXplTWFwLCByZXN1bHQpIHtcbiAgaWYgKCFtZW1vaXplTWFwIHx8IGlzUHJpbWl0aXZlKGxlZnRIYW5kT3BlcmFuZCkgfHwgaXNQcmltaXRpdmUocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGxlZnRIYW5kTWFwID0gbWVtb2l6ZU1hcC5nZXQobGVmdEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kTWFwKSB7XG4gICAgbGVmdEhhbmRNYXAuc2V0KHJpZ2h0SGFuZE9wZXJhbmQsIHJlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgbGVmdEhhbmRNYXAgPSBuZXcgTWVtb2l6ZU1hcCgpO1xuICAgIGxlZnRIYW5kTWFwLnNldChyaWdodEhhbmRPcGVyYW5kLCByZXN1bHQpO1xuICAgIG1lbW9pemVNYXAuc2V0KGxlZnRIYW5kT3BlcmFuZCwgbGVmdEhhbmRNYXApO1xuICB9XG59XG5fX25hbWUobWVtb2l6ZVNldCwgXCJtZW1vaXplU2V0XCIpO1xudmFyIGRlZXBfZXFsX2RlZmF1bHQgPSBkZWVwRXF1YWw7XG5mdW5jdGlvbiBkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY29tcGFyYXRvcikge1xuICAgIHJldHVybiBleHRlbnNpdmVEZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgfVxuICB2YXIgc2ltcGxlUmVzdWx0ID0gc2ltcGxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgaWYgKHNpbXBsZVJlc3VsdCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBzaW1wbGVSZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGV4dGVuc2l2ZURlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xufVxuX19uYW1lKGRlZXBFcXVhbCwgXCJkZWVwRXF1YWxcIik7XG5mdW5jdGlvbiBzaW1wbGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgaWYgKGxlZnRIYW5kT3BlcmFuZCA9PT0gcmlnaHRIYW5kT3BlcmFuZCkge1xuICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQgIT09IDAgfHwgMSAvIGxlZnRIYW5kT3BlcmFuZCA9PT0gMSAvIHJpZ2h0SGFuZE9wZXJhbmQ7XG4gIH1cbiAgaWYgKGxlZnRIYW5kT3BlcmFuZCAhPT0gbGVmdEhhbmRPcGVyYW5kICYmIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJpZ2h0SGFuZE9wZXJhbmQgIT09IHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNQcmltaXRpdmUobGVmdEhhbmRPcGVyYW5kKSB8fCBpc1ByaW1pdGl2ZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbl9fbmFtZShzaW1wbGVFcXVhbCwgXCJzaW1wbGVFcXVhbFwiKTtcbmZ1bmN0aW9uIGV4dGVuc2l2ZURlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMubWVtb2l6ZSA9IG9wdGlvbnMubWVtb2l6ZSA9PT0gZmFsc2UgPyBmYWxzZSA6IG9wdGlvbnMubWVtb2l6ZSB8fCBuZXcgTWVtb2l6ZU1hcCgpO1xuICB2YXIgY29tcGFyYXRvciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb21wYXJhdG9yO1xuICB2YXIgbWVtb2l6ZVJlc3VsdExlZnQgPSBtZW1vaXplQ29tcGFyZShsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSk7XG4gIGlmIChtZW1vaXplUmVzdWx0TGVmdCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBtZW1vaXplUmVzdWx0TGVmdDtcbiAgfVxuICB2YXIgbWVtb2l6ZVJlc3VsdFJpZ2h0ID0gbWVtb2l6ZUNvbXBhcmUocmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUpO1xuICBpZiAobWVtb2l6ZVJlc3VsdFJpZ2h0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIG1lbW9pemVSZXN1bHRSaWdodDtcbiAgfVxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIHZhciBjb21wYXJhdG9yUmVzdWx0ID0gY29tcGFyYXRvcihsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGlmIChjb21wYXJhdG9yUmVzdWx0ID09PSBmYWxzZSB8fCBjb21wYXJhdG9yUmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCBjb21wYXJhdG9yUmVzdWx0KTtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yUmVzdWx0O1xuICAgIH1cbiAgICB2YXIgc2ltcGxlUmVzdWx0ID0gc2ltcGxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgICBpZiAoc2ltcGxlUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gc2ltcGxlUmVzdWx0O1xuICAgIH1cbiAgfVxuICB2YXIgbGVmdEhhbmRUeXBlID0gdHlwZTIobGVmdEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kVHlwZSAhPT0gdHlwZTIocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCBmYWxzZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUsIHRydWUpO1xuICB2YXIgcmVzdWx0ID0gZXh0ZW5zaXZlRGVlcEVxdWFsQnlUeXBlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRUeXBlLCBvcHRpb25zKTtcbiAgbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbl9fbmFtZShleHRlbnNpdmVEZWVwRXF1YWwsIFwiZXh0ZW5zaXZlRGVlcEVxdWFsXCIpO1xuZnVuY3Rpb24gZXh0ZW5zaXZlRGVlcEVxdWFsQnlUeXBlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRUeXBlLCBvcHRpb25zKSB7XG4gIHN3aXRjaCAobGVmdEhhbmRUeXBlKSB7XG4gICAgY2FzZSBcIlN0cmluZ1wiOlxuICAgIGNhc2UgXCJOdW1iZXJcIjpcbiAgICBjYXNlIFwiQm9vbGVhblwiOlxuICAgIGNhc2UgXCJEYXRlXCI6XG4gICAgICByZXR1cm4gZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZC52YWx1ZU9mKCksIHJpZ2h0SGFuZE9wZXJhbmQudmFsdWVPZigpKTtcbiAgICBjYXNlIFwiUHJvbWlzZVwiOlxuICAgIGNhc2UgXCJTeW1ib2xcIjpcbiAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICBjYXNlIFwiV2Vha01hcFwiOlxuICAgIGNhc2UgXCJXZWFrU2V0XCI6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kID09PSByaWdodEhhbmRPcGVyYW5kO1xuICAgIGNhc2UgXCJFcnJvclwiOlxuICAgICAgcmV0dXJuIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIFtcIm5hbWVcIiwgXCJtZXNzYWdlXCIsIFwiY29kZVwiXSwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIkFyZ3VtZW50c1wiOlxuICAgIGNhc2UgXCJJbnQ4QXJyYXlcIjpcbiAgICBjYXNlIFwiVWludDhBcnJheVwiOlxuICAgIGNhc2UgXCJVaW50OENsYW1wZWRBcnJheVwiOlxuICAgIGNhc2UgXCJJbnQxNkFycmF5XCI6XG4gICAgY2FzZSBcIlVpbnQxNkFycmF5XCI6XG4gICAgY2FzZSBcIkludDMyQXJyYXlcIjpcbiAgICBjYXNlIFwiVWludDMyQXJyYXlcIjpcbiAgICBjYXNlIFwiRmxvYXQzMkFycmF5XCI6XG4gICAgY2FzZSBcIkZsb2F0NjRBcnJheVwiOlxuICAgIGNhc2UgXCJBcnJheVwiOlxuICAgICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiUmVnRXhwXCI6XG4gICAgICByZXR1cm4gcmVnZXhwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgICBjYXNlIFwiR2VuZXJhdG9yXCI6XG4gICAgICByZXR1cm4gZ2VuZXJhdG9yRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiRGF0YVZpZXdcIjpcbiAgICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKG5ldyBVaW50OEFycmF5KGxlZnRIYW5kT3BlcmFuZC5idWZmZXIpLCBuZXcgVWludDhBcnJheShyaWdodEhhbmRPcGVyYW5kLmJ1ZmZlciksIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJBcnJheUJ1ZmZlclwiOlxuICAgICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobmV3IFVpbnQ4QXJyYXkobGVmdEhhbmRPcGVyYW5kKSwgbmV3IFVpbnQ4QXJyYXkocmlnaHRIYW5kT3BlcmFuZCksIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJTZXRcIjpcbiAgICAgIHJldHVybiBlbnRyaWVzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiTWFwXCI6XG4gICAgICByZXR1cm4gZW50cmllc0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIlRlbXBvcmFsLlBsYWluRGF0ZVwiOlxuICAgIGNhc2UgXCJUZW1wb3JhbC5QbGFpblRpbWVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5EYXRlVGltZVwiOlxuICAgIGNhc2UgXCJUZW1wb3JhbC5JbnN0YW50XCI6XG4gICAgY2FzZSBcIlRlbXBvcmFsLlpvbmVkRGF0ZVRpbWVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5ZZWFyTW9udGhcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5Nb250aERheVwiOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC5lcXVhbHMocmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgY2FzZSBcIlRlbXBvcmFsLkR1cmF0aW9uXCI6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kLnRvdGFsKFwibmFub3NlY29uZHNcIikgPT09IHJpZ2h0SGFuZE9wZXJhbmQudG90YWwoXCJuYW5vc2Vjb25kc1wiKTtcbiAgICBjYXNlIFwiVGVtcG9yYWwuVGltZVpvbmVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuQ2FsZW5kYXJcIjpcbiAgICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQudG9TdHJpbmcoKSA9PT0gcmlnaHRIYW5kT3BlcmFuZC50b1N0cmluZygpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gb2JqZWN0RXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgfVxufVxuX19uYW1lKGV4dGVuc2l2ZURlZXBFcXVhbEJ5VHlwZSwgXCJleHRlbnNpdmVEZWVwRXF1YWxCeVR5cGVcIik7XG5mdW5jdGlvbiByZWdleHBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC50b1N0cmluZygpID09PSByaWdodEhhbmRPcGVyYW5kLnRvU3RyaW5nKCk7XG59XG5fX25hbWUocmVnZXhwRXF1YWwsIFwicmVnZXhwRXF1YWxcIik7XG5mdW5jdGlvbiBlbnRyaWVzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHRyeSB7XG4gICAgaWYgKGxlZnRIYW5kT3BlcmFuZC5zaXplICE9PSByaWdodEhhbmRPcGVyYW5kLnNpemUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGxlZnRIYW5kT3BlcmFuZC5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNpemVFcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGVmdEhhbmRJdGVtcyA9IFtdO1xuICB2YXIgcmlnaHRIYW5kSXRlbXMgPSBbXTtcbiAgbGVmdEhhbmRPcGVyYW5kLmZvckVhY2goLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBnYXRoZXJFbnRyaWVzKGtleSwgdmFsdWUpIHtcbiAgICBsZWZ0SGFuZEl0ZW1zLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSwgXCJnYXRoZXJFbnRyaWVzXCIpKTtcbiAgcmlnaHRIYW5kT3BlcmFuZC5mb3JFYWNoKC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gZ2F0aGVyRW50cmllcyhrZXksIHZhbHVlKSB7XG4gICAgcmlnaHRIYW5kSXRlbXMucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LCBcImdhdGhlckVudHJpZXNcIikpO1xuICByZXR1cm4gaXRlcmFibGVFcXVhbChsZWZ0SGFuZEl0ZW1zLnNvcnQoKSwgcmlnaHRIYW5kSXRlbXMuc29ydCgpLCBvcHRpb25zKTtcbn1cbl9fbmFtZShlbnRyaWVzRXF1YWwsIFwiZW50cmllc0VxdWFsXCIpO1xuZnVuY3Rpb24gaXRlcmFibGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgdmFyIGxlbmd0aCA9IGxlZnRIYW5kT3BlcmFuZC5sZW5ndGg7XG4gIGlmIChsZW5ndGggIT09IHJpZ2h0SGFuZE9wZXJhbmQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChsZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZFtpbmRleF0sIHJpZ2h0SGFuZE9wZXJhbmRbaW5kZXhdLCBvcHRpb25zKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5fX25hbWUoaXRlcmFibGVFcXVhbCwgXCJpdGVyYWJsZUVxdWFsXCIpO1xuZnVuY3Rpb24gZ2VuZXJhdG9yRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHJldHVybiBpdGVyYWJsZUVxdWFsKGdldEdlbmVyYXRvckVudHJpZXMobGVmdEhhbmRPcGVyYW5kKSwgZ2V0R2VuZXJhdG9yRW50cmllcyhyaWdodEhhbmRPcGVyYW5kKSwgb3B0aW9ucyk7XG59XG5fX25hbWUoZ2VuZXJhdG9yRXF1YWwsIFwiZ2VuZXJhdG9yRXF1YWxcIik7XG5mdW5jdGlvbiBoYXNJdGVyYXRvckZ1bmN0aW9uKHRhcmdldCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgdGFyZ2V0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHRhcmdldFtTeW1ib2wuaXRlcmF0b3JdID09PSBcImZ1bmN0aW9uXCI7XG59XG5fX25hbWUoaGFzSXRlcmF0b3JGdW5jdGlvbiwgXCJoYXNJdGVyYXRvckZ1bmN0aW9uXCIpO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JFbnRyaWVzKHRhcmdldCkge1xuICBpZiAoaGFzSXRlcmF0b3JGdW5jdGlvbih0YXJnZXQpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBnZXRHZW5lcmF0b3JFbnRyaWVzKHRhcmdldFtTeW1ib2wuaXRlcmF0b3JdKCkpO1xuICAgIH0gY2F0Y2ggKGl0ZXJhdG9yRXJyb3IpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuX19uYW1lKGdldEl0ZXJhdG9yRW50cmllcywgXCJnZXRJdGVyYXRvckVudHJpZXNcIik7XG5mdW5jdGlvbiBnZXRHZW5lcmF0b3JFbnRyaWVzKGdlbmVyYXRvcikge1xuICB2YXIgZ2VuZXJhdG9yUmVzdWx0ID0gZ2VuZXJhdG9yLm5leHQoKTtcbiAgdmFyIGFjY3VtdWxhdG9yID0gW2dlbmVyYXRvclJlc3VsdC52YWx1ZV07XG4gIHdoaWxlIChnZW5lcmF0b3JSZXN1bHQuZG9uZSA9PT0gZmFsc2UpIHtcbiAgICBnZW5lcmF0b3JSZXN1bHQgPSBnZW5lcmF0b3IubmV4dCgpO1xuICAgIGFjY3VtdWxhdG9yLnB1c2goZ2VuZXJhdG9yUmVzdWx0LnZhbHVlKTtcbiAgfVxuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5fX25hbWUoZ2V0R2VuZXJhdG9yRW50cmllcywgXCJnZXRHZW5lcmF0b3JFbnRyaWVzXCIpO1xuZnVuY3Rpb24gZ2V0RW51bWVyYWJsZUtleXModGFyZ2V0KSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4ga2V5cztcbn1cbl9fbmFtZShnZXRFbnVtZXJhYmxlS2V5cywgXCJnZXRFbnVtZXJhYmxlS2V5c1wiKTtcbmZ1bmN0aW9uIGdldEVudW1lcmFibGVTeW1ib2xzKHRhcmdldCkge1xuICB2YXIga2V5cyA9IFtdO1xuICB2YXIgYWxsS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxLZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGtleSA9IGFsbEtleXNbaV07XG4gICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpLmVudW1lcmFibGUpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ga2V5cztcbn1cbl9fbmFtZShnZXRFbnVtZXJhYmxlU3ltYm9scywgXCJnZXRFbnVtZXJhYmxlU3ltYm9sc1wiKTtcbmZ1bmN0aW9uIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGtleXMsIG9wdGlvbnMpIHtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kW2tleXNbaV1dLCByaWdodEhhbmRPcGVyYW5kW2tleXNbaV1dLCBvcHRpb25zKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5fX25hbWUoa2V5c0VxdWFsLCBcImtleXNFcXVhbFwiKTtcbmZ1bmN0aW9uIG9iamVjdEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICB2YXIgbGVmdEhhbmRLZXlzID0gZ2V0RW51bWVyYWJsZUtleXMobGVmdEhhbmRPcGVyYW5kKTtcbiAgdmFyIHJpZ2h0SGFuZEtleXMgPSBnZXRFbnVtZXJhYmxlS2V5cyhyaWdodEhhbmRPcGVyYW5kKTtcbiAgdmFyIGxlZnRIYW5kU3ltYm9scyA9IGdldEVudW1lcmFibGVTeW1ib2xzKGxlZnRIYW5kT3BlcmFuZCk7XG4gIHZhciByaWdodEhhbmRTeW1ib2xzID0gZ2V0RW51bWVyYWJsZVN5bWJvbHMocmlnaHRIYW5kT3BlcmFuZCk7XG4gIGxlZnRIYW5kS2V5cyA9IGxlZnRIYW5kS2V5cy5jb25jYXQobGVmdEhhbmRTeW1ib2xzKTtcbiAgcmlnaHRIYW5kS2V5cyA9IHJpZ2h0SGFuZEtleXMuY29uY2F0KHJpZ2h0SGFuZFN5bWJvbHMpO1xuICBpZiAobGVmdEhhbmRLZXlzLmxlbmd0aCAmJiBsZWZ0SGFuZEtleXMubGVuZ3RoID09PSByaWdodEhhbmRLZXlzLmxlbmd0aCkge1xuICAgIGlmIChpdGVyYWJsZUVxdWFsKG1hcFN5bWJvbHMobGVmdEhhbmRLZXlzKS5zb3J0KCksIG1hcFN5bWJvbHMocmlnaHRIYW5kS2V5cykuc29ydCgpKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGxlZnRIYW5kS2V5cywgb3B0aW9ucyk7XG4gIH1cbiAgdmFyIGxlZnRIYW5kRW50cmllcyA9IGdldEl0ZXJhdG9yRW50cmllcyhsZWZ0SGFuZE9wZXJhbmQpO1xuICB2YXIgcmlnaHRIYW5kRW50cmllcyA9IGdldEl0ZXJhdG9yRW50cmllcyhyaWdodEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kRW50cmllcy5sZW5ndGggJiYgbGVmdEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gcmlnaHRIYW5kRW50cmllcy5sZW5ndGgpIHtcbiAgICBsZWZ0SGFuZEVudHJpZXMuc29ydCgpO1xuICAgIHJpZ2h0SGFuZEVudHJpZXMuc29ydCgpO1xuICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKGxlZnRIYW5kRW50cmllcywgcmlnaHRIYW5kRW50cmllcywgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKGxlZnRIYW5kS2V5cy5sZW5ndGggPT09IDAgJiYgbGVmdEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gMCAmJiByaWdodEhhbmRLZXlzLmxlbmd0aCA9PT0gMCAmJiByaWdodEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbl9fbmFtZShvYmplY3RFcXVhbCwgXCJvYmplY3RFcXVhbFwiKTtcbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCI7XG59XG5fX25hbWUoaXNQcmltaXRpdmUsIFwiaXNQcmltaXRpdmVcIik7XG5mdW5jdGlvbiBtYXBTeW1ib2xzKGFycikge1xuICByZXR1cm4gYXJyLm1hcCgvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIG1hcFN5bWJvbChlbnRyeSkge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgIHJldHVybiBlbnRyeS50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG4gIH0sIFwibWFwU3ltYm9sXCIpKTtcbn1cbl9fbmFtZShtYXBTeW1ib2xzLCBcIm1hcFN5bWJvbHNcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9wYXRodmFsL2luZGV4LmpzXG5mdW5jdGlvbiBoYXNQcm9wZXJ0eShvYmosIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgfHwgb2JqID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBuYW1lIGluIE9iamVjdChvYmopO1xufVxuX19uYW1lKGhhc1Byb3BlcnR5LCBcImhhc1Byb3BlcnR5XCIpO1xuZnVuY3Rpb24gcGFyc2VQYXRoKHBhdGgpIHtcbiAgY29uc3Qgc3RyID0gcGF0aC5yZXBsYWNlKC8oW15cXFxcXSlcXFsvZywgXCIkMS5bXCIpO1xuICBjb25zdCBwYXJ0cyA9IHN0ci5tYXRjaCgvKFxcXFxcXC58W14uXSs/KSsvZyk7XG4gIHJldHVybiBwYXJ0cy5tYXAoKHZhbHVlKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBcImNvbnN0cnVjdG9yXCIgfHwgdmFsdWUgPT09IFwiX19wcm90b19fXCIgfHwgdmFsdWUgPT09IFwicHJvdG90eXBlXCIpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcmVnZXhwID0gL15cXFsoXFxkKylcXF0kLztcbiAgICBjb25zdCBtQXJyID0gcmVnZXhwLmV4ZWModmFsdWUpO1xuICAgIGxldCBwYXJzZWQgPSBudWxsO1xuICAgIGlmIChtQXJyKSB7XG4gICAgICBwYXJzZWQgPSB7IGk6IHBhcnNlRmxvYXQobUFyclsxXSkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkID0geyBwOiB2YWx1ZS5yZXBsYWNlKC9cXFxcKFsuW1xcXV0pL2csIFwiJDFcIikgfTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSk7XG59XG5fX25hbWUocGFyc2VQYXRoLCBcInBhcnNlUGF0aFwiKTtcbmZ1bmN0aW9uIGludGVybmFsR2V0UGF0aFZhbHVlKG9iaiwgcGFyc2VkLCBwYXRoRGVwdGgpIHtcbiAgbGV0IHRlbXBvcmFyeVZhbHVlID0gb2JqO1xuICBsZXQgcmVzID0gbnVsbDtcbiAgcGF0aERlcHRoID0gdHlwZW9mIHBhdGhEZXB0aCA9PT0gXCJ1bmRlZmluZWRcIiA/IHBhcnNlZC5sZW5ndGggOiBwYXRoRGVwdGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aERlcHRoOyBpKyspIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFyc2VkW2ldO1xuICAgIGlmICh0ZW1wb3JhcnlWYWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwYXJ0LnAgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgdGVtcG9yYXJ5VmFsdWUgPSB0ZW1wb3JhcnlWYWx1ZVtwYXJ0LmldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVtcG9yYXJ5VmFsdWUgPSB0ZW1wb3JhcnlWYWx1ZVtwYXJ0LnBdO1xuICAgICAgfVxuICAgICAgaWYgKGkgPT09IHBhdGhEZXB0aCAtIDEpIHtcbiAgICAgICAgcmVzID0gdGVtcG9yYXJ5VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5fX25hbWUoaW50ZXJuYWxHZXRQYXRoVmFsdWUsIFwiaW50ZXJuYWxHZXRQYXRoVmFsdWVcIik7XG5mdW5jdGlvbiBnZXRQYXRoSW5mbyhvYmosIHBhdGgpIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VQYXRoKHBhdGgpO1xuICBjb25zdCBsYXN0ID0gcGFyc2VkW3BhcnNlZC5sZW5ndGggLSAxXTtcbiAgY29uc3QgaW5mbyA9IHtcbiAgICBwYXJlbnQ6IHBhcnNlZC5sZW5ndGggPiAxID8gaW50ZXJuYWxHZXRQYXRoVmFsdWUob2JqLCBwYXJzZWQsIHBhcnNlZC5sZW5ndGggLSAxKSA6IG9iaixcbiAgICBuYW1lOiBsYXN0LnAgfHwgbGFzdC5pLFxuICAgIHZhbHVlOiBpbnRlcm5hbEdldFBhdGhWYWx1ZShvYmosIHBhcnNlZClcbiAgfTtcbiAgaW5mby5leGlzdHMgPSBoYXNQcm9wZXJ0eShpbmZvLnBhcmVudCwgaW5mby5uYW1lKTtcbiAgcmV0dXJuIGluZm87XG59XG5fX25hbWUoZ2V0UGF0aEluZm8sIFwiZ2V0UGF0aEluZm9cIik7XG5cbi8vIGxpYi9jaGFpL2Fzc2VydGlvbi5qc1xuZnVuY3Rpb24gQXNzZXJ0aW9uKG9iaiwgbXNnLCBzc2ZpLCBsb2NrU3NmaSkge1xuICBmbGFnKHRoaXMsIFwic3NmaVwiLCBzc2ZpIHx8IEFzc2VydGlvbik7XG4gIGZsYWcodGhpcywgXCJsb2NrU3NmaVwiLCBsb2NrU3NmaSk7XG4gIGZsYWcodGhpcywgXCJvYmplY3RcIiwgb2JqKTtcbiAgZmxhZyh0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgZmxhZyh0aGlzLCBcImVxbFwiLCBjb25maWcuZGVlcEVxdWFsIHx8IGRlZXBfZXFsX2RlZmF1bHQpO1xuICByZXR1cm4gcHJveGlmeSh0aGlzKTtcbn1cbl9fbmFtZShBc3NlcnRpb24sIFwiQXNzZXJ0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEFzc2VydGlvbiwgXCJpbmNsdWRlU3RhY2tcIiwge1xuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIGNvbnNvbGUud2FybihcIkFzc2VydGlvbi5pbmNsdWRlU3RhY2sgaXMgZGVwcmVjYXRlZCwgdXNlIGNoYWkuY29uZmlnLmluY2x1ZGVTdGFjayBpbnN0ZWFkLlwiKTtcbiAgICByZXR1cm4gY29uZmlnLmluY2x1ZGVTdGFjaztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIGNvbnNvbGUud2FybihcIkFzc2VydGlvbi5pbmNsdWRlU3RhY2sgaXMgZGVwcmVjYXRlZCwgdXNlIGNoYWkuY29uZmlnLmluY2x1ZGVTdGFjayBpbnN0ZWFkLlwiKTtcbiAgICBjb25maWcuaW5jbHVkZVN0YWNrID0gdmFsdWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEFzc2VydGlvbiwgXCJzaG93RGlmZlwiLCB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgY29uc29sZS53YXJuKFwiQXNzZXJ0aW9uLnNob3dEaWZmIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5zaG93RGlmZiBpbnN0ZWFkLlwiKTtcbiAgICByZXR1cm4gY29uZmlnLnNob3dEaWZmO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgY29uc29sZS53YXJuKFwiQXNzZXJ0aW9uLnNob3dEaWZmIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5zaG93RGlmZiBpbnN0ZWFkLlwiKTtcbiAgICBjb25maWcuc2hvd0RpZmYgPSB2YWx1ZTtcbiAgfVxufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkgPSBmdW5jdGlvbihuYW1lLCBmbikge1xuICBhZGRQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4pO1xufTtcbkFzc2VydGlvbi5hZGRNZXRob2QgPSBmdW5jdGlvbihuYW1lLCBmbikge1xuICBhZGRNZXRob2QodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbn07XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kID0gZnVuY3Rpb24obmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgYWRkQ2hhaW5hYmxlTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcik7XG59O1xuQXNzZXJ0aW9uLm92ZXJ3cml0ZVByb3BlcnR5ID0gZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgb3ZlcndyaXRlUHJvcGVydHkodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbn07XG5Bc3NlcnRpb24ub3ZlcndyaXRlTWV0aG9kID0gZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgb3ZlcndyaXRlTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG59O1xuQXNzZXJ0aW9uLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCA9IGZ1bmN0aW9uKG5hbWUsIGZuLCBjaGFpbmluZ0JlaGF2aW9yKSB7XG4gIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpO1xufTtcbkFzc2VydGlvbi5wcm90b3R5cGUuYXNzZXJ0ID0gZnVuY3Rpb24oZXhwciwgbXNnLCBuZWdhdGVNc2csIGV4cGVjdGVkLCBfYWN0dWFsLCBzaG93RGlmZikge1xuICB2YXIgb2sgPSB0ZXN0KHRoaXMsIGFyZ3VtZW50cyk7XG4gIGlmIChmYWxzZSAhPT0gc2hvd0RpZmYpXG4gICAgc2hvd0RpZmYgPSB0cnVlO1xuICBpZiAodm9pZCAwID09PSBleHBlY3RlZCAmJiB2b2lkIDAgPT09IF9hY3R1YWwpXG4gICAgc2hvd0RpZmYgPSBmYWxzZTtcbiAgaWYgKHRydWUgIT09IGNvbmZpZy5zaG93RGlmZilcbiAgICBzaG93RGlmZiA9IGZhbHNlO1xuICBpZiAoIW9rKSB7XG4gICAgbXNnID0gZ2V0TWVzc2FnZTIodGhpcywgYXJndW1lbnRzKTtcbiAgICB2YXIgYWN0dWFsID0gZ2V0QWN0dWFsKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdmFyIGFzc2VydGlvbkVycm9yT2JqZWN0UHJvcGVydGllcyA9IHtcbiAgICAgIGFjdHVhbCxcbiAgICAgIGV4cGVjdGVkLFxuICAgICAgc2hvd0RpZmZcbiAgICB9O1xuICAgIHZhciBvcGVyYXRvciA9IGdldE9wZXJhdG9yKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKG9wZXJhdG9yKSB7XG4gICAgICBhc3NlcnRpb25FcnJvck9iamVjdFByb3BlcnRpZXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgbXNnLFxuICAgICAgYXNzZXJ0aW9uRXJyb3JPYmplY3RQcm9wZXJ0aWVzLFxuICAgICAgY29uZmlnLmluY2x1ZGVTdGFjayA/IHRoaXMuYXNzZXJ0IDogZmxhZyh0aGlzLCBcInNzZmlcIilcbiAgICApO1xuICB9XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICBBc3NlcnRpb24ucHJvdG90eXBlLFxuICBcIl9vYmpcIixcbiAge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZmxhZyh0aGlzLCBcIm9iamVjdFwiKTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgICBmbGFnKHRoaXMsIFwib2JqZWN0XCIsIHZhbCk7XG4gICAgfVxuICB9XG4pO1xuXG4vLyBsaWIvY2hhaS91dGlscy9pc1Byb3h5RW5hYmxlZC5qc1xuZnVuY3Rpb24gaXNQcm94eUVuYWJsZWQoKSB7XG4gIHJldHVybiBjb25maWcudXNlUHJveHkgJiYgdHlwZW9mIFByb3h5ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiO1xufVxuX19uYW1lKGlzUHJveHlFbmFibGVkLCBcImlzUHJveHlFbmFibGVkXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9hZGRQcm9wZXJ0eS5qc1xuZnVuY3Rpb24gYWRkUHJvcGVydHkoY3R4LCBuYW1lLCBnZXR0ZXIpIHtcbiAgZ2V0dGVyID0gZ2V0dGVyID09PSB2b2lkIDAgPyBmdW5jdGlvbigpIHtcbiAgfSA6IGdldHRlcjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgIGN0eCxcbiAgICBuYW1lLFxuICAgIHtcbiAgICAgIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwcm9wZXJ0eUdldHRlcigpIHtcbiAgICAgICAgaWYgKCFpc1Byb3h5RW5hYmxlZCgpICYmICFmbGFnKHRoaXMsIFwibG9ja1NzZmlcIikpIHtcbiAgICAgICAgICBmbGFnKHRoaXMsIFwic3NmaVwiLCBwcm9wZXJ0eUdldHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3VsdCA9IGdldHRlci5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgICAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICAgICAgfSwgXCJwcm9wZXJ0eUdldHRlclwiKSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgKTtcbn1cbl9fbmFtZShhZGRQcm9wZXJ0eSwgXCJhZGRQcm9wZXJ0eVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvYWRkTGVuZ3RoR3VhcmQuanNcbnZhciBmbkxlbmd0aERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZ1bmN0aW9uKCkge1xufSwgXCJsZW5ndGhcIik7XG5mdW5jdGlvbiBhZGRMZW5ndGhHdWFyZChmbiwgYXNzZXJ0aW9uTmFtZSwgaXNDaGFpbmFibGUpIHtcbiAgaWYgKCFmbkxlbmd0aERlc2MuY29uZmlndXJhYmxlKVxuICAgIHJldHVybiBmbjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChpc0NoYWluYWJsZSkge1xuICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgQ2hhaSBwcm9wZXJ0eTogXCIgKyBhc3NlcnRpb25OYW1lICsgJy5sZW5ndGguIER1ZSB0byBhIGNvbXBhdGliaWxpdHkgaXNzdWUsIFwibGVuZ3RoXCIgY2Fubm90IGRpcmVjdGx5IGZvbGxvdyBcIicgKyBhc3NlcnRpb25OYW1lICsgJ1wiLiBVc2UgXCInICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoT2ZcIiBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoLiBTZWUgZG9jcyBmb3IgcHJvcGVyIHVzYWdlIG9mIFwiJyArIGFzc2VydGlvbk5hbWUgKyAnXCIuJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZuO1xufVxuX19uYW1lKGFkZExlbmd0aEd1YXJkLCBcImFkZExlbmd0aEd1YXJkXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9nZXRQcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiBnZXRQcm9wZXJ0aWVzKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KTtcbiAgZnVuY3Rpb24gYWRkUHJvcGVydHkyKHByb3BlcnR5KSB7XG4gICAgaWYgKHJlc3VsdC5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHByb3BlcnR5KTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKGFkZFByb3BlcnR5MiwgXCJhZGRQcm9wZXJ0eVwiKTtcbiAgdmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gIHdoaWxlIChwcm90byAhPT0gbnVsbCkge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKS5mb3JFYWNoKGFkZFByb3BlcnR5Mik7XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5fX25hbWUoZ2V0UHJvcGVydGllcywgXCJnZXRQcm9wZXJ0aWVzXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9wcm94aWZ5LmpzXG52YXIgYnVpbHRpbnMgPSBbXCJfX2ZsYWdzXCIsIFwiX19tZXRob2RzXCIsIFwiX29ialwiLCBcImFzc2VydFwiXTtcbmZ1bmN0aW9uIHByb3hpZnkob2JqLCBub25DaGFpbmFibGVNZXRob2ROYW1lKSB7XG4gIGlmICghaXNQcm94eUVuYWJsZWQoKSlcbiAgICByZXR1cm4gb2JqO1xuICByZXR1cm4gbmV3IFByb3h5KG9iaiwge1xuICAgIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwcm94eUdldHRlcih0YXJnZXQsIHByb3BlcnR5KSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSBcInN0cmluZ1wiICYmIGNvbmZpZy5wcm94eUV4Y2x1ZGVkS2V5cy5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEgJiYgIVJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHkpKSB7XG4gICAgICAgIGlmIChub25DaGFpbmFibGVNZXRob2ROYW1lKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgbm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSArIFwiLlwiICsgcHJvcGVydHkgKyAnLiBTZWUgZG9jcyBmb3IgcHJvcGVyIHVzYWdlIG9mIFwiJyArIG5vbkNoYWluYWJsZU1ldGhvZE5hbWUgKyAnXCIuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN1Z2dlc3Rpb24gPSBudWxsO1xuICAgICAgICB2YXIgc3VnZ2VzdGlvbkRpc3RhbmNlID0gNDtcbiAgICAgICAgZ2V0UHJvcGVydGllcyh0YXJnZXQpLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiBidWlsdGlucy5pbmRleE9mKHByb3ApID09PSAtMSkge1xuICAgICAgICAgICAgdmFyIGRpc3QgPSBzdHJpbmdEaXN0YW5jZUNhcHBlZChcbiAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICAgIHByb3AsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25EaXN0YW5jZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChkaXN0IDwgc3VnZ2VzdGlvbkRpc3RhbmNlKSB7XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24gPSBwcm9wO1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uRGlzdGFuY2UgPSBkaXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChzdWdnZXN0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgcHJvcGVydHkgKyAnLiBEaWQgeW91IG1lYW4gXCInICsgc3VnZ2VzdGlvbiArICdcIj8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgQ2hhaSBwcm9wZXJ0eTogXCIgKyBwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChidWlsdGlucy5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEgJiYgIWZsYWcodGFyZ2V0LCBcImxvY2tTc2ZpXCIpKSB7XG4gICAgICAgIGZsYWcodGFyZ2V0LCBcInNzZmlcIiwgcHJveHlHZXR0ZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHkpO1xuICAgIH0sIFwicHJveHlHZXR0ZXJcIilcbiAgfSk7XG59XG5fX25hbWUocHJveGlmeSwgXCJwcm94aWZ5XCIpO1xuZnVuY3Rpb24gc3RyaW5nRGlzdGFuY2VDYXBwZWQoc3RyQSwgc3RyQiwgY2FwKSB7XG4gIGlmIChNYXRoLmFicyhzdHJBLmxlbmd0aCAtIHN0ckIubGVuZ3RoKSA+PSBjYXApIHtcbiAgICByZXR1cm4gY2FwO1xuICB9XG4gIHZhciBtZW1vID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDw9IHN0ckEubGVuZ3RoOyBpKyspIHtcbiAgICBtZW1vW2ldID0gQXJyYXkoc3RyQi5sZW5ndGggKyAxKS5maWxsKDApO1xuICAgIG1lbW9baV1bMF0gPSBpO1xuICB9XG4gIGZvciAodmFyIGogPSAwOyBqIDwgc3RyQi5sZW5ndGg7IGorKykge1xuICAgIG1lbW9bMF1bal0gPSBqO1xuICB9XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHN0ckEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2ggPSBzdHJBLmNoYXJDb2RlQXQoaSAtIDEpO1xuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IHN0ckIubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChNYXRoLmFicyhpIC0gaikgPj0gY2FwKSB7XG4gICAgICAgIG1lbW9baV1bal0gPSBjYXA7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbWVtb1tpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICBtZW1vW2kgLSAxXVtqXSArIDEsXG4gICAgICAgIG1lbW9baV1baiAtIDFdICsgMSxcbiAgICAgICAgbWVtb1tpIC0gMV1baiAtIDFdICsgKGNoID09PSBzdHJCLmNoYXJDb2RlQXQoaiAtIDEpID8gMCA6IDEpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWVtb1tzdHJBLmxlbmd0aF1bc3RyQi5sZW5ndGhdO1xufVxuX19uYW1lKHN0cmluZ0Rpc3RhbmNlQ2FwcGVkLCBcInN0cmluZ0Rpc3RhbmNlQ2FwcGVkXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9hZGRNZXRob2QuanNcbmZ1bmN0aW9uIGFkZE1ldGhvZChjdHgsIG5hbWUsIG1ldGhvZCkge1xuICB2YXIgbWV0aG9kV3JhcHBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgaWYgKCFmbGFnKHRoaXMsIFwibG9ja1NzZmlcIikpIHtcbiAgICAgIGZsYWcodGhpcywgXCJzc2ZpXCIsIG1ldGhvZFdyYXBwZXIpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICB9LCBcIm1ldGhvZFdyYXBwZXJcIik7XG4gIGFkZExlbmd0aEd1YXJkKG1ldGhvZFdyYXBwZXIsIG5hbWUsIGZhbHNlKTtcbiAgY3R4W25hbWVdID0gcHJveGlmeShtZXRob2RXcmFwcGVyLCBuYW1lKTtcbn1cbl9fbmFtZShhZGRNZXRob2QsIFwiYWRkTWV0aG9kXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9vdmVyd3JpdGVQcm9wZXJ0eS5qc1xuZnVuY3Rpb24gb3ZlcndyaXRlUHJvcGVydHkoY3R4LCBuYW1lLCBnZXR0ZXIpIHtcbiAgdmFyIF9nZXQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN0eCwgbmFtZSksIF9zdXBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIH0sIFwiX3N1cGVyXCIpO1xuICBpZiAoX2dldCAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfZ2V0LmdldClcbiAgICBfc3VwZXIgPSBfZ2V0LmdldDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgIGN0eCxcbiAgICBuYW1lLFxuICAgIHtcbiAgICAgIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBvdmVyd3JpdGluZ1Byb3BlcnR5R2V0dGVyKCkge1xuICAgICAgICBpZiAoIWlzUHJveHlFbmFibGVkKCkgJiYgIWZsYWcodGhpcywgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgICAgIGZsYWcodGhpcywgXCJzc2ZpXCIsIG92ZXJ3cml0aW5nUHJvcGVydHlHZXR0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvcmlnTG9ja1NzZmkgPSBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIik7XG4gICAgICAgIGZsYWcodGhpcywgXCJsb2NrU3NmaVwiLCB0cnVlKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGdldHRlcihfc3VwZXIpLmNhbGwodGhpcyk7XG4gICAgICAgIGZsYWcodGhpcywgXCJsb2NrU3NmaVwiLCBvcmlnTG9ja1NzZmkpO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICAgICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgICAgIH0sIFwib3ZlcndyaXRpbmdQcm9wZXJ0eUdldHRlclwiKSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgKTtcbn1cbl9fbmFtZShvdmVyd3JpdGVQcm9wZXJ0eSwgXCJvdmVyd3JpdGVQcm9wZXJ0eVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlTWV0aG9kLmpzXG5mdW5jdGlvbiBvdmVyd3JpdGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QpIHtcbiAgdmFyIF9tZXRob2QgPSBjdHhbbmFtZV0sIF9zdXBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG5hbWUgKyBcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgfSwgXCJfc3VwZXJcIik7XG4gIGlmIChfbWV0aG9kICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9tZXRob2QpXG4gICAgX3N1cGVyID0gX21ldGhvZDtcbiAgdmFyIG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgaWYgKCFmbGFnKHRoaXMsIFwibG9ja1NzZmlcIikpIHtcbiAgICAgIGZsYWcodGhpcywgXCJzc2ZpXCIsIG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlcik7XG4gICAgfVxuICAgIHZhciBvcmlnTG9ja1NzZmkgPSBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIik7XG4gICAgZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIsIHRydWUpO1xuICAgIHZhciByZXN1bHQgPSBtZXRob2QoX3N1cGVyKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGZsYWcodGhpcywgXCJsb2NrU3NmaVwiLCBvcmlnTG9ja1NzZmkpO1xuICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgfSwgXCJvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXJcIik7XG4gIGFkZExlbmd0aEd1YXJkKG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlciwgbmFtZSwgZmFsc2UpO1xuICBjdHhbbmFtZV0gPSBwcm94aWZ5KG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlciwgbmFtZSk7XG59XG5fX25hbWUob3ZlcndyaXRlTWV0aG9kLCBcIm92ZXJ3cml0ZU1ldGhvZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvYWRkQ2hhaW5hYmxlTWV0aG9kLmpzXG52YXIgY2FuU2V0UHJvdG90eXBlID0gdHlwZW9mIE9iamVjdC5zZXRQcm90b3R5cGVPZiA9PT0gXCJmdW5jdGlvblwiO1xudmFyIHRlc3RGbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG59LCBcInRlc3RGblwiKTtcbnZhciBleGNsdWRlTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0Rm4pLmZpbHRlcihmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBwcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGVzdEZuLCBuYW1lKTtcbiAgaWYgKHR5cGVvZiBwcm9wRGVzYyAhPT0gXCJvYmplY3RcIilcbiAgICByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuICFwcm9wRGVzYy5jb25maWd1cmFibGU7XG59KTtcbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG52YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5mdW5jdGlvbiBhZGRDaGFpbmFibGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QsIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgaWYgKHR5cGVvZiBjaGFpbmluZ0JlaGF2aW9yICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjaGFpbmluZ0JlaGF2aW9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICB9LCBcImNoYWluaW5nQmVoYXZpb3JcIik7XG4gIH1cbiAgdmFyIGNoYWluYWJsZUJlaGF2aW9yID0ge1xuICAgIG1ldGhvZCxcbiAgICBjaGFpbmluZ0JlaGF2aW9yXG4gIH07XG4gIGlmICghY3R4Ll9fbWV0aG9kcykge1xuICAgIGN0eC5fX21ldGhvZHMgPSB7fTtcbiAgfVxuICBjdHguX19tZXRob2RzW25hbWVdID0gY2hhaW5hYmxlQmVoYXZpb3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICBjdHgsXG4gICAgbmFtZSxcbiAgICB7XG4gICAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gY2hhaW5hYmxlTWV0aG9kR2V0dGVyKCkge1xuICAgICAgICBjaGFpbmFibGVCZWhhdmlvci5jaGFpbmluZ0JlaGF2aW9yLmNhbGwodGhpcyk7XG4gICAgICAgIHZhciBjaGFpbmFibGVNZXRob2RXcmFwcGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoIWZsYWcodGhpcywgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgICAgICAgZmxhZyh0aGlzLCBcInNzZmlcIiwgY2hhaW5hYmxlTWV0aG9kV3JhcHBlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciByZXN1bHQgPSBjaGFpbmFibGVCZWhhdmlvci5tZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgICAgICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gICAgICAgIH0sIFwiY2hhaW5hYmxlTWV0aG9kV3JhcHBlclwiKTtcbiAgICAgICAgYWRkTGVuZ3RoR3VhcmQoY2hhaW5hYmxlTWV0aG9kV3JhcHBlciwgbmFtZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChjYW5TZXRQcm90b3R5cGUpIHtcbiAgICAgICAgICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICAgICAgICBwcm90b3R5cGUuY2FsbCA9IGNhbGw7XG4gICAgICAgICAgcHJvdG90eXBlLmFwcGx5ID0gYXBwbHk7XG4gICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGNoYWluYWJsZU1ldGhvZFdyYXBwZXIsIHByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGFzc2VydGVyTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdHgpO1xuICAgICAgICAgIGFzc2VydGVyTmFtZXMuZm9yRWFjaChmdW5jdGlvbihhc3NlcnRlck5hbWUpIHtcbiAgICAgICAgICAgIGlmIChleGNsdWRlTmFtZXMuaW5kZXhPZihhc3NlcnRlck5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN0eCwgYXNzZXJ0ZXJOYW1lKTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGFpbmFibGVNZXRob2RXcmFwcGVyLCBhc3NlcnRlck5hbWUsIHBkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIGNoYWluYWJsZU1ldGhvZFdyYXBwZXIpO1xuICAgICAgICByZXR1cm4gcHJveGlmeShjaGFpbmFibGVNZXRob2RXcmFwcGVyKTtcbiAgICAgIH0sIFwiY2hhaW5hYmxlTWV0aG9kR2V0dGVyXCIpLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICApO1xufVxuX19uYW1lKGFkZENoYWluYWJsZU1ldGhvZCwgXCJhZGRDaGFpbmFibGVNZXRob2RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL292ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZC5qc1xuZnVuY3Rpb24gb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKGN0eCwgbmFtZSwgbWV0aG9kLCBjaGFpbmluZ0JlaGF2aW9yKSB7XG4gIHZhciBjaGFpbmFibGVCZWhhdmlvciA9IGN0eC5fX21ldGhvZHNbbmFtZV07XG4gIHZhciBfY2hhaW5pbmdCZWhhdmlvciA9IGNoYWluYWJsZUJlaGF2aW9yLmNoYWluaW5nQmVoYXZpb3I7XG4gIGNoYWluYWJsZUJlaGF2aW9yLmNoYWluaW5nQmVoYXZpb3IgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIG92ZXJ3cml0aW5nQ2hhaW5hYmxlTWV0aG9kR2V0dGVyKCkge1xuICAgIHZhciByZXN1bHQgPSBjaGFpbmluZ0JlaGF2aW9yKF9jaGFpbmluZ0JlaGF2aW9yKS5jYWxsKHRoaXMpO1xuICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgfSwgXCJvdmVyd3JpdGluZ0NoYWluYWJsZU1ldGhvZEdldHRlclwiKTtcbiAgdmFyIF9tZXRob2QgPSBjaGFpbmFibGVCZWhhdmlvci5tZXRob2Q7XG4gIGNoYWluYWJsZUJlaGF2aW9yLm1ldGhvZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gb3ZlcndyaXRpbmdDaGFpbmFibGVNZXRob2RXcmFwcGVyKCkge1xuICAgIHZhciByZXN1bHQgPSBtZXRob2QoX21ldGhvZCkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gIH0sIFwib3ZlcndyaXRpbmdDaGFpbmFibGVNZXRob2RXcmFwcGVyXCIpO1xufVxuX19uYW1lKG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCwgXCJvdmVyd3JpdGVDaGFpbmFibGVNZXRob2RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2NvbXBhcmVCeUluc3BlY3QuanNcbmZ1bmN0aW9uIGNvbXBhcmVCeUluc3BlY3QoYSwgYikge1xuICByZXR1cm4gaW5zcGVjdDIoYSkgPCBpbnNwZWN0MihiKSA/IC0xIDogMTtcbn1cbl9fbmFtZShjb21wYXJlQnlJbnNwZWN0LCBcImNvbXBhcmVCeUluc3BlY3RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2dldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMuanNcbmZ1bmN0aW9uIGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMob2JqKSB7XG4gIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiBbXTtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKS5maWx0ZXIoZnVuY3Rpb24oc3ltKSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBzeW0pLmVudW1lcmFibGU7XG4gIH0pO1xufVxuX19uYW1lKGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMsIFwiZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9sc1wiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMuanNcbmZ1bmN0aW9uIGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5jb25jYXQoZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyhvYmopKTtcbn1cbl9fbmFtZShnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcywgXCJnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllc1wiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvaXNOYU4uanNcbmZ1bmN0aW9uIF9pc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuX19uYW1lKF9pc05hTiwgXCJfaXNOYU5cIik7XG52YXIgaXNOYU4yID0gTnVtYmVyLmlzTmFOIHx8IF9pc05hTjtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0T3BlcmF0b3IuanNcbmZ1bmN0aW9uIGlzT2JqZWN0VHlwZShvYmopIHtcbiAgdmFyIG9iamVjdFR5cGUgPSB0eXBlKG9iaik7XG4gIHZhciBvYmplY3RUeXBlcyA9IFtcIkFycmF5XCIsIFwiT2JqZWN0XCIsIFwiRnVuY3Rpb25cIl07XG4gIHJldHVybiBvYmplY3RUeXBlcy5pbmRleE9mKG9iamVjdFR5cGUpICE9PSAtMTtcbn1cbl9fbmFtZShpc09iamVjdFR5cGUsIFwiaXNPYmplY3RUeXBlXCIpO1xuZnVuY3Rpb24gZ2V0T3BlcmF0b3Iob2JqLCBhcmdzKSB7XG4gIHZhciBvcGVyYXRvciA9IGZsYWcob2JqLCBcIm9wZXJhdG9yXCIpO1xuICB2YXIgbmVnYXRlID0gZmxhZyhvYmosIFwibmVnYXRlXCIpO1xuICB2YXIgZXhwZWN0ZWQgPSBhcmdzWzNdO1xuICB2YXIgbXNnID0gbmVnYXRlID8gYXJnc1syXSA6IGFyZ3NbMV07XG4gIGlmIChvcGVyYXRvcikge1xuICAgIHJldHVybiBvcGVyYXRvcjtcbiAgfVxuICBpZiAodHlwZW9mIG1zZyA9PT0gXCJmdW5jdGlvblwiKVxuICAgIG1zZyA9IG1zZygpO1xuICBtc2cgPSBtc2cgfHwgXCJcIjtcbiAgaWYgKCFtc2cpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIGlmICgvXFxzaGF2ZVxccy8udGVzdChtc2cpKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICB2YXIgaXNPYmplY3QgPSBpc09iamVjdFR5cGUoZXhwZWN0ZWQpO1xuICBpZiAoL1xcc25vdFxccy8udGVzdChtc2cpKSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0ID8gXCJub3REZWVwU3RyaWN0RXF1YWxcIiA6IFwibm90U3RyaWN0RXF1YWxcIjtcbiAgfVxuICByZXR1cm4gaXNPYmplY3QgPyBcImRlZXBTdHJpY3RFcXVhbFwiIDogXCJzdHJpY3RFcXVhbFwiO1xufVxuX19uYW1lKGdldE9wZXJhdG9yLCBcImdldE9wZXJhdG9yXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9pbmRleC5qc1xuZnVuY3Rpb24gZ2V0TmFtZShmbikge1xuICByZXR1cm4gZm4ubmFtZTtcbn1cbl9fbmFtZShnZXROYW1lLCBcImdldE5hbWVcIik7XG5mdW5jdGlvbiBpc1JlZ0V4cDIob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gXCJbb2JqZWN0IFJlZ0V4cF1cIjtcbn1cbl9fbmFtZShpc1JlZ0V4cDIsIFwiaXNSZWdFeHBcIik7XG5mdW5jdGlvbiBpc051bWVyaWMob2JqKSB7XG4gIHJldHVybiBbXCJOdW1iZXJcIiwgXCJCaWdJbnRcIl0uaW5jbHVkZXModHlwZShvYmopKTtcbn1cbl9fbmFtZShpc051bWVyaWMsIFwiaXNOdW1lcmljXCIpO1xuXG4vLyBsaWIvY2hhaS9jb3JlL2Fzc2VydGlvbnMuanNcbnZhciB7IGZsYWc6IGZsYWcyIH0gPSB1dGlsc19leHBvcnRzO1xuW1xuICBcInRvXCIsXG4gIFwiYmVcIixcbiAgXCJiZWVuXCIsXG4gIFwiaXNcIixcbiAgXCJhbmRcIixcbiAgXCJoYXNcIixcbiAgXCJoYXZlXCIsXG4gIFwid2l0aFwiLFxuICBcInRoYXRcIixcbiAgXCJ3aGljaFwiLFxuICBcImF0XCIsXG4gIFwib2ZcIixcbiAgXCJzYW1lXCIsXG4gIFwiYnV0XCIsXG4gIFwiZG9lc1wiLFxuICBcInN0aWxsXCIsXG4gIFwiYWxzb1wiXG5dLmZvckVhY2goZnVuY3Rpb24oY2hhaW4pIHtcbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KGNoYWluKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwibm90XCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiLCB0cnVlKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZGVlcFwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJkZWVwXCIsIHRydWUpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJuZXN0ZWRcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwibmVzdGVkXCIsIHRydWUpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJvd25cIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwib3duXCIsIHRydWUpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJvcmRlcmVkXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcIm9yZGVyZWRcIiwgdHJ1ZSk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImFueVwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJhbnlcIiwgdHJ1ZSk7XG4gIGZsYWcyKHRoaXMsIFwiYWxsXCIsIGZhbHNlKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiYWxsXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcImFsbFwiLCB0cnVlKTtcbiAgZmxhZzIodGhpcywgXCJhbnlcIiwgZmFsc2UpO1xufSk7XG52YXIgZnVuY3Rpb25UeXBlcyA9IHtcbiAgXCJmdW5jdGlvblwiOiBbXCJmdW5jdGlvblwiLCBcImFzeW5jZnVuY3Rpb25cIiwgXCJnZW5lcmF0b3JmdW5jdGlvblwiLCBcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIl0sXG4gIFwiYXN5bmNmdW5jdGlvblwiOiBbXCJhc3luY2Z1bmN0aW9uXCIsIFwiYXN5bmNnZW5lcmF0b3JmdW5jdGlvblwiXSxcbiAgXCJnZW5lcmF0b3JmdW5jdGlvblwiOiBbXCJnZW5lcmF0b3JmdW5jdGlvblwiLCBcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIl0sXG4gIFwiYXN5bmNnZW5lcmF0b3JmdW5jdGlvblwiOiBbXCJhc3luY2dlbmVyYXRvcmZ1bmN0aW9uXCJdXG59O1xuZnVuY3Rpb24gYW4odHlwZTMsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB0eXBlMyA9IHR5cGUzLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgYXJ0aWNsZSA9IH5bXCJhXCIsIFwiZVwiLCBcImlcIiwgXCJvXCIsIFwidVwiXS5pbmRleE9mKHR5cGUzLmNoYXJBdCgwKSkgPyBcImFuIFwiIDogXCJhIFwiO1xuICBjb25zdCBkZXRlY3RlZFR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGZ1bmN0aW9uVHlwZXNbXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlMykpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGZ1bmN0aW9uVHlwZXNbdHlwZTNdLmluY2x1ZGVzKGRldGVjdGVkVHlwZSksXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgXCIgKyBhcnRpY2xlICsgdHlwZTMsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIFwiICsgYXJ0aWNsZSArIHR5cGUzXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIHR5cGUzID09PSBkZXRlY3RlZFR5cGUsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgXCIgKyBhcnRpY2xlICsgdHlwZTMsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIFwiICsgYXJ0aWNsZSArIHR5cGUzXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFuLCBcImFuXCIpO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImFuXCIsIGFuKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJhXCIsIGFuKTtcbmZ1bmN0aW9uIFNhbWVWYWx1ZVplcm8oYSwgYikge1xuICByZXR1cm4gaXNOYU4yKGEpICYmIGlzTmFOMihiKSB8fCBhID09PSBiO1xufVxuX19uYW1lKFNhbWVWYWx1ZVplcm8sIFwiU2FtZVZhbHVlWmVyb1wiKTtcbmZ1bmN0aW9uIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKCkge1xuICBmbGFnMih0aGlzLCBcImNvbnRhaW5zXCIsIHRydWUpO1xufVxuX19uYW1lKGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yLCBcImluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yXCIpO1xuZnVuY3Rpb24gaW5jbHVkZSh2YWwsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgbmVnYXRlID0gZmxhZzIodGhpcywgXCJuZWdhdGVcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGlzRGVlcCA9IGZsYWcyKHRoaXMsIFwiZGVlcFwiKSwgZGVzY3JpcHRvciA9IGlzRGVlcCA/IFwiZGVlcCBcIiA6IFwiXCIsIGlzRXFsID0gaXNEZWVwID8gZmxhZzIodGhpcywgXCJlcWxcIikgOiBTYW1lVmFsdWVaZXJvO1xuICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiO1xuICB2YXIgaW5jbHVkZWQgPSBmYWxzZTtcbiAgc3dpdGNoIChvYmpUeXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgaW5jbHVkZWQgPSBvYmouaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ3ZWFrc2V0XCI6XG4gICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICBmbGFnTXNnICsgXCJ1bmFibGUgdG8gdXNlIC5kZWVwLmluY2x1ZGUgd2l0aCBXZWFrU2V0XCIsXG4gICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgIHNzZmlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGluY2x1ZGVkID0gb2JqLmhhcyh2YWwpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm1hcFwiOlxuICAgICAgb2JqLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICBpbmNsdWRlZCA9IGluY2x1ZGVkIHx8IGlzRXFsKGl0ZW0sIHZhbCk7XG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgb2JqLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgIGluY2x1ZGVkID0gaW5jbHVkZWQgfHwgaXNFcWwoaXRlbSwgdmFsKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmNsdWRlZCA9IG9iai5oYXModmFsKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICBpbmNsdWRlZCA9IG9iai5zb21lKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gaXNFcWwoaXRlbSwgdmFsKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmNsdWRlZCA9IG9iai5pbmRleE9mKHZhbCkgIT09IC0xO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh2YWwgIT09IE9iamVjdCh2YWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICBmbGFnTXNnICsgXCJ0aGUgZ2l2ZW4gY29tYmluYXRpb24gb2YgYXJndW1lbnRzIChcIiArIG9ialR5cGUgKyBcIiBhbmQgXCIgKyB0eXBlKHZhbCkudG9Mb3dlckNhc2UoKSArIFwiKSBpcyBpbnZhbGlkIGZvciB0aGlzIGFzc2VydGlvbi4gWW91IGNhbiB1c2UgYW4gYXJyYXksIGEgbWFwLCBhbiBvYmplY3QsIGEgc2V0LCBhIHN0cmluZywgb3IgYSB3ZWFrc2V0IGluc3RlYWQgb2YgYSBcIiArIHR5cGUodmFsKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcHMgPSBPYmplY3Qua2V5cyh2YWwpLCBmaXJzdEVyciA9IG51bGwsIG51bUVycnMgPSAwO1xuICAgICAgcHJvcHMuZm9yRWFjaChmdW5jdGlvbihwcm9wKSB7XG4gICAgICAgIHZhciBwcm9wQXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbihvYmopO1xuICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIHByb3BBc3NlcnRpb24sIHRydWUpO1xuICAgICAgICBmbGFnMihwcm9wQXNzZXJ0aW9uLCBcImxvY2tTc2ZpXCIsIHRydWUpO1xuICAgICAgICBpZiAoIW5lZ2F0ZSB8fCBwcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBwcm9wQXNzZXJ0aW9uLnByb3BlcnR5KHByb3AsIHZhbFtwcm9wXSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcHJvcEFzc2VydGlvbi5wcm9wZXJ0eShwcm9wLCB2YWxbcHJvcF0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAoIWNoZWNrX2Vycm9yX2V4cG9ydHMuY29tcGF0aWJsZUNvbnN0cnVjdG9yKGVyciwgQXNzZXJ0aW9uRXJyb3IpKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaXJzdEVyciA9PT0gbnVsbClcbiAgICAgICAgICAgIGZpcnN0RXJyID0gZXJyO1xuICAgICAgICAgIG51bUVycnMrKztcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcyk7XG4gICAgICBpZiAobmVnYXRlICYmIHByb3BzLmxlbmd0aCA+IDEgJiYgbnVtRXJycyA9PT0gcHJvcHMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IGZpcnN0RXJyO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICB9XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGluY2x1ZGVkLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBcIiArIGRlc2NyaXB0b3IgKyBcImluY2x1ZGUgXCIgKyBpbnNwZWN0Mih2YWwpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgXCIgKyBkZXNjcmlwdG9yICsgXCJpbmNsdWRlIFwiICsgaW5zcGVjdDIodmFsKVxuICApO1xufVxuX19uYW1lKGluY2x1ZGUsIFwiaW5jbHVkZVwiKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJpbmNsdWRlXCIsIGluY2x1ZGUsIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJjb250YWluXCIsIGluY2x1ZGUsIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJjb250YWluc1wiLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiaW5jbHVkZXNcIiwgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwib2tcIiwgZnVuY3Rpb24oKSB7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB0cnV0aHlcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc3lcIlxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJ0cnVlXCIsIGZ1bmN0aW9uKCkge1xuICB0aGlzLmFzc2VydChcbiAgICB0cnVlID09PSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgdHJ1ZVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmYWxzZVwiLFxuICAgIGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpID8gZmFsc2UgOiB0cnVlXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm51bWVyaWNcIiwgZnVuY3Rpb24oKSB7XG4gIGNvbnN0IG9iamVjdCA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB0aGlzLmFzc2VydChcbiAgICBbXCJOdW1iZXJcIiwgXCJCaWdJbnRcIl0uaW5jbHVkZXModHlwZShvYmplY3QpKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgbnVtZXJpY1wiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgbnVtZXJpY1wiLFxuICAgIGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpID8gZmFsc2UgOiB0cnVlXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImNhbGxhYmxlXCIsIGZ1bmN0aW9uKCkge1xuICBjb25zdCB2YWwgPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgY29uc3Qgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgY29uc3QgbWVzc2FnZSA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKTtcbiAgY29uc3QgbXNnID0gbWVzc2FnZSA/IGAke21lc3NhZ2V9OiBgIDogXCJcIjtcbiAgY29uc3QgbmVnYXRlID0gZmxhZzIodGhpcywgXCJuZWdhdGVcIik7XG4gIGNvbnN0IGFzc2VydGlvbk1lc3NhZ2UgPSBuZWdhdGUgPyBgJHttc2d9ZXhwZWN0ZWQgJHtpbnNwZWN0Mih2YWwpfSBub3QgdG8gYmUgYSBjYWxsYWJsZSBmdW5jdGlvbmAgOiBgJHttc2d9ZXhwZWN0ZWQgJHtpbnNwZWN0Mih2YWwpfSB0byBiZSBhIGNhbGxhYmxlIGZ1bmN0aW9uYDtcbiAgY29uc3QgaXNDYWxsYWJsZSA9IFtcIkZ1bmN0aW9uXCIsIFwiQXN5bmNGdW5jdGlvblwiLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIsIFwiQXN5bmNHZW5lcmF0b3JGdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlKHZhbCkpO1xuICBpZiAoaXNDYWxsYWJsZSAmJiBuZWdhdGUgfHwgIWlzQ2FsbGFibGUgJiYgIW5lZ2F0ZSkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIGFzc2VydGlvbk1lc3NhZ2UsXG4gICAgICB2b2lkIDAsXG4gICAgICBzc2ZpXG4gICAgKTtcbiAgfVxufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJmYWxzZVwiLCBmdW5jdGlvbigpIHtcbiAgdGhpcy5hc3NlcnQoXG4gICAgZmFsc2UgPT09IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmYWxzZVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB0cnVlXCIsXG4gICAgZmxhZzIodGhpcywgXCJuZWdhdGVcIikgPyB0cnVlIDogZmFsc2VcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwibnVsbFwiLCBmdW5jdGlvbigpIHtcbiAgdGhpcy5hc3NlcnQoXG4gICAgbnVsbCA9PT0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIG51bGxcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIG51bGxcIlxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJ1bmRlZmluZWRcIiwgZnVuY3Rpb24oKSB7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHZvaWQgMCA9PT0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIHVuZGVmaW5lZFwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgdW5kZWZpbmVkXCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiTmFOXCIsIGZ1bmN0aW9uKCkge1xuICB0aGlzLmFzc2VydChcbiAgICBpc05hTjIoZmxhZzIodGhpcywgXCJvYmplY3RcIikpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBOYU5cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIE5hTlwiXG4gICk7XG59KTtcbmZ1bmN0aW9uIGFzc2VydEV4aXN0KCkge1xuICB2YXIgdmFsID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHZvaWQgMCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZXhpc3RcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGV4aXN0XCJcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRFeGlzdCwgXCJhc3NlcnRFeGlzdFwiKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImV4aXN0XCIsIGFzc2VydEV4aXN0KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImV4aXN0c1wiLCBhc3NlcnRFeGlzdCk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJlbXB0eVwiLCBmdW5jdGlvbigpIHtcbiAgdmFyIHZhbCA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBpdGVtc0NvdW50O1xuICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiO1xuICBzd2l0Y2ggKHR5cGUodmFsKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSBcImFycmF5XCI6XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgaXRlbXNDb3VudCA9IHZhbC5sZW5ndGg7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibWFwXCI6XG4gICAgY2FzZSBcInNldFwiOlxuICAgICAgaXRlbXNDb3VudCA9IHZhbC5zaXplO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIndlYWttYXBcIjpcbiAgICBjYXNlIFwid2Vha3NldFwiOlxuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBmbGFnTXNnICsgXCIuZW1wdHkgd2FzIHBhc3NlZCBhIHdlYWsgY29sbGVjdGlvblwiLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHNzZmlcbiAgICAgICk7XG4gICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICB2YXIgbXNnID0gZmxhZ01zZyArIFwiLmVtcHR5IHdhcyBwYXNzZWQgYSBmdW5jdGlvbiBcIiArIGdldE5hbWUodmFsKTtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtc2cudHJpbSgpLCB2b2lkIDAsIHNzZmkpO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodmFsICE9PSBPYmplY3QodmFsKSkge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArIFwiLmVtcHR5IHdhcyBwYXNzZWQgbm9uLXN0cmluZyBwcmltaXRpdmUgXCIgKyBpbnNwZWN0Mih2YWwpLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpdGVtc0NvdW50ID0gT2JqZWN0LmtleXModmFsKS5sZW5ndGg7XG4gIH1cbiAgdGhpcy5hc3NlcnQoXG4gICAgMCA9PT0gaXRlbXNDb3VudCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZW1wdHlcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIGVtcHR5XCJcbiAgKTtcbn0pO1xuZnVuY3Rpb24gY2hlY2tBcmd1bWVudHMoKSB7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgdHlwZTMgPSB0eXBlKG9iaik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIFwiQXJndW1lbnRzXCIgPT09IHR5cGUzLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhcmd1bWVudHMgYnV0IGdvdCBcIiArIHR5cGUzLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYXJndW1lbnRzXCJcbiAgKTtcbn1cbl9fbmFtZShjaGVja0FyZ3VtZW50cywgXCJjaGVja0FyZ3VtZW50c1wiKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImFyZ3VtZW50c1wiLCBjaGVja0FyZ3VtZW50cyk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJBcmd1bWVudHNcIiwgY2hlY2tBcmd1bWVudHMpO1xuZnVuY3Rpb24gYXNzZXJ0RXF1YWwodmFsLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICBpZiAoZmxhZzIodGhpcywgXCJkZWVwXCIpKSB7XG4gICAgdmFyIHByZXZMb2NrU3NmaSA9IGZsYWcyKHRoaXMsIFwibG9ja1NzZmlcIik7XG4gICAgZmxhZzIodGhpcywgXCJsb2NrU3NmaVwiLCB0cnVlKTtcbiAgICB0aGlzLmVxbCh2YWwpO1xuICAgIGZsYWcyKHRoaXMsIFwibG9ja1NzZmlcIiwgcHJldkxvY2tTc2ZpKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIHZhbCA9PT0gb2JqLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGVxdWFsICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBlcXVhbCAje2V4cH1cIixcbiAgICAgIHZhbCxcbiAgICAgIHRoaXMuX29iaixcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG59XG5fX25hbWUoYXNzZXJ0RXF1YWwsIFwiYXNzZXJ0RXF1YWxcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZXF1YWxcIiwgYXNzZXJ0RXF1YWwpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxdWFsc1wiLCBhc3NlcnRFcXVhbCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZXFcIiwgYXNzZXJ0RXF1YWwpO1xuZnVuY3Rpb24gYXNzZXJ0RXFsKG9iaiwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBlcWwgPSBmbGFnMih0aGlzLCBcImVxbFwiKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgZXFsKG9iaiwgZmxhZzIodGhpcywgXCJvYmplY3RcIikpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwbHkgZXF1YWwgI3tleHB9XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBkZWVwbHkgZXF1YWwgI3tleHB9XCIsXG4gICAgb2JqLFxuICAgIHRoaXMuX29iaixcbiAgICB0cnVlXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0RXFsLCBcImFzc2VydEVxbFwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJlcWxcIiwgYXNzZXJ0RXFsKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJlcWxzXCIsIGFzc2VydEVxbCk7XG5mdW5jdGlvbiBhc3NlcnRBYm92ZShuLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09IFwiZGF0ZVwiICYmIG5UeXBlICE9PSBcImRhdGVcIikpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gYWJvdmUgbXVzdCBiZSBhIGRhdGVcIiwgdm9pZCAwLCBzc2ZpKTtcbiAgfSBlbHNlIGlmICghaXNOdW1lcmljKG4pICYmIChkb0xlbmd0aCB8fCBpc051bWVyaWMob2JqKSkpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gYWJvdmUgbXVzdCBiZSBhIG51bWJlclwiLCB2b2lkIDAsIHNzZmkpO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gXCJkYXRlXCIgJiYgIWlzTnVtZXJpYyhvYmopKSkge1xuICAgIHZhciBwcmludE9iaiA9IG9ialR5cGUgPT09IFwic3RyaW5nXCIgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIiwgdm9pZCAwLCBzc2ZpKTtcbiAgfVxuICBpZiAoZG9MZW5ndGgpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IFwibGVuZ3RoXCIsIGl0ZW1zQ291bnQ7XG4gICAgaWYgKG9ialR5cGUgPT09IFwibWFwXCIgfHwgb2JqVHlwZSA9PT0gXCJzZXRcIikge1xuICAgICAgZGVzY3JpcHRvciA9IFwic2l6ZVwiO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpdGVtc0NvdW50ID4gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYWJvdmUgI3tleHB9IGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBhYm92ZSAje2V4cH1cIixcbiAgICAgIG4sXG4gICAgICBpdGVtc0NvdW50XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIG9iaiA+IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYWJvdmUgI3tleHB9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbW9zdCAje2V4cH1cIixcbiAgICAgIG5cbiAgICApO1xuICB9XG59XG5fX25hbWUoYXNzZXJ0QWJvdmUsIFwiYXNzZXJ0QWJvdmVcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiYWJvdmVcIiwgYXNzZXJ0QWJvdmUpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImd0XCIsIGFzc2VydEFib3ZlKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJncmVhdGVyVGhhblwiLCBhc3NlcnRBYm92ZSk7XG5mdW5jdGlvbiBhc3NlcnRMZWFzdChuLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKSwgZXJyb3JNZXNzYWdlLCBzaG91bGRUaHJvdyA9IHRydWU7XG4gIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcIm1hcFwiICYmIG9ialR5cGUgIT09IFwic2V0XCIpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgfVxuICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSBcImRhdGVcIiAmJiBuVHlwZSAhPT0gXCJkYXRlXCIpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gbGVhc3QgbXVzdCBiZSBhIGRhdGVcIjtcbiAgfSBlbHNlIGlmICghaXNOdW1lcmljKG4pICYmIChkb0xlbmd0aCB8fCBpc051bWVyaWMob2JqKSkpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudCB0byBsZWFzdCBtdXN0IGJlIGEgbnVtYmVyXCI7XG4gIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpKSB7XG4gICAgdmFyIHByaW50T2JqID0gb2JqVHlwZSA9PT0gXCJzdHJpbmdcIiA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJleHBlY3RlZCBcIiArIHByaW50T2JqICsgXCIgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlXCI7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgfVxuICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZXJyb3JNZXNzYWdlLCB2b2lkIDAsIHNzZmkpO1xuICB9XG4gIGlmIChkb0xlbmd0aCkge1xuICAgIHZhciBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgICBpZiAob2JqVHlwZSA9PT0gXCJtYXBcIiB8fCBvYmpUeXBlID09PSBcInNldFwiKSB7XG4gICAgICBkZXNjcmlwdG9yID0gXCJzaXplXCI7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgIH1cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGl0ZW1zQ291bnQgPj0gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYXQgbGVhc3QgI3tleHB9IGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGJlbG93ICN7ZXhwfVwiLFxuICAgICAgbixcbiAgICAgIGl0ZW1zQ291bnRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgb2JqID49IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbGVhc3QgI3tleHB9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYmVsb3cgI3tleHB9XCIsXG4gICAgICBuXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFzc2VydExlYXN0LCBcImFzc2VydExlYXN0XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImxlYXN0XCIsIGFzc2VydExlYXN0KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJndGVcIiwgYXNzZXJ0TGVhc3QpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImdyZWF0ZXJUaGFuT3JFcXVhbFwiLCBhc3NlcnRMZWFzdCk7XG5mdW5jdGlvbiBhc3NlcnRCZWxvdyhuLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKSwgZXJyb3JNZXNzYWdlLCBzaG91bGRUaHJvdyA9IHRydWU7XG4gIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcIm1hcFwiICYmIG9ialR5cGUgIT09IFwic2V0XCIpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgfVxuICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSBcImRhdGVcIiAmJiBuVHlwZSAhPT0gXCJkYXRlXCIpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gYmVsb3cgbXVzdCBiZSBhIGRhdGVcIjtcbiAgfSBlbHNlIGlmICghaXNOdW1lcmljKG4pICYmIChkb0xlbmd0aCB8fCBpc051bWVyaWMob2JqKSkpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudCB0byBiZWxvdyBtdXN0IGJlIGEgbnVtYmVyXCI7XG4gIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpKSB7XG4gICAgdmFyIHByaW50T2JqID0gb2JqVHlwZSA9PT0gXCJzdHJpbmdcIiA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJleHBlY3RlZCBcIiArIHByaW50T2JqICsgXCIgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlXCI7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgfVxuICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZXJyb3JNZXNzYWdlLCB2b2lkIDAsIHNzZmkpO1xuICB9XG4gIGlmIChkb0xlbmd0aCkge1xuICAgIHZhciBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgICBpZiAob2JqVHlwZSA9PT0gXCJtYXBcIiB8fCBvYmpUeXBlID09PSBcInNldFwiKSB7XG4gICAgICBkZXNjcmlwdG9yID0gXCJzaXplXCI7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgIH1cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGl0ZW1zQ291bnQgPCBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBiZWxvdyAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGJlbG93ICN7ZXhwfVwiLFxuICAgICAgbixcbiAgICAgIGl0ZW1zQ291bnRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgb2JqIDwgbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBiZWxvdyAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBsZWFzdCAje2V4cH1cIixcbiAgICAgIG5cbiAgICApO1xuICB9XG59XG5fX25hbWUoYXNzZXJ0QmVsb3csIFwiYXNzZXJ0QmVsb3dcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiYmVsb3dcIiwgYXNzZXJ0QmVsb3cpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImx0XCIsIGFzc2VydEJlbG93KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJsZXNzVGhhblwiLCBhc3NlcnRCZWxvdyk7XG5mdW5jdGlvbiBhc3NlcnRNb3N0KG4sIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGRvTGVuZ3RoID0gZmxhZzIodGhpcywgXCJkb0xlbmd0aFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgbXNnUHJlZml4ID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCksIG5UeXBlID0gdHlwZShuKS50b0xvd2VyQ2FzZSgpLCBlcnJvck1lc3NhZ2UsIHNob3VsZFRocm93ID0gdHJ1ZTtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09IFwiZGF0ZVwiICYmIG5UeXBlICE9PSBcImRhdGVcIikpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudCB0byBtb3N0IG11c3QgYmUgYSBkYXRlXCI7XG4gIH0gZWxzZSBpZiAoIWlzTnVtZXJpYyhuKSAmJiAoZG9MZW5ndGggfHwgaXNOdW1lcmljKG9iaikpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gbW9zdCBtdXN0IGJlIGEgbnVtYmVyXCI7XG4gIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpKSB7XG4gICAgdmFyIHByaW50T2JqID0gb2JqVHlwZSA9PT0gXCJzdHJpbmdcIiA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJleHBlY3RlZCBcIiArIHByaW50T2JqICsgXCIgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlXCI7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgfVxuICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZXJyb3JNZXNzYWdlLCB2b2lkIDAsIHNzZmkpO1xuICB9XG4gIGlmIChkb0xlbmd0aCkge1xuICAgIHZhciBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgICBpZiAob2JqVHlwZSA9PT0gXCJtYXBcIiB8fCBvYmpUeXBlID09PSBcInNldFwiKSB7XG4gICAgICBkZXNjcmlwdG9yID0gXCJzaXplXCI7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgIH1cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGl0ZW1zQ291bnQgPD0gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYXQgbW9zdCAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYWJvdmUgI3tleHB9XCIsXG4gICAgICBuLFxuICAgICAgaXRlbXNDb3VudFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBvYmogPD0gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBtb3N0ICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFib3ZlICN7ZXhwfVwiLFxuICAgICAgblxuICAgICk7XG4gIH1cbn1cbl9fbmFtZShhc3NlcnRNb3N0LCBcImFzc2VydE1vc3RcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibW9zdFwiLCBhc3NlcnRNb3N0KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJsdGVcIiwgYXNzZXJ0TW9zdCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibGVzc1RoYW5PckVxdWFsXCIsIGFzc2VydE1vc3QpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIndpdGhpblwiLCBmdW5jdGlvbihzdGFydCwgZmluaXNoLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBzdGFydFR5cGUgPSB0eXBlKHN0YXJ0KS50b0xvd2VyQ2FzZSgpLCBmaW5pc2hUeXBlID0gdHlwZShmaW5pc2gpLnRvTG93ZXJDYXNlKCksIGVycm9yTWVzc2FnZSwgc2hvdWxkVGhyb3cgPSB0cnVlLCByYW5nZSA9IHN0YXJ0VHlwZSA9PT0gXCJkYXRlXCIgJiYgZmluaXNoVHlwZSA9PT0gXCJkYXRlXCIgPyBzdGFydC50b0lTT1N0cmluZygpICsgXCIuLlwiICsgZmluaXNoLnRvSVNPU3RyaW5nKCkgOiBzdGFydCArIFwiLi5cIiArIGZpbmlzaDtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09IFwiZGF0ZVwiICYmIChzdGFydFR5cGUgIT09IFwiZGF0ZVwiIHx8IGZpbmlzaFR5cGUgIT09IFwiZGF0ZVwiKSkpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudHMgdG8gd2l0aGluIG11c3QgYmUgZGF0ZXNcIjtcbiAgfSBlbHNlIGlmICgoIWlzTnVtZXJpYyhzdGFydCkgfHwgIWlzTnVtZXJpYyhmaW5pc2gpKSAmJiAoZG9MZW5ndGggfHwgaXNOdW1lcmljKG9iaikpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnRzIHRvIHdpdGhpbiBtdXN0IGJlIG51bWJlcnNcIjtcbiAgfSBlbHNlIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgIT09IFwiZGF0ZVwiICYmICFpc051bWVyaWMob2JqKSkpIHtcbiAgICB2YXIgcHJpbnRPYmogPSBvYmpUeXBlID09PSBcInN0cmluZ1wiID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIjtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICB9XG4gIGlmIChzaG91bGRUaHJvdykge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICAgIGlmIChvYmpUeXBlID09PSBcIm1hcFwiIHx8IG9ialR5cGUgPT09IFwic2V0XCIpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXRlbXNDb3VudCA+PSBzdGFydCAmJiBpdGVtc0NvdW50IDw9IGZpbmlzaCxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgd2l0aGluIFwiICsgcmFuZ2UsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiB3aXRoaW4gXCIgKyByYW5nZVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBvYmogPj0gc3RhcnQgJiYgb2JqIDw9IGZpbmlzaCxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB3aXRoaW4gXCIgKyByYW5nZSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgd2l0aGluIFwiICsgcmFuZ2VcbiAgICApO1xuICB9XG59KTtcbmZ1bmN0aW9uIGFzc2VydEluc3RhbmNlT2YoY29uc3RydWN0b3IsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgdGFyZ2V0ID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHZhciBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICB2YXIgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKTtcbiAgdHJ5IHtcbiAgICB2YXIgaXNJbnN0YW5jZU9mID0gdGFyZ2V0IGluc3RhbmNlb2YgY29uc3RydWN0b3I7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHtcbiAgICAgIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCI7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgIGZsYWdNc2cgKyBcIlRoZSBpbnN0YW5jZW9mIGFzc2VydGlvbiBuZWVkcyBhIGNvbnN0cnVjdG9yIGJ1dCBcIiArIHR5cGUoY29uc3RydWN0b3IpICsgXCIgd2FzIGdpdmVuLlwiLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHNzZmlcbiAgICAgICk7XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxuICB2YXIgbmFtZSA9IGdldE5hbWUoY29uc3RydWN0b3IpO1xuICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgbmFtZSA9IFwiYW4gdW5uYW1lZCBjb25zdHJ1Y3RvclwiO1xuICB9XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGlzSW5zdGFuY2VPZixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYW4gaW5zdGFuY2Ugb2YgXCIgKyBuYW1lLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYW4gaW5zdGFuY2Ugb2YgXCIgKyBuYW1lXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0SW5zdGFuY2VPZiwgXCJhc3NlcnRJbnN0YW5jZU9mXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImluc3RhbmNlb2ZcIiwgYXNzZXJ0SW5zdGFuY2VPZik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaW5zdGFuY2VPZlwiLCBhc3NlcnRJbnN0YW5jZU9mKTtcbmZ1bmN0aW9uIGFzc2VydFByb3BlcnR5KG5hbWUsIHZhbCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBpc05lc3RlZCA9IGZsYWcyKHRoaXMsIFwibmVzdGVkXCIpLCBpc093biA9IGZsYWcyKHRoaXMsIFwib3duXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgbmFtZVR5cGUgPSB0eXBlb2YgbmFtZTtcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgaWYgKGlzTmVzdGVkKSB7XG4gICAgaWYgKG5hbWVUeXBlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgIGZsYWdNc2cgKyBcInRoZSBhcmd1bWVudCB0byBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nIHdoZW4gdXNpbmcgbmVzdGVkIHN5bnRheFwiLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHNzZmlcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChuYW1lVHlwZSAhPT0gXCJzdHJpbmdcIiAmJiBuYW1lVHlwZSAhPT0gXCJudW1iZXJcIiAmJiBuYW1lVHlwZSAhPT0gXCJzeW1ib2xcIikge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBmbGFnTXNnICsgXCJ0aGUgYXJndW1lbnQgdG8gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZywgbnVtYmVyLCBvciBzeW1ib2xcIixcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoaXNOZXN0ZWQgJiYgaXNPd24pIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnICsgJ1RoZSBcIm5lc3RlZFwiIGFuZCBcIm93blwiIGZsYWdzIGNhbm5vdCBiZSBjb21iaW5lZC4nLFxuICAgICAgdm9pZCAwLFxuICAgICAgc3NmaVxuICAgICk7XG4gIH1cbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIGZsYWdNc2cgKyBcIlRhcmdldCBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuXCIsXG4gICAgICB2b2lkIDAsXG4gICAgICBzc2ZpXG4gICAgKTtcbiAgfVxuICB2YXIgaXNEZWVwID0gZmxhZzIodGhpcywgXCJkZWVwXCIpLCBuZWdhdGUgPSBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSwgcGF0aEluZm8gPSBpc05lc3RlZCA/IGdldFBhdGhJbmZvKG9iaiwgbmFtZSkgOiBudWxsLCB2YWx1ZSA9IGlzTmVzdGVkID8gcGF0aEluZm8udmFsdWUgOiBvYmpbbmFtZV0sIGlzRXFsID0gaXNEZWVwID8gZmxhZzIodGhpcywgXCJlcWxcIikgOiAodmFsMSwgdmFsMikgPT4gdmFsMSA9PT0gdmFsMjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBcIlwiO1xuICBpZiAoaXNEZWVwKVxuICAgIGRlc2NyaXB0b3IgKz0gXCJkZWVwIFwiO1xuICBpZiAoaXNPd24pXG4gICAgZGVzY3JpcHRvciArPSBcIm93biBcIjtcbiAgaWYgKGlzTmVzdGVkKVxuICAgIGRlc2NyaXB0b3IgKz0gXCJuZXN0ZWQgXCI7XG4gIGRlc2NyaXB0b3IgKz0gXCJwcm9wZXJ0eSBcIjtcbiAgdmFyIGhhc1Byb3BlcnR5MjtcbiAgaWYgKGlzT3duKVxuICAgIGhhc1Byb3BlcnR5MiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIG5hbWUpO1xuICBlbHNlIGlmIChpc05lc3RlZClcbiAgICBoYXNQcm9wZXJ0eTIgPSBwYXRoSW5mby5leGlzdHM7XG4gIGVsc2VcbiAgICBoYXNQcm9wZXJ0eTIgPSBoYXNQcm9wZXJ0eShvYmosIG5hbWUpO1xuICBpZiAoIW5lZ2F0ZSB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBoYXNQcm9wZXJ0eTIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKVxuICAgICk7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBoYXNQcm9wZXJ0eTIgJiYgaXNFcWwodmFsLCB2YWx1ZSksXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9mICN7ZXhwfSwgYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9mICN7YWN0fVwiLFxuICAgICAgdmFsLFxuICAgICAgdmFsdWVcbiAgICApO1xuICB9XG4gIGZsYWcyKHRoaXMsIFwib2JqZWN0XCIsIHZhbHVlKTtcbn1cbl9fbmFtZShhc3NlcnRQcm9wZXJ0eSwgXCJhc3NlcnRQcm9wZXJ0eVwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJwcm9wZXJ0eVwiLCBhc3NlcnRQcm9wZXJ0eSk7XG5mdW5jdGlvbiBhc3NlcnRPd25Qcm9wZXJ0eShuYW1lLCB2YWx1ZSwgbXNnKSB7XG4gIGZsYWcyKHRoaXMsIFwib3duXCIsIHRydWUpO1xuICBhc3NlcnRQcm9wZXJ0eS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuX19uYW1lKGFzc2VydE93blByb3BlcnR5LCBcImFzc2VydE93blByb3BlcnR5XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIm93blByb3BlcnR5XCIsIGFzc2VydE93blByb3BlcnR5KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJoYXZlT3duUHJvcGVydHlcIiwgYXNzZXJ0T3duUHJvcGVydHkpO1xuZnVuY3Rpb24gYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5hbWUsIGRlc2NyaXB0b3IsIG1zZykge1xuICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICBtc2cgPSBkZXNjcmlwdG9yO1xuICAgIGRlc2NyaXB0b3IgPSBudWxsO1xuICB9XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdmFyIGFjdHVhbERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdChvYmopLCBuYW1lKTtcbiAgdmFyIGVxbCA9IGZsYWcyKHRoaXMsIFwiZXFsXCIpO1xuICBpZiAoYWN0dWFsRGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBlcWwoZGVzY3JpcHRvciwgYWN0dWFsRGVzY3JpcHRvciksXG4gICAgICBcImV4cGVjdGVkIHRoZSBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgXCIgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9uICN7dGhpc30gdG8gbWF0Y2ggXCIgKyBpbnNwZWN0MihkZXNjcmlwdG9yKSArIFwiLCBnb3QgXCIgKyBpbnNwZWN0MihhY3R1YWxEZXNjcmlwdG9yKSxcbiAgICAgIFwiZXhwZWN0ZWQgdGhlIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciBcIiArIGluc3BlY3QyKG5hbWUpICsgXCIgb24gI3t0aGlzfSB0byBub3QgbWF0Y2ggXCIgKyBpbnNwZWN0MihkZXNjcmlwdG9yKSxcbiAgICAgIGRlc2NyaXB0b3IsXG4gICAgICBhY3R1YWxEZXNjcmlwdG9yLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBhY3R1YWxEZXNjcmlwdG9yLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYW4gb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIFwiICsgaW5zcGVjdDIobmFtZSksXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYW4gb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIFwiICsgaW5zcGVjdDIobmFtZSlcbiAgICApO1xuICB9XG4gIGZsYWcyKHRoaXMsIFwib2JqZWN0XCIsIGFjdHVhbERlc2NyaXB0b3IpO1xufVxuX19uYW1lKGFzc2VydE93blByb3BlcnR5RGVzY3JpcHRvciwgXCJhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3JcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwib3duUHJvcGVydHlEZXNjcmlwdG9yXCIsIGFzc2VydE93blByb3BlcnR5RGVzY3JpcHRvcik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaGF2ZU93blByb3BlcnR5RGVzY3JpcHRvclwiLCBhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpO1xuZnVuY3Rpb24gYXNzZXJ0TGVuZ3RoQ2hhaW4oKSB7XG4gIGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiwgdHJ1ZSk7XG59XG5fX25hbWUoYXNzZXJ0TGVuZ3RoQ2hhaW4sIFwiYXNzZXJ0TGVuZ3RoQ2hhaW5cIik7XG5mdW5jdGlvbiBhc3NlcnRMZW5ndGgobiwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgc3dpdGNoIChvYmpUeXBlKSB7XG4gICAgY2FzZSBcIm1hcFwiOlxuICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICB9XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGl0ZW1zQ291bnQgPT0gbixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIG9mICN7ZXhwfSBidXQgZ290ICN7YWN0fVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIG9mICN7YWN0fVwiLFxuICAgIG4sXG4gICAgaXRlbXNDb3VudFxuICApO1xufVxuX19uYW1lKGFzc2VydExlbmd0aCwgXCJhc3NlcnRMZW5ndGhcIik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwibGVuZ3RoXCIsIGFzc2VydExlbmd0aCwgYXNzZXJ0TGVuZ3RoQ2hhaW4pO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImxlbmd0aE9mXCIsIGFzc2VydExlbmd0aCwgYXNzZXJ0TGVuZ3RoQ2hhaW4pO1xuZnVuY3Rpb24gYXNzZXJ0TWF0Y2gocmUsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHJlLmV4ZWMob2JqKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbWF0Y2ggXCIgKyByZSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIG1hdGNoIFwiICsgcmVcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRNYXRjaCwgXCJhc3NlcnRNYXRjaFwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJtYXRjaFwiLCBhc3NlcnRNYXRjaCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibWF0Y2hlc1wiLCBhc3NlcnRNYXRjaCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwic3RyaW5nXCIsIGZ1bmN0aW9uKHN0ciwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJzdHJpbmdcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIH5vYmouaW5kZXhPZihzdHIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBjb250YWluIFwiICsgaW5zcGVjdDIoc3RyKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGNvbnRhaW4gXCIgKyBpbnNwZWN0MihzdHIpXG4gICk7XG59KTtcbmZ1bmN0aW9uIGFzc2VydEtleXMoa2V5cykge1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIG9ialR5cGUgPSB0eXBlKG9iaiksIGtleXNUeXBlID0gdHlwZShrZXlzKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgaXNEZWVwID0gZmxhZzIodGhpcywgXCJkZWVwXCIpLCBzdHIsIGRlZXBTdHIgPSBcIlwiLCBhY3R1YWwsIG9rID0gdHJ1ZSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKTtcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgdmFyIG1peGVkQXJnc01zZyA9IGZsYWdNc2cgKyBcIndoZW4gdGVzdGluZyBrZXlzIGFnYWluc3QgYW4gb2JqZWN0IG9yIGFuIGFycmF5IHlvdSBtdXN0IGdpdmUgYSBzaW5nbGUgQXJyYXl8T2JqZWN0fFN0cmluZyBhcmd1bWVudCBvciBtdWx0aXBsZSBTdHJpbmcgYXJndW1lbnRzXCI7XG4gIGlmIChvYmpUeXBlID09PSBcIk1hcFwiIHx8IG9ialR5cGUgPT09IFwiU2V0XCIpIHtcbiAgICBkZWVwU3RyID0gaXNEZWVwID8gXCJkZWVwbHkgXCIgOiBcIlwiO1xuICAgIGFjdHVhbCA9IFtdO1xuICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uKHZhbCwga2V5KSB7XG4gICAgICBhY3R1YWwucHVzaChrZXkpO1xuICAgIH0pO1xuICAgIGlmIChrZXlzVHlwZSAhPT0gXCJBcnJheVwiKSB7XG4gICAgICBrZXlzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYWN0dWFsID0gZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMob2JqKTtcbiAgICBzd2l0Y2ggKGtleXNUeXBlKSB7XG4gICAgICBjYXNlIFwiQXJyYXlcIjpcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1peGVkQXJnc01zZywgdm9pZCAwLCBzc2ZpKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJPYmplY3RcIjpcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1peGVkQXJnc01zZywgdm9pZCAwLCBzc2ZpKTtcbiAgICAgICAgfVxuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoa2V5cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAga2V5cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIGtleXMgPSBrZXlzLm1hcChmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSBcInN5bWJvbFwiID8gdmFsIDogU3RyaW5nKHZhbCk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKCFrZXlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihmbGFnTXNnICsgXCJrZXlzIHJlcXVpcmVkXCIsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgdmFyIGxlbiA9IGtleXMubGVuZ3RoLCBhbnkgPSBmbGFnMih0aGlzLCBcImFueVwiKSwgYWxsID0gZmxhZzIodGhpcywgXCJhbGxcIiksIGV4cGVjdGVkID0ga2V5cywgaXNFcWwgPSBpc0RlZXAgPyBmbGFnMih0aGlzLCBcImVxbFwiKSA6ICh2YWwxLCB2YWwyKSA9PiB2YWwxID09PSB2YWwyO1xuICBpZiAoIWFueSAmJiAhYWxsKSB7XG4gICAgYWxsID0gdHJ1ZTtcbiAgfVxuICBpZiAoYW55KSB7XG4gICAgb2sgPSBleHBlY3RlZC5zb21lKGZ1bmN0aW9uKGV4cGVjdGVkS2V5KSB7XG4gICAgICByZXR1cm4gYWN0dWFsLnNvbWUoZnVuY3Rpb24oYWN0dWFsS2V5KSB7XG4gICAgICAgIHJldHVybiBpc0VxbChleHBlY3RlZEtleSwgYWN0dWFsS2V5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGlmIChhbGwpIHtcbiAgICBvayA9IGV4cGVjdGVkLmV2ZXJ5KGZ1bmN0aW9uKGV4cGVjdGVkS2V5KSB7XG4gICAgICByZXR1cm4gYWN0dWFsLnNvbWUoZnVuY3Rpb24oYWN0dWFsS2V5KSB7XG4gICAgICAgIHJldHVybiBpc0VxbChleHBlY3RlZEtleSwgYWN0dWFsS2V5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmICghZmxhZzIodGhpcywgXCJjb250YWluc1wiKSkge1xuICAgICAgb2sgPSBvayAmJiBrZXlzLmxlbmd0aCA9PSBhY3R1YWwubGVuZ3RoO1xuICAgIH1cbiAgfVxuICBpZiAobGVuID4gMSkge1xuICAgIGtleXMgPSBrZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBpbnNwZWN0MihrZXkpO1xuICAgIH0pO1xuICAgIHZhciBsYXN0ID0ga2V5cy5wb3AoKTtcbiAgICBpZiAoYWxsKSB7XG4gICAgICBzdHIgPSBrZXlzLmpvaW4oXCIsIFwiKSArIFwiLCBhbmQgXCIgKyBsYXN0O1xuICAgIH1cbiAgICBpZiAoYW55KSB7XG4gICAgICBzdHIgPSBrZXlzLmpvaW4oXCIsIFwiKSArIFwiLCBvciBcIiArIGxhc3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN0ciA9IGluc3BlY3QyKGtleXNbMF0pO1xuICB9XG4gIHN0ciA9IChsZW4gPiAxID8gXCJrZXlzIFwiIDogXCJrZXkgXCIpICsgc3RyO1xuICBzdHIgPSAoZmxhZzIodGhpcywgXCJjb250YWluc1wiKSA/IFwiY29udGFpbiBcIiA6IFwiaGF2ZSBcIikgKyBzdHI7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIG9rLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBcIiArIGRlZXBTdHIgKyBzdHIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBcIiArIGRlZXBTdHIgKyBzdHIsXG4gICAgZXhwZWN0ZWQuc2xpY2UoMCkuc29ydChjb21wYXJlQnlJbnNwZWN0KSxcbiAgICBhY3R1YWwuc29ydChjb21wYXJlQnlJbnNwZWN0KSxcbiAgICB0cnVlXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0S2V5cywgXCJhc3NlcnRLZXlzXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImtleXNcIiwgYXNzZXJ0S2V5cyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwia2V5XCIsIGFzc2VydEtleXMpO1xuZnVuY3Rpb24gYXNzZXJ0VGhyb3dzKGVycm9yTGlrZSwgZXJyTXNnTWF0Y2hlciwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgbmVnYXRlID0gZmxhZzIodGhpcywgXCJuZWdhdGVcIikgfHwgZmFsc2U7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gIGlmIChpc1JlZ0V4cDIoZXJyb3JMaWtlKSB8fCB0eXBlb2YgZXJyb3JMaWtlID09PSBcInN0cmluZ1wiKSB7XG4gICAgZXJyTXNnTWF0Y2hlciA9IGVycm9yTGlrZTtcbiAgICBlcnJvckxpa2UgPSBudWxsO1xuICB9XG4gIGxldCBjYXVnaHRFcnI7XG4gIGxldCBlcnJvcldhc1Rocm93biA9IGZhbHNlO1xuICB0cnkge1xuICAgIG9iaigpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvcldhc1Rocm93biA9IHRydWU7XG4gICAgY2F1Z2h0RXJyID0gZXJyO1xuICB9XG4gIHZhciBldmVyeUFyZ0lzVW5kZWZpbmVkID0gZXJyb3JMaWtlID09PSB2b2lkIDAgJiYgZXJyTXNnTWF0Y2hlciA9PT0gdm9pZCAwO1xuICB2YXIgZXZlcnlBcmdJc0RlZmluZWQgPSBCb29sZWFuKGVycm9yTGlrZSAmJiBlcnJNc2dNYXRjaGVyKTtcbiAgdmFyIGVycm9yTGlrZUZhaWwgPSBmYWxzZTtcbiAgdmFyIGVyck1zZ01hdGNoZXJGYWlsID0gZmFsc2U7XG4gIGlmIChldmVyeUFyZ0lzVW5kZWZpbmVkIHx8ICFldmVyeUFyZ0lzVW5kZWZpbmVkICYmICFuZWdhdGUpIHtcbiAgICB2YXIgZXJyb3JMaWtlU3RyaW5nID0gXCJhbiBlcnJvclwiO1xuICAgIGlmIChlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgZXJyb3JMaWtlU3RyaW5nID0gXCIje2V4cH1cIjtcbiAgICB9IGVsc2UgaWYgKGVycm9yTGlrZSkge1xuICAgICAgZXJyb3JMaWtlU3RyaW5nID0gY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKTtcbiAgICB9XG4gICAgbGV0IGFjdHVhbCA9IGNhdWdodEVycjtcbiAgICBpZiAoY2F1Z2h0RXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGFjdHVhbCA9IGNhdWdodEVyci50b1N0cmluZygpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNhdWdodEVyciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgYWN0dWFsID0gY2F1Z2h0RXJyO1xuICAgIH0gZWxzZSBpZiAoY2F1Z2h0RXJyICYmICh0eXBlb2YgY2F1Z2h0RXJyID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYXVnaHRFcnIgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjdHVhbCA9IGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0Q29uc3RydWN0b3JOYW1lKGNhdWdodEVycik7XG4gICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgZXJyb3JXYXNUaHJvd24sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgXCIgKyBlcnJvckxpa2VTdHJpbmcsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93IGFuIGVycm9yIGJ1dCAje2FjdH0gd2FzIHRocm93blwiLFxuICAgICAgZXJyb3JMaWtlICYmIGVycm9yTGlrZS50b1N0cmluZygpLFxuICAgICAgYWN0dWFsXG4gICAgKTtcbiAgfVxuICBpZiAoZXJyb3JMaWtlICYmIGNhdWdodEVycikge1xuICAgIGlmIChlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgdmFyIGlzQ29tcGF0aWJsZUluc3RhbmNlID0gY2hlY2tfZXJyb3JfZXhwb3J0cy5jb21wYXRpYmxlSW5zdGFuY2UoY2F1Z2h0RXJyLCBlcnJvckxpa2UpO1xuICAgICAgaWYgKGlzQ29tcGF0aWJsZUluc3RhbmNlID09PSBuZWdhdGUpIHtcbiAgICAgICAgaWYgKGV2ZXJ5QXJnSXNEZWZpbmVkICYmIG5lZ2F0ZSkge1xuICAgICAgICAgIGVycm9yTGlrZUZhaWwgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgbmVnYXRlLFxuICAgICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93ICN7ZXhwfSBidXQgI3thY3R9IHdhcyB0aHJvd25cIixcbiAgICAgICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgI3tleHB9XCIgKyAoY2F1Z2h0RXJyICYmICFuZWdhdGUgPyBcIiBidXQgI3thY3R9IHdhcyB0aHJvd25cIiA6IFwiXCIpLFxuICAgICAgICAgICAgZXJyb3JMaWtlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBjYXVnaHRFcnIudG9TdHJpbmcoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGlzQ29tcGF0aWJsZUNvbnN0cnVjdG9yID0gY2hlY2tfZXJyb3JfZXhwb3J0cy5jb21wYXRpYmxlQ29uc3RydWN0b3IoY2F1Z2h0RXJyLCBlcnJvckxpa2UpO1xuICAgIGlmIChpc0NvbXBhdGlibGVDb25zdHJ1Y3RvciA9PT0gbmVnYXRlKSB7XG4gICAgICBpZiAoZXZlcnlBcmdJc0RlZmluZWQgJiYgbmVnYXRlKSB7XG4gICAgICAgIGVycm9yTGlrZUZhaWwgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgbmVnYXRlLFxuICAgICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyAje2V4cH0gYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIsXG4gICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCB0aHJvdyAje2V4cH1cIiArIChjYXVnaHRFcnIgPyBcIiBidXQgI3thY3R9IHdhcyB0aHJvd25cIiA6IFwiXCIpLFxuICAgICAgICAgIGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JMaWtlLnRvU3RyaW5nKCkgOiBlcnJvckxpa2UgJiYgY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKSxcbiAgICAgICAgICBjYXVnaHRFcnIgaW5zdGFuY2VvZiBFcnJvciA/IGNhdWdodEVyci50b1N0cmluZygpIDogY2F1Z2h0RXJyICYmIGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0Q29uc3RydWN0b3JOYW1lKGNhdWdodEVycilcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGNhdWdodEVyciAmJiBlcnJNc2dNYXRjaGVyICE9PSB2b2lkIDAgJiYgZXJyTXNnTWF0Y2hlciAhPT0gbnVsbCkge1xuICAgIHZhciBwbGFjZWhvbGRlciA9IFwiaW5jbHVkaW5nXCI7XG4gICAgaWYgKGlzUmVnRXhwMihlcnJNc2dNYXRjaGVyKSkge1xuICAgICAgcGxhY2Vob2xkZXIgPSBcIm1hdGNoaW5nXCI7XG4gICAgfVxuICAgIHZhciBpc0NvbXBhdGlibGVNZXNzYWdlID0gY2hlY2tfZXJyb3JfZXhwb3J0cy5jb21wYXRpYmxlTWVzc2FnZShjYXVnaHRFcnIsIGVyck1zZ01hdGNoZXIpO1xuICAgIGlmIChpc0NvbXBhdGlibGVNZXNzYWdlID09PSBuZWdhdGUpIHtcbiAgICAgIGlmIChldmVyeUFyZ0lzRGVmaW5lZCAmJiBuZWdhdGUpIHtcbiAgICAgICAgZXJyTXNnTWF0Y2hlckZhaWwgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgbmVnYXRlLFxuICAgICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyBlcnJvciBcIiArIHBsYWNlaG9sZGVyICsgXCIgI3tleHB9IGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93IGVycm9yIG5vdCBcIiArIHBsYWNlaG9sZGVyICsgXCIgI3tleHB9XCIsXG4gICAgICAgICAgZXJyTXNnTWF0Y2hlcixcbiAgICAgICAgICBjaGVja19lcnJvcl9leHBvcnRzLmdldE1lc3NhZ2UoY2F1Z2h0RXJyKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoZXJyb3JMaWtlRmFpbCAmJiBlcnJNc2dNYXRjaGVyRmFpbCkge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgbmVnYXRlLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93ICN7ZXhwfSBidXQgI3thY3R9IHdhcyB0aHJvd25cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgI3tleHB9XCIgKyAoY2F1Z2h0RXJyID8gXCIgYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIgOiBcIlwiKSxcbiAgICAgIGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JMaWtlLnRvU3RyaW5nKCkgOiBlcnJvckxpa2UgJiYgY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKSxcbiAgICAgIGNhdWdodEVyciBpbnN0YW5jZW9mIEVycm9yID8gY2F1Z2h0RXJyLnRvU3RyaW5nKCkgOiBjYXVnaHRFcnIgJiYgY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoY2F1Z2h0RXJyKVxuICAgICk7XG4gIH1cbiAgZmxhZzIodGhpcywgXCJvYmplY3RcIiwgY2F1Z2h0RXJyKTtcbn1cbl9fbmFtZShhc3NlcnRUaHJvd3MsIFwiYXNzZXJ0VGhyb3dzXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInRocm93XCIsIGFzc2VydFRocm93cyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwidGhyb3dzXCIsIGFzc2VydFRocm93cyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiVGhyb3dcIiwgYXNzZXJ0VGhyb3dzKTtcbmZ1bmN0aW9uIHJlc3BvbmRUbyhtZXRob2QsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGl0c2VsZiA9IGZsYWcyKHRoaXMsIFwiaXRzZWxmXCIpLCBjb250ZXh0ID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygb2JqICYmICFpdHNlbGYgPyBvYmoucHJvdG90eXBlW21ldGhvZF0gOiBvYmpbbWV0aG9kXTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29udGV4dCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gcmVzcG9uZCB0byBcIiArIGluc3BlY3QyKG1ldGhvZCksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCByZXNwb25kIHRvIFwiICsgaW5zcGVjdDIobWV0aG9kKVxuICApO1xufVxuX19uYW1lKHJlc3BvbmRUbywgXCJyZXNwb25kVG9cIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwicmVzcG9uZFRvXCIsIHJlc3BvbmRUbyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwicmVzcG9uZHNUb1wiLCByZXNwb25kVG8pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiaXRzZWxmXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcIml0c2VsZlwiLCB0cnVlKTtcbn0pO1xuZnVuY3Rpb24gc2F0aXNmeShtYXRjaGVyLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB2YXIgcmVzdWx0ID0gbWF0Y2hlcihvYmopO1xuICB0aGlzLmFzc2VydChcbiAgICByZXN1bHQsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHNhdGlzZnkgXCIgKyBvYmpEaXNwbGF5KG1hdGNoZXIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3Qgc2F0aXNmeVwiICsgb2JqRGlzcGxheShtYXRjaGVyKSxcbiAgICBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSA/IGZhbHNlIDogdHJ1ZSxcbiAgICByZXN1bHRcbiAgKTtcbn1cbl9fbmFtZShzYXRpc2Z5LCBcInNhdGlzZnlcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwic2F0aXNmeVwiLCBzYXRpc2Z5KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJzYXRpc2ZpZXNcIiwgc2F0aXNmeSk7XG5mdW5jdGlvbiBjbG9zZVRvKGV4cGVjdGVkLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLm51bWVyaWM7XG4gIGxldCBtZXNzYWdlID0gXCJBIGBkZWx0YWAgdmFsdWUgaXMgcmVxdWlyZWQgZm9yIGBjbG9zZVRvYFwiO1xuICBpZiAoZGVsdGEgPT0gdm9pZCAwKVxuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihmbGFnTXNnID8gYCR7ZmxhZ01zZ306ICR7bWVzc2FnZX1gIDogbWVzc2FnZSwgdm9pZCAwLCBzc2ZpKTtcbiAgbmV3IEFzc2VydGlvbihkZWx0YSwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMubnVtZXJpYztcbiAgbWVzc2FnZSA9IFwiQSBgZXhwZWN0ZWRgIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBgY2xvc2VUb2BcIjtcbiAgaWYgKGV4cGVjdGVkID09IHZvaWQgMClcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZmxhZ01zZyA/IGAke2ZsYWdNc2d9OiAke21lc3NhZ2V9YCA6IG1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIG5ldyBBc3NlcnRpb24oZXhwZWN0ZWQsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLm51bWVyaWM7XG4gIGNvbnN0IGFicyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHgpID0+IHggPCAwbiA/IC14IDogeCwgXCJhYnNcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGFicyhvYmogLSBleHBlY3RlZCkgPD0gZGVsdGEsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGNsb3NlIHRvIFwiICsgZXhwZWN0ZWQgKyBcIiArLy0gXCIgKyBkZWx0YSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIGNsb3NlIHRvIFwiICsgZXhwZWN0ZWQgKyBcIiArLy0gXCIgKyBkZWx0YVxuICApO1xufVxuX19uYW1lKGNsb3NlVG8sIFwiY2xvc2VUb1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJjbG9zZVRvXCIsIGNsb3NlVG8pO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImFwcHJveGltYXRlbHlcIiwgY2xvc2VUbyk7XG5mdW5jdGlvbiBpc1N1YnNldE9mKF9zdWJzZXQsIF9zdXBlcnNldCwgY21wLCBjb250YWlucywgb3JkZXJlZCkge1xuICBsZXQgc3VwZXJzZXQgPSBBcnJheS5mcm9tKF9zdXBlcnNldCk7XG4gIGxldCBzdWJzZXQgPSBBcnJheS5mcm9tKF9zdWJzZXQpO1xuICBpZiAoIWNvbnRhaW5zKSB7XG4gICAgaWYgKHN1YnNldC5sZW5ndGggIT09IHN1cGVyc2V0Lmxlbmd0aClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBzdXBlcnNldCA9IHN1cGVyc2V0LnNsaWNlKCk7XG4gIH1cbiAgcmV0dXJuIHN1YnNldC5ldmVyeShmdW5jdGlvbihlbGVtLCBpZHgpIHtcbiAgICBpZiAob3JkZXJlZClcbiAgICAgIHJldHVybiBjbXAgPyBjbXAoZWxlbSwgc3VwZXJzZXRbaWR4XSkgOiBlbGVtID09PSBzdXBlcnNldFtpZHhdO1xuICAgIGlmICghY21wKSB7XG4gICAgICB2YXIgbWF0Y2hJZHggPSBzdXBlcnNldC5pbmRleE9mKGVsZW0pO1xuICAgICAgaWYgKG1hdGNoSWR4ID09PSAtMSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCFjb250YWlucylcbiAgICAgICAgc3VwZXJzZXQuc3BsaWNlKG1hdGNoSWR4LCAxKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXJzZXQuc29tZShmdW5jdGlvbihlbGVtMiwgbWF0Y2hJZHgyKSB7XG4gICAgICBpZiAoIWNtcChlbGVtLCBlbGVtMikpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghY29udGFpbnMpXG4gICAgICAgIHN1cGVyc2V0LnNwbGljZShtYXRjaElkeDIsIDEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH0pO1xufVxuX19uYW1lKGlzU3Vic2V0T2YsIFwiaXNTdWJzZXRPZlwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJtZW1iZXJzXCIsIGZ1bmN0aW9uKHN1YnNldCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmJlLml0ZXJhYmxlO1xuICBuZXcgQXNzZXJ0aW9uKHN1YnNldCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uYmUuaXRlcmFibGU7XG4gIHZhciBjb250YWlucyA9IGZsYWcyKHRoaXMsIFwiY29udGFpbnNcIik7XG4gIHZhciBvcmRlcmVkID0gZmxhZzIodGhpcywgXCJvcmRlcmVkXCIpO1xuICB2YXIgc3ViamVjdCwgZmFpbE1zZywgZmFpbE5lZ2F0ZU1zZztcbiAgaWYgKGNvbnRhaW5zKSB7XG4gICAgc3ViamVjdCA9IG9yZGVyZWQgPyBcImFuIG9yZGVyZWQgc3VwZXJzZXRcIiA6IFwiYSBzdXBlcnNldFwiO1xuICAgIGZhaWxNc2cgPSBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgXCIgKyBzdWJqZWN0ICsgXCIgb2YgI3tleHB9XCI7XG4gICAgZmFpbE5lZ2F0ZU1zZyA9IFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgXCIgKyBzdWJqZWN0ICsgXCIgb2YgI3tleHB9XCI7XG4gIH0gZWxzZSB7XG4gICAgc3ViamVjdCA9IG9yZGVyZWQgPyBcIm9yZGVyZWQgbWVtYmVyc1wiIDogXCJtZW1iZXJzXCI7XG4gICAgZmFpbE1zZyA9IFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIHRoZSBzYW1lIFwiICsgc3ViamVjdCArIFwiIGFzICN7ZXhwfVwiO1xuICAgIGZhaWxOZWdhdGVNc2cgPSBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgdGhlIHNhbWUgXCIgKyBzdWJqZWN0ICsgXCIgYXMgI3tleHB9XCI7XG4gIH1cbiAgdmFyIGNtcCA9IGZsYWcyKHRoaXMsIFwiZGVlcFwiKSA/IGZsYWcyKHRoaXMsIFwiZXFsXCIpIDogdm9pZCAwO1xuICB0aGlzLmFzc2VydChcbiAgICBpc1N1YnNldE9mKHN1YnNldCwgb2JqLCBjbXAsIGNvbnRhaW5zLCBvcmRlcmVkKSxcbiAgICBmYWlsTXNnLFxuICAgIGZhaWxOZWdhdGVNc2csXG4gICAgc3Vic2V0LFxuICAgIG9iaixcbiAgICB0cnVlXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIml0ZXJhYmxlXCIsIGZ1bmN0aW9uKG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIG9iaiAhPSB2b2lkIDAgJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl0sXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFuIGl0ZXJhYmxlXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBhbiBpdGVyYWJsZVwiLFxuICAgIG9ialxuICApO1xufSk7XG5mdW5jdGlvbiBvbmVPZihsaXN0LCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIGV4cGVjdGVkID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGNvbnRhaW5zID0gZmxhZzIodGhpcywgXCJjb250YWluc1wiKSwgaXNEZWVwID0gZmxhZzIodGhpcywgXCJkZWVwXCIpLCBlcWwgPSBmbGFnMih0aGlzLCBcImVxbFwiKTtcbiAgbmV3IEFzc2VydGlvbihsaXN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5iZS5hbihcImFycmF5XCIpO1xuICBpZiAoY29udGFpbnMpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGxpc3Quc29tZShmdW5jdGlvbihwb3NzaWJpbGl0eSkge1xuICAgICAgICByZXR1cm4gZXhwZWN0ZWQuaW5kZXhPZihwb3NzaWJpbGl0eSkgPiAtMTtcbiAgICAgIH0pLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGNvbnRhaW4gb25lIG9mICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBjb250YWluIG9uZSBvZiAje2V4cH1cIixcbiAgICAgIGxpc3QsXG4gICAgICBleHBlY3RlZFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVlcCkge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGxpc3Quc29tZShmdW5jdGlvbihwb3NzaWJpbGl0eSkge1xuICAgICAgICAgIHJldHVybiBlcWwoZXhwZWN0ZWQsIHBvc3NpYmlsaXR5KTtcbiAgICAgICAgfSksXG4gICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwbHkgZXF1YWwgb25lIG9mICN7ZXhwfVwiLFxuICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZGVlcGx5IGVxdWFsIG9uZSBvZiAje2V4cH1cIixcbiAgICAgICAgbGlzdCxcbiAgICAgICAgZXhwZWN0ZWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBsaXN0LmluZGV4T2YoZXhwZWN0ZWQpID4gLTEsXG4gICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBvbmUgb2YgI3tleHB9XCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgb25lIG9mICN7ZXhwfVwiLFxuICAgICAgICBsaXN0LFxuICAgICAgICBleHBlY3RlZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbl9fbmFtZShvbmVPZiwgXCJvbmVPZlwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJvbmVPZlwiLCBvbmVPZik7XG5mdW5jdGlvbiBhc3NlcnRDaGFuZ2VzKHN1YmplY3QsIHByb3AsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgZm4gPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihmbiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICB2YXIgaW5pdGlhbDtcbiAgaWYgKCFwcm9wKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gICAgaW5pdGlhbCA9IHN1YmplY3QoKTtcbiAgfSBlbHNlIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG4gICAgaW5pdGlhbCA9IHN1YmplY3RbcHJvcF07XG4gIH1cbiAgZm4oKTtcbiAgdmFyIGZpbmFsID0gcHJvcCA9PT0gdm9pZCAwIHx8IHByb3AgPT09IG51bGwgPyBzdWJqZWN0KCkgOiBzdWJqZWN0W3Byb3BdO1xuICB2YXIgbXNnT2JqID0gcHJvcCA9PT0gdm9pZCAwIHx8IHByb3AgPT09IG51bGwgPyBpbml0aWFsIDogXCIuXCIgKyBwcm9wO1xuICBmbGFnMih0aGlzLCBcImRlbHRhTXNnT2JqXCIsIG1zZ09iaik7XG4gIGZsYWcyKHRoaXMsIFwiaW5pdGlhbERlbHRhVmFsdWVcIiwgaW5pdGlhbCk7XG4gIGZsYWcyKHRoaXMsIFwiZmluYWxEZWx0YVZhbHVlXCIsIGZpbmFsKTtcbiAgZmxhZzIodGhpcywgXCJkZWx0YUJlaGF2aW9yXCIsIFwiY2hhbmdlXCIpO1xuICBmbGFnMih0aGlzLCBcInJlYWxEZWx0YVwiLCBmaW5hbCAhPT0gaW5pdGlhbCk7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGluaXRpYWwgIT09IGZpbmFsLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBjaGFuZ2VcIixcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gbm90IGNoYW5nZVwiXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0Q2hhbmdlcywgXCJhc3NlcnRDaGFuZ2VzXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImNoYW5nZVwiLCBhc3NlcnRDaGFuZ2VzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJjaGFuZ2VzXCIsIGFzc2VydENoYW5nZXMpO1xuZnVuY3Rpb24gYXNzZXJ0SW5jcmVhc2VzKHN1YmplY3QsIHByb3AsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgZm4gPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihmbiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICB2YXIgaW5pdGlhbDtcbiAgaWYgKCFwcm9wKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gICAgaW5pdGlhbCA9IHN1YmplY3QoKTtcbiAgfSBlbHNlIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG4gICAgaW5pdGlhbCA9IHN1YmplY3RbcHJvcF07XG4gIH1cbiAgbmV3IEFzc2VydGlvbihpbml0aWFsLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwibnVtYmVyXCIpO1xuICBmbigpO1xuICB2YXIgZmluYWwgPSBwcm9wID09PSB2b2lkIDAgfHwgcHJvcCA9PT0gbnVsbCA/IHN1YmplY3QoKSA6IHN1YmplY3RbcHJvcF07XG4gIHZhciBtc2dPYmogPSBwcm9wID09PSB2b2lkIDAgfHwgcHJvcCA9PT0gbnVsbCA/IGluaXRpYWwgOiBcIi5cIiArIHByb3A7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFNc2dPYmpcIiwgbXNnT2JqKTtcbiAgZmxhZzIodGhpcywgXCJpbml0aWFsRGVsdGFWYWx1ZVwiLCBpbml0aWFsKTtcbiAgZmxhZzIodGhpcywgXCJmaW5hbERlbHRhVmFsdWVcIiwgZmluYWwpO1xuICBmbGFnMih0aGlzLCBcImRlbHRhQmVoYXZpb3JcIiwgXCJpbmNyZWFzZVwiKTtcbiAgZmxhZzIodGhpcywgXCJyZWFsRGVsdGFcIiwgZmluYWwgLSBpbml0aWFsKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgZmluYWwgLSBpbml0aWFsID4gMCxcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gaW5jcmVhc2VcIixcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gbm90IGluY3JlYXNlXCJcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRJbmNyZWFzZXMsIFwiYXNzZXJ0SW5jcmVhc2VzXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImluY3JlYXNlXCIsIGFzc2VydEluY3JlYXNlcyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaW5jcmVhc2VzXCIsIGFzc2VydEluY3JlYXNlcyk7XG5mdW5jdGlvbiBhc3NlcnREZWNyZWFzZXMoc3ViamVjdCwgcHJvcCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBmbiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBuZXcgQXNzZXJ0aW9uKGZuLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gIHZhciBpbml0aWFsO1xuICBpZiAoIXByb3ApIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgICBpbml0aWFsID0gc3ViamVjdCgpO1xuICB9IGVsc2Uge1xuICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbiAgICBpbml0aWFsID0gc3ViamVjdFtwcm9wXTtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGluaXRpYWwsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJudW1iZXJcIik7XG4gIGZuKCk7XG4gIHZhciBmaW5hbCA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gc3ViamVjdCgpIDogc3ViamVjdFtwcm9wXTtcbiAgdmFyIG1zZ09iaiA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gaW5pdGlhbCA6IFwiLlwiICsgcHJvcDtcbiAgZmxhZzIodGhpcywgXCJkZWx0YU1zZ09ialwiLCBtc2dPYmopO1xuICBmbGFnMih0aGlzLCBcImluaXRpYWxEZWx0YVZhbHVlXCIsIGluaXRpYWwpO1xuICBmbGFnMih0aGlzLCBcImZpbmFsRGVsdGFWYWx1ZVwiLCBmaW5hbCk7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFCZWhhdmlvclwiLCBcImRlY3JlYXNlXCIpO1xuICBmbGFnMih0aGlzLCBcInJlYWxEZWx0YVwiLCBpbml0aWFsIC0gZmluYWwpO1xuICB0aGlzLmFzc2VydChcbiAgICBmaW5hbCAtIGluaXRpYWwgPCAwLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBkZWNyZWFzZVwiLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBub3QgZGVjcmVhc2VcIlxuICApO1xufVxuX19uYW1lKGFzc2VydERlY3JlYXNlcywgXCJhc3NlcnREZWNyZWFzZXNcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZGVjcmVhc2VcIiwgYXNzZXJ0RGVjcmVhc2VzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJkZWNyZWFzZXNcIiwgYXNzZXJ0RGVjcmVhc2VzKTtcbmZ1bmN0aW9uIGFzc2VydERlbHRhKGRlbHRhLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG1zZ09iaiA9IGZsYWcyKHRoaXMsIFwiZGVsdGFNc2dPYmpcIik7XG4gIHZhciBpbml0aWFsID0gZmxhZzIodGhpcywgXCJpbml0aWFsRGVsdGFWYWx1ZVwiKTtcbiAgdmFyIGZpbmFsID0gZmxhZzIodGhpcywgXCJmaW5hbERlbHRhVmFsdWVcIik7XG4gIHZhciBiZWhhdmlvciA9IGZsYWcyKHRoaXMsIFwiZGVsdGFCZWhhdmlvclwiKTtcbiAgdmFyIHJlYWxEZWx0YSA9IGZsYWcyKHRoaXMsIFwicmVhbERlbHRhXCIpO1xuICB2YXIgZXhwcmVzc2lvbjtcbiAgaWYgKGJlaGF2aW9yID09PSBcImNoYW5nZVwiKSB7XG4gICAgZXhwcmVzc2lvbiA9IE1hdGguYWJzKGZpbmFsIC0gaW5pdGlhbCkgPT09IE1hdGguYWJzKGRlbHRhKTtcbiAgfSBlbHNlIHtcbiAgICBleHByZXNzaW9uID0gcmVhbERlbHRhID09PSBNYXRoLmFicyhkZWx0YSk7XG4gIH1cbiAgdGhpcy5hc3NlcnQoXG4gICAgZXhwcmVzc2lvbixcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gXCIgKyBiZWhhdmlvciArIFwiIGJ5IFwiICsgZGVsdGEsXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIG5vdCBcIiArIGJlaGF2aW9yICsgXCIgYnkgXCIgKyBkZWx0YVxuICApO1xufVxuX19uYW1lKGFzc2VydERlbHRhLCBcImFzc2VydERlbHRhXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImJ5XCIsIGFzc2VydERlbHRhKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImV4dGVuc2libGVcIiwgZnVuY3Rpb24oKSB7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdmFyIGlzRXh0ZW5zaWJsZSA9IG9iaiA9PT0gT2JqZWN0KG9iaikgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShvYmopO1xuICB0aGlzLmFzc2VydChcbiAgICBpc0V4dGVuc2libGUsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGV4dGVuc2libGVcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGV4dGVuc2libGVcIlxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJzZWFsZWRcIiwgZnVuY3Rpb24oKSB7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdmFyIGlzU2VhbGVkID0gb2JqID09PSBPYmplY3Qob2JqKSA/IE9iamVjdC5pc1NlYWxlZChvYmopIDogdHJ1ZTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNTZWFsZWQsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIHNlYWxlZFwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgc2VhbGVkXCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZnJvemVuXCIsIGZ1bmN0aW9uKCkge1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHZhciBpc0Zyb3plbiA9IG9iaiA9PT0gT2JqZWN0KG9iaikgPyBPYmplY3QuaXNGcm96ZW4ob2JqKSA6IHRydWU7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGlzRnJvemVuLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmcm96ZW5cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGZyb3plblwiXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImZpbml0ZVwiLCBmdW5jdGlvbihtc2cpIHtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB0aGlzLmFzc2VydChcbiAgICB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiICYmIGlzRmluaXRlKG9iaiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGEgZmluaXRlIG51bWJlclwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYSBmaW5pdGUgbnVtYmVyXCJcbiAgKTtcbn0pO1xuXG4vLyBsaWIvY2hhaS9pbnRlcmZhY2UvZXhwZWN0LmpzXG5mdW5jdGlvbiBleHBlY3QodmFsLCBtZXNzYWdlKSB7XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKHZhbCwgbWVzc2FnZSk7XG59XG5fX25hbWUoZXhwZWN0LCBcImV4cGVjdFwiKTtcbmV4cGVjdC5mYWlsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgbWVzc2FnZSA9IGFjdHVhbDtcbiAgICBhY3R1YWwgPSB2b2lkIDA7XG4gIH1cbiAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgXCJleHBlY3QuZmFpbCgpXCI7XG4gIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtZXNzYWdlLCB7XG4gICAgYWN0dWFsLFxuICAgIGV4cGVjdGVkLFxuICAgIG9wZXJhdG9yXG4gIH0sIGV4cGVjdC5mYWlsKTtcbn07XG5cbi8vIGxpYi9jaGFpL2ludGVyZmFjZS9zaG91bGQuanNcbnZhciBzaG91bGRfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoc2hvdWxkX2V4cG9ydHMsIHtcbiAgU2hvdWxkOiAoKSA9PiBTaG91bGQsXG4gIHNob3VsZDogKCkgPT4gc2hvdWxkXG59KTtcbmZ1bmN0aW9uIGxvYWRTaG91bGQoKSB7XG4gIGZ1bmN0aW9uIHNob3VsZEdldHRlcigpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFN0cmluZyB8fCB0aGlzIGluc3RhbmNlb2YgTnVtYmVyIHx8IHRoaXMgaW5zdGFuY2VvZiBCb29sZWFuIHx8IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0aGlzIGluc3RhbmNlb2YgU3ltYm9sIHx8IHR5cGVvZiBCaWdJbnQgPT09IFwiZnVuY3Rpb25cIiAmJiB0aGlzIGluc3RhbmNlb2YgQmlnSW50KSB7XG4gICAgICByZXR1cm4gbmV3IEFzc2VydGlvbih0aGlzLnZhbHVlT2YoKSwgbnVsbCwgc2hvdWxkR2V0dGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odGhpcywgbnVsbCwgc2hvdWxkR2V0dGVyKTtcbiAgfVxuICBfX25hbWUoc2hvdWxkR2V0dGVyLCBcInNob3VsZEdldHRlclwiKTtcbiAgZnVuY3Rpb24gc2hvdWxkU2V0dGVyKHZhbHVlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwic2hvdWxkXCIsIHtcbiAgICAgIHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgX19uYW1lKHNob3VsZFNldHRlciwgXCJzaG91bGRTZXR0ZXJcIik7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCBcInNob3VsZFwiLCB7XG4gICAgc2V0OiBzaG91bGRTZXR0ZXIsXG4gICAgZ2V0OiBzaG91bGRHZXR0ZXIsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuICB2YXIgc2hvdWxkMiA9IHt9O1xuICBzaG91bGQyLmZhaWwgPSBmdW5jdGlvbihhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgbWVzc2FnZSA9IGFjdHVhbDtcbiAgICAgIGFjdHVhbCA9IHZvaWQgMDtcbiAgICB9XG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgXCJzaG91bGQuZmFpbCgpXCI7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1lc3NhZ2UsIHtcbiAgICAgIGFjdHVhbCxcbiAgICAgIGV4cGVjdGVkLFxuICAgICAgb3BlcmF0b3JcbiAgICB9LCBzaG91bGQyLmZhaWwpO1xuICB9O1xuICBzaG91bGQyLmVxdWFsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0dWFsLCBtZXNzYWdlKS50by5lcXVhbChleHBlY3RlZCk7XG4gIH07XG4gIHNob3VsZDIuVGhyb3cgPSBmdW5jdGlvbihmbiwgZXJydCwgZXJycywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihmbiwgbXNnKS50by5UaHJvdyhlcnJ0LCBlcnJzKTtcbiAgfTtcbiAgc2hvdWxkMi5leGlzdCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8uZXhpc3Q7XG4gIH07XG4gIHNob3VsZDIubm90ID0ge307XG4gIHNob3VsZDIubm90LmVxdWFsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihhY3R1YWwsIG1zZykudG8ubm90LmVxdWFsKGV4cGVjdGVkKTtcbiAgfTtcbiAgc2hvdWxkMi5ub3QuVGhyb3cgPSBmdW5jdGlvbihmbiwgZXJydCwgZXJycywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihmbiwgbXNnKS50by5ub3QuVGhyb3coZXJydCwgZXJycyk7XG4gIH07XG4gIHNob3VsZDIubm90LmV4aXN0ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnKS50by5ub3QuZXhpc3Q7XG4gIH07XG4gIHNob3VsZDJbXCJ0aHJvd1wiXSA9IHNob3VsZDJbXCJUaHJvd1wiXTtcbiAgc2hvdWxkMi5ub3RbXCJ0aHJvd1wiXSA9IHNob3VsZDIubm90W1wiVGhyb3dcIl07XG4gIHJldHVybiBzaG91bGQyO1xufVxuX19uYW1lKGxvYWRTaG91bGQsIFwibG9hZFNob3VsZFwiKTtcbnZhciBzaG91bGQgPSBsb2FkU2hvdWxkO1xudmFyIFNob3VsZCA9IGxvYWRTaG91bGQ7XG5cbi8vIGxpYi9jaGFpL2ludGVyZmFjZS9hc3NlcnQuanNcbmZ1bmN0aW9uIGFzc2VydChleHByZXNzLCBlcnJtc2cpIHtcbiAgdmFyIHRlc3QyID0gbmV3IEFzc2VydGlvbihudWxsLCBudWxsLCBhc3NlcnQsIHRydWUpO1xuICB0ZXN0Mi5hc3NlcnQoXG4gICAgZXhwcmVzcyxcbiAgICBlcnJtc2csXG4gICAgXCJbIG5lZ2F0aW9uIG1lc3NhZ2UgdW5hdmFpbGFibGUgXVwiXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0LCBcImFzc2VydFwiKTtcbmFzc2VydC5mYWlsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgbWVzc2FnZSA9IGFjdHVhbDtcbiAgICBhY3R1YWwgPSB2b2lkIDA7XG4gIH1cbiAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgXCJhc3NlcnQuZmFpbCgpXCI7XG4gIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtZXNzYWdlLCB7XG4gICAgYWN0dWFsLFxuICAgIGV4cGVjdGVkLFxuICAgIG9wZXJhdG9yXG4gIH0sIGFzc2VydC5mYWlsKTtcbn07XG5hc3NlcnQuaXNPayA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc09rLCB0cnVlKS5pcy5vaztcbn07XG5hc3NlcnQuaXNOb3RPayA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE9rLCB0cnVlKS5pcy5ub3Qub2s7XG59O1xuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24oYWN0LCBleHAsIG1zZykge1xuICB2YXIgdGVzdDIgPSBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuZXF1YWwsIHRydWUpO1xuICB0ZXN0Mi5hc3NlcnQoXG4gICAgZXhwID09IGZsYWcodGVzdDIsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2V4cH1cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGVxdWFsICN7YWN0fVwiLFxuICAgIGV4cCxcbiAgICBhY3QsXG4gICAgdHJ1ZVxuICApO1xufTtcbmFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBtc2cpIHtcbiAgdmFyIHRlc3QyID0gbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0Lm5vdEVxdWFsLCB0cnVlKTtcbiAgdGVzdDIuYXNzZXJ0KFxuICAgIGV4cCAhPSBmbGFnKHRlc3QyLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGVxdWFsICN7ZXhwfVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2FjdH1cIixcbiAgICBleHAsXG4gICAgYWN0LFxuICAgIHRydWVcbiAgKTtcbn07XG5hc3NlcnQuc3RyaWN0RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5zdHJpY3RFcXVhbCwgdHJ1ZSkudG8uZXF1YWwoZXhwKTtcbn07XG5hc3NlcnQubm90U3RyaWN0RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5ub3RTdHJpY3RFcXVhbCwgdHJ1ZSkudG8ubm90LmVxdWFsKGV4cCk7XG59O1xuYXNzZXJ0LmRlZXBFcXVhbCA9IGFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5kZWVwRXF1YWwsIHRydWUpLnRvLmVxbChleHApO1xufTtcbmFzc2VydC5ub3REZWVwRXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5ub3REZWVwRXF1YWwsIHRydWUpLnRvLm5vdC5lcWwoZXhwKTtcbn07XG5hc3NlcnQuaXNBYm92ZSA9IGZ1bmN0aW9uKHZhbCwgYWJ2LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQWJvdmUsIHRydWUpLnRvLmJlLmFib3ZlKGFidik7XG59O1xuYXNzZXJ0LmlzQXRMZWFzdCA9IGZ1bmN0aW9uKHZhbCwgYXRsc3QsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBdExlYXN0LCB0cnVlKS50by5iZS5sZWFzdChhdGxzdCk7XG59O1xuYXNzZXJ0LmlzQmVsb3cgPSBmdW5jdGlvbih2YWwsIGJsdywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0JlbG93LCB0cnVlKS50by5iZS5iZWxvdyhibHcpO1xufTtcbmFzc2VydC5pc0F0TW9zdCA9IGZ1bmN0aW9uKHZhbCwgYXRtc3QsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBdE1vc3QsIHRydWUpLnRvLmJlLm1vc3QoYXRtc3QpO1xufTtcbmFzc2VydC5pc1RydWUgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNUcnVlLCB0cnVlKS5pc1tcInRydWVcIl07XG59O1xuYXNzZXJ0LmlzTm90VHJ1ZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdFRydWUsIHRydWUpLnRvLm5vdC5lcXVhbCh0cnVlKTtcbn07XG5hc3NlcnQuaXNGYWxzZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0ZhbHNlLCB0cnVlKS5pc1tcImZhbHNlXCJdO1xufTtcbmFzc2VydC5pc05vdEZhbHNlID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90RmFsc2UsIHRydWUpLnRvLm5vdC5lcXVhbChmYWxzZSk7XG59O1xuYXNzZXJ0LmlzTnVsbCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc051bGwsIHRydWUpLnRvLmVxdWFsKG51bGwpO1xufTtcbmFzc2VydC5pc05vdE51bGwgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3ROdWxsLCB0cnVlKS50by5ub3QuZXF1YWwobnVsbCk7XG59O1xuYXNzZXJ0LmlzTmFOID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTmFOLCB0cnVlKS50by5iZS5OYU47XG59O1xuYXNzZXJ0LmlzTm90TmFOID0gZnVuY3Rpb24odmFsdWUsIG1lc3NhZ2UpIHtcbiAgbmV3IEFzc2VydGlvbih2YWx1ZSwgbWVzc2FnZSwgYXNzZXJ0LmlzTm90TmFOLCB0cnVlKS5ub3QudG8uYmUuTmFOO1xufTtcbmFzc2VydC5leGlzdHMgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuZXhpc3RzLCB0cnVlKS50by5leGlzdDtcbn07XG5hc3NlcnQubm90RXhpc3RzID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0Lm5vdEV4aXN0cywgdHJ1ZSkudG8ubm90LmV4aXN0O1xufTtcbmFzc2VydC5pc1VuZGVmaW5lZCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc1VuZGVmaW5lZCwgdHJ1ZSkudG8uZXF1YWwodm9pZCAwKTtcbn07XG5hc3NlcnQuaXNEZWZpbmVkID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzRGVmaW5lZCwgdHJ1ZSkudG8ubm90LmVxdWFsKHZvaWQgMCk7XG59O1xuYXNzZXJ0LmlzQ2FsbGFibGUgPSBmdW5jdGlvbih2YWx1ZSwgbWVzc2FnZSkge1xuICBuZXcgQXNzZXJ0aW9uKHZhbHVlLCBtZXNzYWdlLCBhc3NlcnQuaXNDYWxsYWJsZSwgdHJ1ZSkuaXMuY2FsbGFibGU7XG59O1xuYXNzZXJ0LmlzTm90Q2FsbGFibGUgPSBmdW5jdGlvbih2YWx1ZSwgbWVzc2FnZSkge1xuICBuZXcgQXNzZXJ0aW9uKHZhbHVlLCBtZXNzYWdlLCBhc3NlcnQuaXNOb3RDYWxsYWJsZSwgdHJ1ZSkuaXMubm90LmNhbGxhYmxlO1xufTtcbmFzc2VydC5pc09iamVjdCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc09iamVjdCwgdHJ1ZSkudG8uYmUuYShcIm9iamVjdFwiKTtcbn07XG5hc3NlcnQuaXNOb3RPYmplY3QgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RPYmplY3QsIHRydWUpLnRvLm5vdC5iZS5hKFwib2JqZWN0XCIpO1xufTtcbmFzc2VydC5pc0FycmF5ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQXJyYXksIHRydWUpLnRvLmJlLmFuKFwiYXJyYXlcIik7XG59O1xuYXNzZXJ0LmlzTm90QXJyYXkgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RBcnJheSwgdHJ1ZSkudG8ubm90LmJlLmFuKFwiYXJyYXlcIik7XG59O1xuYXNzZXJ0LmlzU3RyaW5nID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzU3RyaW5nLCB0cnVlKS50by5iZS5hKFwic3RyaW5nXCIpO1xufTtcbmFzc2VydC5pc05vdFN0cmluZyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdFN0cmluZywgdHJ1ZSkudG8ubm90LmJlLmEoXCJzdHJpbmdcIik7XG59O1xuYXNzZXJ0LmlzTnVtYmVyID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTnVtYmVyLCB0cnVlKS50by5iZS5hKFwibnVtYmVyXCIpO1xufTtcbmFzc2VydC5pc05vdE51bWJlciA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE51bWJlciwgdHJ1ZSkudG8ubm90LmJlLmEoXCJudW1iZXJcIik7XG59O1xuYXNzZXJ0LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc051bWVyaWMsIHRydWUpLmlzLm51bWVyaWM7XG59O1xuYXNzZXJ0LmlzTm90TnVtZXJpYyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE51bWVyaWMsIHRydWUpLmlzLm5vdC5udW1lcmljO1xufTtcbmFzc2VydC5pc0Zpbml0ZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0Zpbml0ZSwgdHJ1ZSkudG8uYmUuZmluaXRlO1xufTtcbmFzc2VydC5pc0Jvb2xlYW4gPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNCb29sZWFuLCB0cnVlKS50by5iZS5hKFwiYm9vbGVhblwiKTtcbn07XG5hc3NlcnQuaXNOb3RCb29sZWFuID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90Qm9vbGVhbiwgdHJ1ZSkudG8ubm90LmJlLmEoXCJib29sZWFuXCIpO1xufTtcbmFzc2VydC50eXBlT2YgPSBmdW5jdGlvbih2YWwsIHR5cGUzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LnR5cGVPZiwgdHJ1ZSkudG8uYmUuYSh0eXBlMyk7XG59O1xuYXNzZXJ0Lm5vdFR5cGVPZiA9IGZ1bmN0aW9uKHZhbHVlLCB0eXBlMywgbWVzc2FnZSkge1xuICBuZXcgQXNzZXJ0aW9uKHZhbHVlLCBtZXNzYWdlLCBhc3NlcnQubm90VHlwZU9mLCB0cnVlKS50by5ub3QuYmUuYSh0eXBlMyk7XG59O1xuYXNzZXJ0Lmluc3RhbmNlT2YgPSBmdW5jdGlvbih2YWwsIHR5cGUzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0Lmluc3RhbmNlT2YsIHRydWUpLnRvLmJlLmluc3RhbmNlT2YodHlwZTMpO1xufTtcbmFzc2VydC5ub3RJbnN0YW5jZU9mID0gZnVuY3Rpb24odmFsLCB0eXBlMywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5ub3RJbnN0YW5jZU9mLCB0cnVlKS50by5ub3QuYmUuaW5zdGFuY2VPZih0eXBlMyk7XG59O1xuYXNzZXJ0LmluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5pbmNsdWRlLCB0cnVlKS5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3RJbmNsdWRlLCB0cnVlKS5ub3QuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5kZWVwSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBJbmNsdWRlLCB0cnVlKS5kZWVwLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubm90RGVlcEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3REZWVwSW5jbHVkZSwgdHJ1ZSkubm90LmRlZXAuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5uZXN0ZWRJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubmVzdGVkSW5jbHVkZSwgdHJ1ZSkubmVzdGVkLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubm90TmVzdGVkSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdE5lc3RlZEluY2x1ZGUsIHRydWUpLm5vdC5uZXN0ZWQuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5kZWVwTmVzdGVkSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBOZXN0ZWRJbmNsdWRlLCB0cnVlKS5kZWVwLm5lc3RlZC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90RGVlcE5lc3RlZEluY2x1ZGUsIHRydWUpLm5vdC5kZWVwLm5lc3RlZC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm93bkluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5vd25JbmNsdWRlLCB0cnVlKS5vd24uaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5ub3RPd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90T3duSW5jbHVkZSwgdHJ1ZSkubm90Lm93bi5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0LmRlZXBPd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQuZGVlcE93bkluY2x1ZGUsIHRydWUpLmRlZXAub3duLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubm90RGVlcE93bkluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3REZWVwT3duSW5jbHVkZSwgdHJ1ZSkubm90LmRlZXAub3duLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubWF0Y2ggPSBmdW5jdGlvbihleHAsIHJlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm1hdGNoLCB0cnVlKS50by5tYXRjaChyZSk7XG59O1xuYXNzZXJ0Lm5vdE1hdGNoID0gZnVuY3Rpb24oZXhwLCByZSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3RNYXRjaCwgdHJ1ZSkudG8ubm90Lm1hdGNoKHJlKTtcbn07XG5hc3NlcnQucHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQucHJvcGVydHksIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG59O1xuYXNzZXJ0Lm5vdFByb3BlcnR5ID0gZnVuY3Rpb24ob2JqLCBwcm9wLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdFByb3BlcnR5LCB0cnVlKS50by5ub3QuaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQucHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5wcm9wZXJ0eVZhbCwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5ub3RQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdFByb3BlcnR5VmFsLCB0cnVlKS50by5ub3QuaGF2ZS5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5kZWVwUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kZWVwUHJvcGVydHlWYWwsIHRydWUpLnRvLmhhdmUuZGVlcC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwsIHRydWUpLnRvLm5vdC5oYXZlLmRlZXAucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQub3duUHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQub3duUHJvcGVydHksIHRydWUpLnRvLmhhdmUub3duLnByb3BlcnR5KHByb3ApO1xufTtcbmFzc2VydC5ub3RPd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSwgdHJ1ZSkudG8ubm90LmhhdmUub3duLnByb3BlcnR5KHByb3ApO1xufTtcbmFzc2VydC5vd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQub3duUHJvcGVydHlWYWwsIHRydWUpLnRvLmhhdmUub3duLnByb3BlcnR5KHByb3AsIHZhbHVlKTtcbn07XG5hc3NlcnQubm90T3duUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdE93blByb3BlcnR5VmFsLCB0cnVlKS50by5ub3QuaGF2ZS5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xufTtcbmFzc2VydC5kZWVwT3duUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRlZXBPd25Qcm9wZXJ0eVZhbCwgdHJ1ZSkudG8uaGF2ZS5kZWVwLm93bi5wcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG59O1xuYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90RGVlcE93blByb3BlcnR5VmFsLCB0cnVlKS50by5ub3QuaGF2ZS5kZWVwLm93bi5wcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG59O1xuYXNzZXJ0Lm5lc3RlZFByb3BlcnR5ID0gZnVuY3Rpb24ob2JqLCBwcm9wLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5lc3RlZFByb3BlcnR5LCB0cnVlKS50by5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQubm90TmVzdGVkUHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90TmVzdGVkUHJvcGVydHksIHRydWUpLnRvLm5vdC5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQubmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5uZXN0ZWRQcm9wZXJ0eVZhbCwgdHJ1ZSkudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQubm90TmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3ROZXN0ZWRQcm9wZXJ0eVZhbCwgdHJ1ZSkudG8ubm90LmhhdmUubmVzdGVkLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0LmRlZXBOZXN0ZWRQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRlZXBOZXN0ZWRQcm9wZXJ0eVZhbCwgdHJ1ZSkudG8uaGF2ZS5kZWVwLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwsIHRydWUpLnRvLm5vdC5oYXZlLmRlZXAubmVzdGVkLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0Lmxlbmd0aE9mID0gZnVuY3Rpb24oZXhwLCBsZW4sIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubGVuZ3RoT2YsIHRydWUpLnRvLmhhdmUubGVuZ3RoT2YobGVuKTtcbn07XG5hc3NlcnQuaGFzQW55S2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbnlLZXlzLCB0cnVlKS50by5oYXZlLmFueS5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5oYXNBbGxLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lmhhc0FsbEtleXMsIHRydWUpLnRvLmhhdmUuYWxsLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0LmNvbnRhaW5zQWxsS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5jb250YWluc0FsbEtleXMsIHRydWUpLnRvLmNvbnRhaW4uYWxsLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0LmRvZXNOb3RIYXZlQW55S2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kb2VzTm90SGF2ZUFueUtleXMsIHRydWUpLnRvLm5vdC5oYXZlLmFueS5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5kb2VzTm90SGF2ZUFsbEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZG9lc05vdEhhdmVBbGxLZXlzLCB0cnVlKS50by5ub3QuaGF2ZS5hbGwua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuaGFzQW55RGVlcEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaGFzQW55RGVlcEtleXMsIHRydWUpLnRvLmhhdmUuYW55LmRlZXAua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuaGFzQWxsRGVlcEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaGFzQWxsRGVlcEtleXMsIHRydWUpLnRvLmhhdmUuYWxsLmRlZXAua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuY29udGFpbnNBbGxEZWVwS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5jb250YWluc0FsbERlZXBLZXlzLCB0cnVlKS50by5jb250YWluLmFsbC5kZWVwLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0LmRvZXNOb3RIYXZlQW55RGVlcEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZG9lc05vdEhhdmVBbnlEZWVwS2V5cywgdHJ1ZSkudG8ubm90LmhhdmUuYW55LmRlZXAua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuZG9lc05vdEhhdmVBbGxEZWVwS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzLCB0cnVlKS50by5ub3QuaGF2ZS5hbGwuZGVlcC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC50aHJvd3MgPSBmdW5jdGlvbihmbiwgZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyLCBtc2cpIHtcbiAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBlcnJvckxpa2UgfHwgZXJyb3JMaWtlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgZXJyTXNnTWF0Y2hlciA9IGVycm9yTGlrZTtcbiAgICBlcnJvckxpa2UgPSBudWxsO1xuICB9XG4gIHZhciBhc3NlcnRFcnIgPSBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC50aHJvd3MsIHRydWUpLnRvLnRocm93KGVycm9yTGlrZSwgZXJyTXNnTWF0Y2hlcik7XG4gIHJldHVybiBmbGFnKGFzc2VydEVyciwgXCJvYmplY3RcIik7XG59O1xuYXNzZXJ0LmRvZXNOb3RUaHJvdyA9IGZ1bmN0aW9uKGZuLCBlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIsIG1lc3NhZ2UpIHtcbiAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBlcnJvckxpa2UgfHwgZXJyb3JMaWtlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgZXJyTXNnTWF0Y2hlciA9IGVycm9yTGlrZTtcbiAgICBlcnJvckxpa2UgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1lc3NhZ2UsIGFzc2VydC5kb2VzTm90VGhyb3csIHRydWUpLnRvLm5vdC50aHJvdyhlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIpO1xufTtcbmFzc2VydC5vcGVyYXRvciA9IGZ1bmN0aW9uKHZhbCwgb3BlcmF0b3IsIHZhbDIsIG1zZykge1xuICB2YXIgb2s7XG4gIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICBjYXNlIFwiPT1cIjpcbiAgICAgIG9rID0gdmFsID09IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPT09XCI6XG4gICAgICBvayA9IHZhbCA9PT0gdmFsMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCI+XCI6XG4gICAgICBvayA9IHZhbCA+IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPj1cIjpcbiAgICAgIG9rID0gdmFsID49IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPFwiOlxuICAgICAgb2sgPSB2YWwgPCB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIjw9XCI6XG4gICAgICBvayA9IHZhbCA8PSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIiE9XCI6XG4gICAgICBvayA9IHZhbCAhPSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIiE9PVwiOlxuICAgICAgb2sgPSB2YWwgIT09IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbXNnID0gbXNnID8gbXNnICsgXCI6IFwiIDogbXNnO1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBtc2cgKyAnSW52YWxpZCBvcGVyYXRvciBcIicgKyBvcGVyYXRvciArICdcIicsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgYXNzZXJ0Lm9wZXJhdG9yXG4gICAgICApO1xuICB9XG4gIHZhciB0ZXN0MiA9IG5ldyBBc3NlcnRpb24ob2ssIG1zZywgYXNzZXJ0Lm9wZXJhdG9yLCB0cnVlKTtcbiAgdGVzdDIuYXNzZXJ0KFxuICAgIHRydWUgPT09IGZsYWcodGVzdDIsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBpbnNwZWN0Mih2YWwpICsgXCIgdG8gYmUgXCIgKyBvcGVyYXRvciArIFwiIFwiICsgaW5zcGVjdDIodmFsMiksXG4gICAgXCJleHBlY3RlZCBcIiArIGluc3BlY3QyKHZhbCkgKyBcIiB0byBub3QgYmUgXCIgKyBvcGVyYXRvciArIFwiIFwiICsgaW5zcGVjdDIodmFsMilcbiAgKTtcbn07XG5hc3NlcnQuY2xvc2VUbyA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBkZWx0YSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5jbG9zZVRvLCB0cnVlKS50by5iZS5jbG9zZVRvKGV4cCwgZGVsdGEpO1xufTtcbmFzc2VydC5hcHByb3hpbWF0ZWx5ID0gZnVuY3Rpb24oYWN0LCBleHAsIGRlbHRhLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LmFwcHJveGltYXRlbHksIHRydWUpLnRvLmJlLmFwcHJveGltYXRlbHkoZXhwLCBkZWx0YSk7XG59O1xuYXNzZXJ0LnNhbWVNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQuc2FtZU1lbWJlcnMsIHRydWUpLnRvLmhhdmUuc2FtZS5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5ub3RTYW1lTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0Lm5vdFNhbWVNZW1iZXJzLCB0cnVlKS50by5ub3QuaGF2ZS5zYW1lLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0LnNhbWVEZWVwTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0LnNhbWVEZWVwTWVtYmVycywgdHJ1ZSkudG8uaGF2ZS5zYW1lLmRlZXAubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQubm90U2FtZURlZXBNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQubm90U2FtZURlZXBNZW1iZXJzLCB0cnVlKS50by5ub3QuaGF2ZS5zYW1lLmRlZXAubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQuc2FtZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQuc2FtZU9yZGVyZWRNZW1iZXJzLCB0cnVlKS50by5oYXZlLnNhbWUub3JkZXJlZC5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5ub3RTYW1lT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLm5vdC5oYXZlLnNhbWUub3JkZXJlZC5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5zYW1lRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQuc2FtZURlZXBPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8uaGF2ZS5zYW1lLmRlZXAub3JkZXJlZC5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5ub3RTYW1lRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQubm90U2FtZURlZXBPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8ubm90LmhhdmUuc2FtZS5kZWVwLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQuaW5jbHVkZU1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQuaW5jbHVkZU1lbWJlcnMsIHRydWUpLnRvLmluY2x1ZGUubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5ub3RJbmNsdWRlTWVtYmVycyA9IGZ1bmN0aW9uKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5ub3RJbmNsdWRlTWVtYmVycywgdHJ1ZSkudG8ubm90LmluY2x1ZGUubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5pbmNsdWRlRGVlcE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQuaW5jbHVkZURlZXBNZW1iZXJzLCB0cnVlKS50by5pbmNsdWRlLmRlZXAubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5ub3RJbmNsdWRlRGVlcE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZURlZXBNZW1iZXJzLCB0cnVlKS50by5ub3QuaW5jbHVkZS5kZWVwLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQuaW5jbHVkZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8uaW5jbHVkZS5vcmRlcmVkLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQubm90SW5jbHVkZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0Lm5vdEluY2x1ZGVPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8ubm90LmluY2x1ZGUub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0LmluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQuaW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8uaW5jbHVkZS5kZWVwLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5ub3RJbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLm5vdC5pbmNsdWRlLmRlZXAub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0Lm9uZU9mID0gZnVuY3Rpb24oaW5MaXN0LCBsaXN0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihpbkxpc3QsIG1zZywgYXNzZXJ0Lm9uZU9mLCB0cnVlKS50by5iZS5vbmVPZihsaXN0KTtcbn07XG5hc3NlcnQuaXNJdGVyYWJsZSA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIGlmIChvYmogPT0gdm9pZCAwIHx8ICFvYmpbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgIG1zZyA9IG1zZyA/IGAke21zZ30gZXhwZWN0ZWQgJHtpbnNwZWN0MihvYmopfSB0byBiZSBhbiBpdGVyYWJsZWAgOiBgZXhwZWN0ZWQgJHtpbnNwZWN0MihvYmopfSB0byBiZSBhbiBpdGVyYWJsZWA7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgbXNnLFxuICAgICAgdm9pZCAwLFxuICAgICAgYXNzZXJ0LmlzSXRlcmFibGVcbiAgICApO1xuICB9XG59O1xuYXNzZXJ0LmNoYW5nZXMgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbXNnID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5jaGFuZ2VzLCB0cnVlKS50by5jaGFuZ2Uob2JqLCBwcm9wKTtcbn07XG5hc3NlcnQuY2hhbmdlc0J5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmNoYW5nZXNCeSwgdHJ1ZSkudG8uY2hhbmdlKG9iaiwgcHJvcCkuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5kb2VzTm90Q2hhbmdlID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1zZyA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRvZXNOb3RDaGFuZ2UsIHRydWUpLnRvLm5vdC5jaGFuZ2Uob2JqLCBwcm9wKTtcbn07XG5hc3NlcnQuY2hhbmdlc0J1dE5vdEJ5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmNoYW5nZXNCdXROb3RCeSwgdHJ1ZSkudG8uY2hhbmdlKG9iaiwgcHJvcCkuYnV0Lm5vdC5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmluY3JlYXNlcyA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtc2cgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5pbmNyZWFzZXMsIHRydWUpLnRvLmluY3JlYXNlKG9iaiwgcHJvcCk7XG59O1xuYXNzZXJ0LmluY3JlYXNlc0J5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmluY3JlYXNlc0J5LCB0cnVlKS50by5pbmNyZWFzZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuZG9lc05vdEluY3JlYXNlID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1zZyA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRvZXNOb3RJbmNyZWFzZSwgdHJ1ZSkudG8ubm90LmluY3JlYXNlKG9iaiwgcHJvcCk7XG59O1xuYXNzZXJ0LmluY3JlYXNlc0J1dE5vdEJ5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmluY3JlYXNlc0J1dE5vdEJ5LCB0cnVlKS50by5pbmNyZWFzZShvYmosIHByb3ApLmJ1dC5ub3QuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5kZWNyZWFzZXMgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbXNnID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZGVjcmVhc2VzLCB0cnVlKS50by5kZWNyZWFzZShvYmosIHByb3ApO1xufTtcbmFzc2VydC5kZWNyZWFzZXNCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kZWNyZWFzZXNCeSwgdHJ1ZSkudG8uZGVjcmVhc2Uob2JqLCBwcm9wKS5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmRvZXNOb3REZWNyZWFzZSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtc2cgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90RGVjcmVhc2UsIHRydWUpLnRvLm5vdC5kZWNyZWFzZShvYmosIHByb3ApO1xufTtcbmFzc2VydC5kb2VzTm90RGVjcmVhc2VCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdERlY3JlYXNlQnksIHRydWUpLnRvLm5vdC5kZWNyZWFzZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuZGVjcmVhc2VzQnV0Tm90QnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZGVjcmVhc2VzQnV0Tm90QnksIHRydWUpLnRvLmRlY3JlYXNlKG9iaiwgcHJvcCkuYnV0Lm5vdC5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmlmRXJyb3IgPSBmdW5jdGlvbih2YWwpIHtcbiAgaWYgKHZhbCkge1xuICAgIHRocm93IHZhbDtcbiAgfVxufTtcbmFzc2VydC5pc0V4dGVuc2libGUgPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNFeHRlbnNpYmxlLCB0cnVlKS50by5iZS5leHRlbnNpYmxlO1xufTtcbmFzc2VydC5pc05vdEV4dGVuc2libGUgPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNOb3RFeHRlbnNpYmxlLCB0cnVlKS50by5ub3QuYmUuZXh0ZW5zaWJsZTtcbn07XG5hc3NlcnQuaXNTZWFsZWQgPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNTZWFsZWQsIHRydWUpLnRvLmJlLnNlYWxlZDtcbn07XG5hc3NlcnQuaXNOb3RTZWFsZWQgPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNOb3RTZWFsZWQsIHRydWUpLnRvLm5vdC5iZS5zZWFsZWQ7XG59O1xuYXNzZXJ0LmlzRnJvemVuID0gZnVuY3Rpb24ob2JqLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzRnJvemVuLCB0cnVlKS50by5iZS5mcm96ZW47XG59O1xuYXNzZXJ0LmlzTm90RnJvemVuID0gZnVuY3Rpb24ob2JqLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzTm90RnJvemVuLCB0cnVlKS50by5ub3QuYmUuZnJvemVuO1xufTtcbmFzc2VydC5pc0VtcHR5ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzRW1wdHksIHRydWUpLnRvLmJlLmVtcHR5O1xufTtcbmFzc2VydC5pc05vdEVtcHR5ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90RW1wdHksIHRydWUpLnRvLm5vdC5iZS5lbXB0eTtcbn07XG4oLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbGlhcyhuYW1lLCBhcykge1xuICBhc3NlcnRbYXNdID0gYXNzZXJ0W25hbWVdO1xuICByZXR1cm4gYWxpYXM7XG59LCBcImFsaWFzXCIpKShcImlzT2tcIiwgXCJva1wiKShcImlzTm90T2tcIiwgXCJub3RPa1wiKShcInRocm93c1wiLCBcInRocm93XCIpKFwidGhyb3dzXCIsIFwiVGhyb3dcIikoXCJpc0V4dGVuc2libGVcIiwgXCJleHRlbnNpYmxlXCIpKFwiaXNOb3RFeHRlbnNpYmxlXCIsIFwibm90RXh0ZW5zaWJsZVwiKShcImlzU2VhbGVkXCIsIFwic2VhbGVkXCIpKFwiaXNOb3RTZWFsZWRcIiwgXCJub3RTZWFsZWRcIikoXCJpc0Zyb3plblwiLCBcImZyb3plblwiKShcImlzTm90RnJvemVuXCIsIFwibm90RnJvemVuXCIpKFwiaXNFbXB0eVwiLCBcImVtcHR5XCIpKFwiaXNOb3RFbXB0eVwiLCBcIm5vdEVtcHR5XCIpKFwiaXNDYWxsYWJsZVwiLCBcImlzRnVuY3Rpb25cIikoXCJpc05vdENhbGxhYmxlXCIsIFwiaXNOb3RGdW5jdGlvblwiKTtcblxuLy8gbGliL2NoYWkuanNcbnZhciB1c2VkID0gW107XG5mdW5jdGlvbiB1c2UoZm4pIHtcbiAgY29uc3QgZXhwb3J0cyA9IHtcbiAgICBBc3NlcnRpb25FcnJvcixcbiAgICB1dGlsOiB1dGlsc19leHBvcnRzLFxuICAgIGNvbmZpZyxcbiAgICBleHBlY3QsXG4gICAgYXNzZXJ0LFxuICAgIEFzc2VydGlvbixcbiAgICAuLi5zaG91bGRfZXhwb3J0c1xuICB9O1xuICBpZiAoIX51c2VkLmluZGV4T2YoZm4pKSB7XG4gICAgZm4oZXhwb3J0cywgdXRpbHNfZXhwb3J0cyk7XG4gICAgdXNlZC5wdXNoKGZuKTtcbiAgfVxuICByZXR1cm4gZXhwb3J0cztcbn1cbl9fbmFtZSh1c2UsIFwidXNlXCIpO1xuZXhwb3J0IHtcbiAgQXNzZXJ0aW9uLFxuICBBc3NlcnRpb25FcnJvcixcbiAgU2hvdWxkLFxuICBhc3NlcnQsXG4gIGNvbmZpZyxcbiAgZXhwZWN0LFxuICBzaG91bGQsXG4gIHVzZSxcbiAgdXRpbHNfZXhwb3J0cyBhcyB1dGlsXG59O1xuLyohXG4gKiBDaGFpIC0gZmxhZyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIHRlc3QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBleHBlY3RUeXBlcyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGdldEFjdHVhbCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIG1lc3NhZ2UgY29tcG9zaXRpb24gdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSB0cmFuc2ZlckZsYWdzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBjaGFpXG4gKiBodHRwOi8vY2hhaWpzLmNvbVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBpc1Byb3h5RW5hYmxlZCBoZWxwZXJcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gYWRkUHJvcGVydHkgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBhZGRMZW5ndGhHdWFyZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGdldFByb3BlcnRpZXMgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBwcm94aWZ5IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gYWRkTWV0aG9kIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gb3ZlcndyaXRlUHJvcGVydHkgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBvdmVyd3JpdGVNZXRob2QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBhZGRDaGFpbmluZ01ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGNvbXBhcmVCeUluc3BlY3QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBpc05hTiB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE1IFNha3RoaXByaXlhbiBWYWlyYW1hbmkgPHRoZWNoYXJnaW5ndm9sY2Fub0BnbWFpbC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBjaGFpXG4gKiBDb3B5cmlnaHQoYykgMjAxMSBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIGNoYWlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjpcblxuZGVlcC1lcWwvaW5kZXguanM6XG4gICgqIVxuICAgKiBkZWVwLWVxbFxuICAgKiBDb3B5cmlnaHQoYykgMjAxMyBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAgICogTUlUIExpY2Vuc2VkXG4gICAqKVxuICAoKiFcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBNZW1vaXplTWFwIGhhcyByZWNvcmRlZCBhIHJlc3VsdCBvZiB0aGUgdHdvIG9wZXJhbmRzXG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7TWVtb2l6ZU1hcH0gbWVtb2l6ZU1hcFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbnxudWxsfSByZXN1bHRcbiAgKilcbiAgKCohXG4gICAqIFNldCB0aGUgcmVzdWx0IG9mIHRoZSBlcXVhbGl0eSBpbnRvIHRoZSBNZW1vaXplTWFwXG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7TWVtb2l6ZU1hcH0gbWVtb2l6ZU1hcFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlc3VsdFxuICAqKVxuICAoKiFcbiAgICogUHJpbWFyeSBFeHBvcnRcbiAgICopXG4gICgqIVxuICAgKiBUaGUgbWFpbiBsb2dpYyBvZiB0aGUgYGRlZXBFcXVhbGAgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKG9wdGlvbmFsKSBBZGRpdGlvbmFsIG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMuY29tcGFyYXRvcl0gKG9wdGlvbmFsKSBPdmVycmlkZSBkZWZhdWx0IGFsZ29yaXRobSwgZGV0ZXJtaW5pbmcgY3VzdG9tIGVxdWFsaXR5LlxuICAgKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5tZW1vaXplXSAob3B0aW9uYWwpIFByb3ZpZGUgYSBjdXN0b20gbWVtb2l6YXRpb24gb2JqZWN0IHdoaWNoIHdpbGwgY2FjaGUgdGhlIHJlc3VsdHMgb2ZcbiAgICAgIGNvbXBsZXggb2JqZWN0cyBmb3IgYSBzcGVlZCBib29zdC4gQnkgcGFzc2luZyBgZmFsc2VgIHlvdSBjYW4gZGlzYWJsZSBtZW1vaXphdGlvbiwgYnV0IHRoaXMgd2lsbCBjYXVzZSBjaXJjdWxhclxuICAgICAgcmVmZXJlbmNlcyB0byBibG93IHRoZSBzdGFjay5cbiAgICogQHJldHVybiB7Qm9vbGVhbn0gZXF1YWwgbWF0Y2hcbiAgKilcbiAgKCohXG4gICAqIENvbXBhcmUgdHdvIFJlZ3VsYXIgRXhwcmVzc2lvbnMgZm9yIGVxdWFsaXR5LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7UmVnRXhwfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiAgKCohXG4gICAqIENvbXBhcmUgdHdvIFNldHMvTWFwcyBmb3IgZXF1YWxpdHkuIEZhc3RlciB0aGFuIG90aGVyIGVxdWFsaXR5IGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtTZXR9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge1NldH0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqKVxuICAoKiFcbiAgICogU2ltcGxlIGVxdWFsaXR5IGZvciBmbGF0IGl0ZXJhYmxlIG9iamVjdHMgc3VjaCBhcyBBcnJheXMsIFR5cGVkQXJyYXlzIG9yIE5vZGUuanMgYnVmZmVycy5cbiAgICpcbiAgICogQHBhcmFtIHtJdGVyYWJsZX0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7SXRlcmFibGV9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiAgKCohXG4gICAqIFNpbXBsZSBlcXVhbGl0eSBmb3IgZ2VuZXJhdG9yIG9iamVjdHMgc3VjaCBhcyB0aG9zZSByZXR1cm5lZCBieSBnZW5lcmF0b3IgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0l0ZXJhYmxlfSBsZWZ0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtJdGVyYWJsZX0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqKVxuICAoKiFcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiBvYmplY3QgaGFzIGFuIEBAaXRlcmF0b3IgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBvYmplY3QgaGFzIGFuIEBAaXRlcmF0b3IgZnVuY3Rpb24uXG4gICAqKVxuICAoKiFcbiAgICogR2V0cyBhbGwgaXRlcmF0b3IgZW50cmllcyBmcm9tIHRoZSBnaXZlbiBPYmplY3QuIElmIHRoZSBPYmplY3QgaGFzIG5vIEBAaXRlcmF0b3IgZnVuY3Rpb24sIHJldHVybnMgYW4gZW1wdHkgYXJyYXkuXG4gICAqIFRoaXMgd2lsbCBjb25zdW1lIHRoZSBpdGVyYXRvciAtIHdoaWNoIGNvdWxkIGhhdmUgc2lkZSBlZmZlY3RzIGRlcGVuZGluZyBvbiB0aGUgQEBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFuIGFycmF5IG9mIGVudHJpZXMgZnJvbSB0aGUgQEBpdGVyYXRvciBmdW5jdGlvblxuICAgKilcbiAgKCohXG4gICAqIEdldHMgYWxsIGVudHJpZXMgZnJvbSBhIEdlbmVyYXRvci4gVGhpcyB3aWxsIGNvbnN1bWUgdGhlIGdlbmVyYXRvciAtIHdoaWNoIGNvdWxkIGhhdmUgc2lkZSBlZmZlY3RzLlxuICAgKlxuICAgKiBAcGFyYW0ge0dlbmVyYXRvcn0gdGFyZ2V0XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYW4gYXJyYXkgb2YgZW50cmllcyBmcm9tIHRoZSBHZW5lcmF0b3IuXG4gICAqKVxuICAoKiFcbiAgICogR2V0cyBhbGwgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBrZXlzIGZyb20gYSB0YXJnZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAgICogQHJldHVybnMge0FycmF5fSBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIGtleXMgZnJvbSB0aGUgdGFyZ2V0LlxuICAgKilcbiAgKCohXG4gICAqIERldGVybWluZXMgaWYgdHdvIG9iamVjdHMgaGF2ZSBtYXRjaGluZyB2YWx1ZXMsIGdpdmVuIGEgc2V0IG9mIGtleXMuIERlZmVycyB0byBkZWVwRXF1YWwgZm9yIHRoZSBlcXVhbGl0eSBjaGVjayBvZlxuICAgKiBlYWNoIGtleS4gSWYgYW55IHZhbHVlIG9mIHRoZSBnaXZlbiBrZXkgaXMgbm90IGVxdWFsLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gZmFsc2UgKGVhcmx5KS5cbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtBcnJheX0ga2V5cyBBbiBhcnJheSBvZiBrZXlzIHRvIGNvbXBhcmUgdGhlIHZhbHVlcyBvZiBsZWZ0SGFuZE9wZXJhbmQgYW5kIHJpZ2h0SGFuZE9wZXJhbmQgYWdhaW5zdFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqKVxuICAoKiFcbiAgICogUmVjdXJzaXZlbHkgY2hlY2sgdGhlIGVxdWFsaXR5IG9mIHR3byBPYmplY3RzLiBPbmNlIGJhc2ljIHNhbWVuZXNzIGhhcyBiZWVuIGVzdGFibGlzaGVkIGl0IHdpbGwgZGVmZXIgdG8gYGRlZXBFcXVhbGBcbiAgICogZm9yIGVhY2ggZW51bWVyYWJsZSBrZXkgaW4gdGhlIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiAgKCohXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSBwcmltaXRpdmUuXG4gICAqXG4gICAqIFRoaXMgaW50ZW50aW9uYWxseSByZXR1cm5zIHRydWUgZm9yIGFsbCBvYmplY3RzIHRoYXQgY2FuIGJlIGNvbXBhcmVkIGJ5IHJlZmVyZW5jZSxcbiAgICogaW5jbHVkaW5nIGZ1bmN0aW9ucyBhbmQgc3ltYm9scy5cbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqKVxuKi9cbiIsICIvKioqKioqKipcblxuIENvbnZlcnQgY2hhaS1kb20gMS44LjEgdG8gZXMgbW9kdWxlLCB3aXRob3V0IGFueSBvdGhlciBtb2RpZmljYXRpb24uXG4gRnJvbSBodHRwczovL2dpdGh1Yi5jb20vbmF0aGFuYm9rdGFlL2NoYWktZG9tL2Jsb2IvODZjMzQyMy9jaGFpLWRvbS5qc1xuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbmF0aGFuYm9rdGFlL2NoYWktZG9tL2lzc3Vlcy8zOFxuXG4gVXNhZ2U6XG4gaW1wb3J0IHsgY2hhaURvbSB9IGZyb20gJzxwYXRoLXRvPi9jaGFpLWRvbSc7XG4gY2hhaS51c2UoY2hhaURvbSk7XG5cbiBDb3B5cmlnaHQgKGMpIDIwMTUgTmF0aGFuIEJsYWNrIGFuZCBvdGhlciBjb250cmlidXRvcnNcblxuIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBsaWNlbnNlLiBGb3IgYSBjb3B5LCBzZWUgPGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUPi5cblxuICoqKioqKioqKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFpRG9tKGNoYWksIHV0aWxzKSB7XG4gICAgdmFyIGZsYWcgPSB1dGlscy5mbGFnLFxuXG4gICAgICAgIGVsVG9TdHJpbmcgPSBmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgbGV0IGRlc2NcbiAgICAgICAgICAgIGlmIChpc05vZGVMaXN0KGVsKSkge1xuICAgICAgICAgICAgICAgIGlmIChlbC5sZW5ndGggPT09IDApIHJldHVybiAnZW1wdHkgTm9kZUxpc3QnXG4gICAgICAgICAgICAgICAgZGVzYyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGVsLCAwLCA1KS5tYXAoZWxUb1N0cmluZykuam9pbignLCAnKVxuICAgICAgICAgICAgICAgIHJldHVybiBlbC5sZW5ndGggPiA1ID8gZGVzYyArICcuLi4gKCsnICsgKGVsLmxlbmd0aCAtIDUpICsgJyBtb3JlKScgOiBkZXNjXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVzYyA9IGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgaWYgKGVsLmlkKSB7XG4gICAgICAgICAgICAgICAgZGVzYyArPSAnIycgKyBlbC5pZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgIGRlc2MgKz0gJy4nICsgU3RyaW5nKGVsLmNsYXNzTmFtZSkucmVwbGFjZSgvXFxzKy9nLCAnLicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGVsLmF0dHJpYnV0ZXMsIGZ1bmN0aW9uKGF0dHIpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0ci5uYW1lICE9PSAnY2xhc3MnICYmIGF0dHIubmFtZSAhPT0gJ2lkJykge1xuICAgICAgICAgICAgICAgICAgICBkZXNjICs9ICdbJyArIGF0dHIubmFtZSArIChhdHRyLnZhbHVlID8gJz1cIicgKyBhdHRyLnZhbHVlICsgJ1wiXScgOiAnXScpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVybiBkZXNjXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXR0ckFzc2VydCA9IGZ1bmN0aW9uKG5hbWUsIHZhbCkge1xuICAgICAgICAgICAgbGV0IGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksIGFjdHVhbCA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKVxuXG4gICAgICAgICAgICBpZiAoIWZsYWcodGhpcywgJ25lZ2F0ZScpIHx8IHVuZGVmaW5lZCA9PT0gdmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICEhZWwuYXR0cmlidXRlc1tuYW1lXVxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgYW4gYXR0cmlidXRlICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBhbiBhdHRyaWJ1dGUgI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsIG5hbWVcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh1bmRlZmluZWQgIT09IHZhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICB2YWwgPT09IGFjdHVhbFxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgYW4gYXR0cmlidXRlICcgKyB1dGlscy5pbnNwZWN0KG5hbWUpICsgJyB3aXRoIHRoZSB2YWx1ZSAje2V4cH0sIGJ1dCB0aGUgdmFsdWUgd2FzICN7YWN0fSdcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBhbiBhdHRyaWJ1dGUgJyArIHV0aWxzLmluc3BlY3QobmFtZSkgKyAnIHdpdGggdGhlIHZhbHVlICN7YWN0fSdcbiAgICAgICAgICAgICAgICAgICAgLCB2YWxcbiAgICAgICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcsIGFjdHVhbClcbiAgICAgICAgfSxcblxuICAgICAgICBpc0hUTUxFbGVtZW50ID0gZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBlbC5ub2RlVHlwZSA9PT0gMSAvLyB3aW5kb3cuTm9kZS5FTEVNRU5UX05PREVcbiAgICAgICAgfSxcblxuICAgICAgICBpc05vZGVMaXN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE5vZGVMaXN0XSdcbiAgICAgICAgfVxuXG4gICAgdXRpbHMuZWxUb1N0cmluZyA9IGVsVG9TdHJpbmdcbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2F0dHInLCBhdHRyQXNzZXJ0KVxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnYXR0cmlidXRlJywgYXR0ckFzc2VydClcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnY2xhc3MnLCBmdW5jdGlvbihjbGFzc05hbWUpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKVxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBoYXZlIGNsYXNzICN7ZXhwfSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgbm90IHRvIGhhdmUgY2xhc3MgI3tleHB9J1xuICAgICAgICAgICAgLCBjbGFzc05hbWVcbiAgICAgICAgKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2lkJywgZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBlbC5pZCA9PSBpZFxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBoYXZlIGlkICN7ZXhwfSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgbm90IHRvIGhhdmUgaWQgI3tleHB9J1xuICAgICAgICAgICAgLCBpZFxuICAgICAgICApXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaHRtbCcsIGZ1bmN0aW9uKGh0bWwpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksIGFjdHVhbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLmlubmVySFRNTFxuXG4gICAgICAgIGlmIChmbGFnKHRoaXMsICdjb250YWlucycpKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICBhY3R1YWwuaW5kZXhPZihodG1sKSA+PSAwXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgI3thY3R9IHRvIGNvbnRhaW4gSFRNTCAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgI3thY3R9IG5vdCB0byBjb250YWluIEhUTUwgI3tleHB9J1xuICAgICAgICAgICAgICAgICwgaHRtbFxuICAgICAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICBhY3R1YWwgPT09IGh0bWxcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgSFRNTCAje2V4cH0sIGJ1dCB0aGUgSFRNTCB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgbm90IHRvIGhhdmUgSFRNTCAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCBodG1sXG4gICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoJ3RyaW1tZWQnLCBudWxsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgZmxhZyh0aGlzLCAndHJpbS10ZXh0JywgdHJ1ZSlcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCd0ZXh0JywgZnVuY3Rpb24odGV4dCkge1xuICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksIGNvbnRhaW5zID0gZmxhZyh0aGlzLCAnY29udGFpbnMnKSxcbiAgICAgICAgICAgIHRyaW0gPSBmbGFnKHRoaXMsICd0cmltLXRleHQnKSwgYWN0dWFsLCByZXN1bHRcblxuICAgICAgICBpZiAoaXNOb2RlTGlzdChvYmopKSB7XG4gICAgICAgICAgICBhY3R1YWwgPSBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwob2JqLCBmdW5jdGlvbihlbCkgeyByZXR1cm4gdHJpbSA/IGVsLnRleHRDb250ZW50LnRyaW0oKSA6IGVsLnRleHRDb250ZW50IH0pXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0ZXh0KSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRhaW5zID9cbiAgICAgICAgICAgICAgICAgICAgdGV4dFtmbGFnKHRoaXMsICduZWdhdGUnKSA/ICdzb21lJyA6ICdldmVyeSddKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc29tZS5jYWxsKG9iaiwgZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRyaW0gPyBlbC50ZXh0Q29udGVudC50cmltKCkgOiBlbC50ZXh0Q29udGVudCkgPT09IHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgdXRpbHMuZXFsKGFjdHVhbCwgdGV4dClcblxuICAgICAgICAgICAgICAgIGFjdHVhbCA9IGFjdHVhbC5qb2luKClcbiAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5qb2luKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0dWFsID0gYWN0dWFsLmpvaW4oJycpXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29udGFpbnMgPyBhY3R1YWwuaW5kZXhPZih0ZXh0KSA+PSAwIDogYWN0dWFsID09PSB0ZXh0XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY3R1YWwgPSB0cmltID8gb2JqLnRleHRDb250ZW50LnRyaW0oKSA6IG9iai50ZXh0Q29udGVudFxuICAgICAgICAgICAgcmVzdWx0ID0gY29udGFpbnMgPyBhY3R1YWwuaW5kZXhPZih0ZXh0KSA+PSAwIDogYWN0dWFsID09PSB0ZXh0XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb2JqRGVzYyA9IGVsVG9TdHJpbmcob2JqKSwgdGV4dE1zZyA9IHRyaW0gPyAndHJpbW1lZCB0ZXh0JyA6ICd0ZXh0J1xuICAgICAgICBpZiAoY29udGFpbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIHJlc3VsdFxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBvYmpEZXNjICsgJyB0byBjb250YWluICN7ZXhwfSwgYnV0IHRoZSAnICsgdGV4dE1zZyArICcgd2FzICN7YWN0fSdcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgb2JqRGVzYyArICcgbm90IHRvIGNvbnRhaW4gI3tleHB9LCBidXQgdGhlICcgKyB0ZXh0TXNnICsgJyB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICwgdGV4dFxuICAgICAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICByZXN1bHRcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgb2JqRGVzYyArICcgdG8gaGF2ZSAnICsgdGV4dE1zZyArICcgI3tleHB9LCBidXQgdGhlICcgKyB0ZXh0TXNnICsgJyB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBvYmpEZXNjICsgJyBub3QgdG8gaGF2ZSAnICsgdGV4dE1zZyArICcgI3tleHB9J1xuICAgICAgICAgICAgICAgICwgdGV4dFxuICAgICAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCd2YWx1ZScsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHZhciBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLCBhY3R1YWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKS52YWx1ZVxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcpLnZhbHVlID09PSB2YWx1ZVxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBoYXZlIHZhbHVlICN7ZXhwfSwgYnV0IHRoZSB2YWx1ZSB3YXMgI3thY3R9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSB2YWx1ZSAje2V4cH0nXG4gICAgICAgICAgICAsIHZhbHVlXG4gICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICApXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZVByb3BlcnR5KCdleGlzdCcsIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgICAgIGlmIChpc05vZGVMaXN0KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgb2JqLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgYW4gZW1wdHkgTm9kZUxpc3QgdG8gaGF2ZSBub2RlcydcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGV4aXN0JylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVQcm9wZXJ0eSgnZW1wdHknLCBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgICAgICBpZiAoaXNIVE1MRWxlbWVudChvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIG9iai5jaGlsZHJlbi5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gYmUgZW1wdHknXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBiZSBlbXB0eScpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZUxpc3Qob2JqKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICBvYmoubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGJlIGVtcHR5J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgYmUgZW1wdHknKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCgnbGVuZ3RoJyxcbiAgICAgICAgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgaWYgKGlzTm9kZUxpc3Qob2JqKSB8fCBpc0hUTUxFbGVtZW50KG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFjdHVhbExlbmd0aCA9IG9iai5jaGlsZHJlbiA/IG9iai5jaGlsZHJlbi5sZW5ndGggOiBvYmoubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsTGVuZ3RoID09PSBsZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGhhdmUgI3tleHB9IGNoaWxkcmVuIGJ1dCBpdCBoYWQgI3thY3R9IGNoaWxkcmVuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGhhdmUgI3tleHB9IGNoaWxkcmVuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgLCBsZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICwgYWN0dWFsTGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgX3N1cGVyLmNhbGwodGhpcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIClcblxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlTWV0aG9kKCdtYXRjaCcsIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgICAgICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICAgICAgaWYgKGlzSFRNTEVsZW1lbnQob2JqKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICBvYmoubWF0Y2hlcyhzZWxlY3RvcilcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbWF0Y2ggI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgbWF0Y2ggI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsIHNlbGVjdG9yXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc05vZGVMaXN0KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgKCEhb2JqLmxlbmd0aCAmJiBBcnJheS5wcm90b3R5cGUuZXZlcnkuY2FsbChvYmosIGZ1bmN0aW9uKGVsKSB7IHJldHVybiBlbC5tYXRjaGVzKHNlbGVjdG9yKSB9KSlcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbWF0Y2ggI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgbWF0Y2ggI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsIHNlbGVjdG9yXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCgnY29udGFpbicsXG4gICAgICAgIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN1Yml0ZW0pIHtcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICBpZiAoaXNIVE1MRWxlbWVudChvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3ViaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhb2JqLnF1ZXJ5U2VsZWN0b3Ioc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBjb250YWluICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgY29udGFpbiAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBzdWJpdGVtKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmNvbnRhaW5zKHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gY29udGFpbiAnICsgZWxUb1N0cmluZyhzdWJpdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBjb250YWluICcgKyBlbFRvU3RyaW5nKHN1Yml0ZW0pKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIF9zdXBlci5jYWxsKHRoaXMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2Rlc2NlbmRhbnQnLCBmdW5jdGlvbihzdWJpdGVtKSB7XG4gICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgYWN0dWFsID0gc3ViaXRlbVxuXG4gICAgICAgIGlmICh0eXBlb2Ygc3ViaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGFjdHVhbCA9IG9iai5xdWVyeVNlbGVjdG9yKHN1Yml0ZW0pXG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAhIWFjdHVhbFxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGhhdmUgZGVzY2VuZGFudCAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGhhdmUgZGVzY2VuZGFudCAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCBzdWJpdGVtKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgb2JqLmNvbnRhaW5zKHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gY29udGFpbiAnICsgZWxUb1N0cmluZyhzdWJpdGVtKVxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBjb250YWluICcgKyBlbFRvU3RyaW5nKHN1Yml0ZW0pKVxuICAgICAgICB9XG5cbiAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgYWN0dWFsKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2Rlc2NlbmRhbnRzJywgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpLFxuICAgICAgICAgICAgYWN0dWFsID0gb2JqLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpXG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgISFhY3R1YWwubGVuZ3RoXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBoYXZlIGRlc2NlbmRhbnRzICN7ZXhwfSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBoYXZlIGRlc2NlbmRhbnRzICN7ZXhwfSdcbiAgICAgICAgICAgICwgc2VsZWN0b3IpXG4gICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcsIGFjdHVhbClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkUHJvcGVydHkoJ2Rpc3BsYXllZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSxcbiAgICAgICAgICAgIGFjdHVhbCA9IGRvY3VtZW50LmJvZHkuY29udGFpbnMoZWwpID8gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLmRpc3BsYXkgOiBlbC5zdHlsZS5kaXNwbGF5XG5cbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBhY3R1YWwgIT09ICdub25lJ1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBiZSBkaXNwbGF5ZWQsIGJ1dCBpdCB3YXMgbm90J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBub3QgYmUgZGlzcGxheWVkLCBidXQgaXQgd2FzIGFzICcgKyBhY3R1YWxcbiAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgIClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkUHJvcGVydHkoJ3Zpc2libGUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksXG4gICAgICAgICAgICBhY3R1YWwgPSBkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGVsKSA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKS52aXNpYmlsaXR5IDogZWwuc3R5bGUudmlzaWJpbGl0eVxuXG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgYWN0dWFsICE9PSAnaGlkZGVuJyAmJiBhY3R1YWwgIT09ICdjb2xsYXBzZSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gYmUgdmlzaWJsZSwgYnV0IGl0IHdhcyAnICsgKGFjdHVhbCA9PT0gJ2hpZGRlbicgPyAnaGlkZGVuJyA6ICdjb2xsYXBzZWQnKVxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBub3QgYmUgdmlzaWJsZSwgYnV0IGl0IHdhcydcbiAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgIClcbiAgICB9KVxufSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXh0ZW5kfSBmcm9tIFwiLi4vLi4vc291cmNlL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5leHBvcnQgY29uc3QgaXNCcm93c2VyID0gbmV3IEZ1bmN0aW9uKFwidHJ5IHtyZXR1cm4gdGhpcz09PXdpbmRvdzt9Y2F0Y2goZSl7IHJldHVybiBmYWxzZTt9XCIpO1xuZXhwb3J0IGNvbnN0IGlzTm9kZSA9IG5ldyBGdW5jdGlvbihcInRyeSB7cmV0dXJuIHRoaXM9PT1nbG9iYWw7fWNhdGNoKGUpe3JldHVybiBmYWxzZTt9XCIpO1xuXG5sZXQgSlNET01FeHBvcnQgPSBudWxsO1xuXG4vKipcbiAqIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGRvbSBzdGFjayBpbiB0aGUgbm9kZSBlbnZpcm9ubWVudFxuICpcbiAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj58UHJvbWlzZTx2b2lkPn1cbiAqL1xuZnVuY3Rpb24gaW5pdEpTRE9NKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJiB3aW5kb3dbJ0RPTVBhcnNlciddKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICBjb25zdCBnID0gZ2V0R2xvYmFsKCk7XG5cbiAgICBvcHRpb25zID0gZXh0ZW5kKHt9LCB7XG4gICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlLFxuICAgICAgICBjb250ZW50VHlwZTogXCJ0ZXh0L2h0bWxcIixcbiAgICAgICAgaW5jbHVkZU5vZGVMb2NhdGlvbnM6IHRydWUsXG4gICAgICAgIHN0b3JhZ2VRdW90YTogMTAwMDAwMDAsXG4gICAgICAgIHJ1blNjcmlwdHM6IFwiZGFuZ2Vyb3VzbHlcIixcbiAgICAgICAgcmVzb3VyY2VzOiBcInVzYWJsZVwiXG4gICAgfSwgb3B0aW9ucyB8fCB7fSlcblxuICAgIHJldHVybiBpbXBvcnQoXCJqc2RvbVwiKS50aGVuKCh7SlNET019KSA9PiB7XG4gICAgICAgIEpTRE9NRXhwb3J0ID0gSlNET007XG4gICAgICAgIGNvbnN0IHt3aW5kb3d9ID0gbmV3IEpTRE9NKGA8IURPQ1RZUEUgaHRtbD48aHRtbCBsYW5nPVwiZW5cIj48aGVhZD48dGl0bGU+VGVzdDwvdGl0bGU+PC9oZWFkPjxib2R5PjxkaXYgaWQ9XCJtb2Nrc1wiPjwvZGl2PjwvYm9keT48L2h0bWw+YCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZ1snd2luZG93J10gPSB3aW5kb3c7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICdCbG9iJyxcbiAgICAgICAgICAgICAgICAgICAgJ0NTU1N0eWxlU2hlZXQnLFxuICAgICAgICAgICAgICAgICAgICAnY3VzdG9tRWxlbWVudHMnLFxuICAgICAgICAgICAgICAgICAgICAnQ3VzdG9tRXZlbnQnLFxuICAgICAgICAgICAgICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRE9NRXhjZXB0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ0RPTUltcGxlbWVudGF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ0RvY3VtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRE9NUGFyc2VyJyxcbiAgICAgICAgICAgICAgICAgICAgJ0VsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRWxlbWVudEludGVybmFscycsXG4gICAgICAgICAgICAgICAgICAgICdFdmVudCcsXG4gICAgICAgICAgICAgICAgICAgICdFdmVudFRhcmdldCcsXG4gICAgICAgICAgICAgICAgICAgICdnZXRDb21wdXRlZFN0eWxlJyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxCdXR0b25FbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxEaXZFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxEb2N1bWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MRm9ybUVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTElucHV0RWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MU2NyaXB0RWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTFNlbGVjdEVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTFRlbXBsYXRlRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MVGV4dEFyZWFFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0lucHV0RXZlbnQnLFxuICAgICAgICAgICAgICAgICAgICAnS2V5Ym9hcmRFdmVudCcsXG4gICAgICAgICAgICAgICAgICAgICdNdXRhdGlvbk9ic2VydmVyJyxcbiAgICAgICAgICAgICAgICAgICAgJ25hdmlnYXRvcicsXG4gICAgICAgICAgICAgICAgICAgICdOb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgJ05vZGVGaWx0ZXInLFxuICAgICAgICAgICAgICAgICAgICAnTm9kZUxpc3QnLFxuICAgICAgICAgICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICAgICAgICAgICdTaGFkb3dSb290JyxcbiAgICAgICAgICAgICAgICAgICAgJ1hNTFNlcmlhbGl6ZXInLFxuICAgICAgICAgICAgICAgIF0uZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ1trZXldID0gd2luZG93W2tleV0gICAgXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHNldHRpbmcga2V5XCIsIGtleSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGltcG9ydChcImRvbS1zdG9yYWdlXCIpLnRoZW4oKHtkZWZhdWx0OiBTdG9yYWdlfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZy5sb2NhbFN0b3JhZ2UgPSBuZXcgU3RvcmFnZShudWxsLCB7c3RyaWN0OiB0cnVlfSk7XG4gICAgICAgICAgICAgICAgICAgIGcuc2Vzc2lvblN0b3JhZ2UgPSBuZXcgU3RvcmFnZShudWxsLCB7c3RyaWN0OiB0cnVlfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgd2luZG93Wydsb2NhbFN0b3JhZ2UnXSA9IGcubG9jYWxTdG9yYWdlO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3dbJ3Nlc3Npb25TdG9yYWdlJ10gPSBnLnNlc3Npb25TdG9yYWdlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZyk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgbG9hZGluZyBkb20tc3RvcmFnZVwiLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG5cbiAgICB9KTtcbn1cblxuZXhwb3J0IHtpbml0SlNET00sIEpTRE9NRXhwb3J0fSBcblxuIiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuLy8gbGFuZ3VhZ2U9aHRtbFxubGV0IGh0bWwxID0gYFxuICAgIDxtb25zdGVyLXNwbGl0LXBhbmVsIGlkPVwibXktc3BsaXQtcGFuZWxcIj5cbiAgICAgICBcbiAgICA8L21vbnN0ZXItc3BsaXQtcGFuZWw+XG5gO1xuXG5sZXQgU3BsaXRTY3JlZW47XG5cbmRlc2NyaWJlKCdTcGxpdFNjcmVlbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IHByb21pc2VzID0gW11cblxuICAgICAgICAgICAgaWYgKCFnbG9iYWxbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgQ3J5cHRvID0gbVsnQ3J5cHRvJ107XG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFsnY3J5cHRvJ10gPSBuZXcgQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zcGxpdC1wYW5lbC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFNwbGl0U2NyZWVuID0gbVsnU3BsaXRQYW5lbCddO1xuICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpPT57XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIGJ1dHRvbnMgYW5kIFNwbGl0U2NyZWVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgU3BsaXRTY3JlZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXktc3BsaXQtcGFuZWwnKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoU3BsaXRTY3JlZW4pLmlzLmluc3RhbmNlb2YoSFRNTEVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRpdiA9IFNwbGl0U2NyZWVuLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZGl2Lmhhc0NoaWxkTm9kZXMoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbi8vIGxhbmd1YWdlPWh0bWxcbmxldCBodG1sMSA9IGBcbiAgICA8bW9uc3Rlci1wYW5lbCBpZD1cIm15LXBhbmVsXCI+XG4gICAgICAgXG4gICAgPC9tb25zdGVyLXBhbmVsPlxuYDtcblxubGV0IFNwbGl0U2NyZWVuO1xuXG5kZXNjcmliZSgnU3BsaXRTY3JlZW4nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG5cbiAgICAgICAgICAgIGlmICghZ2xvYmFsWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IENyeXB0byA9IG1bJ0NyeXB0byddO1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWxbJ2NyeXB0byddID0gbmV3IENyeXB0bygpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvcGFuZWwubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBTcGxpdFNjcmVlbiA9IG1bJ1BhbmVsJ107XG4gICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCk9PntcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgYnV0dG9ucyBhbmQgU3BsaXRTY3JlZW4nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBTcGxpdFNjcmVlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteS1wYW5lbCcpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChTcGxpdFNjcmVlbikuaXMuaW5zdGFuY2VvZihIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGl2ID0gU3BsaXRTY3JlZW4uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdkaXYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChkaXYuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApXG5cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uLW1vY2subWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbmxldCBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXI7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmRlc2NyaWJlKCdSZWxvYWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAvLyBqc2RvbS10ZXN0aW5nLW1vY2tzIG5lZWQgamVzdFxuICAgIGxldCBSZWxvYWQsIHZpZXdwb3J0LCBtb2NrVmlld3BvcnQ7XG5cbiAgICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlci5yZXN0b3JlKCk7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIFxuICAgICAgICBcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlciA9IHNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNb2NrKCk7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcmVsb2FkLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgUmVsb2FkID0gbVsnUmVsb2FkJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBSZWxvYWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG5cbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIC8vIGxhbmd1YWdlPUhUTUxcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1vbnN0ZXItcmVsb2FkPjwvbW9uc3Rlci1yZWxvYWQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXJlbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHJlbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKSkuaXMuaW5zdGFuY2VvZihSZWxvYWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcztcbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBubyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgcmVsb2FkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHJlbG9hZCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnbG9hZCBjb250ZW50JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcywgZmV0Y2hSZWZlcmVuY2UsIGludGVyc2VjdGlvbk9ic2VydmVyO1xuICAgICAgICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0aGlzLWNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gbmV3IE1hcDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvazp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOjIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0MikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlMignaGVsbG8gd29ybGQhJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2FkIGNvbnRlbnQgZnJvbSB1cmwnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCByZWxvYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgcmVsb2FkLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXVybCcsICdodHRwOi8vbG9jYWxob3N0LycpXG5cbiAgICAgICAgICAgIHJlbG9hZC5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLWZldGNoZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnaGVsbG8gd29ybGQnKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChyZWxvYWQpO1xuICAgICAgICAgICAgbW9ja2ludGVyc2VjdGlvbm9ic2VydmVyLmdldEluc3RhbmNlKCkuZW50ZXJOb2RlKCk7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9jayhcbiAgICB7XG4gICAgICAgIHJvb3QgPSBudWxsLFxuICAgICAgICByb290TWFyZ2luID0gJycsXG4gICAgICAgIHRocmVzaG9sZHMgPSBbXSxcbiAgICAgICAgZGlzY29ubmVjdCA9ICgpID0+IG51bGwsXG4gICAgICAgIG9ic2VydmUgPSAoKSA9PiBudWxsLFxuICAgICAgICB0YWtlUmVjb3JkcyA9ICgpID0+IFtdLFxuICAgICAgICB1bm9ic2VydmUgPSAoKSA9PiBudWxsLFxuICAgIH0gPSB7fSkge1xuXG4gICAgY29uc3Qgc2F2ZWRJbXBsZW1lbnRhdGlvbiA9IHdpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlcjtcblxuICAgIGxldCBsYXN0T2JqZWN0O1xuXG4gICAgY2xhc3MgTW9ja0ludGVyc2VjdGlvbk9ic2VydmVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgICAgICAgICB0aGlzLnJvb3RNYXJnaW4gPSByb290TWFyZ2luO1xuICAgICAgICAgICAgdGhpcy50aHJlc2hvbGRzID0gdGhyZXNob2xkcztcbiAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCA9IGRpc2Nvbm5lY3Q7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmUgPSBvYnNlcnZlO1xuICAgICAgICAgICAgdGhpcy50YWtlUmVjb3JkcyA9IHRha2VSZWNvcmRzO1xuICAgICAgICAgICAgdGhpcy51bm9ic2VydmUgPSB1bm9ic2VydmU7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgICAgICBsYXN0T2JqZWN0ID0gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGVudGVyTm9kZSgpIHtcblxuICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpc0ludGVyc2VjdGluZzogdHJ1ZVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgdGhpc1snY2FsbGJhY2snXShlbnRyaWVzLCB0aGlzKTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInLCB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBNb2NrSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWwsICdJbnRlcnNlY3Rpb25PYnNlcnZlcicsIHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IE1vY2tJbnRlcnNlY3Rpb25PYnNlcnZlclxuICAgIH0pO1xuXG5cbiAgICByZXR1cm4ge1xuICAgICAgICByZXN0b3JlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBzYXZlZEltcGxlbWVudGF0aW9uO1xuICAgICAgICB9LFxuICAgICAgICBnZXRJbnN0YW5jZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RPYmplY3Q7XG4gICAgICAgIH1cbiAgICB9XG59IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgPG1vbnN0ZXItc3RhdGUtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz0ne1xuICBcInVybFwiOiBcIm1vY2stZGF0YS5qc29uXCIsXG4gIFwibWFwcGluZ1wiOiB7XG4gICAgXCJ2YWx1ZVBhdGhcIjogXCJcXCR7Zmlyc3RfbmFtZX0gXFwke2xhc3RfbmFtZX1cIixcbiAgICBcImtleVBhdGhcIjogXCJpZFwiXG4gIH0sXG4gICAgICBcInR5cGVcIjpcImNoZWNrYm94XCJcblxufSc+PC9tb25zdGVyLXN0YXRlLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBTdGF0ZUJ1dHRvbjtcblxuZGVzY3JpYmUoJ1N0YXRlQnV0dG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgIH0pXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgICAgIGlmKCFnbG9iYWwuUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWwuUmVzaXplT2JzZXJ2ZXIgPSBSZXNpemVPYnNlcnZlck1vY2s7XG4gICAgICAgICAgICB9ICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3RhdGUtYnV0dG9uLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgU3RhdGVCdXR0b24gPSBtWydTdGF0ZUJ1dHRvbiddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcgU3RhdGVCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXN0YXRlLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXN0YXRlLWJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHN0YXRlLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zdGF0ZS1idXR0b24nKSkuaXMuaW5zdGFuY2VvZihTdGF0ZUJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zdGF0ZS1idXR0b24nKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBidXR0b24uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdidXR0b24nKTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucykuaXMuaW5zdGFuY2VvZihIVE1MQnV0dG9uRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmhhc0NoaWxkTm9kZXMoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiXG5cblxuZXhwb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9XG5cblxuY2xhc3MgUmVzaXplT2JzZXJ2ZXJNb2NrIHtcbiAgICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSBbXTtcbiAgICB9XG5cbiAgICBvYnNlcnZlKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHVub2JzZXJ2ZShlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzLmZpbHRlcigoZWwpID0+IGVsICE9PSBlbGVtZW50KTtcbiAgICB9XG5cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gW107XG4gICAgfVxuXG4gICAgdHJpZ2dlclJlc2l6ZShlbnRyaWVzKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2soZW50cmllcywgdGhpcyk7XG4gICAgfVxufVxuXG4iLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge1Jlc2l6ZU9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvcmVzaXplLW9ic2VydmVyLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6dmFsdWVzLmNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7XG4gIFwidXJsXCI6IFwibW9jay1kYXRhLmpzb25cIixcbiAgXCJtYXBwaW5nXCI6IHtcbiAgICBcInNlbGVjdG9yXCI6IFwiKlwiLFxuICAgIFwidmFsdWVUZW1wbGF0ZVwiOiBcIlxcJHtmaXJzdF9uYW1lfSBcXCR7bGFzdF9uYW1lfVwiLFxuICAgIFwibGFiZWxUZW1wbGF0ZVwiOiBcImlkXCJcbiAgfSxcbiAgICAgIFwidHlwZVwiOlwiY2hlY2tib3hcIlxuXG59Jz48L21vbnN0ZXItc2VsZWN0PlxuICAgIDwvZGl2PlxuYDtcblxubGV0IFNlbGVjdCwgZmV0Y2hSZWZlcmVuY2U7XG5cbmRlc2NyaWJlKCdTZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsWydmZXRjaCddO1xuXG4gICAgICAgICAgICBpZiAoIWdsb2JhbC5SZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgIGdsb2JhbC5SZXNpemVPYnNlcnZlciA9IFJlc2l6ZU9ic2VydmVyTW9jaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBTZWxlY3QgPSBtWydTZWxlY3QnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnV2l0aCBmZXRjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gbmV3IE1hcDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QyKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiQWxleGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFzdF9uYW1lXCI6IFwiT3VnaHRyaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtYWlsXCI6IFwiYW91Z2h0cmlnaHQwQGV4YmxvZy5qcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdlbmRlclwiOiBcIkFnZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IFwibW5cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiQmV0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkJvZGRpbmd0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImJib2RkaW5ndG9uMUBzdGF0Y291bnRlci5jb21cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJOb24tYmluYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcInN5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiU2hlbGxpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFzdF9uYW1lXCI6IFwiQSdCYXJyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcInNhYmFycm93MkBnb29nbGUuY28udWtcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJQb2x5Z2VuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcIm5vXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXWApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUyKEpTT04uc3RyaW5naWZ5KGpzb24pKVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfTtcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2Ygc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHNlbGVjdCkuaXMuaW5zdGFuY2VvZihTZWxlY3QpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgaGF2ZSBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgc2VsZWN0LnNldE9wdGlvbigndXJsJywgJ2h0dHBzOi8vZXhhbXBsZS5jb20nKVxuICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRPcHRpb24oJ21hcHBpbmcuc2VsZWN0b3InLCAnKicpXG4gICAgICAgICAgICAgICAgc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy5sYWJlbFRlbXBsYXRlJywgJyR7aWR9JylcbiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnZhbHVlVGVtcGxhdGUnLCAnJHtpZH0nKVxuXG4gICAgICAgICAgICAgICAgc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItb3B0aW9ucy1zZXQnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gc2VsZWN0LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5sZW5ndGgpLmlzLmVxdWFsKDMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uSHRtbCA9IHNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0wXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMVwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTJcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLm5vdC5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtM1wiJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoc2VsZWN0KTtcblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBubyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNlbGVjdCcpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoc2VsZWN0KTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zKS5pcy5pbnN0YW5jZW9mKEhUTUxEaXZFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gb3B0aW9ucy5wYXJlbnROb2RlLm91dGVySFRNTDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYiA9IG9wdGlvbnMuY2hpbGROb2Rlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmhhc0NoaWxkTm9kZXMoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtEYXRhVXJsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5cbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEsIG9wdGlvbnMsIGh0bWwyLCBDb25maXJtQnV0dG9uO1xuXG5kZXNjcmliZSgnQ29uZmlybUJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7ICAgIFxuICAgICAgICBcbiAgICAgICAgaWYoIWdsb2JhbC5SZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgZ2xvYmFsLlJlc2l6ZU9ic2VydmVyID0gUmVzaXplT2JzZXJ2ZXJNb2NrO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucyA9IG5ldyBEYXRhVXJsKGJ0b2EoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgcG9wcGVyOiB7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiBcInRvcFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSksICdhcHBsaWNhdGlvbi9qc29uJywgdHJ1ZSkudG9TdHJpbmcoKVxuXG4gICAgICAgIGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgIDxtb25zdGVyLWNvbmZpcm0tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz1cImAgKyBvcHRpb25zICsgYFwiPjwvbW9uc3Rlci1jb25maXJtLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbmA7XG5cbiAgICAgICAgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gXG5cblxuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIENvbmZpcm1CdXR0b24gPSBtWydDb25maXJtQnV0dG9uJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBDb25maXJtQnV0dG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1jb25maXJtLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJykpLmlzLmluc3RhbmNlb2YoQ29uZmlybUJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgY2hpbGRzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChidXR0b24pO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYnV0dG9uLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignbW9uc3Rlci1idXR0b24nKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRlbnQuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7RGF0YXNvdXJjZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2UubWpzXCI7XG5pbXBvcnQge1Byb2Nlc3Npbmd9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuXG5pbXBvcnQge3N0b3JhZ2VPYmplY3RTeW1ib2x9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPG1vbnN0ZXItZm9ybSBpZD1cImZvcm0xXCI+PC9tb25zdGVyLWZvcm0+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgICAgIDxtb25zdGVyLWZvcm0gaWQ9XCJmb3JtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWRhdGFzb3VyY2U9XCJsb2NhbHN0b3JhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1kYXRhc291cmNlLWFyZ3VtZW50cz0nXCJ0ZXN0LWtleVwiJz5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJjb250cm9sMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbnRyb2wxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDphXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJjb250cm9sMlwiXG4gICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpiXCI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L21vbnN0ZXItZm9ybT5cbiAgICA8L2Rpdj5cbmA7XG5cbmRlc2NyaWJlKCdGb3JtJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGZvcm07XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICBcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoeCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9mb3JtLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybSA9IG1bJ0Zvcm0nXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndGVzdC1rZXknKVxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnSFRNTC1UZW1wbGF0ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlIGh0bWwxJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Rlc3Qta2V5JywgJ3t9JylcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItZm9ybScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItZm9ybScpO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUgaHRtbDInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGJlZm9yZUVhY2goKGRvbmUpID0+IHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGVzdC1rZXknLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgIGE6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGI6IDcsXG4gICAgICAgICAgICAgICAgICAgIGM6IFsxLCA1LCA2XSxcbiAgICAgICAgICAgICAgICAgICAgZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItZm9ybScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWZvcm0nKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNsaWNrJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWZvcm0nKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybTInKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKG5ldyBFcnJvcignbm8gc2hhZG93Um9vdCcpKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wxID0gZm9ybS5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ3Nsb3QnKS5hc3NpZ25lZEVsZW1lbnRzKClbMF0ucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuICAgICAgICAgICAgICAgICAgICBjb250cm9sMS5jbGljaygpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0sIDEpXG5cbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbn0pXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi9kYXRhc291cmNlLm1qc1wiO1xuXG5leHBvcnQgeyBTdG9yYWdlLCBzdG9yYWdlT2JqZWN0U3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHN0b3JhZ2VPYmplY3RTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UvQEBzdG9yYWdlT2JqZWN0XCIsXG4pO1xuXG4vKipcbiAqIFRoZSBjbGFzcyByZXByZXNlbnRzIGEgcmVjb3JkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBTdG9yYWdlIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgYWNjZXNzIHRvIGRhdGEgb2JqZWN0cyBvdmVyIFdlYlN0b3JhZ2VBUEkuXG4gKi9cbmNsYXNzIFN0b3JhZ2UgZXh0ZW5kcyBEYXRhc291cmNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgTG9jYWxTdG9yYWdlIEtleVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0Y29uc3RydWN0b3Ioa2V5KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnNldE9wdGlvbihcImtleVwiLCB2YWxpZGF0ZVN0cmluZyhrZXkpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGtleT11bmRlZmluZWQgTG9jYWxTdG9yYWdlIEtleVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0a2V5OiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtleHRlcm5hbDpTdG9yYWdlfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0W3N0b3JhZ2VPYmplY3RTeW1ib2xdKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZGF0YSBjYW5ub3QgYmUgcmVhZFxuXHQgKi9cblx0cmVhZCgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHN0b3JhZ2UgPSBzZWxmW3N0b3JhZ2VPYmplY3RTeW1ib2xdKCk7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHN0b3JhZ2UuZ2V0SXRlbShzZWxmLmdldE9wdGlvbihcImtleVwiKSkpO1xuXHRcdFx0c2VsZi5zZXQoZGF0YSA/PyB7fSk7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7U3RvcmFnZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSB3cml0dGVuXG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHN0b3JhZ2UgPSBzZWxmW3N0b3JhZ2VPYmplY3RTeW1ib2xdKCk7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBzZWxmLmdldCgpO1xuXHRcdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRzdG9yYWdlLnJlbW92ZUl0ZW0oc2VsZi5nZXRPcHRpb24oXCJrZXlcIikpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RvcmFnZS5zZXRJdGVtKHNlbGYuZ2V0T3B0aW9uKFwia2V5XCIpLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdG9yYWdlfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBTdG9yYWdlKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLmtleSk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgPG1vbnN0ZXItdHJlZS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6dmFsdWVzLmNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7XG4gIFwidXJsXCI6IFwibW9jay1kYXRhLmpzb25cIixcbiAgXCJtYXBwaW5nXCI6IHtcbiAgICBcInZhbHVlVGVtcGxhdGVcIjogXCJcXCR7Zmlyc3RfbmFtZX0gXFwke2xhc3RfbmFtZX1cIixcbiAgICBcImxhYmVsVGVtcGxhdGVcIjogXCJpZFwiLFxuICAgIFwic2VsZWN0b3JcIjogXCIqXCJcbiAgfSxcbiAgICAgIFwidHlwZVwiOlwiY2hlY2tib3hcIlxuXG59Jz48L21vbnN0ZXItdHJlZS1zZWxlY3Q+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgVHJlZVNlbGVjdCwgZmV0Y2hSZWZlcmVuY2U7XG5cbmRlc2NyaWJlKCdUcmVlc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsWydmZXRjaCddO1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgVHJlZVNlbGVjdCA9IG1bJ1RyZWVTZWxlY3QnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnV2l0aCBmZXRjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gbmV3IE1hcDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QyKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiQWxleGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFzdF9uYW1lXCI6IFwiT3VnaHRyaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtYWlsXCI6IFwiYW91Z2h0cmlnaHQwQGV4YmxvZy5qcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdlbmRlclwiOiBcIkFnZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IFwibW5cIiAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFyZW50XCI6IFwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIkJldGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJCb2RkaW5ndG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJiYm9kZGluZ3RvbjFAc3RhdGNvdW50ZXIuY29tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiTm9uLWJpbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJzeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBhcmVudFwiOiBcIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpcnN0X25hbWVcIjogXCJTaGVsbGlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJBJ0JhcnJvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtYWlsXCI6IFwic2FiYXJyb3cyQGdvb2dsZS5jby51a1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdlbmRlclwiOiBcIlBvbHlnZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IFwibm9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXJlbnRcIjogXCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXWApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUyKEpTT04uc3RyaW5naWZ5KGpzb24pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXRyZWUtc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdHJlZS1zZWxlY3QnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBzZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdHJlZS1zZWxlY3QnKSkuaXMuaW5zdGFuY2VvZihUcmVlU2VsZWN0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhdmUgb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmVlc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10cmVlLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3Quc2V0T3B0aW9uKCd1cmwnLCAnaHR0cHM6Ly9leGFtcGxlLmNvbScpXG5cbiAgICAgICAgICAgICAgICB0cmVlc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy5zZWxlY3RvcicsICcqJyk7XG4gICAgICAgICAgICAgICAgdHJlZXNlbGVjdC5zZXRPcHRpb24oJ21hcHBpbmcubGFiZWxUZW1wbGF0ZScsICcke2xhc3RfbmFtZX0nKTtcbiAgICAgICAgICAgICAgICB0cmVlc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy52YWx1ZVRlbXBsYXRlJywgJyR7aWQgfCB0b3N0cmluZyB9Jyk7XG5cbiAgICAgICAgICAgICAgICB0cmVlc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItb3B0aW9ucy1zZXQnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdHJlZXNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIG9wdGlvbnMgKHNlZSBmZXRjaCBhYm92ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5sZW5ndGgpLmlzLmVxdWFsKDMpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25IdG1sID0gdHJlZXNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0wXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMVwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTJcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLm5vdC5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtM1wiJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQodHJlZXNlbGVjdCk7XG5cbiAgICAgICAgICAgIFxuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG5vIG9wdGlvbnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdHJlZS1zZWxlY3QnKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHNlbGVjdCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uc10nKTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucykuaXMuaW5zdGFuY2VvZihIVE1MRGl2RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmhhc0NoaWxkTm9kZXMoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgPG1vbnN0ZXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz0ne1xuICBcInVybFwiOiBcIm1vY2stZGF0YS5qc29uXCIsXG4gIFwibWFwcGluZ1wiOiB7XG4gICAgXCJ2YWx1ZVBhdGhcIjogXCJcXCR7Zmlyc3RfbmFtZX0gXFwke2xhc3RfbmFtZX1cIixcbiAgICBcImtleVBhdGhcIjogXCJpZFwiXG4gIH0sXG4gICAgICBcInR5cGVcIjpcImNoZWNrYm94XCJcblxufSc+PC9tb25zdGVyLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBCdXR0b247XG5cbmRlc2NyaWJlKCdCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vYnV0dG9uLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgQnV0dG9uID0gbVsnQnV0dG9uJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIGJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1idXR0b24nKSkuaXMuaW5zdGFuY2VvZihCdXR0b24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG5vIG9wdGlvbnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItYnV0dG9uJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChidXR0b24pO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGJ1dHRvbi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zKS5pcy5pbnN0YW5jZW9mKEhUTUxCdXR0b25FbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMTAwKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7IGNoYWlEb20gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7IGluaXRKU0RPTSB9IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICAgICAgIDxtb25zdGVyLXRvZ2dsZS1zd2l0Y2g+PC9tb25zdGVyLXRvZ2dsZS1zd2l0Y2g+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgVG9nZ2xlU3dpdGNoO1xuXG5kZXNjcmliZSgnVG9nZ2xlU3dpdGNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2gubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBUb2dnbGVTd2l0Y2ggPSBtWydUb2dnbGVTd2l0Y2gnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3IFRvZ2dsZVN3aXRjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItdG9nZ2xlLXN3aXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpKS5pcy5pbnN0YW5jZW9mKFRvZ2dsZVN3aXRjaCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd0b2dnbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgndG9nZ2xlIHRvIG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCB0b2dnbGVTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC5zZXRPcHRpb24oJ2FjdGlvbnMub24nLCAndHJ1ZScpO1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnNldE9wdGlvbignYWN0aW9ucy5vZmYnLCAnZmFsc2UnKTtcblxuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC52YWx1ZSkuaXMuZXF1YWwoJ29mZicpO1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5zdGF0ZSkuaXMuZXF1YWwoJ29mZicpO1xuXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudG9nZ2xlKCk7XG5cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2gudmFsdWUpLmlzLmVxdWFsKCdvbicpO1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5zdGF0ZSkuaXMuZXF1YWwoJ29uJyk7XG5cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC50b2dnbGUoKTtcblxuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC52YWx1ZSkuaXMuZXF1YWwoJ29mZicpO1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5zdGF0ZSkuaXMuZXF1YWwoJ29mZicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgndG9nZ2xlIG9uIHRvIG9mZicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgdG9nZ2xlU3dpdGNoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC50b2dnbGVPbigpO1xuXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnZhbHVlKS5pcy5lcXVhbCgnb24nKTtcbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guc3RhdGUpLmlzLmVxdWFsKCdvbicpO1xuXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudG9nZ2xlT2ZmKCk7XG5cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2gudmFsdWUpLmlzLmVxdWFsKCdvZmYnKTtcbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guc3RhdGUpLmlzLmVxdWFsKCdvZmYnKTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZGVzY3JpYmUgY3NzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY3NzIHRvZ2dsZScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogbmV3IENvbnRyb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3QgdG9nZ2xlU3dpdGNoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogc2V0IGluaXQgdmFsdWUgdG8gb25cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnZhbHVlID0gXCJvblwiO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGluc2VydCBET01cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykuYXBwZW5kQ2hpbGQodG9nZ2xlU3dpdGNoKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBleHBlY3QgdGhhdCBjbGFzc2VzLm9uIGlzIHNldCB0byBFbGVtZW50IFN3aXRjaFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBsZXQgaGFzQ2xhc3NBID0gdG9nZ2xlU3dpdGNoLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbW9uc3Rlci1yb2xlPVwic3dpdGNoXCJdJylbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKHRvZ2dsZVN3aXRjaC5nZXRPcHRpb24oJ2NsYXNzZXMub24nKSk7XG4gICAgICAgICAgICBleHBlY3QoaGFzQ2xhc3NBKS5pcy50cnVlO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICogc3dpdGNoIG9mZlxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC52YWx1ZSA9IFwib2ZmXCI7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVXBkYXRlciBwcm96ZXNzIHJ1bnMgaW4gc2V0VGltZW91dFxuICAgICAgICAgICAgICogc2VsZltpbnRlcm5hbFN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIoKTtcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgKiBleHBlY3QgdGhhdCBjbGFzc2VzLm9uIGlzIHJlbW92ZWQgZnJvbSBFbGVtZW50IFN3aXRjaFxuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgbGV0IGhhc0NsYXNzQiAgPSB0b2dnbGVTd2l0Y2guc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tb25zdGVyLXJvbGU9XCJzd2l0Y2hcIl0nKVswXS5jbGFzc0xpc3QuY29udGFpbnModG9nZ2xlU3dpdGNoLmdldE9wdGlvbignY2xhc3Nlcy5vbicpKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoaGFzQ2xhc3NCKS5pcy5mYWxzZTtcblxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICogZXhwZWN0IHRoYXQgY2xhc3Nlcy5vZmYgaXMgc2V0IHRvIEVsZW1lbnQgU3dpdGNoXG4gICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBsZXQgaGFzQ2xhc3NDICA9IHRvZ2dsZVN3aXRjaC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW1vbnN0ZXItcm9sZT1cInN3aXRjaFwiXScpWzBdLmNsYXNzTGlzdC5jb250YWlucyh0b2dnbGVTd2l0Y2guZ2V0T3B0aW9uKCdjbGFzc2VzLm9mZicpKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoaGFzQ2xhc3NDKS5pcy50cnVlOyAgICBcblxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMCk7XG5cbiAgICAgICAgfSlcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2Rlc2NyaWJlIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCd0aGUgZGVmYXVsdCB2YWx1ZSBpcyBvZmYnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogbmV3IENvbnRyb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbGV0IHRvZ2dsZVN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHRoZSBzd2l0Y2ggaXMgb2ZmIGFuZCBwcm92aWRlcyB0aGUgdmFsdWUgZm9yIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnZhbHVlKS5pcy5lcXVhbCgnb2ZmJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogdGhlIHN3aXRjaCBpcyBvZmZcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5zdGF0ZSkuaXMuZXF1YWwoJ29mZicpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdpbmNvcnJlY3QgdmFsdWVzIGFyZSBub3QgYWNjZXB0ZWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCB0b2dnbGVTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBkZWZpbmUgdGhlIHZhbHVlcyBmb3Igb24gYW5kIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2guc2V0T3B0aW9uKCd2YWx1ZXMub24nLCAndHJ1ZScpO1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnNldE9wdGlvbigndmFsdWVzLm9mZicsICdmYWxzZScpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoaXMgdmFsdWUgaXMgbm90IFwidHJ1ZVwiIGFuZCBub3QgXCJmYWxzZVwiXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC52YWx1ZSA9IFwidGVzdFwiO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHRoZSBzd2l0Y2ggaXMgb2ZmIGFuZCBwcm92aWRlcyB0aGUgdmFsdWUgZm9yIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnZhbHVlKS5pcy5lcXVhbCgnZmFsc2UnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiB0aGUgc3dpdGNoIGlzIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb2ZmJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgKiBkaXNhYmxlZCBhdHRyaWJ1dGUgaXMgb25seSBzZXQgd2hlbiB0aGUgZWxlbWVudCBoYXMgYmVlbiBtb3VudGVkIGluIHRoZSBET01cbiAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkuaXMuZmFsc2U7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogaW5zZXJ0IERPTVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKS5hcHBlbmRDaGlsZCh0b2dnbGVTd2l0Y2gpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICogbm93IHRoZSBlbGVtZW50IGlzIGRpc2FibGVkXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpLmlzLnRydWU7XG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnY29ycmVjdCB2YWx1ZXMgYXJlIGFjY2VwdGVkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCB0b2dnbGVTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBkZWZpbmUgdGhlIHZhbHVlcyBmb3Igb24gYW5kIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2guc2V0T3B0aW9uKCd2YWx1ZXMub24nLCAndHJ1ZScpO1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnNldE9wdGlvbigndmFsdWVzLm9mZicsICdmYWxzZScpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoaXMgdmFsdWUgaXMgY29ycmVjdFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudmFsdWUgPSBcInRydWVcIjtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiB0aGUgc3dpdGNoIGlzIG9uIGFuZCBwcm92aWRlcyB0aGUgdmFsdWUgZm9yIG9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2gudmFsdWUpLmlzLmVxdWFsKCd0cnVlJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogdGhlIHN3aXRjaCBpcyBvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb24nKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAqIGluc2VydCBET01cbiAgICAgICAgICAgICovXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKS5hcHBlbmRDaGlsZCh0b2dnbGVTd2l0Y2gpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGRpc2FibGVkIGF0dHJpYnV0ZSBpcyBub3Qgc2V0XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKS5pcy5mYWxzZTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cblxufSk7IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uLW1vY2subWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbmxldCBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXI7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmRlc2NyaWJlKCdUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIC8vIGpzZG9tLXRlc3RpbmctbW9ja3MgbmVlZCBqZXN0XG4gICAgbGV0IFRlbXBsYXRlLCB2aWV3cG9ydCwgbW9ja1ZpZXdwb3J0O1xuXG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIucmVzdG9yZSgpO1xuICAgIH0pXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIgPSBzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9jaygpO1xuXG4gICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGUubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9IG1bJ1RlbXBsYXRlJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW9uc3Rlci10ZW1wbGF0ZT48L21vbnN0ZXItdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdGVtcGxhdGUnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZW1wbGF0ZScpKS5pcy5pbnN0YW5jZW9mKFRlbXBsYXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbW9ja3M7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZW1wbGF0ZScpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQodGVtcGxhdGUpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10ZW1wbGF0ZScpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnbG9hZCBjb250ZW50JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcywgZmV0Y2hSZWZlcmVuY2UsIGludGVyc2VjdGlvbk9ic2VydmVyO1xuICAgICAgICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0aGlzLWNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gbmV3IE1hcDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvazp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOjIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0MikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlMignaGVsbG8gd29ybGQhJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2FkIGNvbnRlbnQgZnJvbSB1cmwnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVtcGxhdGUnKTtcbiAgICAgICAgICAgIHRlbXBsYXRlLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXVybCcsICdodHRwOi8vbG9jYWxob3N0LycpXG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgICAgIHRlbXBsYXRlLmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItZmV0Y2hlZCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRlbXBsYXRlJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBlbGVtZW50LnNoYWRvd1Jvb3Q7XG5cblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc2hhZG93Um9vdCkuY29udGFpbi5odG1sKCdoZWxsbyB3b3JsZCcpO1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIuZ2V0SW5zdGFuY2UoKS5lbnRlck5vZGUoKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cblxuXG5sZXQgTWVzc2FnZTtcblxuZGVzY3JpYmUoJ01lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgTWVzc2FnZSA9IG1bJ01lc3NhZ2UnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIE1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW5vdGlmeS1tZXNzYWdlJyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sKS5pcy5pbnN0YW5jZW9mKE1lc3NhZ2UpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KVxuIiwgIi8vaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG4vLyBjb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbi8vXG4vLyBsZXQgaHRtbDEgPSBgXG4vLyAgICAgPGRpdiBpZD1cInRlc3QxXCI+XG4vLyAgICAgPC9kaXY+XG4vLyBgO1xuLy9cbi8vIC8vIGxhbmd1YWdlPUhUTUxcbi8vIGxldCBodG1sMiA9IGBcbi8vICAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbi8vICAgICAgICAgPG1vbnN0ZXItbm90aWZ5IGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7fSc+PC9tb25zdGVyLW5vdGl0Znk+XG4vLyAgICAgPC9kaXY+XG4vLyBgO1xuXG5sZXQgTm90aWZ5LCBmZXRjaFJlZmVyZW5jZTtcblxuZGVzY3JpYmUoJ05vdGlmeScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBOb3RpZnkgPSBtWydOb3RpZnknXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIG5vdGlmeScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5JykpLmlzLmluc3RhbmNlb2YoTm90aWZ5KTtcbiAgICAgICAgICAgIFxuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG1lc3NhZ2VzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBub3RpZnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW5vdGlmeScpO1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgbm90aWZ5LnB1c2goXCJ0aGlzIGlzIG1lc3NhZ2UgXCIgKyBpKyspO1xuICAgICAgICAgICAgbm90aWZ5LnB1c2goXCJ0aGlzIGlzIG1lc3NhZ2UgXCIgKyBpKyspO1xuICAgICAgICAgICAgbm90aWZ5LnB1c2goXCJ0aGlzIGlzIG1lc3NhZ2UgXCIgKyBpKyspO1xuXG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbLCBtdXRhdGlvbl0gb2YgbXV0YXRpb25zLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXV0YXRpb24uYWRkZWROb2Rlc1swXS50YWdOYW1lID09PSAnTU9OU1RFUi1OT1RJRlknKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0aW9ub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBub3RpZnkuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdtb25zdGVyLW5vdGlmeS1tZXNzYWdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgb3B0aW9ucyAoc2VlIGZldGNoIGFib3ZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QobWVzc2FnZXMubGVuZ3RoKS5pcy5lcXVhbCgzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBtdXRhdGlvbm9ic2VydmVyLm9ic2VydmUobW9ja3MsIHtjaGlsZExpc3Q6IHRydWV9KTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKG5vdGlmeSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KVxuIiwgImltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuZGVzY3JpYmUoJ0hvc3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgaG9zdDtcbiAgICBsZXQgaHRtbDEgPSBgXG4gICAgICAgIDxtb25zdGVyLWhvc3QgaWQ9XCJob3N0MVwiPjwvbW9uc3Rlci1ob3N0PlxuICAgIGA7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L2hvc3QubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBob3N0ID0gbVsnSG9zdCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgIC8vIHJlZ2lzdGVyIG93biBkYXRhc291cmNlLCBhZnRlciB0aGUgZm9ybSBpcyBsb2FkZWRcbiAgICAgICAgLy8gYmVjYXVzZSBpbiB0aGUgd2lsZCwgdGhlIGZvcm0gaXMgcGFyc2VkIGJlZm9yZSB0aGUgZGF0YXNvdXJjZSBpcyByZWdpc3RlcmVkXG4gICAgICAgIC8vZm9ybS5yZWdpc3RlckRhdGFzb3VyY2UoJ3Rlc3QzJywgdGVzdDNEYXRhc291cmNlKTtcblxuXG4gICAgfSk7ICAgIFxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd0ZXN0LWtleScpXG4gICAgfSlcbiAgICBcbiAgICBcbiAgICBpdCgnc2hvdWxkIHJ1bicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ob3N0Jyk7XG4gICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGZvcm1Db250cm9sKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWhvc3QgZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2woQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rKVwiPjwvbW9uc3Rlci1ob3N0PicpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSwgMClcblxuXG5cblxuXG4gICAgfSk7XG5cblxufSk7XG4iLCAiaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5cblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbmRlc2NyaWJlKCdPdmVybGF5JywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGhvc3Q7XG4gICAgbGV0IGh0bWwxID0gYFxuICAgICAgICA8bW9uc3Rlci1vdmVybGF5IGlkPVwiZGV0YWlsczFcIj48L21vbnN0ZXItb3ZlcmxheT5cbiAgICBgO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9vdmVybGF5Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgaG9zdCA9IG1bJ0RldGFpbHMnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICB9KTsgICAgXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuICAgIFxuICAgIFxuICAgIGl0KCdzaG91bGQgcnVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW92ZXJsYXknKTtcbiAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoZm9ybUNvbnRyb2wpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykpLmNvbnRhaW4uaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJyA8bW9uc3Rlci1vdmVybGF5IGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rPVwiU3ltYm9sKEBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBvcHRpb25zLXVwZGF0ZXItbGluaylcIj48L21vbnN0ZXItb3ZlcmxheT4nKVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0sIDApXG5cbiAgICB9KTtcblxufSk7XG4iLCAiLy8gSW1wb3J0IHRoZSByZXF1aXJlZCBsaWJyYXJpZXNcbmltcG9ydCB7IGV4cGVjdCB9IGZyb20gJ2NoYWknO1xuLy9pbXBvcnQgeyBKU0RPTSB9IGZyb20gJ2pzZG9tJztcbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IH0gZnJvbSAnLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC91dGlsLm1qcyc7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbi8vIENyZWF0ZSBhIEpTRE9NIGluc3RhbmNlIHRvIHNpbXVsYXRlIHRoZSBicm93c2VyIGVudmlyb25tZW50XG4vL2NvbnN0IGRvbSA9IG5ldyBKU0RPTSgpO1xuXG5cbi8vIFRlc3Qgc3VpdGUgZm9yIHRoZSBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleSBmdW5jdGlvblxuZGVzY3JpYmUoJ2dlbmVyYXRlVW5pcXVlQ29uZmlnS2V5JywgKCkgPT4ge1xuXG4gICAgLy9sZXQgb3JpZ2luYWxXaW5kb3c7XG5cbiAgICAvLyBiZWZvcmUoKCkgPT4ge1xuICAgIC8vICAgICAvLyBTdG9yZSB0aGUgb3JpZ2luYWwgd2luZG93IG9iamVjdFxuICAgIC8vICAgICBvcmlnaW5hbFdpbmRvdyA9IGdsb2JhbFRoaXMud2luZG93O1xuICAgIC8vXG4gICAgLy8gICAgIC8vIENyZWF0ZSBhIEpTRE9NIGluc3RhbmNlIHRvIHNpbXVsYXRlIHRoZSBicm93c2VyIGVudmlyb25tZW50XG4gICAgLy8gICAgIGNvbnN0IGRvbSA9IG5ldyBKU0RPTSgpO1xuICAgIC8vICAgICBnbG9iYWxUaGlzLndpbmRvdyA9IGRvbS53aW5kb3c7XG4gICAgLy8gfSk7XG5cblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSk7XG4gICAgfSkgICAgXG5cbiAgICAvLyAuLi4gKHNhbWUgdGVzdCBjYXNlcyBhcyBiZWZvcmUpXG5cbiAgICBhZnRlcigoKSA9PiB7XG4gICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHdpbmRvdyBvYmplY3RcbiAgICAgICAvLyBnbG9iYWxUaGlzLndpbmRvdyA9IG9yaWdpbmFsV2luZG93O1xuICAgIH0pOyAgICBcbiAgICBcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgdW5pcXVlIGtleSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gJ015Q29tcG9uZW50JztcbiAgICAgICAgY29uc3QgaWQgPSAnMTIzJztcbiAgICAgICAgY29uc3QgcHJlZml4ID0gJ215UHJlZml4JztcblxuICAgICAgICBjb25zdCB1bmlxdWVLZXkgPSBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleShjb21wb25lbnROYW1lLCBpZCwgcHJlZml4KTtcblxuICAgICAgICAvLyBFbnN1cmUgdGhlIHVuaXF1ZSBrZXkgY29udGFpbnMgdGhlIGdpdmVuIHBhcmFtZXRlcnMgYW5kIGZvbGxvd3MgdGhlIGV4cGVjdGVkIGZvcm1hdFxuICAgICAgICBleHBlY3QodW5pcXVlS2V5KS50by5pbmNsdWRlKHByZWZpeCk7XG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLmluY2x1ZGUoY29tcG9uZW50TmFtZSk7XG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLmluY2x1ZGUoaWQpO1xuICAgICAgICBleHBlY3QodW5pcXVlS2V5KS50by5tYXRjaCgvXlthLXpBLVowLTlfXSskLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlcGxhY2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBzcGFjZXMgd2l0aCB1bmRlcnNjb3JlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9ICdNeSRDb21wb25lbnQnO1xuICAgICAgICBjb25zdCBpZCA9ICcxMiMzJztcbiAgICAgICAgY29uc3QgcHJlZml4ID0gJ215IFByZWZpeCc7XG5cbiAgICAgICAgY29uc3QgdW5pcXVlS2V5ID0gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkoY29tcG9uZW50TmFtZSwgaWQsIHByZWZpeCk7XG5cbiAgICAgICAgLy8gRW5zdXJlIHRoZSB1bmlxdWUga2V5IGRvZXMgbm90IGNvbnRhaW4gYW55IHNwZWNpYWwgY2hhcmFjdGVycyBvciBzcGFjZXNcbiAgICAgICAgZXhwZWN0KHVuaXF1ZUtleSkudG8ubWF0Y2goL15bYS16QS1aMC05X10rJC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpbmNsdWRlIHRoZSBicm93c2VyIGxvY2F0aW9uIHdpdGhvdXQgcGFyYW1ldGVycycsICgpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9ICdNeUNvbXBvbmVudCc7XG4gICAgICAgIGNvbnN0IGlkID0gJzEyMyc7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9ICdteVByZWZpeCc7XG5cbiAgICAgICAgY29uc3QgdW5pcXVlS2V5ID0gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkoY29tcG9uZW50TmFtZSwgaWQsIHByZWZpeCk7XG5cbiAgICAgICAgLy8gRW5zdXJlIHRoZSB1bmlxdWUga2V5IGNvbnRhaW5zIHRoZSBicm93c2VyIGxvY2F0aW9uIHdpdGhvdXQgcGFyYW1ldGVyc1xuICAgICAgICBjb25zdCB1cmxXaXRob3V0UGFyYW1zID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkVXJsID0gdXJsV2l0aG91dFBhcmFtcy5yZXBsYWNlKC9bXlxcd1xcc10vZ2ksICdfJykucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xuICAgICAgICBleHBlY3QodW5pcXVlS2V5KS50by5pbmNsdWRlKHNhbml0aXplZFVybCk7XG4gICAgfSk7XG5cbiAgICBcbiAgICBcbn0pIiwgImltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbmRlc2NyaWJlKCdEZXRhaWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGhvc3Q7XG4gICAgbGV0IGh0bWwxID0gYFxuICAgICAgICA8bW9uc3Rlci1kZXRhaWxzIGlkPVwiZGV0YWlsczFcIj48L21vbnN0ZXItZGV0YWlscz5cbiAgICBgO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9kZXRhaWxzLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgaG9zdCA9IG1bJ0RldGFpbHMnXTtcblxuICAgICAgICAgICAgICAgIGlmKCFnbG9iYWwuUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLlJlc2l6ZU9ic2VydmVyID0gUmVzaXplT2JzZXJ2ZXJNb2NrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICBcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICB9KTsgICAgXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuICAgIFxuICAgIFxuICAgIGl0KCdzaG91bGQgcnVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWRldGFpbHMnKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICc8bW9uc3Rlci1kZXRhaWxzIGlkPVwiZGV0YWlsczFcIiBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmspXCIgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbD1cIkRldGFpbHNcIj48L21vbnN0ZXItZGV0YWlscz4nKVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0sIDApXG5cbiAgICB9KTtcblxufSk7XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdGb3JtYXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAvLyBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy80N1xuICAgIGRlc2NyaWJlKCdleGFtcGxlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmZjIGV4YW1wbGUgc2hvdWxkIHJ1bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKHtcblxuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzogXCJIZWxsb1wiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6IFwiV29ybGRcIixcbiAgICAgICAgICAgICAgICAgICAgZTogMVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSkuZm9ybWF0KFwiJHthLmIuY30gJHthLmQgfCB0b3VwcGVyfSFcIikpLnRvLmJlLmVxdWFsKCdIZWxsbyBXT1JMRCEnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnZG9jIGV4YW1wbGUgc2hvdWxkIHJ1bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKHtcblxuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzogXCJIZWxsb1wiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6IFwid29ybGRcIixcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pLmZvcm1hdChcIiR7YS5iLmN9ICR7YS5kIHwgdWNmaXJzdH0hXCIpKS50by5iZS5lcXVhbCgnSGVsbG8gV29ybGQhJyk7XG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnc2V0IG1hcmtlcigpJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycjYSMnLCAnIycsIHVuZGVmaW5lZCwgJ3Rlc3QnXSxcbiAgICAgICAgICAgIFsne2F9JywgJ3snLCAnfScsICd0ZXN0J10sXG4gICAgICAgICAgICBbJ2kxOG57YX0nLCAnaTE4bnsnLCAnfScsICd0ZXN0J10sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdmb3JtYXQgJyArIGEgKyAnIHdpdGggbWFya2VyICcgKyBiICsgJyBhbmQgJyArIGMgKyAnIHNob3VsZCByZXR1cm4gICcgKyBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGb3JtYXR0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgfSkuc2V0TWFya2VyKGIsIGMpLmZvcm1hdChhKVxuICAgICAgICAgICAgICAgICkudG8uZXF1YWwoZClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdleGFtcGxlcygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnJHthIHwgdG9qc29ufScsIFwie1xcXCJiXFxcIjp7XFxcImNcXFwiOlxcXCJIZWxsb1xcXCJ9LFxcXCJkXFxcIjpcXFwiV29ybGRcXFwiLFxcXCJlXFxcIjoxfVwiXSxcbiAgICAgICAgICAgIFsnY2xpY2sgJHthLmR9IHRpbWVzJywgXCJjbGljayBXb3JsZCB0aW1lc1wiXSxcbiAgICAgICAgICAgIFsnICR7YS5iLmN9ICcsICcgSGVsbG8gJ10sXG4gICAgICAgICAgICBbJyAke2EuYi5jfScsICcgSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30gJywgJ0hlbGxvICddLFxuICAgICAgICAgICAgWycke2EuYi5jfScsICdIZWxsbyddLFxuICAgICAgICAgICAgWycke2EuYi5jfSR7YS5iLmN9JywgJ0hlbGxvSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30gJHthLmIuY30nLCAnSGVsbG8gSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30gJHthLmIuY30gJywgJ0hlbGxvIEhlbGxvICddLFxuICAgICAgICAgICAgWycgJHthLmIuY30gJHthLmIuY30gJywgJyBIZWxsbyBIZWxsbyAnXSxcbiAgICAgICAgICAgIFsnICR7YS5iLmN9ICR7YS5kfSAnLCAnIEhlbGxvIFdvcmxkICddLFxuICAgICAgICAgICAgWycgJHthLmIuY30gJHthLmIuYyB8IHRvdXBwZXIgfCBsZW5ndGggfCB0b3N0cmluZ30gJywgJyBIZWxsbyA1ICddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2Zvcm1hdCAnICsgYSArICcgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiSGVsbG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6IFwiV29ybGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGU6IDFcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIob2JqKS5mb3JtYXQoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdNYXJrZXIgaW4gbWFya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB0ZXh0ID0gJyR7bXlrZXkke3N1YmtleX19JztcbiAgICAgICAgbGV0IGV4cGVjdGVkID0gJzEnO1xuXG4gICAgICAgIGl0KCdmb3JtYXQgJyArIHRleHQgKyAnIHNob3VsZCAnICsgZXhwZWN0ZWQsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBteWtleTI6IFwiMVwiLFxuICAgICAgICAgICAgICAgIHN1YmtleTogXCIyXCJcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKG9iaikuZm9ybWF0KHRleHQpKS5pcy5lcXVhbChleHBlY3RlZClcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2V0UGFyYW1ldGVyQ2hhcnMoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2V0UGFyYW1ldGVyQ2hhcnMoKSBzaG91bGQgcmV0dXJuIEluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIoe30pLnNldFBhcmFtZXRlckNoYXJzKCdhJywgJ2InKSkuaXMuaW5zdGFuY2VvZihGb3JtYXR0ZXIpO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ3dpdGggY2FsbGJhY2tzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdhZGQgY2FsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtcbiAgICAgICAgICAgICAgICB4OiAnMSdcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgbXk6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiIVwiICsgdmFsdWUgKyBcIiFcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChmb3JtYXR0ZXIuZm9ybWF0KCcke3ggfCBjYWxsOm15fScpKS5pcy5lcXVhbCgnITEhJyk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ01hcmtlciBpbiBtYXJrZXIgd2l0aCBwYXJhbWV0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHRleHQgPSAnJHtteWtleTo6bXlrZXk9JHtzdWJrZXl9fSc7XG4gICAgICAgIGxldCBleHBlY3RlZCA9ICcyJztcblxuICAgICAgICBpdCgnZm9ybWF0ICcgKyB0ZXh0ICsgJyBzaG91bGQgJyArIGV4cGVjdGVkLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgc3Via2V5OiBcIjJcIlxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIob2JqKS5mb3JtYXQodGV4dCkpLmlzLmVxdWFsKGV4cGVjdGVkKVxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2V4Y2VwdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycke2EuYi54fScsIFR5cGVFcnJvcl0sXG4gICAgICAgICAgICBbJyR7YS5iLmQgfCB0b3VwcGVyIHwgbGVuZ3RofScsIFR5cGVFcnJvcl0sXG4gICAgICAgICAgICBbJyR7YS5iLmR9JywgVHlwZUVycm9yXSwgIC8vIGEuYi5kIHJldHVybiB1bmRlZmluZWQgYnkgcGF0aGZpbmRlciBcbiAgICAgICAgICAgIFsnJHthLmIuZCB8IHRvbG93ZXJ9JywgVHlwZUVycm9yXSwgIC8vIGEuYi5kIHJldHVybiB1bmRlZmluZWQgYnkgcGF0aGZpbmRlciBcbiAgICAgICAgICAgIFsnJHthIHwgfScsIEVycm9yXSxcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdmb3JtYXQgJyArIGEgKyAnIHNob3VsZCB0aHJvdyAnICsgdHlwZW9mIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybWF0dGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwidGVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogNFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuZm9ybWF0KGEpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLnRvLnRocm93KGIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuXG5cbiAgICBkZXNjcmliZSgnRm9ybWF0dGVyJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIGJhc2ljIHN0cmluZyB3aXRoIG9iamVjdCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtuYW1lOiAnSm9obicsIGFnZTogMzB9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdHRlci5mb3JtYXQoJ015IG5hbWUgaXMgJHtuYW1lfSBhbmQgSSBhbSAke2FnZSB8IHRvc3RyaW5nfSB5ZWFycyBvbGQuJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCdNeSBuYW1lIGlzIEpvaG4gYW5kIEkgYW0gMzAgeWVhcnMgb2xkLicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIHN0cmluZyB3aXRoIG5lc3RlZCBtYXJrZXJzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9ICcke215a2V5JHtzdWJrZXl9fSc7XG4gICAgICAgICAgICBjb25zdCBvYmogPSB7bXlrZXkyOiAnMScsIHN1YmtleTogJzInfTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIob2JqKTtcblxuICAgICAgICAgICAgZXhwZWN0KGZvcm1hdHRlci5mb3JtYXQodGV4dCkpLnRvLmVxdWFsKCcxJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZm9ybWF0IGEgc3RyaW5nIHdpdGggY3VzdG9tIG1hcmtlcnMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtuYW1lOiAnSm9obicsIGFnZTogMzB9KTtcbiAgICAgICAgICAgIGZvcm1hdHRlci5zZXRNYXJrZXIoJ1snLCAnXScpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0dGVyLmZvcm1hdCgnTXkgbmFtZSBpcyBbbmFtZV0gYW5kIEkgYW0gW2FnZSB8IHRvc3RyaW5nXSB5ZWFycyBvbGQuJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCdNeSBuYW1lIGlzIEpvaG4gYW5kIEkgYW0gMzAgeWVhcnMgb2xkLicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIHN0cmluZyB1c2luZyBjYWxsYmFjaycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoe3g6ICcxJ30sIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgcXVvdGU6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcIicgKyB2YWx1ZSArICdcIic7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBleHBlY3QoZm9ybWF0dGVyLmZvcm1hdCgnJHt4IHwgY2FsbDpxdW90ZX0nKSkudG8uZXF1YWwoJ1wiMVwiJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZm9ybWF0IGEgc3RyaW5nIHdpdGggcGFyYW1ldGVycycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6ICdIZWxsbycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6ICd3b3JsZCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKG9iaik7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXR0ZXIuZm9ybWF0KCcke2EuYi5jfSAke2EuZCB8IHVjZmlyc3R9IScpO1xuXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnSGVsbG8gV29ybGQhJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhIHRvbyBkZWVwIG5lc3RpbmcgZXJyb3InLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtuYW1lOiAnSm9obid9KTtcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZFRleHQgPSAnJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lfX19fX19fX19fX19fX19fX19JztcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBmb3JtYXR0ZXIuZm9ybWF0KG5lc3RlZFRleHQpKS50by50aHJvdygnc3ludGF4IGVycm9yIGluIGZvcm1hdHRlciB0ZW1wbGF0ZScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGEgdG9vIGRlZXAgbmVzdGluZyBlcnJvcicsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0T2JqID0ge1xuICAgICAgICAgICAgICAgIG15a2V5OiAnJHtteWtleX0nLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihpbnB1dE9iaik7XG5cbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSAnJHtteWtleX0nO1xuICAgICAgICAgICAgbGV0IGZvcm1hdHRlZFRleHQgPSB0ZXh0O1xuXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBzdHJpbmcgd2l0aCAyMSBsZXZlbHMgb2YgbmVzdGluZ1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkVGV4dCA9ICckeycgKyBmb3JtYXR0ZWRUZXh0ICsgJ30nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZm9ybWF0dGVyLmZvcm1hdChmb3JtYXR0ZWRUZXh0KSkudG8udGhyb3coJ3RvbyBkZWVwIG5lc3RpbmcnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgIH0pO1xuXG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQgeyBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24gfTtcblxuLyoqXG4gKiBUaGUgYGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbigpYCBmdW5jdGlvbiBpcyBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvblxuICogb2YgYSBjb21wYXJpc29uIGV4cHJlc3Npb24gYmFzZWQgb24gYSByYW5nZSBvZiB2YWx1ZXMuIEl0IHRha2VzIHRocmVlIGFyZ3VtZW50czpcbiAqXG4gKiAtIGV4cHJlc3Npb24gKHJlcXVpcmVkKTogYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSByYW5nZSBvZiB2YWx1ZXMgaW4gdGhlIGZvcm1hdCBvZiBzdGFydDEtZW5kMSxzdGFydDItZW5kMix2YWx1ZTMuLi4uXG4gKiAtIHZhbHVlTmFtZSAocmVxdWlyZWQpOiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIHZhbHVlIHRoYXQgaXMgYmVpbmcgY29tcGFyZWQgdG8gdGhlIHJhbmdlIG9mIHZhbHVlcy5cbiAqIC0gb3B0aW9ucyAob3B0aW9uYWwpOiBhbiBvYmplY3QgY29udGFpbmluZyBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSBjb21wYXJpc29uIGV4cHJlc3Npb24uXG4gKlxuICogVGhlIGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbigpIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbXBhcmlzb24gZXhwcmVzc2lvbi5cbiAqXG4gKiAjIyBPcHRpb25zXG4gKiBUaGUgb3B0aW9uIHBhcmFtZXRlciBpcyBhbiBvYmplY3QgdGhhdCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogdXJsRW5jb2RlIChib29sZWFuLCBkZWZhdWx0OiBmYWxzZSk6IGlmIHNldCB0byB0cnVlLCBVUkwgZW5jb2RlcyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuXG4gKiBhbmRPcCAoc3RyaW5nLCBkZWZhdWx0OiAnJiYnKTogdGhlIGxvZ2ljYWwgQU5EIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqIG9yT3AgKHN0cmluZywgZGVmYXVsdDogJ3x8Jyk6IHRoZSBsb2dpY2FsIE9SIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqIGVxT3AgKHN0cmluZywgZGVmYXVsdDogJz09Jyk6IHRoZSBlcXVhbGl0eSBvcGVyYXRvciB0byB1c2UgaW4gdGhlIGV4cHJlc3Npb24uXG4gKiBnZU9wIChzdHJpbmcsIGRlZmF1bHQ6ICc+PScpOiB0aGUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqIGxlT3AgKHN0cmluZywgZGVmYXVsdDogJzw9Jyk6IHRoZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gb3BlcmF0b3IgdG8gdXNlIGluIHRoZSBleHByZXNzaW9uLlxuICpcbiAqIEV4YW1wbGVzXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogY29uc3QgZXhwcmVzc2lvbiA9ICcwLTEwLDIwLTMwJztcbiAqIGNvbnN0IHZhbHVlTmFtZSA9ICdhZ2UnO1xuICogY29uc3Qgb3B0aW9ucyA9IHsgdXJsRW5jb2RlOiB0cnVlLCBhbmRPcDogJ2FuZCcsIG9yT3A6ICdvcicsIGVxT3A6ICc9JywgZ2VPcDogJz49JywgbGVPcDogJzw9JyB9O1xuICogY29uc3QgY29tcGFyaXNvbkV4cHJlc3Npb24gPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCBvcHRpb25zKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhjb21wYXJpc29uRXhwcmVzc2lvbik7IC8vIGFnZSUzRSUzRDAlMjBhbmQlMjBhZ2UlM0MlM0QxMCUyMG9yJTIwYWdlJTNFJTNEMjAlMjBhbmQlMjBhZ2UlM0MlM0QzMFxuICogYGBgXG4gKlxuICogSW4gdGhpcyBleGFtcGxlLCB0aGUgZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKCkgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21wYXJpc29uXG4gKiBleHByZXNzaW9uIGZvciB0aGUgZXhwcmVzc2lvbiBhbmQgdmFsdWVOYW1lIHBhcmFtZXRlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuIFRoZSByZXN1bHRpbmcgY29tcGFyaXNvblxuICogZXhwcmVzc2lvbiBpcyAnYWdlPj0wIGFuZCBhZ2U8PTEwIG9yIGFnZT49MjAgYW5kIGFnZTw9MzAnLCBVUkwgZW5jb2RlZCBhY2NvcmRpbmcgdG8gdGhlIHVybEVuY29kZSBvcHRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gLSBUaGUgc3RyaW5nIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgdGhlIGNvbXBhcmlzb24gZm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gVGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnVybEVuY29kZT1mYWxzZV0gLSBXaGV0aGVyIHRvIGVuY29kZSBjb21wYXJpc29uIG9wZXJhdG9ycyBmb3IgdXNlIGluIGEgVVJMLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuZE9wPScmJiddIC0gVGhlIGxvZ2ljYWwgQU5EIG9wZXJhdG9yIHRvIHVzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5vck9wPSd8fCddIC0gVGhlIGxvZ2ljYWwgT1Igb3BlcmF0b3IgdG8gdXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmVxT3A9Jz09J10gLSBUaGUgY29tcGFyaXNvbiBvcGVyYXRvciBmb3IgZXF1YWxpdHkgdG8gdXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmdlT3A9Jz49J10gLSBUaGUgY29tcGFyaXNvbiBvcGVyYXRvciBmb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRvIHVzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sZU9wPSc8PSddIC0gVGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgZm9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0byB1c2UuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBnZW5lcmF0ZWQgY29tcGFyaXNvbiBleHByZXNzaW9uLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBpbnB1dCBpcyBpbnZhbGlkLlxuICogQHN1bW1hcnkgR2VuZXJhdGVzIGEgY29tcGFyaXNvbiBleHByZXNzaW9uIGJhc2VkIG9uIGEgcmFuZ2Ugb2YgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oXG5cdGV4cHJlc3Npb24sXG5cdHZhbHVlTmFtZSxcblx0b3B0aW9ucyA9IHt9LFxuKSB7XG5cdGNvbnN0IHtcblx0XHR1cmxFbmNvZGUgPSBmYWxzZSxcblx0XHRhbmRPcCA9IFwiJiZcIixcblx0XHRvck9wID0gXCJ8fFwiLFxuXHRcdGVxT3AgPSBcIj09XCIsXG5cdFx0Z2VPcCA9IFwiPj1cIixcblx0XHRsZU9wID0gXCI8PVwiLFxuXHR9ID0gb3B0aW9ucztcblx0Y29uc3QgcmFuZ2VzID0gZXhwcmVzc2lvbi5zcGxpdChcIixcIik7XG5cdGxldCBjb21wYXJpc29uID0gXCJcIjtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCByYW5nZSA9IHJhbmdlc1tpXS50cmltKCk7XG5cdFx0aWYgKHJhbmdlID09PSBcIlwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmFuZ2UgJyR7cmFuZ2V9J2ApO1xuXHRcdH0gZWxzZSBpZiAocmFuZ2UuaW5jbHVkZXMoXCItXCIpKSB7XG5cdFx0XHRjb25zdCBbc3RhcnQsIGVuZF0gPSByYW5nZVxuXHRcdFx0XHQuc3BsaXQoXCItXCIpXG5cdFx0XHRcdC5tYXAoKHMpID0+IChzID09PSBcIlwiID8gbnVsbCA6IHBhcnNlRmxvYXQocykpKTtcblx0XHRcdGlmICgoc3RhcnQgIT09IG51bGwgJiYgaXNOYU4oc3RhcnQpKSB8fCAoZW5kICE9PSBudWxsICYmIGlzTmFOKGVuZCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWx1ZSBpbiByYW5nZSAnJHtyYW5nZX0nYCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc3RhcnQgIT09IG51bGwgJiYgZW5kICE9PSBudWxsICYmIHN0YXJ0ID4gZW5kKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByYW5nZSAnJHtyYW5nZX0nYCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjb21wU3RhcnQgPVxuXHRcdFx0XHRzdGFydCAhPT0gbnVsbFxuXHRcdFx0XHRcdD8gYCR7dmFsdWVOYW1lfSR7dXJsRW5jb2RlID8gZW5jb2RlVVJJQ29tcG9uZW50KGdlT3ApIDogZ2VPcH0ke3N0YXJ0fWBcblx0XHRcdFx0XHQ6IFwiXCI7XG5cdFx0XHRjb25zdCBjb21wRW5kID1cblx0XHRcdFx0ZW5kICE9PSBudWxsXG5cdFx0XHRcdFx0PyBgJHt2YWx1ZU5hbWV9JHt1cmxFbmNvZGUgPyBlbmNvZGVVUklDb21wb25lbnQobGVPcCkgOiBsZU9wfSR7ZW5kfWBcblx0XHRcdFx0XHQ6IFwiXCI7XG5cdFx0XHRjb25zdCBjb21wUmFuZ2UgPSBgJHtjb21wU3RhcnR9JHtcblx0XHRcdFx0Y29tcFN0YXJ0ICYmIGNvbXBFbmQgPyBgICR7YW5kT3B9IGAgOiBcIlwiXG5cdFx0XHR9JHtjb21wRW5kfWA7XG5cdFx0XHRjb21wYXJpc29uICs9IHJhbmdlcy5sZW5ndGggPiAxID8gYCgke2NvbXBSYW5nZX0pYCA6IGNvbXBSYW5nZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KHJhbmdlKTtcblx0XHRcdGlmIChpc05hTih2YWx1ZSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZhbHVlICcke3JhbmdlfSdgKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbXBWYWx1ZSA9IGAke3ZhbHVlTmFtZX0ke1xuXHRcdFx0XHR1cmxFbmNvZGUgPyBlbmNvZGVVUklDb21wb25lbnQoZXFPcCkgOiBlcU9wXG5cdFx0XHR9JHt2YWx1ZX1gO1xuXHRcdFx0Y29tcGFyaXNvbiArPSByYW5nZXMubGVuZ3RoID4gMSA/IGAoJHtjb21wVmFsdWV9KWAgOiBjb21wVmFsdWU7XG5cdFx0fVxuXHRcdGlmIChpIDwgcmFuZ2VzLmxlbmd0aCAtIDEpIHtcblx0XHRcdGNvbXBhcmlzb24gKz0gYCAke29yT3B9IGA7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb21wYXJpc29uO1xufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2dlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90ZXh0L3V0aWwubWpzXCI7XG5cbmRlc2NyaWJlKCdnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiBmb3Igc2luZ2xlIHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLDMsNSc7XG4gICAgICAgIGNvbnN0IHZhbHVlTmFtZSA9ICd4JztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCcoeD09MSkgfHwgKHg9PTMpIHx8ICh4PT01KScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiBmb3IgcmFuZ2VzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gJzEtMyw2LTgnO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnKHg+PTEgJiYgeDw9MykgfHwgKHg+PTYgJiYgeDw9OCknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gZm9yIG1peGVkIHJhbmdlcyBhbmQgc2luZ2xlIHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLTMsNSw3LTknO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnKHg+PTEgJiYgeDw9MykgfHwgKHg9PTUpIHx8ICh4Pj03ICYmIHg8PTkpJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBpbnZhbGlkIHJhbmdlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gJzEtMyw1LTQnO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lKSkudG8udGhyb3coYEludmFsaWQgcmFuZ2UgJzUtNCdgKTtcbiAgICB9KTtcblxuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3IgaW52YWxpZCB2YWx1ZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLTMsYSc7XG4gICAgICAgIGNvbnN0IHZhbHVlTmFtZSA9ICd4JztcbiAgICAgICAgZXhwZWN0KCgpID0+IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUpKS50by50aHJvdygnSW52YWxpZCB2YWx1ZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiB3aXRoIGN1c3RvbSBvcGVyYXRvcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnMS0zLDUnO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBhbmRPcDogJ0FORCcsXG4gICAgICAgICAgICBvck9wOiAnT1InLFxuICAgICAgICAgICAgZXFPcDogJz09PScsXG4gICAgICAgICAgICBnZU9wOiAnPj0nLFxuICAgICAgICAgICAgbGVPcDogJzw9JyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSwgb3B0aW9ucyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCcoeD49MSBBTkQgeDw9MykgT1IgKHg9PT01KScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiB3aXRoIHVybEVuY29kZSBvcHRpb24nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlc3RDYXNlcyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnMSwzLDUnLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3gnLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAnKHglM0QlM0QxKSB8fCAoeCUzRCUzRDMpIHx8ICh4JTNEJTNENSknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnLTEwJyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd4JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJ3glM0MlM0QxMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICcxMC0nLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3gnLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAneCUzRSUzRDEwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJzEtMyw2LTgnLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3knLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAnKHklM0UlM0QxICYmIHklM0MlM0QzKSB8fCAoeSUzRSUzRDYgJiYgeSUzQyUzRDgpJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJzEtMyw1LDctOScsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneicsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICcoeiUzRSUzRDEgJiYgeiUzQyUzRDMpIHx8ICh6JTNEJTNENSkgfHwgKHolM0UlM0Q3ICYmIHolM0MlM0Q5KScsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7ZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCBleHBlY3RlZH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUsIHt1cmxFbmNvZGU6IHRydWV9KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGNvcnJlY3QgY29tcGFyaXNvbiBleHByZXNzaW9uIGZvciBvcGVuLWVuZGVkIHJhbmdlcyB3aXRoIHVybEVuY29kZSBvcHRpb24nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlc3RDYXNlcyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnMTAtJyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd4JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJ3glM0UlM0QxMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICctMTAnLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3knLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAneSUzQyUzRDEwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgdGVzdENhc2VzLmZvckVhY2goKHtleHByZXNzaW9uLCB2YWx1ZU5hbWUsIGV4cGVjdGVkfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSwge3VybEVuY29kZTogdHJ1ZX0pO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQgeyBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaCwgY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoIH07XG5cbi8qKlxuICogUGFyc2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYnJhY2tldGVkIGtleS12YWx1ZSBwYWlycyBhbmQgcmV0dXJucyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwYXJzZWQgcmVzdWx0LlxuICpcbiAqIC0gVGhlIHN0cmluZyBzdGFydHMgd2l0aCBhIGhhc2ggc3ltYm9sICMuXG4gKiAtIEFmdGVyIHRoZSBoYXNoIHN5bWJvbCwgdGhlcmUgYXJlIG9uZSBvciBtb3JlIHNlbGVjdG9yIHN0cmluZ3MsIHNlcGFyYXRlZCBieSBhIHNlbWljb2xvbiA7LlxuICogLSBFYWNoIHNlbGVjdG9yIHN0cmluZyBoYXMgdGhlIGZvcm1hdCBzZWxlY3Rvck5hbWUoa2V5MT12YWx1ZTEsa2V5Mj12YWx1ZTIsLi4uKS5cbiAqIC0gVGhlIHNlbGVjdG9yIG5hbWUgaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuXG4gKiAtIFRoZSBrZXktdmFsdWUgcGFpcnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMgLCBhbmQgYXJlIG9mIHRoZSBmb3JtIGtleT12YWx1ZS5cbiAqIC0gVGhlIGtleSBpcyBhIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy5cbiAqIC0gVGhlIHZhbHVlIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcgb3IgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgY2hhcmFjdGVycy5cbiAqIC0gSWYgdGhlIHZhbHVlIGNvbnRhaW5zIGNvbW1hcywgaXQgbXVzdCBiZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzIFwiLlxuICogLSBUaGUgZW50aXJlIGtleS12YWx1ZSBwYWlyIG11c3QgYmUgVVJMLWVuY29kZWQuXG4gKiAtIFRoZSBjbG9zaW5nIHBhcmVudGhlc2lzICkgZm9yIGVhY2ggc2VsZWN0b3IgbXVzdCBiZSBwcmVzZW50LCBldmVuIGlmIHRoZXJlIGFyZSBubyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBFeGFtcGxlIDE6XG4gKiBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcjEoa2V5MT12YWx1ZTEsa2V5Mj12YWx1ZTIpO3NlbGVjdG9yMihrZXkzPXZhbHVlMyknO1xuICogY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gKiAvLyByZXN1bHQgPT4geyBzZWxlY3RvcjE6IHsga2V5MTogXCJ2YWx1ZTFcIiwga2V5MjogXCJ2YWx1ZTJcIiB9LCBzZWxlY3RvcjI6IHsga2V5MzogXCJ2YWx1ZTNcIiB9IH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gRXhhbXBsZSAyOlxuICogY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3IxKGtleTE9dmFsdWUxLGtleTI9dmFsdWUyKTtzZWxlY3RvcjIoJztcbiAqIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICogLy8gcmVzdWx0ID0+IHt9XG4gKiBgYGBcbiAqXG4gKiBAc2luY2UgMy4zNy4wXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFN0cmluZyAtIFRoZSBzdHJpbmcgdG8gcGFyc2UsIGNvbnRhaW5pbmcgYnJhY2tldGVkIGtleS12YWx1ZSBwYWlycy5cbiAqIEByZXR1cm4ge09iamVjdH0gLSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwYXJzZWQgcmVzdWx0LCB3aXRoIGtleXMgcmVwcmVzZW50aW5nIHRoZSBzZWxlY3RvcnMgYW5kIHZhbHVlcyByZXByZXNlbnRpbmcgdGhlIGtleS12YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggZWFjaCBzZWxlY3Rvci5cbiAqICAgICAgICAgICAgICAgICAgICAtIFJldHVybnMgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgcGFyc2luZy4gKi9cbmZ1bmN0aW9uIHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpIHtcblx0Y29uc3Qgc2VsZWN0b3JzID0ge307XG5cdC8vY29uc3Qgc2VsZWN0b3JTdGFjayA9IFtdO1xuXHQvL2NvbnN0IGtleVZhbHVlU3RhY2sgPSBbXTtcblxuXHRjb25zdCB0cmltbWVkSGFzaFN0cmluZyA9IGhhc2hTdHJpbmcudHJpbSgpO1xuXHRjb25zdCBjbGVhbmVkSGFzaFN0cmluZyA9XG5cdFx0dHJpbW1lZEhhc2hTdHJpbmcuY2hhckF0KDApID09PSBcIiNcIlxuXHRcdFx0PyB0cmltbWVkSGFzaFN0cmluZy5zbGljZSgxKVxuXHRcdFx0OiB0cmltbWVkSGFzaFN0cmluZztcblxuXHQvL2NvbnN0IHNlbGVjdG9ycyA9IChrZXlWYWx1ZVN0YWNrLmxlbmd0aCA+IDApID8gcmVzdWx0W3NlbGVjdG9yU3RhY2tbc2VsZWN0b3JTdGFjay5sZW5ndGggLSAxXV0gOiByZXN1bHQ7XG5cdGxldCBjdXJyZW50U2VsZWN0b3IgPSBcIlwiO1xuXG5cdGZ1bmN0aW9uIGFkZFRvUmVzdWx0KGtleSwgdmFsdWUpIHtcblx0XHRpZiAoY3VycmVudFNlbGVjdG9yICYmIGtleSkge1xuXHRcdFx0aWYgKCFzZWxlY3RvcnNbY3VycmVudFNlbGVjdG9yXSkge1xuXHRcdFx0XHRzZWxlY3RvcnNbY3VycmVudFNlbGVjdG9yXSA9IHt9O1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvcnNbY3VycmVudFNlbGVjdG9yXVtrZXldID0gdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0bGV0IGN1cnJlbnRLZXkgPSBcIlwiO1xuXHRsZXQgY3VycmVudFZhbHVlID0gXCJcIjtcblx0bGV0IGluS2V5ID0gdHJ1ZTtcblx0bGV0IGluVmFsdWUgPSBmYWxzZTtcblx0bGV0IGluUXVvdGVkVmFsdWUgPSBmYWxzZTtcblx0bGV0IGluU2VsZWN0b3IgPSB0cnVlO1xuXHRsZXQgZXNjYXBlZCA9IGZhbHNlO1xuXHRsZXQgcXVvdGVkVmFsdWVTdGFydENoYXIgPSBcIlwiO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY2xlYW5lZEhhc2hTdHJpbmcubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBjID0gY2xlYW5lZEhhc2hTdHJpbmdbaV07XG5cdFx0Y29uc3QgbmV4dENoYXIgPSBjbGVhbmVkSGFzaFN0cmluZz8uW2kgKyAxXTtcblxuXHRcdGlmIChjID09PSBcIlxcXFxcIiAmJiAhZXNjYXBlZCkge1xuXHRcdFx0ZXNjYXBlZCA9IHRydWU7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoZXNjYXBlZCkge1xuXHRcdFx0aWYgKGluU2VsZWN0b3IpIHtcblx0XHRcdFx0Y3VycmVudFNlbGVjdG9yICs9IGM7XG5cdFx0XHR9IGVsc2UgaWYgKGluS2V5KSB7XG5cdFx0XHRcdGN1cnJlbnRLZXkgKz0gYztcblx0XHRcdH0gZWxzZSBpZiAoaW5WYWx1ZSkge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgKz0gYztcblx0XHRcdH1cblx0XHRcdGVzY2FwZWQgPSBmYWxzZTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChpblF1b3RlZFZhbHVlICYmIHF1b3RlZFZhbHVlU3RhcnRDaGFyICE9PSBjKSB7XG5cdFx0XHRpZiAoaW5TZWxlY3Rvcikge1xuXHRcdFx0XHRjdXJyZW50U2VsZWN0b3IgKz0gYztcblx0XHRcdH0gZWxzZSBpZiAoaW5LZXkpIHtcblx0XHRcdFx0Y3VycmVudEtleSArPSBjO1xuXHRcdFx0fSBlbHNlIGlmIChpblZhbHVlKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSArPSBjO1xuXHRcdFx0fVxuXG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoYyA9PT0gXCI7XCIgJiYgaW5TZWxlY3Rvcikge1xuXHRcdFx0aW5TZWxlY3RvciA9IHRydWU7XG5cdFx0XHRjdXJyZW50U2VsZWN0b3IgPSBcIlwiO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGluU2VsZWN0b3IgPT09IHRydWUgJiYgYyAhPT0gXCIoXCIpIHtcblx0XHRcdGN1cnJlbnRTZWxlY3RvciArPSBjO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGMgPT09IFwiKFwiICYmIGluU2VsZWN0b3IpIHtcblx0XHRcdGluU2VsZWN0b3IgPSBmYWxzZTtcblx0XHRcdGluS2V5ID0gdHJ1ZTtcblxuXHRcdFx0Y3VycmVudEtleSA9IFwiXCI7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoaW5LZXkgPT09IHRydWUgJiYgYyAhPT0gXCI9XCIpIHtcblx0XHRcdGN1cnJlbnRLZXkgKz0gYztcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChjID09PSBcIj1cIiAmJiBpbktleSkge1xuXHRcdFx0aW5LZXkgPSBmYWxzZTtcblx0XHRcdGluVmFsdWUgPSB0cnVlO1xuXG5cdFx0XHRpZiAobmV4dENoYXIgPT09ICdcIicgfHwgbmV4dENoYXIgPT09IFwiJ1wiKSB7XG5cdFx0XHRcdGluUXVvdGVkVmFsdWUgPSB0cnVlO1xuXHRcdFx0XHRxdW90ZWRWYWx1ZVN0YXJ0Q2hhciA9IG5leHRDaGFyO1xuXHRcdFx0XHRpKys7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50VmFsdWUgPSBcIlwiO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGluVmFsdWUgPT09IHRydWUpIHtcblx0XHRcdGlmIChpblF1b3RlZFZhbHVlKSB7XG5cdFx0XHRcdGlmIChjID09PSBxdW90ZWRWYWx1ZVN0YXJ0Q2hhcikge1xuXHRcdFx0XHRcdGluUXVvdGVkVmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSArPSBjO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGMgPT09IFwiLFwiKSB7XG5cdFx0XHRcdGluVmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0aW5LZXkgPSB0cnVlO1xuXHRcdFx0XHRjb25zdCBkZWNvZGVkQ3VycmVudFZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KGN1cnJlbnRWYWx1ZSk7XG5cdFx0XHRcdGFkZFRvUmVzdWx0KGN1cnJlbnRLZXksIGRlY29kZWRDdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRjdXJyZW50S2V5ID0gXCJcIjtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gXCJcIjtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjID09PSBcIilcIikge1xuXHRcdFx0XHRpblZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdC8vaW5LZXkgPSB0cnVlO1xuXHRcdFx0XHRpblNlbGVjdG9yID0gdHJ1ZTtcblxuXHRcdFx0XHRjb25zdCBkZWNvZGVkQ3VycmVudFZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KGN1cnJlbnRWYWx1ZSk7XG5cdFx0XHRcdGFkZFRvUmVzdWx0KGN1cnJlbnRLZXksIGRlY29kZWRDdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRjdXJyZW50S2V5ID0gXCJcIjtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gXCJcIjtcblx0XHRcdFx0Y3VycmVudFNlbGVjdG9yID0gXCJcIjtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnRWYWx1ZSArPSBjO1xuXG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdH1cblxuXHRpZiAoaW5TZWxlY3Rvcikge1xuXHRcdHJldHVybiBzZWxlY3RvcnM7XG5cdH1cblxuXHRyZXR1cm4ge307XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggc2VsZWN0b3Igc3RyaW5nIGZyb20gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgLSBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgc2VsZWN0b3JzIGFuZCBrZXktdmFsdWUgcGFpcnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkZEhhc2hQcmVmaXggLSBXaGV0aGVyIHRvIGFkZCB0aGUgaGFzaCBwcmVmaXggIyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBoYXNoIHNlbGVjdG9yIHN0cmluZy5cbiAqIEBzaW5jZSAzLjM3LjBcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoKG9iamVjdCwgYWRkSGFzaFByZWZpeCA9IHRydWUpIHtcblx0aWYgKCFvYmplY3QpIHtcblx0XHRyZXR1cm4gYWRkSGFzaFByZWZpeCA/IFwiI1wiIDogXCJcIjtcblx0fVxuXG5cdGxldCBoYXNoU3RyaW5nID0gXCJcIjtcblxuXHRmdW5jdGlvbiBlbmNvZGVLZXlWYWx1ZShrZXksIHZhbHVlKSB7XG5cdFx0cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHR9XG5cblx0Zm9yIChjb25zdCBzZWxlY3RvciBpbiBvYmplY3QpIHtcblx0XHRpZiAob2JqZWN0Lmhhc093blByb3BlcnR5KHNlbGVjdG9yKSkge1xuXHRcdFx0Y29uc3Qga2V5VmFsdWVQYWlycyA9IG9iamVjdFtzZWxlY3Rvcl07XG5cdFx0XHRsZXQgc2VsZWN0b3JTdHJpbmcgPSBzZWxlY3Rvcjtcblx0XHRcdGxldCBrZXlWYWx1ZVN0cmluZyA9IFwiXCI7XG5cblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGtleVZhbHVlUGFpcnMpIHtcblx0XHRcdFx0aWYgKGtleVZhbHVlUGFpcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0ga2V5VmFsdWVQYWlyc1trZXldO1xuXHRcdFx0XHRcdGtleVZhbHVlU3RyaW5nICs9IGtleVZhbHVlU3RyaW5nLmxlbmd0aCA9PT0gMCA/IFwiXCIgOiBcIixcIjtcblx0XHRcdFx0XHRrZXlWYWx1ZVN0cmluZyArPSBlbmNvZGVLZXlWYWx1ZShrZXksIHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoa2V5VmFsdWVTdHJpbmcubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRzZWxlY3RvclN0cmluZyArPSBcIihcIiArIGtleVZhbHVlU3RyaW5nICsgXCIpXCI7XG5cdFx0XHRcdGhhc2hTdHJpbmcgKz0gaGFzaFN0cmluZy5sZW5ndGggPT09IDAgPyBcIlwiIDogXCI7XCI7XG5cdFx0XHRcdGhhc2hTdHJpbmcgKz0gc2VsZWN0b3JTdHJpbmc7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFkZEhhc2hQcmVmaXggPyBcIiNcIiArIGhhc2hTdHJpbmcgOiBoYXNoU3RyaW5nO1xufVxuIiwgIi8vIHRlc3QuanNcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiO1xuaW1wb3J0IHtcbiAgICBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaCxcbiAgICBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2hcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90ZXh0L2JyYWNrZXRlZC1rZXktdmFsdWUtaGFzaC5tanNcIjtcblxuZGVzY3JpYmUoXCJwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaFwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBmb3IgYW4gZW1wdHkgc3RyaW5nXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIlwiO1xuICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHt9O1xuICAgICAgICBleHBlY3QocGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpKS50by5kZWVwLmVxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHBhcnNlIGEgc2luZ2xlIHNlbGVjdG9yIHdpdGggb25lIGtleS12YWx1ZSBwYWlyXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIiNzZWxlY3RvcjEoa2V5MT12YWx1ZTEpXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICAgICAgc2VsZWN0b3IxOiB7XG4gICAgICAgICAgICAgICAga2V5MTogXCJ2YWx1ZTFcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGV4cGVjdChwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCkpLnRvLmRlZXAuZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcGFyc2UgbXVsdGlwbGUgc2VsZWN0b3JzIHdpdGggbXVsdGlwbGUga2V5LXZhbHVlIHBhaXJzXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIiNzZWxlY3RvcjEoa2V5MT12YWx1ZTEsa2V5Mj12YWx1ZTIpO3NlbGVjdG9yMihrZXkzPXZhbHVlMyxrZXk0PXZhbHVlNClcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgICAgICBzZWxlY3RvcjE6IHtcbiAgICAgICAgICAgICAgICBrZXkxOiBcInZhbHVlMVwiLFxuICAgICAgICAgICAgICAgIGtleTI6IFwidmFsdWUyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0b3IyOiB7XG4gICAgICAgICAgICAgICAga2V5MzogXCJ2YWx1ZTNcIixcbiAgICAgICAgICAgICAgICBrZXk0OiBcInZhbHVlNFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgZXhwZWN0KHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KSkudG8uZGVlcC5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBkZWNvZGUgVVJMLWVuY29kZWQgdmFsdWVzXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIiNzZWxlY3RvcjEoa2V5MT12YWx1ZTElMkN3aXRoJTIwY29tbWEpXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICAgICAgc2VsZWN0b3IxOiB7XG4gICAgICAgICAgICAgICAga2V5MTogXCJ2YWx1ZTEsd2l0aCBjb21tYVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpO1xuICAgICAgICBleHBlY3QocmVzdWx0LnNlbGVjdG9yMS5rZXkxKS50by5lcXVhbChleHBlY3RlZFJlc3VsdC5zZWxlY3RvcjEua2V5MSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgaW5wdXQgd2l0aG91dCBhIGxlYWRpbmcgaGFzaFwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gXCJzZWxlY3RvcjEoa2V5MT12YWx1ZTEpXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICAgICAgc2VsZWN0b3IxOiB7XG4gICAgICAgICAgICAgICAga2V5MTogXCJ2YWx1ZTFcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGV4cGVjdChwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCkpLnRvLmRlZXAuZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBmb3IgaW52YWxpZCBpbnB1dFwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gXCIjc2VsZWN0b3IxKGtleTE9dmFsdWUxLGtleTJcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7fTtcbiAgICAgICAgZXhwZWN0KHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KSkudG8uZGVlcC5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgZm9yIGFuIGVtcHR5IGlucHV0IHN0cmluZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgZm9yIGFuIGludmFsaWQgaW5wdXQgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNpbnZhbGlkJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBhIHNpbXBsZSBpbnB1dCBzdHJpbmcgd2l0aCBvbmUgc2VsZWN0b3IgYW5kIG9uZSBrZXktdmFsdWUgcGFpcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5PXZhbHVlKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3Rvcjoge2tleTogJ3ZhbHVlJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgYW4gaW5wdXQgc3RyaW5nIHdpdGggbXVsdGlwbGUgc2VsZWN0b3JzIGFuZCBrZXktdmFsdWUgcGFpcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yMShrZXkxPXZhbHVlMSk7c2VsZWN0b3IyKGtleTI9dmFsdWUyKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3RvcjE6IHtrZXkxOiAndmFsdWUxJ30sIHNlbGVjdG9yMjoge2tleTI6ICd2YWx1ZTInfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZW1wdHkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXkxPSxrZXkyPSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXkxOiAnJywga2V5MjogJyd9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBwZXJjZW50LWVuY29kZWQgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXkxPXZhbHVlJTIwMSxrZXkyPXZhbHVlJTJDMiknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXkxOiAndmFsdWUgMScsIGtleTI6ICd2YWx1ZSwyJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGRvdWJsZS1xdW90ZWQgdmFsdWVzIHdpdGggY29tbWFzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXkxPVwidmFsdWUsMVwiLGtleTI9XCJ2YWx1ZSwyXCIpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5MTogJ3ZhbHVlLDEnLCBrZXkyOiAndmFsdWUsMid9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBsZWFkaW5nIGhhc2ggc3ltYm9sICgjKScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICdzZWxlY3RvcihrZXk9dmFsdWUpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5OiAndmFsdWUnfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpZ25vcmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnICAjc2VsZWN0b3Ioa2V5PXZhbHVlKSAgJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5OiAndmFsdWUnfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpbnB1dCBzdHJpbmcgZW5kcyBwcmVtYXR1cmVseScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5PXZhbHVlJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIGEgc2VsZWN0b3IgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjKGtleT12YWx1ZSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgYSBrZXkgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3IoPXZhbHVlKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZmEgdmFsdWUgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5PSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7XG4gICAgICAgICAgICBzZWxlY3Rvcjoge1xuICAgICAgICAgICAgICAgIGtleTogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBpcyBubyBjbG9zaW5nIHBhcmVudGhlc2lzIGZvciBhIHNlbGVjdG9yJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9dmFsdWU7JztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIGlzIG5vIHNlbWljb2xvbiBhZnRlciBhIHNlbGVjdG9yJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9dmFsdWUpc2VsZWN0b3IyKGtleTI9dmFsdWUyKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiB7XG4gICAgICAgICAgICAgICAga2V5OiAndmFsdWUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdG9yMjoge1xuICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBoYXNoIHN0cmluZyBmb3IgYSBzaW1wbGUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB7XG4gICAgICAgICAgICAgICAgJy5leGFtcGxlJzoge1xuICAgICAgICAgICAgICAgICAgICAnY29sb3InOiAncmVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZSc6ICcxNHB4J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJy5vdGhlcic6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQnOiAnYmx1ZSdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChcIiMuZXhhbXBsZShjb2xvcj1yZWQsZm9udC1zaXplPTE0cHgpOy5vdGhlcihiYWNrZ3JvdW5kPWJsdWUpXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgdXJsLWVuY29kZWQgaGFzaCBzdHJpbmcgZm9yIGEgc2ltcGxlIG9iamVjdCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0ge1xuICAgICAgICAgICAgICAgICcuZXhhbXBsZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2NvbG9yJzogJ3JcImVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZSc6ICcxNHB4J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJy5vdGhlcic6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQnOiAnYmx1ZSdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQsIHRydWUpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChcIiMuZXhhbXBsZShjb2xvcj1yJTIyZWQsZm9udC1zaXplPTE0cHgpOy5vdGhlcihiYWNrZ3JvdW5kPWJsdWUpXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBmb3IgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCxmYWxzZSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFwiXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBmb3IgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCxmYWxzZSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFwiXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgfSk7XG5cblxufSk7XG4iLCAiLyoqIG5vZGVqcyBkb2VzbnQgc3VwcG9ydCB3aW5kb3cuY3J5cHQgKi9cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdNYXRoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IHJhbmRvbSA9ICgpID0+IHt9XG4gICAgXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgaWYgKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvbWF0aC9yYW5kb20ubWpzXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICByYW5kb20gPSBtLnJhbmRvbTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KSlcblxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5yYW5kb20oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnYSBncmVhdGVyIGIgc2hvdWxkIHRocm93IGVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiByYW5kb20oMTAsIDIpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcgc2hvdWxkIHJldHVybiBhIG51bWJlciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgciA9IHJhbmRvbSgpO1xuICAgICAgICAgICAgZXhwZWN0KHIpLnRoYXQuaXMuYSgnbnVtYmVyJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcgc2hvdWxkIHJldHVybiBhIG51bWJlciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gcmFuZG9tKDUsIDYpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcgc2hvdWxkIHRocm93IEVycm9yIHdlIGNhbm5vdCBnZW5lcmF0ZSBudW1iZXJzIGxhcmdlciB0aGFuIDUzIGJpdHMuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHJhbmRvbSgtOTk5OTk5OTk5LCA5OTk5OTk5OTk5OTk5OTk5OTk5OSkpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJyBzaG91bGQgdGhyb3cgRXJyb3Igd2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy4nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMSwgMTAwXSxcbiAgICAgICAgICAgICAgICBbNTAwLCA2MDBdLFxuICAgICAgICAgICAgICAgIFsxMDAsIDEwMDBdXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGxldCByID0gcmFuZG9tKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgaXQociArICcgc2hvdWxkIHJldHVybiB2YWx1ZSBiZXR3ZWVuICcgKyBhICsgJyAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QociA+PSBhKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QociA8PSBiKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMSwgMTAwXSxcbiAgICAgICAgICAgICAgICBbNTAwLCA2MDBdLFxuICAgICAgICAgICAgICAgIFsxMDAsIDEwMDBdXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdW5kcyA9IDUwMFxuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1heCA9IHJvdW5kczsgaSA8IG1heDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSByYW5kb20oYSwgYik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGF2ZyA9IHN1bSAvIHJvdW5kcztcblxuICAgICAgICAgICAgICAgIGl0KGF2ZyArICcgc2hvdWxkIGJldHdlZW4gJyArIGEgKyAnICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChhdmcgPiBhKS50by5iZS50cnVlXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChhdmcgPCBiKS50by5iZS50cnVlXG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cblxufSkiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7dHJpbVNwYWNlc30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL3RyaW1zcGFjZXMubWpzXCI7XG5cblxuZGVzY3JpYmUoJ3RyaW1TcGFjZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgW1xuICAgICAgICAvLyBvbmUgc3Ryb2tlIGlzIGVzY3BlZCBieSB0aGUgamF2YXNjcmlwdCBpbnRlcnByZXRlciwgdGhlIHNlY29uZCBzdHJva2UgZXNjYXBlcyB0aGUgc3Ryb2tlXG4gICAgICAgIFsnIHZhbHVlICcsICd2YWx1ZSddLFxuICAgICAgICBbJyB2YWx1ZVxcXFwgJywgJ3ZhbHVlXFxcXCAnXSxcbiAgICAgICAgWydcXFxcIHZhbHVlXFxcXCAnLCAnXFxcXCB2YWx1ZVxcXFwgJ10sXG4gICAgICAgIFsnXFwgdmFsdWVcXCAnLCAndmFsdWUnXSwgICBcbiAgICAgICAgW1wiICAgdmFsdWUgXFwgXCIsICd2YWx1ZSddLCBcblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaXQoJ3RyaW1TcGFjZXMoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYiksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCh0cmltU3BhY2VzKGEpKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiAgICAiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7UHJvY2Vzc2luZ30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL3Byb2Nlc3NpbmcubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1Byb2Nlc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgncnVuIGluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIG1hbnkgZnVuY3Rpb24nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICBsZXQgdCA9ICtuZXcgRGF0ZSgpO1xuXG4gICAgICAgICAgICBjb25zdCBkZXNpcmVkRGVsYXkgPSAyMDA7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXQoZGVzaXJlZERlbGF5KzEwMCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGRlbGF5IDEyIFxuICAgICAgICAgICAgbmV3IFByb2Nlc3NpbmcoKHYpID0+IHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9LCAodikgPT4ge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrK1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKytcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH0sIGRlc2lyZWREZWxheSxmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrK1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfSkucnVuKCd0ZXN0JykudGhlbigodikgPT4ge1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNvdW50ZXIpLnRvLmJlLmVxdWFsKDQpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodiA9PT0gJ3Rlc3QnKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBkZWxheVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoK25ldyBEYXRlKCkgPiB0ICsgZGVzaXJlZERlbGF5KzEpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gb25lIGZ1bmN0aW9uJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgICAgICAgICBuZXcgUHJvY2Vzc2luZygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKytcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KS5ydW4oJ3Rlc3QnKS50aGVuKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHYgPT09ICd0ZXN0JykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIG5vIGZ1bmN0aW9uJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgICAgICAgICBuZXcgUHJvY2Vzc2luZygpLnJ1bigndGVzdCcpLnRoZW4oKHYpID0+IHtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2ID09PSAndGVzdCcpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlIG5ldyBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIFByb2Nlc3Npbmcgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBQcm9jZXNzaW5nKCkpLnRvLmJlLmEoJ29iamVjdCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIFByb2Nlc3Npbmcgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBQcm9jZXNzaW5nKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIH0pKS50by5iZS5hKCdvYmplY3QnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFByb2Nlc3NpbmcodHJ1ZSkpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBQcm9jZXNzaW5nKFwidGVzdFwiKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG59KTsiLCAiaW1wb3J0IHtEZWFkTWFuc1N3aXRjaH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdEZWFkTWFuc1N3aXRjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdydW4gaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBtczEgPSAgRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgbmV3IERlYWRNYW5zU3dpdGNoKDEwMCwgKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbXMyID0gIERhdGUubm93KCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkaWZmID0gbXMyIC0gbXMxO1xuICAgICAgICAgICAgICAgIGlmIChkaWZmIDwgMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoJ3RvIHNob3J0ICcgKyBkaWZmKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncnVuIGluc3RhbmNlIGFuZCB0b3VjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1bicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IG1zMSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRlYWRtYW5zc3dpdGNoID0gbmV3IERlYWRNYW5zU3dpdGNoKDEwMCwgKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbXMyID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBtczIgLSBtczE7XG5cbiAgICAgICAgICAgICAgICBpZiAobXMxID4gbXMyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKCd0aW1pbmcgZXJyb3InKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGlmZiA8IDYwMCkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcigndG8gc2hvcnQgJyArIGRpZmYpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAvLyAgIDAgbXM6IGluaXQoKSAtPiB3YWl0IDEwMCBtcyBcbiAgICAgICAgICAgIC8vICA1MCBtczogdG91Y2goKSAtPiB3YWl0IDEwMCBtc1xuICAgICAgICAgICAgLy8gICAgICAgICAgLT4gd2FpdCAxMDBcbiAgICAgICAgICAgIC8vIDEwMCBtczogdG91Y2goNTAwKSAtPiB3YWl0IDUwMCBtc1xuICAgICAgICAgICAgLy8gICAgICAgICAgLT4gd2FpdCA1MDBcbiAgICAgICAgICAgIC8vIDYwMCBtczogZXhlY3V0ZSBjYWxsYmFja1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVhZG1hbnNzd2l0Y2gudG91Y2goKVxuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlYWRtYW5zc3dpdGNoLnRvdWNoKDUwMClcbiAgICAgICAgICAgICAgICB9LCA1MClcblxuICAgICAgICAgICAgfSwgNTApXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5cbmV4cG9ydCB7IENvbXBhcmF0b3IgfTtcblxuLyoqXG4gKiBUaGUgY29tcGFyYXRvciBhbGxvd3MgYSBjb21wYXJpc29uIGZ1bmN0aW9uIHRvIGJlIGFic3RyYWN0ZWQuXG4gKlxuICogVGhlIGZvbGxvd2luZyBhcmUgc29tZSBleGFtcGxlcyBvZiB0aGUgYXBwbGljYXRpb24gb2YgdGhlIGNsYXNzLlxuICpcbiAqIGBgYFxuICogbmV3IENvbXBhcmF0b3IoKS5sZXNzVGhhbk9yRXF1YWwoMiwgNSkgLy8gXHUyMUE2IHRydWVcbiAqIG5ldyBDb21wYXJhdG9yKCkuZ3JlYXRlclRoYW4oNCwgMikgLy8gXHUyMUE2IHRydWVcbiAqIG5ldyBDb21wYXJhdG9yKCkuZXF1YWwoNCwgNCkgLy8gXHUyMUE2IHRydWVcbiAqIG5ldyBDb21wYXJhdG9yKCkuZXF1YWwoNCwgNSkgLy8gXHUyMUE2IGZhbHNlXG4gKiBgYGBcbiAqXG4gKiBZb3UgY2FuIGFsc28gcGFzcyB5b3VyIG93biBjb21wYXJpc29uIGZ1bmN0aW9uLCBhbmQgdGh1cyBkZWZpbmUgdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24uXG4gKlxuICogYGBgXG4gKiBuZXcgQ29tcGFyYXRvcihmdW5jdGlvbiAoYSwgYikge1xuICogICAgICBpZiAoYS52ID09PSBiLnYpIHJldHVybiAwO1xuICogICAgICAgICByZXR1cm4gYS52IDwgYi52ID8gLTEgOiAxO1xuICogICAgICB9KS5lcXVhbCh7djogMn0sIHt2OiAyfSk7ICAvLyBcdTIxQTYgdHJ1ZVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGUvY29tcGFyYXRvci9zaW1wbGUvIFNpbXBsZSBleGFtcGxlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICovXG5jbGFzcyBDb21wYXJhdG9yIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBjcmVhdGUgbmV3IGNvbXBhcmF0b3Jcblx0ICpcblx0ICogQHBhcmFtIHtNb25zdGVyLlV0aWx+ZXhhbXBsZUNhbGxiYWNrfSBbY2FsbGJhY2tdIENvbXBhcmF0b3IgY2FsbGJhY2tcblx0ICogQHRocm93IHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93IHtUeXBlRXJyb3J9IGltcHJhY3RpY2FsIGNvbXBhcmlzb25cblx0ICovXG5cdGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdFx0dGhpcy5jb21wYXJlID0gY2FsbGJhY2s7XG5cdFx0fSBlbHNlIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gZGVmYXVsdCBjb21wYXJlIGZ1bmN0aW9uXG5cblx0XHRcdC8qKlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7Kn0gYVxuXHRcdFx0ICogQHBhcmFtIHsqfSBiXG5cdFx0XHQgKiBAcmV0dXJuIHtpbnRlZ2VyfSAtMSwgMCBvciAxXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uIChhLCBiKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW1wcmFjdGljYWwgY29tcGFyaXNvblwiLCBcInR5cGVzL2NvbXBhcmF0b3IubWpzXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGEgPT09IGIpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYSA8IGIgPyAtMSA6IDE7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBjaGFuZ2VzIHRoZSBvcmRlciBvZiB0aGUgb3BlcmF0b3JzXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NvbXBhcmF0b3J9XG5cdCAqL1xuXHRyZXZlcnNlKCkge1xuXHRcdGNvbnN0IG9yaWdpbmFsID0gdGhpcy5jb21wYXJlO1xuXHRcdHRoaXMuY29tcGFyZSA9IChhLCBiKSA9PiBvcmlnaW5hbChiLCBhKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdHdvIHZhcmlhYmxlcyBhcmUgZXF1YWwuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGVxdWFsKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlKGEsIGIpID09PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB2YXJpYWJsZSBgYWAgaXMgZ3JlYXRlciB0aGFuIGBiYFxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFcblx0ICogQHBhcmFtIHsqfSBiXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRncmVhdGVyVGhhbihhLCBiKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZShhLCBiKSA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHZhcmlhYmxlIGBhYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYGJgXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGdyZWF0ZXJUaGFuT3JFcXVhbChhLCBiKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ3JlYXRlclRoYW4oYSwgYikgfHwgdGhpcy5lcXVhbChhLCBiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdmFyaWFibGUgYGFgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYmBcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhXG5cdCAqIEBwYXJhbSB7Kn0gYlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0bGVzc1RoYW5PckVxdWFsKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5sZXNzVGhhbihhLCBiKSB8fCB0aGlzLmVxdWFsKGEsIGIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB2YXJpYWJsZSBhIGlzIGxlc3MgdGhhbiBiXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGxlc3NUaGFuKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlKGEsIGIpIDwgMDtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCBieSB0aGUgb3BlcmF0b3JcbiAqXG4gKiBgYGBcbiAqIG5ldyBDb21wYXJhdG9yKGZ1bmN0aW9uIChhLCBiKSB7XG4gKiAgICAgIGlmIChhLnYgPT09IGIudikgcmV0dXJuIDA7XG4gKiAgICAgICAgIHJldHVybiBhLnYgPCBiLnYgPyAtMSA6IDE7XG4gKiAgICAgIH0pLmVxdWFsKHt2OiAyfSwge3Y6IDJ9KTsgIC8vIFx1MjFBNiB0cnVlXG4gKiBgYGBcbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5VdGlsfmV4YW1wbGVDYWxsYmFja1xuICogQHBhcmFtIHsqfSBhXG4gKiBAcGFyYW0geyp9IGJcbiAqIEByZXR1cm4ge2ludGVnZXJ9IC0xLCAwIG9yIDFcbiAqIEBzZWUgTW9uc3Rlci5VdGlsLkNvbXBhcmF0b3JcbiAqL1xuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0NvbXBhcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdXRpbC9jb21wYXJhdG9yLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdDb21wYXJhdG9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZSBuZXcgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBjb21wYXJhdG9yIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpKS50by5iZS5hKCdvYmplY3QnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBjb21wYXJhdG9yIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB9KSkudG8uYmUuYSgnb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBDb21wYXJhdG9yKHRydWUpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgQ29tcGFyYXRvcihcInRlc3RcIikpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdlcXVhbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBcInRlc3RcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWzUuMSwgNSwgZmFsc2VdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbLTQsIC00LCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb21wYXJlICcgKyBhICsgJyBhbmQgJyArIGIgKyAnIHJldHVybiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmVxdWFsKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXF1YWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgNV0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgbnVsbF0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgcGFyc2VJbnQoXCJhXCIpXSxcbiAgICAgICAgICAgIFtmYWxzZSwgNV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBudWxsXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgQ29tcGFyYXRvcigpLmVxdWFsKGEsIGIpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ3JlYXRlclRoYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZ3JlYXRlclRoYW4oYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdyZXZlcnNlKCkuZ3JlYXRlclRoYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkucmV2ZXJzZSgpLmdyZWF0ZXJUaGFuKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ3JlYXRlclRoYW5PckVxdWFsKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIFwidGVzdFwiLCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbLTQsIC00LCB0cnVlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZ3JlYXRlclRoYW5PckVxdWFsKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbGVzc1RoYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkubGVzc1RoYW4oYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudGF0aW9ucycsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIC4uLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmxlc3NUaGFuT3JFcXVhbCgyLCA1KSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmdyZWF0ZXJUaGFuKDQsIDIpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZXF1YWwoNCwgNCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5lcXVhbCg0LCA1KSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gd2l0aCBvd24gZnVuY3Rpb24gLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGEudiA9PT0gYi52KSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS52IDwgYi52ID8gLTEgOiAxO1xuICAgICAgICAgICAgfSkuZXF1YWwoe3Y6IDJ9LCB7djogMn0pKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdsZXNzVGhhbk9yRXF1YWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIHRydWVdLFxuICAgICAgICAgICAgW3RydWUsIHRydWUsIHRydWVdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIHRydWVdLFxuICAgICAgICAgICAgWy00LCA0LCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29tcGFyZSAnICsgYSArICcgYW5kICcgKyBiICsgJyByZXR1cm4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5sZXNzVGhhbk9yRXF1YWwoYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGRlZXBGcmVlemUgfTtcblxuLyoqXG4gKiBEZWVwIGZyZWV6ZSBhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3Qgb2JqZWN0IHRvIGJlIGZyZWV6ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICovXG5mdW5jdGlvbiBkZWVwRnJlZXplKG9iamVjdCkge1xuXHR2YWxpZGF0ZU9iamVjdChvYmplY3QpO1xuXG5cdC8vIFJldHJpZXZlIHRoZSBkZWZpbmVkIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBvYmplY3Rcblx0bGV0IHByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG5cblx0Ly8gRnJlZXplIHByb3BlcnRpZXMgYmVmb3JlIGZyZWV6aW5nIHlvdXJzZWxmXG5cdGZvciAoY29uc3QgbmFtZSBvZiBwcm9wTmFtZXMpIHtcblx0XHRjb25zdCB2YWx1ZSA9IG9iamVjdFtuYW1lXTtcblxuXHRcdG9iamVjdFtuYW1lXSA9XG5cdFx0XHR2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgPyBkZWVwRnJlZXplKHZhbHVlKSA6IHZhbHVlO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdC5mcmVlemUob2JqZWN0KTtcbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtkZWVwRnJlZXplfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvZnJlZXplLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdkZWVwRnJlZXplJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2RlZXBGcmVlemUgYW4gb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgZnJlZXplIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iajEgPSB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOjFcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBvYmoyID0ge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzoyXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBleHBlY3Qob2JqMikudG8ubm90LmVxbChvYmoxKVxuICAgICAgICAgICAgb2JqMS5hLmIuYyA9IDI7XG4gICAgICAgICAgICBleHBlY3Qob2JqMikudG8uZXFsKG9iajEpO1xuXG4gICAgICAgICAgICBjb25zdCBvYmoxRnJlZXplZCA9IGRlZXBGcmVlemUob2JqMSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChvYmoyKS50by5lcWwob2JqMUZyZWV6ZWQpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9mcmVlemVcbiAgICAgICAgICAgICAgICAvLyBubyBjaGFuZ2UgdG8gdGhlIG9iamVjdCwgZXhjZXB0aW9uIGRlcGVuZHMgb24gbW9kZSAoc3RyaWN0IEVTIDIwMTUsIGV0YylcbiAgICAgICAgICAgICAgICBvYmoxRnJlZXplZC5hLmIuYyA9IDMgICAgXG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KG9iajIpLnRvLmVxbChvYmoxRnJlZXplZCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2Nsb25lfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnQ2xvbmUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBjbGFzcyBBIHtcbiAgICAgICAgY29uc3RydWN0b3IoYikge1xuICAgICAgICAgICAgdGhpcy5iID0gYlxuICAgICAgICB9XG5cbiAgICAgICAgYSgpIHtcblxuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGNsYXNzIEIge1xuICAgICAgICBjb25zdHJ1Y3RvcihiKSB7XG4gICAgICAgICAgICB0aGlzLmIgPSBiXG4gICAgICAgIH1cblxuICAgICAgICBhKCkge1xuXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGdldENsb25lKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiRE9ORVwiXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgfVxuXG4gICAgZGVzY3JpYmUoJy5jbG9uZShCKSB3aXRoIGdldENsb25lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnLmNsb25lKEIpIHNob3VsZCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYiA9IG5ldyBCKHtcbiAgICAgICAgICAgICAgICB4OiB7XG4gICAgICAgICAgICAgICAgICAgIHk6IDEsIGQ6IG5ldyBBKDEpLCB6OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCByID0gY2xvbmUoYik7XG4gICAgICAgICAgICBleHBlY3QoYikudG8uYmUuaW5zdGFuY2VPZihCKVxuICAgICAgICAgICAgZXhwZWN0KHIpLm5vdC5lcXVhbChiKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShyKSkuZXF1YWwoSlNPTi5zdHJpbmdpZnkoJ0RPTkUnKSk7XG5cbiAgICAgICAgfSk7XG4gICAgfSlcbiAgICBcbiAgICBkZXNjcmliZSgnLmNsb25lKEEpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnLmNsb25lKEEpIHNob3VsZCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYSA9IG5ldyBBKHtcbiAgICAgICAgICAgICAgICB4OiB7XG4gICAgICAgICAgICAgICAgICAgIHk6IDEsIGQ6IG5ldyBBKDEpLCB6OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICBleHBlY3QoYSkudG8uYmUuaW5zdGFuY2VPZihBKVxuICAgICAgICAgICAgZXhwZWN0KGIpLnRvLmJlLmluc3RhbmNlT2YoQSlcbiAgICAgICAgICAgIGV4cGVjdChiKS5ub3QuZXF1YWwoYSk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoYSkpLmVxdWFsKEpTT04uc3RyaW5naWZ5KGIpKTtcblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgLy8gbm9kZWpzIGRvZXMgbm90IGhhdmUgYSBET01cbiAgICBpZiAodHlwZW9mIERvY3VtZW50RnJhZ21lbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZGVzY3JpYmUoJy5jbG9uZShEb2N1bWVudEZyYWdtZW50KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCcuY2xvbmUoRG9jdW1lbnRGcmFnbWVudCkgc2hvdWxkIHNhbWUgRG9jdW1lbnRGcmFnbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChiKS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGRlc2NyaWJlKCcuY2xvbmUobnVsbCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIHR5cGVvZiBudWxsIHJlc3VsdHMgaW4gJ29iamVjdCcuICBodHRwczovLzJhbGl0eS5jb20vMjAxMy8xMC90eXBlb2YtbnVsbC5odG1sXG4gICAgICAgIGl0KCcuY2xvbmUobnVsbCkgc2hvdWxkICBudWxsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSBudWxsXG4gICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGIpLmVxdWFsKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGIpLnRvLmJlLm51bGw7XG4gICAgICAgICAgICBleHBlY3QoYSkudG8uYmUubnVsbDtcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCcuY2xvbmUodW5kZWZpbmVkKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJy5jbG9uZSh1bmRlZmluZWQpIHNob3VsZCAgdW5kZWZpbmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICBleHBlY3QoYSA9PT0gYikudG8uYmUudHJ1ZVxuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBiID09PSAndW5kZWZpbmVkJykudG8uYmUudHJ1ZVxuICAgICAgICAgICAgZXhwZWN0KGEgPT09IHVuZGVmaW5lZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgZXhwZWN0KGIgPT09IHVuZGVmaW5lZCkudG8uYmUudHJ1ZVxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJy5jbG9uZShvYmplY3QpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCcuY2xvbmUoe30pIHNob3VsZCAgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSB7fVxuICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgYiA9PT0gJ29iamVjdCcpLnRvLmJlLnRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5jbG9uZSh7eDoxfSkgc2hvdWxkICBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYSA9IHt4OiAxfVxuICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgIGV4cGVjdChhLngpLmlzLmVxdWFsKGIueClcbiAgICAgICAgfSk7XG4gICAgfSlcbiAgICBkZXNjcmliZSgnLmNsb25lKGZ1bmN0aW9uKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnLmNsb25lKGZ1bmN0aW9uKSBzaG91bGQgIGZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSAoKSA9PiB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBiID09PSAnZnVuY3Rpb24nKS50by5iZS50cnVlXG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCcuY2xvbmUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgJ3N0cmluZyddLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgJ3VuZGVmaW5lZCddLFxuICAgICAgICAgICAgW251bGwsICdvYmplY3QnXSwgLy8gdHlwZW9mIG51bGwgcmVzdWx0cyBpbiAnb2JqZWN0Jy4gIGh0dHBzOi8vMmFsaXR5LmNvbS8yMDEzLzEwL3R5cGVvZi1udWxsLmh0bWxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCAnZnVuY3Rpb24nXSxcbiAgICAgICAgICAgIFsyLCAnbnVtYmVyJ10sXG4gICAgICAgICAgICBbZmFsc2UsICdib29sZWFuJ10sXG4gICAgICAgICAgICBbdHJ1ZSwgJ2Jvb2xlYW4nXSxcbiAgICAgICAgICAgIFs0LjUsICdudW1iZXInXSxcbiAgICAgICAgICAgIFt7fSwgJ29iamVjdCddLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgJ29iamVjdCddLCAvLyBhcnJheSBpc3QgYXVjaCB0eXBlIG9iamVjdFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgJ3N5bWJvbCddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgaXQoJy5jbG9uZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgICcgKyBiICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGMgPSBjbG9uZShhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGMpLmlzLmVxdWFsKGIpO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IEhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlci5tanNcIjtcbmltcG9ydCB7IExvZ0VudHJ5IH0gZnJvbSBcIi4uL2xvZ2VudHJ5Lm1qc1wiO1xuaW1wb3J0IHsgVFJBQ0UsIFdBUk4sIERFQlVHLCBFUlJPUiwgRkFUQUwsIElORk8gfSBmcm9tIFwiLi4vbG9nZ2VyLm1qc1wiO1xuXG5leHBvcnQgeyBDb25zb2xlSGFuZGxlciB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIG9iamVjdCBvZiB0aGUgY2xhc3Mgc2ltcGx5IGJ5IHVzaW5nIHRoZSBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLkxvZ2dpbmcuSGFuZGxlci5Db25zb2xlSGFuZGxlcigpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgQ29uc29sZUhhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHtcblx0LyoqXG5cdCAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgbG9nIGZ1bmN0aW9uLiB0aGlzIG1ldGhvZCBtdXN0IGJlXG5cdCAqIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgaGFuZGxlcnMgd2l0aCB0aGVpciBvd24gbG9naWMuXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7TG9nRW50cnl9IGVudHJ5XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRsb2coZW50cnkpIHtcblx0XHRpZiAoc3VwZXIubG9nKGVudHJ5KSkge1xuXHRcdFx0Y29uc3QgY29uc29sZSA9IGdldEdsb2JhbE9iamVjdChcImNvbnNvbGVcIik7XG5cdFx0XHRpZiAoIWNvbnNvbGUpIHJldHVybiBmYWxzZTtcblxuXHRcdFx0aWYgKCFjb25zb2xlLmVycm9yKSBjb25zb2xlLmVycm9yID0gY29uc29sZS5sb2c7XG5cdFx0XHRpZiAoIWNvbnNvbGUud2FybikgY29uc29sZS53YXJuID0gY29uc29sZS5sb2c7XG5cblx0XHRcdHN3aXRjaCAoZW50cnkuZ2V0TG9nTGV2ZWwoKSkge1xuXHRcdFx0XHRjYXNlIFRSQUNFOlxuXHRcdFx0XHRjYXNlIERFQlVHOlxuXHRcdFx0XHRjYXNlIElORk86XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coZW50cnkudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRkFUQUw6XG5cdFx0XHRcdGNhc2UgRVJST1I6XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlbnRyeS50b1N0cmluZygpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBXQVJOOlxuXHRcdFx0XHRcdGNvbnNvbGUud2FybihlbnRyeS50b1N0cmluZygpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhlbnRyeS50b1N0cmluZygpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVJbnRlZ2VyIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgTG9nRW50cnkgfSBmcm9tIFwiLi9sb2dlbnRyeS5tanNcIjtcbmltcG9ydCB7IEFMTCwgREVCVUcsIEVSUk9SLCBGQVRBTCwgSU5GTywgT0ZGLCBUUkFDRSwgV0FSTiB9IGZyb20gXCIuL2xvZ2dlci5tanNcIjtcblxuZXhwb3J0IHsgSGFuZGxlciB9O1xuXG4vKipcbiAqIFRoZSBsb2cgaGFuZGxlciBpcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGxvZyBlbnRyaWVzIGFuZCB0aGUgbG9nIGxpc3RlbmVycy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgSGFuZGxlciBleHRlbmRzIEJhc2Uge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0LyoqXG5cdFx0ICogTG9nbGV2ZWxcblx0XHQgKlxuXHRcdCAqIEB0eXBlIHtpbnRlZ2VyfVxuXHRcdCAqL1xuXHRcdHRoaXMubG9nbGV2ZWwgPSBPRkY7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyB0aGUgY2VudHJhbCBsb2cgZnVuY3Rpb24uIHRoaXMgbWV0aG9kIG11c3QgYmVcblx0ICogb3ZlcndyaXR0ZW4gYnkgZGVyaXZlZCBoYW5kbGVycyB3aXRoIHRoZWlyIG93biBsb2dpYy5cblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHtMb2dFbnRyeX0gZW50cnlcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGxvZyhlbnRyeSkge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2UoZW50cnksIExvZ0VudHJ5KTtcblxuXHRcdGlmICh0aGlzLmxvZ2xldmVsIDwgZW50cnkuZ2V0TG9nTGV2ZWwoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIHNldCBsb2dsZXZlbFxuXHQgKlxuXHQgKiBAcGFyYW0ge2ludGVnZXJ9IGxvZ2xldmVsXG5cdCAqIEByZXR1cm4ge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0TG9nTGV2ZWwobG9nbGV2ZWwpIHtcblx0XHR2YWxpZGF0ZUludGVnZXIobG9nbGV2ZWwpO1xuXHRcdHRoaXMubG9nbGV2ZWwgPSBsb2dsZXZlbDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBnZXQgbG9nbGV2ZWxcblx0ICpcblx0ICogQHJldHVybiB7aW50ZWdlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRnZXRMb2dMZXZlbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5sb2dsZXZlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiAgU2V0IGxvZyBsZXZlbCB0byBBbGxcblx0ICpcblx0ICogQHJldHVybiB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRBbGwoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChBTEwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gVHJhY2Vcblx0ICpcblx0ICogQHJldHVybiB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRUcmFjZSgpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKFRSQUNFKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIERlYnVnXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0RGVidWcoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChERUJVRyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBJbmZvXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0SW5mbygpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKElORk8pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gV2FyblxuXHQgKlxuXHQgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0V2FybigpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKFdBUk4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gRXJyb3Jcblx0ICpcblx0ICogQHJldHVybiB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRFcnJvcigpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKEVSUk9SKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIEZhdGFsXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0RmF0YWwoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChGQVRBTCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBPZmZcblx0ICpcblx0ICogQHJldHVybiB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRPZmYoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChPRkYpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnRlZ2VyIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBMb2dFbnRyeSB9O1xuXG4vKipcbiAqIEEgbG9nIGVudHJ5IGZvciB0aGUgbG9nZ2VyXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIExvZ0VudHJ5IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0ludGVnZXJ9IGxvZ2xldmVsXG5cdCAqIEBwYXJhbSB7Li4uKn0gYXJnc1xuXHQgKi9cblx0Y29uc3RydWN0b3IobG9nbGV2ZWwsIC4uLmFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXHRcdHZhbGlkYXRlSW50ZWdlcihsb2dsZXZlbCk7XG5cblx0XHR0aGlzLmxvZ2xldmVsID0gbG9nbGV2ZWw7XG5cdFx0dGhpcy5hcmd1bWVudHMgPSBhcmdzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge2ludGVnZXJyfVxuXHQgKi9cblx0Z2V0TG9nTGV2ZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMubG9nbGV2ZWw7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7YXJyYXl9XG5cdCAqL1xuXHRnZXRBcmd1bWVudHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYXJndW1lbnRzO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXIubWpzXCI7XG5pbXBvcnQgeyBMb2dFbnRyeSB9IGZyb20gXCIuL2xvZ2VudHJ5Lm1qc1wiO1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUludGVnZXIsXG5cdHZhbGlkYXRlT2JqZWN0LFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBMb2dnZXIsIEFMTCwgVFJBQ0UsIERFQlVHLCBJTkZPLCBXQVJOLCBFUlJPUiwgRkFUQUwsIE9GRiB9O1xuXG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IEFMTCA9IDI1NTtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgVFJBQ0UgPSA2NDtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgREVCVUcgPSAzMjtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgSU5GTyA9IDE2O1xuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBXQVJOID0gODtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgRVJST1IgPSA0O1xuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBGQVRBTCA9IDI7XG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IE9GRiA9IDA7XG5cbi8qKlxuICogVGhlIGxvZ2dlciBpcyBhIGNsYXNzIHRoYXQgdGFrZXMgY2FyZSBvZiBsb2dnaW5nLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBMb2dnZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuaGFuZGxlciA9IG5ldyBTZXQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hhbmRsZXJ9IGhhbmRsZXJcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGhhbmRsZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBIYW5kbGVyXG5cdCAqL1xuXHRhZGRIYW5kbGVyKGhhbmRsZXIpIHtcblx0XHR2YWxpZGF0ZU9iamVjdChoYW5kbGVyKTtcblx0XHRpZiAoIShoYW5kbGVyIGluc3RhbmNlb2YgSGFuZGxlcikpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBoYW5kbGVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgSGFuZGxlclwiKTtcblx0XHR9XG5cblx0XHR0aGlzLmhhbmRsZXIuYWRkKGhhbmRsZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7SGFuZGxlcn0gaGFuZGxlclxuXHQgKiBAcmV0dXJuIHtMb2dnZXJ9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgaGFuZGxlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEhhbmRsZXJcblx0ICovXG5cdHJlbW92ZUhhbmRsZXIoaGFuZGxlcikge1xuXHRcdHZhbGlkYXRlT2JqZWN0KGhhbmRsZXIpO1xuXHRcdGlmICghKGhhbmRsZXIgaW5zdGFuY2VvZiBIYW5kbGVyKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGhhbmRsZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBIYW5kbGVyXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuaGFuZGxlci5kZWxldGUoaGFuZGxlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIFRyYWNlIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ1RyYWNlKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW1RSQUNFLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIERlYnVnIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ0RlYnVnKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW0RFQlVHLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIEluZm8gbWVzc2FnZVxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJuIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nSW5mbyguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtJTkZPLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIFdhcm4gbWVzc2FnZVxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJuIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nV2FybiguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtXQVJOLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIEVycm9yIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ0Vycm9yKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW0VSUk9SLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIEZhdGFsIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ0ZhdGFsKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW0ZBVEFMLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogTGFiZWxzXG5cdCAqXG5cdCAqIEBwYXJhbSB7aW50ZWdlcn0gbGV2ZWxcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0TGFiZWwobGV2ZWwpIHtcblx0XHR2YWxpZGF0ZUludGVnZXIobGV2ZWwpO1xuXG5cdFx0aWYgKGxldmVsID09PSBBTEwpIHJldHVybiBcIkFMTFwiO1xuXHRcdGlmIChsZXZlbCA9PT0gVFJBQ0UpIHJldHVybiBcIlRSQUNFXCI7XG5cdFx0aWYgKGxldmVsID09PSBERUJVRykgcmV0dXJuIFwiREVCVUdcIjtcblx0XHRpZiAobGV2ZWwgPT09IElORk8pIHJldHVybiBcIklORk9cIjtcblx0XHRpZiAobGV2ZWwgPT09IFdBUk4pIHJldHVybiBcIldBUk5cIjtcblx0XHRpZiAobGV2ZWwgPT09IEVSUk9SKSByZXR1cm4gXCJFUlJPUlwiO1xuXHRcdGlmIChsZXZlbCA9PT0gRkFUQUwpIHJldHVybiBcIkZBVEFMXCI7XG5cdFx0aWYgKGxldmVsID09PSBPRkYpIHJldHVybiBcIk9GRlwiO1xuXG5cdFx0cmV0dXJuIFwidW5rbm93blwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIExldmVsXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbFxuXHQgKiBAcmV0dXJuIHtpbnRlZ2VyfVxuXHQgKi9cblx0Z2V0TGV2ZWwobGFiZWwpIHtcblx0XHR2YWxpZGF0ZVN0cmluZyhsYWJlbCk7XG5cblx0XHRpZiAobGFiZWwgPT09IFwiQUxMXCIpIHJldHVybiBBTEw7XG5cdFx0aWYgKGxhYmVsID09PSBcIlRSQUNFXCIpIHJldHVybiBUUkFDRTtcblx0XHRpZiAobGFiZWwgPT09IFwiREVCVUdcIikgcmV0dXJuIERFQlVHO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJJTkZPXCIpIHJldHVybiBJTkZPO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJXQVJOXCIpIHJldHVybiBXQVJOO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJFUlJPUlwiKSByZXR1cm4gRVJST1I7XG5cdFx0aWYgKGxhYmVsID09PSBcIkZBVEFMXCIpIHJldHVybiBGQVRBTDtcblx0XHRpZiAobGFiZWwgPT09IFwiT0ZGXCIpIHJldHVybiBPRkY7XG5cblx0XHRyZXR1cm4gMDtcblx0fVxufVxuXG4vKipcbiAqIExvZyB0cmlnZ2VyblxuICpcbiAqIEBwYXJhbSB7aW50ZWdlcn0gbG9nbGV2ZWxcbiAqIEBwYXJhbSB7Kn0gYXJnc1xuICogQHJldHVybiB7TG9nZ2VyfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdHJpZ2dlckxvZyhsb2dsZXZlbCwgLi4uYXJncykge1xuXHRmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVyKSB7XG5cdFx0aGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KGxvZ2xldmVsLCBhcmdzKSk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIjtcbmltcG9ydCB7Q29uc29sZUhhbmRsZXJ9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyL2NvbnNvbGUubWpzXCI7XG5pbXBvcnQge0xvZ0VudHJ5fSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZW50cnkubWpzXCI7XG5pbXBvcnQge1RSQUNFLCBXQVJOLCBERUJVRywgRVJST1IsIEZBVEFMLCBJTkZPfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZ2VyLm1qc1wiO1xuXG5kZXNjcmliZSgnTG9nZ2luZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdDb25zb2xlSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBDb25zb2xlSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKSkudG8uYmUuaW5zdGFuY2VvZihDb25zb2xlSGFuZGxlcilcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KEZBVEFMLCBbMSwgdHJ1ZSwgJ2ZhdGFsJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KFRSQUNFLCBbMSwgdHJ1ZSwgJ3RyYWNlJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KFdBUk4sIFsxLCB0cnVlLCAnd2FybiddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbG9nIHRvIGNvbnNvbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbnNvbGVIYW5kbGVyKCkuc2V0QWxsKCkubG9nKG5ldyBMb2dFbnRyeShERUJVRywgWzEsIHRydWUsICdkZWJ1ZyddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbG9nIHRvIGNvbnNvbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbnNvbGVIYW5kbGVyKCkuc2V0QWxsKCkubG9nKG5ldyBMb2dFbnRyeShFUlJPUiwgWzEsIHRydWUsICdlcnJvciddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbG9nIHRvIGNvbnNvbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbnNvbGVIYW5kbGVyKCkuc2V0QWxsKCkubG9nKG5ldyBMb2dFbnRyeShJTkZPLCBbMSwgdHJ1ZSwgJ2luZm8nXSkpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TG9nZ2VyLCBPRkYsIEFMTCwgVFJBQ0UsIERFQlVHLCBJTkZPLCBXQVJOLCBFUlJPUiwgRkFUQUx9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dnZXIubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0xvZ2dpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnbmV3IExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dUcmFjZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nVHJhY2UoXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nRGVidWcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmxvZ0RlYnVnKFwidGVzdFwiKSkudG8uaW5zdGFuY2VPZihMb2dnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmxvZ0luZm8oKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmxvZ0luZm8oXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nV2FybigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nV2FybihcInRlc3RcIikpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dFcnJvcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nRXJyb3IoXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nRmF0YWwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmxvZ0ZhdGFsKFwidGVzdFwiKSkudG8uaW5zdGFuY2VPZihMb2dnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmdldExldmVsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnQUxMJywgQUxMXSxcbiAgICAgICAgICAgIFsnVFJBQ0UnLCBUUkFDRV0sXG4gICAgICAgICAgICBbJ0RFQlVHJywgREVCVUddLFxuICAgICAgICAgICAgWydJTkZPJywgSU5GT10sXG4gICAgICAgICAgICBbJ1dBUk4nLCBXQVJOXSxcbiAgICAgICAgICAgIFsnRVJST1InLCBFUlJPUl0sXG4gICAgICAgICAgICBbJ0ZBVEFMJywgRkFUQUxdLFxuICAgICAgICAgICAgWydPRkYnLCBPRkZdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KGEgKyAnIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmdldExldmVsKGEpKS50by5iZS5lcXVhbHMoYik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5nZXRMYWJlbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBbXG4gICAgICAgICAgICBbJ0FMTCcsIEFMTF0sXG4gICAgICAgICAgICBbJ1RSQUNFJywgVFJBQ0VdLFxuICAgICAgICAgICAgWydERUJVRycsIERFQlVHXSxcbiAgICAgICAgICAgIFsnSU5GTycsIElORk9dLFxuICAgICAgICAgICAgWydXQVJOJywgV0FSTl0sXG4gICAgICAgICAgICBbJ0VSUk9SJywgRVJST1JdLFxuICAgICAgICAgICAgWydGQVRBTCcsIEZBVEFMXSxcbiAgICAgICAgICAgIFsnT0ZGJywgT0ZGXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdChhICsgJyBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5nZXRMYWJlbChiKSkudG8uYmUuZXF1YWxzKGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiO1xuaW1wb3J0IHtBTEwsIFRSQUNFLCBERUJVRywgSU5GTywgV0FSTiwgRVJST1IsIEZBVEFMLCBPRkZ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dnZXIubWpzXCI7XG5pbXBvcnQge0hhbmRsZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyLm1qc1wiO1xuaW1wb3J0IHtMb2dFbnRyeX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2VudHJ5Lm1qc1wiO1xuXG5kZXNjcmliZSgnTG9nZ2luZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldExvZ0xldmVsKCkuZ2V0TG9nTGV2ZWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbQUxMXSwgW1RSQUNFXSwgW0RFQlVHXSwgW0lORk9dLCBbV0FSTl0sIFtFUlJPUl0sIFtGQVRBTF0sIFtPRkZdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3RoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBzZXQgdmFsdWUgJyArIGEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRMb2dMZXZlbChhKS5nZXRMb2dMZXZlbCgpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIubG9nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLmxvZyhuZXcgTG9nRW50cnkoMCwgXCJ0ZXN0XCIpKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5sb2coKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgaGFuZGxlcjtcblxuICAgICAgICBjbGFzcyBUZXN0SGFuZGxlciBleHRlbmRzIEhhbmRsZXIge1xuICAgICAgICAgICAgbG9nKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgc3VwZXIubG9nKGVudHJ5KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgaGFuZGxlciA9IG5ldyBUZXN0SGFuZGxlcigpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLmxvZyhuZXcgTG9nRW50cnkoMCwgXCJ0ZXN0XCIpKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5sb2coKSB3aXRoIGxvZ2xldmVsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBUZXN0SGFuZGxlcjtcblxuICAgICAgICBiZWZvcmUoKCkgPT4ge1xuICAgICAgICAgICAgVGVzdEhhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEhhbmRsZXIge1xuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxzID0gMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsb2cobG9nbGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1cGVyLmxvZyhsb2dsZXZlbCkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbHMrK1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgWyAvLyBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuICAgICAgICAgICAgW0FMTCwgNl0sXG4gICAgICAgICAgICBbVFJBQ0UsIDZdLFxuICAgICAgICAgICAgW0RFQlVHLCA1XSxcbiAgICAgICAgICAgIFtJTkZPLCA0XSxcbiAgICAgICAgICAgIFtXQVJOLCAzXSxcbiAgICAgICAgICAgIFtFUlJPUiwgMl0sXG4gICAgICAgICAgICBbRkFUQUwsIDFdLFxuICAgICAgICAgICAgW09GRiwgMF1cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMubG9nKCcgKyBhICsgJykgc2hvdWxkIGxvZyAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGVyID0gbmV3IFRlc3RIYW5kbGVyKCkuc2V0TG9nTGV2ZWwoYSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KFRSQUNFKSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KERFQlVHKSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KElORk8pKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkoV0FSTikpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIubG9nKG5ldyBMb2dFbnRyeShFUlJPUikpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIubG9nKG5ldyBMb2dFbnRyeShGQVRBTCkpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGhhbmRsZXIuY2FsbHMpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRMb2dMZXZlbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRMb2dMZXZlbChBTEwpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLmdldExvZ0xldmVsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgbG9nZ2VyIHNob3VsZCBiZSAwJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuZ2V0TG9nTGV2ZWwoKSkudG8uYmUuZXF1YWwoT0ZGKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRBbGwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJyBzaG91bGQgaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0QWxsKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldFRyYWNlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgbG9nZ2VyIHNob3VsZCBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRUcmFjZSgpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXREZWJ1ZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnIHNob3VsZCBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXREZWJ1ZygpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRJbmZvKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldEluZm8oKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0V2FybigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnIHNob3VsZCBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRXYXJuKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldEVycm9yKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldEVycm9yKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldEZhdGFsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldEZhdGFsKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldE9mZigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRPZmYoKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TG9nRW50cnl9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dlbnRyeS5tanNcIjtcblxuXG5kZXNjcmliZSgnTG9nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ25ldyBMb2cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dFbnRyeSgxLCAnYScsICdiJywgJ2MnKSkudG8uaW5zdGFuY2VPZihMb2dFbnRyeSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0xvZy5sb2dsZXZlbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbG9nO1xuXG4gICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbG9nID0gbmV3IExvZ0VudHJ5KDEsIGZhbHNlLCAndGVzdCcsIDk5LCB7YTogdHJ1ZX0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGxvZ2xldmVsIDEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobG9nLmdldExvZ0xldmVsKCkpLnRvLmJlLmVxdWFsKDEpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFyZ3VtZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChsb2cuZ2V0QXJndW1lbnRzKCkpLnRvLmhhdmUuZGVlcC5tZW1iZXJzKFtmYWxzZSwgJ3Rlc3QnLCA5OSwge2E6IHRydWV9XSlcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc0ludGVnZXIsIGlzU3RyaW5nLCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlUXVldWUgfSBmcm9tIFwiLi4vdHlwZXMvb2JzZXJ2YWJsZXF1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gXCIuL3dlYmNvbm5lY3QvbWVzc2FnZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuZXhwb3J0IHsgV2ViQ29ubmVjdCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZWNlaXZlUXVldWVTeW1ib2wgPSBTeW1ib2woXCJyZWNlaXZlUXVldWVcIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzZW5kUXVldWVTeW1ib2wgPSBTeW1ib2woXCJzZW5kUXVldWVcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKlxuICogaGludDogdGhpcyBuYW1lIGlzIHVzZWQgaW4gdGhlIHRlc3RzLiBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgaXQsIHBsZWFzZSBjaGFuZ2UgaXQgaW4gdGhlIHRlc3RzIGFzIHdlbGwuXG4gKi9cbmNvbnN0IGNvbm5lY3Rpb25TeW1ib2wgPSBTeW1ib2woXCJjb25uZWN0aW9uXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtYW51YWxDbG9zZVN5bWJvbCA9IFN5bWJvbChcIm1hbnVhbENsb3NlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi03LjQuMVxuICogQHR5cGUge09iamVjdH1cbiAqL1xuY29uc3QgY29ubmVjdGlvblN0YXR1c0NvZGUgPSB7XG5cdDEwMDA6IFwiTm9ybWFsIGNsb3N1cmVcIixcblx0MTAwMTogXCJHb2luZyBhd2F5XCIsXG5cdDEwMDI6IFwiUHJvdG9jb2wgZXJyb3JcIixcblx0MTAwMzogXCJVbnN1cHBvcnRlZCBkYXRhXCIsXG5cdDEwMDQ6IFwiUmVzZXJ2ZWRcIixcblx0MTAwNTogXCJObyBzdGF0dXMgY29kZVwiLFxuXHQxMDA2OiBcIkNvbm5lY3Rpb24gY2xvc2VkIGFibm9ybWFsbHlcIixcblx0MTAwNzogXCJJbnZhbGlkIGZyYW1lIHBheWxvYWQgZGF0YVwiLFxuXHQxMDA4OiBcIlBvbGljeSB2aW9sYXRpb25cIixcblx0MTAwOTogXCJUaGUgTWVzc2FnZSBpcyB0b28gYmlnXCIsXG5cdDEwMTA6IFwiTWFuZGF0b3J5IGV4dGVuc2lvblwiLFxuXHQxMDExOiBcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHQxMDE1OiBcIlRMUyBoYW5kc2hha2VcIixcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aGlzIHtXZWJDb25uZWN0fVxuICogQHRocm93cyB7RXJyb3J9IE5vIHVybCBkZWZpbmVkIGZvciB3ZWJzb2NrZXQgZGF0YXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gY29ubmVjdFNlcnZlcihyZXNvbHZlLCByZWplY3QpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0Y29uc3QgdXJsID0gc2VsZi5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdGlmICghdXJsKSB7XG5cdFx0cmVqZWN0KFwiTm8gdXJsIGRlZmluZWQgZm9yIHdlYiBjb25uZWN0LlwiKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRsZXQgcHJvbWlzZUFsbHJlZHlSZXNvbHZlZCA9IGZhbHNlO1xuXG5cdGxldCBjb25uZWN0aW9uVGltZW91dCA9IHNlbGYuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi50aW1lb3V0XCIpO1xuXHRpZiAoIWlzSW50ZWdlcihjb25uZWN0aW9uVGltZW91dCkgfHwgY29ubmVjdGlvblRpbWVvdXQgPCAxMDApIHtcblx0XHRjb25uZWN0aW9uVGltZW91dCA9IDUwMDA7XG5cdH1cblxuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRpZiAocHJvbWlzZUFsbHJlZHlSZXNvbHZlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZWplY3QobmV3IEVycm9yKFwiQ29ubmVjdGlvbiB0aW1lb3V0XCIpKTtcblx0fSwgY29ubmVjdGlvblRpbWVvdXQpO1xuXG5cdGxldCByZWNvbm5lY3RUaW1lb3V0ID0gc2VsZi5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0XCIpO1xuXHRpZiAoIWlzSW50ZWdlcihyZWNvbm5lY3RUaW1lb3V0KSB8fCByZWNvbm5lY3RUaW1lb3V0IDwgMTAwMClcblx0XHRyZWNvbm5lY3RUaW1lb3V0ID0gMTAwMDtcblx0bGV0IHJlY29ubmVjdEF0dGVtcHRzID0gc2VsZi5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC5hdHRlbXB0c1wiKTtcblx0aWYgKCFpc0ludGVnZXIocmVjb25uZWN0QXR0ZW1wdHMpIHx8IHJlY29ubmVjdEF0dGVtcHRzIDwgMSlcblx0XHRyZWNvbm5lY3RBdHRlbXB0cyA9IDE7XG5cdGxldCByZWNvbm5lY3RFbmFibGVkID0gc2VsZi5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC5lbmFibGVkXCIpO1xuXHRpZiAocmVjb25uZWN0RW5hYmxlZCAhPT0gdHJ1ZSkgcmVjb25uZWN0RW5hYmxlZCA9IGZhbHNlO1xuXG5cdHNlbGZbbWFudWFsQ2xvc2VTeW1ib2xdID0gZmFsc2U7XG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlcisrO1xuXG5cdGlmIChcblx0XHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCAmJlxuXHRcdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LnJlYWR5U3RhdGUgPCAyXG5cdCkge1xuXHRcdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LmNsb3NlKCk7XG5cdH1cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQgPSBudWxsO1xuXG5cdGNvbnN0IFdlYlNvY2tldCA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiV2ViU29ja2V0XCIpO1xuXHRpZiAoIVdlYlNvY2tldCkge1xuXHRcdHJlamVjdChuZXcgRXJyb3IoXCJXZWJTb2NrZXQgaXMgbm90IGF2YWlsYWJsZVwiKSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KHVybCk7XG5cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0aWYgKGV2ZW50LmRhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG5cdFx0XHRjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXHRcdFx0cmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkZW5kXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0c2VsZltyZWNlaXZlUXVldWVTeW1ib2xdLmFkZChuZXcgTWVzc2FnZShyZWFkZXIucmVzdWx0KSk7XG5cdFx0XHR9KTtcblx0XHRcdHJlYWRlci5yZWFkQXNUZXh0KG5ldyBNZXNzYWdlKGV2ZW50LmRhdGEpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZltyZWNlaXZlUXVldWVTeW1ib2xdLmFkZChNZXNzYWdlLmZyb21KU09OKGV2ZW50LmRhdGEpKTtcblx0XHR9XG5cdH07XG5cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQub25vcGVuID0gZnVuY3Rpb24gKCkge1xuXHRcdHNlbGZbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlciA9IDA7XG5cdFx0aWYgKHR5cGVvZiByZXNvbHZlID09PSBcImZ1bmN0aW9uXCIgJiYgIXByb21pc2VBbGxyZWR5UmVzb2x2ZWQpIHtcblx0XHRcdHByb21pc2VBbGxyZWR5UmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH1cblx0fTtcblxuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5jbG9zZSA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGlmIChzZWxmW21hbnVhbENsb3NlU3ltYm9sXSkge1xuXHRcdFx0c2VsZlttYW51YWxDbG9zZVN5bWJvbF0gPSBmYWxzZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRyZWNvbm5lY3RFbmFibGVkICYmXG5cdFx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIgPCByZWNvbm5lY3RBdHRlbXB0c1xuXHRcdCkge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHNlbGYuY29ubmVjdCgpO1xuXHRcdFx0fSwgcmVjb25uZWN0VGltZW91dCAqIHRoaXNbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlcik7XG5cdFx0fVxuXHR9O1xuXG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0Lm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcblx0XHRpZiAoXG5cdFx0XHRyZWNvbm5lY3RFbmFibGVkICYmXG5cdFx0XHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIgPCByZWNvbm5lY3RBdHRlbXB0c1xuXHRcdCkge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHNlbGYuY29ubmVjdCgpO1xuXHRcdFx0fSwgcmVjb25uZWN0VGltZW91dCAqIHRoaXNbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0eXBlb2YgcmVqZWN0ID09PSBcImZ1bmN0aW9uXCIgJiYgIXByb21pc2VBbGxyZWR5UmVzb2x2ZWQpIHtcblx0XHRcdFx0cHJvbWlzZUFsbHJlZHlSZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIFRoZSBSZXN0QVBJIGlzIGEgY2xhc3MgdGhhdCBlbmFibGVzIGEgUkVTVCBBUEkgc2VydmVyLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9uZXQvd2ViY29ubmVjdC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIFdlYkNvbm5lY3QgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBvcHRpb25zIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgd2ViY29ubmVjdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9O1xuXHRcdH1cblxuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0dGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdID0gbmV3IE9ic2VydmFibGVRdWV1ZSgpO1xuXHRcdHRoaXNbc2VuZFF1ZXVlU3ltYm9sXSA9IG5ldyBPYnNlcnZhYmxlUXVldWUoKTtcblxuXHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0gPSB7fTtcblx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCA9IG51bGw7XG5cdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyID0gMDtcblx0XHR0aGlzW21hbnVhbENsb3NlU3ltYm9sXSA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25uZWN0U2VydmVyLmNhbGwodGhpcywgcmVzb2x2ZSwgcmVqZWN0KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aXNDb25uZWN0ZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbY29ubmVjdGlvblN5bWJvbF0/LnNvY2tldD8ucmVhZHlTdGF0ZSA9PT0gMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9uZXQvd2ViY29ubmVjdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZCBEZWZpbmVzIHRoZSByZXNvdXJjZSB0aGF0IHlvdSB3aXNoIHRvIGZldGNoLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvbi50aW1lb3V0PTUwMDAgRGVmaW5lcyB0aGUgdGltZW91dCBmb3IgdGhlIGNvbm5lY3Rpb24uXG5cdCAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0IFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgdGhlIHJlY29ubmVjdC5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZWNvbm5lY3RzLlxuXHQgKiBAcHJvcGVydHkge0Jvb2x9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmVuYWJsZWQgSWYgdGhlIHJlY29ubmVjdCBpcyBlbmFibGVkLlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dXJsOiB1bmRlZmluZWQsXG5cdFx0XHRjb25uZWN0aW9uOiB7XG5cdFx0XHRcdHRpbWVvdXQ6IDUwMDAsXG5cdFx0XHRcdHJlY29ubmVjdDoge1xuXHRcdFx0XHRcdHRpbWVvdXQ6IDEwMDAsXG5cdFx0XHRcdFx0YXR0ZW1wdHM6IDEsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNsb3NlcyB0aGUgY29ubmVjdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2RlPTEwMDBdIFRoZSBjbG9zZSBjb2RlLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3JlYXNvbj1cIlwiXSBUaGUgY2xvc2UgcmVhc29uLlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi03LjQuMVxuXHQgKi9cblx0Y2xvc2Uoc3RhdHVzQ29kZSwgcmVhc29uKSB7XG5cdFx0aWYgKCFpc0ludGVnZXIoc3RhdHVzQ29kZSkgfHwgc3RhdHVzQ29kZSA8IDEwMDAgfHwgc3RhdHVzQ29kZSA+IDQ5OTkpIHtcblx0XHRcdHN0YXR1c0NvZGUgPSAxMDAwO1xuXHRcdH1cblx0XHRpZiAoIWlzU3RyaW5nKHJlYXNvbikpIHtcblx0XHRcdHJlYXNvbiA9IFwiXCI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbbWFudWFsQ2xvc2VTeW1ib2xdID0gdHJ1ZTtcblx0XHRcdFx0aWYgKHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0KSB7XG5cdFx0XHRcdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQuY2xvc2Uoc3RhdHVzQ29kZSwgcmVhc29uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQb2xscyB0aGUgcmVjZWl2ZSBxdWV1ZSBmb3IgbmV3IG1lc3NhZ2VzLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNZXNzYWdlfVxuXHQgKi9cblx0cG9sbCgpIHtcblx0XHRyZXR1cm4gdGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLnBvbGwoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcmUgdGhlcmUgYW55IG1lc3NhZ2VzIGluIHRoZSByZWNlaXZlIHF1ZXVlP1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0ZGF0YVJlY2VpdmVkKCkge1xuXHRcdHJldHVybiAhdGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLmlzRW1wdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgTWVzc2FnZSBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlLCBidXQgZG8gbm90IHJlbW92ZSBpdC5cblx0ICpcblx0ICogQHJldHVybiB7T2JqZWN0fVxuXHQgKi9cblx0cGVlaygpIHtcblx0XHRyZXR1cm4gdGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLnBlZWsoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXNbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5jb250YWluc09ic2VydmVyKG9ic2VydmVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge01lc3NhZ2V8T2JqZWN0fSBtZXNzYWdlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRzZW5kKG1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0aWYgKHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LnJlYWR5U3RhdGUgIT09IDEpIHtcblx0XHRcdFx0cmVqZWN0KFwidGhlIHNvY2tldCBpcyBub3QgcmVhZHlcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgUXVldWUgfSBmcm9tIFwiLi9xdWV1ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sLCBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlckxpc3QgfSBmcm9tIFwiLi9vYnNlcnZlcmxpc3QubWpzXCI7XG5cbmV4cG9ydCB7IE9ic2VydmFibGVRdWV1ZSB9O1xuXG4vKipcbiAqIEFuIG9ic2VydmFibGUgcXVldWUgaXMgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgYXJlIHByb2Nlc3NlZCBvbmUgYWZ0ZXIgYW5vdGhlciAoZmlyc3QgaW4sIGZpcnN0IG91dCkuXG4gKlxuICogYFF1ZXVlLmFkZCgpYCBhbmQgYFF1ZXVlLmNsZWFyKClgIG5vdGlmeSBhbGwgb2JzZXJ2ZXJzLlxuICpcbiAqIEBzaW5jZSAzLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEFuIG9ic2VydmFibGUgUXVldWUgKEZpZm8pXG4gKi9cbmNsYXNzIE9ic2VydmFibGVRdWV1ZSBleHRlbmRzIFF1ZXVlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0b2JzZXJ2ZXJzOiBuZXcgT2JzZXJ2ZXJMaXN0KCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9vYnNlcnZhYmxlcXVldWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgbmV3IGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UXVldWV9XG5cdCAqL1xuXHRhZGQodmFsdWUpIHtcblx0XHRzdXBlci5hZGQodmFsdWUpO1xuXHRcdHRoaXMubm90aWZ5T2JzZXJ2ZXJzKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCBlbnRyaWVzXG5cdCAqXG5cdCAqIEByZXR1cm4ge1F1ZXVlfVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0c3VwZXIuY2xlYXIoKTtcblx0XHR0aGlzLm5vdGlmeU9ic2VydmVycygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5vYnNlcnZlcnMuYXR0YWNoKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5vYnNlcnZlcnMuZGV0YWNoKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBOb3RpZnkgYWxsIG9ic2VydmVyXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRub3RpZnlPYnNlcnZlcnMoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLm9ic2VydmVycy5ub3RpZnkodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0ub2JzZXJ2ZXJzLmNvbnRhaW5zKG9ic2VydmVyKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZSB9O1xuXG5jb25zdCBkYXRhU3ltYm9sID0gU3ltYm9sKFwiQEBkYXRhXCIpO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdlYlNvY2tldCBtZXNzYWdlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIE1lc3NhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIGEgV2ViU29ja2V0IG1lc3NhZ2UuXG4gKi9cbmNsYXNzIE1lc3NhZ2UgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihkYXRhKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2RhdGFTeW1ib2xdID0gdmFsaWRhdGVPYmplY3QoZGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcmF3IG1lc3NhZ2UuXG5cdCAqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICovXG5cdGdldERhdGEoKSB7XG5cdFx0cmV0dXJuIHRoaXNbZGF0YVN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHRvSlNPTigpIHtcblx0XHRyZXR1cm4gdGhpc1tkYXRhU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ganNvblxuXHQgKiBAcmV0dXJuIHtNZXNzYWdlfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c3RhdGljIGZyb21KU09OKGpzb24pIHtcblx0XHR2YWxpZGF0ZVN0cmluZyhqc29uKTtcblx0XHRyZXR1cm4gbmV3IE1lc3NhZ2UoSlNPTi5wYXJzZShqc29uKSk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtXZWJDb25uZWN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL25ldC93ZWJjb25uZWN0Lm1qc1wiO1xuaW1wb3J0IHtNZXNzYWdlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL25ldC93ZWJjb25uZWN0L21lc3NhZ2UubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtpbml0V2ViU29ja2V0fSBmcm9tIFwiLi4vLi4vdXRpbC93ZWJzb2NrZXQubWpzXCI7XG5cbmNvbnN0IHRlc3RVcmwgPSBcIndzczovL3dzLnBvc3RtYW4tZWNoby5jb20vcmF3XCJcblxuZGVzY3JpYmUoJ1dlYnNvY2tldCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBkcyA9IHVuZGVmaW5lZFxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRXZWJTb2NrZXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGlmIChkcykge1xuICAgICAgICAgICAgZHMuY2xvc2UoKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2l0aG91dCB0aGlzLCB0aGUgbm9kZSB0ZXN0IHdpbGwgaGFuZyBcbiAgICAgICAgZm9yIChjb25zdCBzeW0gb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhkcykpIHtcbiAgICAgICAgICAgIGlmIChzeW0udG9TdHJpbmcoKSA9PT0gJ1N5bWJvbChjb25uZWN0aW9uKScpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRzW3N5bV0/LnNvY2tldD8udGVybWluYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGRzW3N5bV0/LnNvY2tldD8uWyd0ZXJtaW5hdGUnXSgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZG9uZSgpXG4gICAgfSk7XG5cblxuICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtIGRhdGEnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3QoIHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgfSlcblxuICAgICAgICBkcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGRzLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcigoKT0+IHtcbiAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGRzLnNlbmQoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJIZWxsbyBXb3JsZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBjb25uZWN0JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgICAgICByZWNvbm5lY3Q6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIHNlbmQgbWVzc2FnZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3Qoe1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICAgICAgcmVjb25uZWN0OiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgZHMuYXR0YWNoT2JzZXJ2ZXIobmV3IE9ic2VydmVyKCgpPT4ge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGV4cGVjdChkcy5kYXRhUmVjZWl2ZWQoKSkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGRzLnBvbGwoKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QobXNnKS50by5iZS5pbnN0YW5jZU9mKE1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBtc2cuZ2V0RGF0YSgpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkYXRhKS50by5iZS5kZWVwLmVxdWFsKHttZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJ9KVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgZHMuc2VuZCh7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIlxuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KS50aW1lb3V0KDEwMDAwKTtcblxufSk7XG4iLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5mdW5jdGlvbiBpbml0V2ViU29ja2V0KCkge1xuXG4vLyAgICBjb25zdCBpc0Jyb3dzZXIgPSB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyAmJiAnW29iamVjdCBXaW5kb3ddJyA9PT0gd2luZG93LnRvU3RyaW5nLmNhbGwod2luZG93KVxuICAgIGNvbnN0IGlzTm9kZSA9IHR5cGVvZiBnbG9iYWwgPT09ICdvYmplY3QnICYmICdbb2JqZWN0IGdsb2JhbF0nID09PSBnbG9iYWwudG9TdHJpbmcuY2FsbChnbG9iYWwpXG5cblxuICAgIGlmICghaXNOb2RlKSB7XG4gICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGltcG9ydChcIndzXCIpLnRoZW4oKHdzKSA9PiB7XG4gICAgICAgIGdldEdsb2JhbCgpLldlYlNvY2tldCA9IGNsYXNzIGV4dGVuZHMgd3NbJ1dlYlNvY2tldCddIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHVybCwgcHJvdG9jb2xzKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIodXJsLCBwcm90b2NvbHMsIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZHNoYWtlVGltZW91dDogMTAwMCxcbiAgICAgICAgICAgICAgICAgICAgbWF4UGF5bG9hZDogMTAyNCAqIDEwMjQgKiAxMDI0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICB9KTtcblxuXG59XG5cbmV4cG9ydCB7aW5pdFdlYlNvY2tldH0iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TWVzc2FnZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qc1wiO1xuXG5kZXNjcmliZSgnTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGl0KCdjb25zdHJ1Y3Qgd2l0aG91dGggcGFyYW1ldGVycyBzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBNZXNzYWdlKCk7XG4gICAgICAgICAgICBkb25lKG5ldyBFcnJvcignc2hvdWxkIHRocm93JykpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH1cblxuICAgIH0pXG4gICAgXG4gICAgaXQoJ2Zyb20ganNvbiBzaG91bGQgJyAsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBcImlkXCI6IFwiMTIzXCIsXG4gICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXN0XCIsXG4gICAgICAgICAgICBcImRhdGFcIjoge1xuICAgICAgICAgICAgICAgIFwidGVzdFwiOiBcInRlc3RcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBNZXNzYWdlLmZyb21KU09OKEpTT04uc3RyaW5naWZ5KGpzb24pKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1lc3NhZ2UuZ2V0RGF0YSgpO1xuICAgICAgICBleHBlY3QoZGF0YS5pZCkudG8uZXF1YWwoanNvbi5pZCk7XG4gICAgICAgIGV4cGVjdChkYXRhLnR5cGUpLnRvLmVxdWFsKGpzb24udHlwZSk7XG4gICAgICAgIGV4cGVjdChkYXRhLmRhdGEpLnRvLmRlZXAuZXF1YWwoanNvbi5kYXRhKTtcbiAgICAgICAgZG9uZSgpO1xuICAgIH0pXG4gICAgXG4gICAgaXQgKFwidG8ganNvbiBzaG91bGRcIiwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgXCJpZFwiOiBcIjEyM1wiLFxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGVzdFwiLFxuICAgICAgICAgICAgXCJkYXRhXCI6IHtcbiAgICAgICAgICAgICAgICBcInRlc3RcIjogXCJ0ZXN0XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gbmV3IE1lc3NhZ2Uob2JqKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpO1xuICAgICAgICBleHBlY3QoZGF0YSkudG8uZXF1YWwoJ3tcImlkXCI6XCIxMjNcIixcInR5cGVcIjpcInRlc3RcIixcImRhdGFcIjp7XCJ0ZXN0XCI6XCJ0ZXN0XCJ9fScpO1xuICAgICAgICBkb25lKCk7XG4gICAgfSlcblxuXG5cbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBWZXJzaW9uLCBnZXRNb25zdGVyVmVyc2lvbiB9O1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9iamVjdCBjb250YWlucyBhIHNlbWFudGljIHZlcnNpb24gbnVtYmVyXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3ZlcnNpb24tMS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAYXV0aG9yIHNjaHVrYWkgR21iSFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSB2ZXJzaW9uIG9iamVjdCBjb250YWlucyBhIHNlbWFudGljIHZlcnNpb24gbnVtYmVyXG4gKi9cbmNsYXNzIFZlcnNpb24gZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBtYWpvclxuXHQgKiBAcGFyYW0gbWlub3Jcblx0ICogQHBhcmFtIHBhdGNoXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtYWpvciBpcyBub3QgYSBudW1iZXJcblx0ICogQHRocm93cyB7RXJyb3J9IG1pbm9yIGlzIG5vdCBhIG51bWJlclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gcGF0Y2ggaXMgbm90IGEgbnVtYmVyXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihtYWpvciwgbWlub3IsIHBhdGNoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChcblx0XHRcdHR5cGVvZiBtYWpvciA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0bWlub3IgPT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0cGF0Y2ggPT09IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgcGFydHMgPSBtYWpvci50b1N0cmluZygpLnNwbGl0KFwiLlwiKTtcblx0XHRcdG1ham9yID0gcGFyc2VJbnQocGFydHNbMF0gfHwgMCk7XG5cdFx0XHRtaW5vciA9IHBhcnNlSW50KHBhcnRzWzFdIHx8IDApO1xuXHRcdFx0cGF0Y2ggPSBwYXJzZUludChwYXJ0c1syXSB8fCAwKTtcblx0XHR9XG5cblx0XHRpZiAobWFqb3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWFqb3IgdmVyc2lvbiBpcyB1bmRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0aWYgKG1pbm9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG1pbm9yID0gMDtcblx0XHR9XG5cblx0XHRpZiAocGF0Y2ggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGF0Y2ggPSAwO1xuXHRcdH1cblxuXHRcdHRoaXMubWFqb3IgPSBwYXJzZUludChtYWpvcik7XG5cdFx0dGhpcy5taW5vciA9IHBhcnNlSW50KG1pbm9yKTtcblx0XHR0aGlzLnBhdGNoID0gcGFyc2VJbnQocGF0Y2gpO1xuXG5cdFx0aWYgKGlzTmFOKHRoaXMubWFqb3IpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYWpvciBpcyBub3QgYSBudW1iZXJcIik7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTmFOKHRoaXMubWlub3IpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaW5vciBpcyBub3QgYSBudW1iZXJcIik7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTmFOKHRoaXMucGF0Y2gpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJwYXRjaCBpcyBub3QgYSBudW1iZXJcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy92ZXJzaW9uXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiBgJHt0aGlzLm1ham9yfS4ke3RoaXMubWlub3J9LiR7dGhpcy5wYXRjaH1gO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJldHVybnMgMCBpZiBlcXVhbCwgLTEgaWYgdGhlIG9iamVjdCB2ZXJzaW9uIGlzIGxlc3MgYW5kIDEgaWYgZ3JlYXRlclxuXHQgKiB0aGFuIHRoZSBjb21wYXJlZCB2ZXJzaW9uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFZlcnNpb259IHZlcnNpb24gVmVyc2lvbiB0byBjb21wYXJlXG5cdCAqIEByZXR1cm4ge251bWJlcn1cblx0ICovXG5cdGNvbXBhcmVUbyh2ZXJzaW9uKSB7XG5cdFx0aWYgKHZlcnNpb24gaW5zdGFuY2VvZiBWZXJzaW9uKSB7XG5cdFx0XHR2ZXJzaW9uID0gdmVyc2lvbi50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgdmVyc2lvbiAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBleGNlcHRpb25cIik7XG5cdFx0fVxuXG5cdFx0aWYgKHZlcnNpb24gPT09IHRoaXMudG9TdHJpbmcoKSkge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYSA9IFt0aGlzLm1ham9yLCB0aGlzLm1pbm9yLCB0aGlzLnBhdGNoXTtcblx0XHRjb25zdCBiID0gdmVyc2lvbi5zcGxpdChcIi5cIik7XG5cdFx0Y29uc3QgbGVuID0gTWF0aC5tYXgoYS5sZW5ndGgsIGIubGVuZ3RoKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDEpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0KGFbaV0gJiYgIWJbaV0gJiYgcGFyc2VJbnQoYVtpXSkgPiAwKSB8fFxuXHRcdFx0XHRwYXJzZUludChhW2ldKSA+IHBhcnNlSW50KGJbaV0pXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHQoYltpXSAmJiAhYVtpXSAmJiBwYXJzZUludChiW2ldKSA+IDApIHx8XG5cdFx0XHRcdHBhcnNlSW50KGFbaV0pIDwgcGFyc2VJbnQoYltpXSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDA7XG5cdH1cbn1cblxubGV0IG1vbnN0ZXJWZXJzaW9uO1xuXG4vKipcbiAqIFZlcnNpb24gb2YgbW9uc3RlclxuICpcbiAqIEByZXR1cm4ge1ZlcnNpb259XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBhdXRob3Igc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGdldE1vbnN0ZXJWZXJzaW9uKCkge1xuXHRpZiAobW9uc3RlclZlcnNpb24gaW5zdGFuY2VvZiBWZXJzaW9uKSB7XG5cdFx0cmV0dXJuIG1vbnN0ZXJWZXJzaW9uO1xuXHR9XG5cblx0LyoqIGRvbid0IHRvdWNoLCByZXBsYWNlZCBieSBtYWtlIHdpdGggcGFja2FnZS5qc29uIHZlcnNpb24gKi9cblx0bW9uc3RlclZlcnNpb24gPSBuZXcgVmVyc2lvbihcIjMuODguMFwiKTtcblxuXHRyZXR1cm4gbW9uc3RlclZlcnNpb247XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VmVyc2lvbiwgZ2V0TW9uc3RlclZlcnNpb259IGZyb20gXCIuLi8uLi9zb3VyY2UvdHlwZXMvdmVyc2lvbi5tanNcIjtcblxuZGVzY3JpYmUoJ01vbnN0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmdldE1vbnN0ZXJWZXJzaW9uKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBtb25zdGVyVmVyc2lvblxuXG4gICAgICAgIC8qKiBkb25cdTAwQjR0IHRvdWNoLCByZXBsYWNlZCBieSBtYWtlIHdpdGggcGFja2FnZS5qc29uIHZlcnNpb24gKi9cbiAgICAgICAgbW9uc3RlclZlcnNpb24gPSBuZXcgVmVyc2lvbihcIjMuODguMFwiKVxuXG4gICAgICAgIGxldCBtID0gZ2V0TW9uc3RlclZlcnNpb24oKTtcblxuICAgICAgICBpdCgnc2hvdWxkICcgKyBtb25zdGVyVmVyc2lvbiArICcgaXMgJyArIG0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChtLmNvbXBhcmVUbyhtb25zdGVyVmVyc2lvbikpLmlzLmVxdWFsKDApO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGNvbnZlcnRUb1BpeGVscywgZ2V0RGV2aWNlRFBJIH07XG5cbi8qKlxuICogU3RvcmVzIHRoZSBEUEkgb2YgdGhlIGRldmljZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICogQHNpbmNlIDMuMzQuMFxuICogQHR5cGUge251bWJlcnxmdW5jdGlvbn1cbiAqL1xubGV0IENVUlJFTlRfREVWSUNFX0RQSSA9IGZ1bmN0aW9uICgpIHtcblx0bGV0IGkgPSAwO1xuXHRmb3IgKGkgPSA1NjsgaSA8IDIwMDA7IGkrKykge1xuXHRcdGlmIChnZXRXaW5kb3coKS5tYXRjaE1lZGlhKGAobWF4LXJlc29sdXRpb246ICR7aX1kcGkpYCkubWF0Y2hlcyA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIGk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBEUEkgb2YgdGhlIGRldmljZS5cbiAqXG4gKiBAc2luY2UgMy4zNC4wXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldERldmljZURQSSgpIHtcblx0Ly8gb25seSBjYWxsIHRoZSBmdW5jdGlvbiBvbmNlXG5cdGlmICh0eXBlb2YgQ1VSUkVOVF9ERVZJQ0VfRFBJID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRDVVJSRU5UX0RFVklDRV9EUEkgPSBDVVJSRU5UX0RFVklDRV9EUEkoKTtcblx0fVxuXG5cdHJldHVybiBnZXRXaW5kb3coKS5kZXZpY2VQaXhlbFJhdGlvICogQ1VSUkVOVF9ERVZJQ0VfRFBJO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgQ1NTIHZhbHVlIHRvIHBpeGVscy5cbiAqXG4gKiBBcyBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiBjb252ZXJ0VG9QaXhlbHMoJzFlbScpIC8vIHJldHVybnMgdGhlIGN1cnJlbnQgZm9udCBzaXplIGluIHBpeGVsc1xuICogY29udmVydFRvUGl4ZWxzKCcxcmVtJykgLy8gcmV0dXJucyB0aGUgY3VycmVudCByb290IGZvbnQgc2l6ZSBpbiBwaXhlbHNcbiAqIGNvbnZlcnRUb1BpeGVscygnMXB4JykgLy8gcmV0dXJucyAxXG4gKiBjb252ZXJ0VG9QaXhlbHMoJzEwMCUnKSAvLyByZXR1cm5zIHRoZSBjdXJyZW50IHdpZHRoIG9mIHRoZSBwYXJlbnQgZWxlbWVudCBpbiBwaXhlbHNcbiAqIGBgYFxuICpcbiAqIEZvbGxvd2luZyB1bml0cyBhcmUgc3VwcG9ydGVkOlxuICogLSBweFxuICogLSBlbVxuICogLSByZW1cbiAqIC0gJVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW3BhcmVudEVsZW1lbnQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW2ZvbnRTaXplRWxlbWVudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjM0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gVW5zdXBwb3J0ZWQgdW5pdFxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgdmFsdWUgZm9ybWF0XG4gKi9cblxuZnVuY3Rpb24gY29udmVydFRvUGl4ZWxzKFxuXHR2YWx1ZSxcblx0cGFyZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0Zm9udFNpemVFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuKSB7XG5cdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblxuXHRjb25zdCByZWdleCA9IC9eKC0/W1xcZC5dKykoLiopJC87XG5cdGNvbnN0IG1hdGNoUmVzdWx0ID0gdmFsdWUubWF0Y2gocmVnZXgpO1xuXG5cdGlmICghbWF0Y2hSZXN1bHQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgZm9ybWF0OiAke3ZhbHVlfWApO1xuXHR9XG5cblx0Y29uc3QgWywgbnVtLCB1bml0XSA9IG1hdGNoUmVzdWx0O1xuXHRjb25zdCBudW1iZXIgPSBwYXJzZUZsb2F0KG51bSk7XG5cdGNvbnN0IGRwaSA9IGdldERldmljZURQSSgpO1xuXG5cdGlmICh1bml0ID09PSBcInB4XCIpIHtcblx0XHRyZXR1cm4gbnVtYmVyO1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwiZW1cIikge1xuXHRcdGNvbnN0IGZvbnRTaXplID0gcGFyc2VGbG9hdChcblx0XHRcdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGZvbnRTaXplRWxlbWVudCkuZm9udFNpemUsXG5cdFx0KTtcblx0XHRyZXR1cm4gbnVtYmVyICogZm9udFNpemU7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJyZW1cIikge1xuXHRcdGNvbnN0IHJvb3RGb250U2l6ZSA9IHBhcnNlRmxvYXQoXG5cdFx0XHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnRFbGVtZW50KS5mb250U2l6ZSxcblx0XHQpO1xuXHRcdHJldHVybiBudW1iZXIgKiByb290Rm9udFNpemU7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCIlXCIpIHtcblx0XHRjb25zdCBwYXJlbnRXaWR0aCA9IHBhcnNlRmxvYXQoXG5cdFx0XHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnRFbGVtZW50KS53aWR0aCxcblx0XHQpO1xuXHRcdHJldHVybiAobnVtYmVyICogcGFyZW50V2lkdGgpIC8gMTAwO1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwiaW5cIikge1xuXHRcdHJldHVybiBudW1iZXIgKiBkcGk7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJjbVwiKSB7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBkcGkpIC8gMi41NDtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcIm1tXCIpIHtcblx0XHRyZXR1cm4gKG51bWJlciAqIGRwaSkgLyAyNS40O1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwicHRcIikge1xuXHRcdHJldHVybiAobnVtYmVyICogZHBpKSAvIDcyO1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwicGNcIikge1xuXHRcdHJldHVybiAobnVtYmVyICogZHBpKSAvIDY7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB1bml0OiAke3VuaXR9YCk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NvbnZlcnRUb1BpeGVscywgZ2V0RGV2aWNlRFBJfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9kaW1lbnNpb24ubWpzXCI7XG5pbXBvcnQge2dldFdpbmRvd30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NLCBpc0Jyb3dzZXIsIEpTRE9NRXhwb3J0IGFzIEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7ZGV0ZWN0UnVudGltZUVudmlyb25tZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvcnVudGltZS5tanNcIjtcblxuXG5mdW5jdGlvbiBnZXRNb2NrV2luZG93KGRwaSkge1xuXG4gICAgaWYoZGV0ZWN0UnVudGltZUVudmlyb25tZW50KCkgPT09ICdicm93c2VyJykge1xuICAgICAgICByZXR1cm4gZ2V0V2luZG93KCk7XG4gICAgfVxuICAgIFxuICAgIFxuICAgIGNvbnN0IGRvbSA9IG5ldyBKU0RPTSgnJywge1xuICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZSxcbiAgICAgICAgcmVzb3VyY2VzOiAndXNhYmxlJyxcbiAgICB9KTtcblxuICAgIGRvbS53aW5kb3cubWF0Y2hNZWRpYSA9IChxdWVyeSkgPT4ge1xuICAgICAgICBjb25zdCBkcGlSZWdleCA9IC9cXChtYXgtcmVzb2x1dGlvbjogKFxcZCspZHBpXFwpLztcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBxdWVyeS5tYXRjaChkcGlSZWdleCk7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhEcGkgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICAgICAgICAgICAgcmV0dXJuIHttYXRjaGVzOiBkcGkgPD0gbWF4RHBpfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7bWF0Y2hlczogZmFsc2V9O1xuICAgIH07XG5cbiAgICByZXR1cm4gZG9tLndpbmRvdztcbn1cblxuZGVzY3JpYmUoJ2RpbWVuc2lvbicsICgpID0+IHtcbiAgICBsZXQgY3VycmVudEVudmlyb25tZW50O1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy9jaGFpRG9tKGdldERvY3VtZW50KCkpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgY29uc3QgdGVzdERwaSA9IDk2O1xuICAgICAgICBjb25zdCB0ZXN0V2luZG93ID0gZ2V0TW9ja1dpbmRvdyh0ZXN0RHBpKTtcbiAgICAgICAgZ2V0R2xvYmFsKCkud2luZG93ID0gdGVzdFdpbmRvdztcblxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZGVsZXRlIGdldEdsb2JhbCgpLndpbmRvdztcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjb252ZXJ0VG9QaXhlbHMnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGNvbnZlcnQgcHggdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvUGl4ZWxzKCcxMDBweCcpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoMTAwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiB0aGUgaW5wdXQgdmFsdWUgaGFzIGFuIGludmFsaWQgZm9ybWF0XCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGludmFsaWRWYWx1ZSA9IFwiaW52YWxpZF92YWx1ZVwiO1xuXG4gICAgICAgICAgICBjb25zdCBlcnJvckZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnZlcnRUb1BpeGVscyhpbnZhbGlkVmFsdWUpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZXhwZWN0KGVycm9yRm4pLnRvLnRocm93KEVycm9yLCBgSW52YWxpZCB2YWx1ZSBmb3JtYXQ6ICR7aW52YWxpZFZhbHVlfWApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcInNob3VsZCBoYW5kbGUgbmVnYXRpdmUgdmFsdWVzIGNvcnJlY3RseVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZWdhdGl2ZVZhbHVlID0gXCItMTBweFwiO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSAtMTA7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1BpeGVscyhuZWdhdGl2ZVZhbHVlKTtcblxuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBjb252ZXJ0IGVtIHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXN0RWxlbWVudC5zdHlsZS5mb250U2l6ZSA9ICcxNnB4JztcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9QaXhlbHMoJzJlbScsIHRlc3RFbGVtZW50LCB0ZXN0RWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgzMik7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGVzdEVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBjb252ZXJ0IHJlbSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGVzdEVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSAnMTZweCc7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGVzdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9QaXhlbHMoJzJyZW0nLCB0ZXN0RWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgzMik7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0ZXN0RWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGNvbnZlcnQgcGVyY2VudGFnZSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGVzdEVsZW1lbnQuc3R5bGUud2lkdGggPSAnNTAwcHgnO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXN0RWxlbWVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1BpeGVscygnNTAlJywgdGVzdEVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoMjUwKTtcblxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXN0RWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIHVuc3VwcG9ydGVkIHVuaXRzJywgKCkgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGNvbnZlcnRUb1BpeGVscygnMTB1bnN1cHBvcnRlZFVuaXQnKSkudG8udGhyb3coJ1Vuc3VwcG9ydGVkIHVuaXQ6IHVuc3VwcG9ydGVkVW5pdCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2dldERldmljZURQSScsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgZGV2aWNlIERQSScsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3REcGkgPSA5NjtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RXaW5kb3cgPSBnZXRNb2NrV2luZG93KHRlc3REcGkpO1xuICAgICAgICAgICAgZ2V0R2xvYmFsKCkud2luZG93ID0gdGVzdFdpbmRvdztcblxuICAgICAgICAgICAgY29uc3QgZGV2aWNlRHBpID0gZ2V0RGV2aWNlRFBJKCk7XG4gICAgICAgICAgICBleHBlY3QoZGV2aWNlRHBpKS50by5lcXVhbCh0ZXN0RHBpICogdGVzdFdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKTtcblxuICAgICAgICAgICAgZGVsZXRlIGdldEdsb2JhbCgpLndpbmRvdztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjYWNoZSB0aGUgcmVzdWx0IGFuZCByZXR1cm4gdGhlIHNhbWUgdmFsdWUnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RHBpID0gOTY7XG4gICAgICAgICAgICBjb25zdCB0ZXN0V2luZG93ID0gZ2V0TW9ja1dpbmRvdyh0ZXN0RHBpKTtcbiAgICAgICAgICAgIGdldEdsb2JhbCgpLndpbmRvdyA9IHRlc3RXaW5kb3c7XG5cbiAgICAgICAgICAgIGNvbnN0IGRldmljZURwaTEgPSBnZXREZXZpY2VEUEkoKTtcbiAgICAgICAgICAgIGNvbnN0IGRldmljZURwaTIgPSBnZXREZXZpY2VEUEkoKTtcbiAgICAgICAgICAgIGV4cGVjdChkZXZpY2VEcGkxKS50by5lcXVhbChkZXZpY2VEcGkyKTtcblxuICAgICAgICAgICAgZGVsZXRlIGdldEdsb2JhbCgpLndpbmRvdztcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5jb25zdCBFTlZfQVdTX0xBTUJEQSA9IFwiYXdzLWxhbWJkYVwiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfR09PR0xFX0ZVTkNUSU9OUyA9IFwiZ29vZ2xlLWZ1bmN0aW9uc1wiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfRUxFQ1RST04gPSBcImVsZWN0cm9uXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9OT0RFID0gXCJub2RlXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9CUk9XU0VSID0gXCJicm93c2VyXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9XRUJfV09SS0VSID0gXCJ3ZWItd29ya2VyXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9ERU5PID0gXCJkZW5vXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9VTktOT1dOID0gXCJ1bmtub3duXCI7XG5cbi8qKlxuICogRGV0ZWN0cyBhbmQgcmV0dXJucyB0aGUgY3VycmVudCBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIC0gJ2F3cy1sYW1iZGEnOiBBV1MgTGFtYmRhIGVudmlyb25tZW50XG4gKiAtICdnb29nbGUtZnVuY3Rpb25zJzogR29vZ2xlIENsb3VkIEZ1bmN0aW9ucyBlbnZpcm9ubWVudFxuICogLSAnZWxlY3Ryb24nOiBFbGVjdHJvbiBlbnZpcm9ubWVudFxuICogLSAnbm9kZSc6IE5vZGUuanMgZW52aXJvbm1lbnRcbiAqIC0gJ2Jyb3dzZXInOiBCcm93c2VyIGVudmlyb25tZW50XG4gKiAtICd3ZWItd29ya2VyJzogV2ViIFdvcmtlciBlbnZpcm9ubWVudFxuICogLSAnZGVubyc6IERlbm8gZW52aXJvbm1lbnRcbiAqIC0gJ3JlYWN0LW5hdGl2ZSc6IFJlYWN0IE5hdGl2ZSBlbnZpcm9ubWVudFxuICogLSAndW5rbm93bic6IFVua25vd24gZW52aXJvbm1lbnRcbiAqXG4gKiBAc2luY2UgMy4zNC4wXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBkZXRlY3RlZCBydW50aW1lIGVudmlyb25tZW50LiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuICovXG5mdW5jdGlvbiBkZXRlY3RSdW50aW1lRW52aXJvbm1lbnQoKSB7XG5cdC8vIEFXUyBMYW1iZGEgZW52aXJvbm1lbnRcblx0aWYgKFxuXHRcdHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0cHJvY2Vzcy5lbnYgIT0gbnVsbCAmJlxuXHRcdHByb2Nlc3MuZW52LkFXU19MQU1CREFfRlVOQ1RJT05fTkFNRVxuXHQpIHtcblx0XHRyZXR1cm4gRU5WX0FXU19MQU1CREE7XG5cdH1cblxuXHQvLyBHb29nbGUgQ2xvdWQgRnVuY3Rpb25zIGVudmlyb25tZW50XG5cdGlmIChcblx0XHR0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdHByb2Nlc3MuZW52ICE9IG51bGwgJiZcblx0XHRwcm9jZXNzLmVudi5GVU5DVElPTl9OQU1FXG5cdCkge1xuXHRcdHJldHVybiBFTlZfR09PR0xFX0ZVTkNUSU9OUztcblx0fVxuXG5cdC8vIE5vZGUuanMgZW52aXJvbm1lbnRcblx0aWYgKFxuXHRcdHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0cHJvY2Vzcy52ZXJzaW9ucyAhPSBudWxsICYmXG5cdFx0cHJvY2Vzcy52ZXJzaW9ucy5ub2RlICE9IG51bGxcblx0KSB7XG5cdFx0Ly8gRWxlY3Ryb24gZW52aXJvbm1lbnRcblx0XHRpZiAocHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbiAhPSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gRU5WX0VMRUNUUk9OO1xuXHRcdH1cblx0XHRyZXR1cm4gRU5WX05PREU7XG5cdH1cblxuXHQvLyBCcm93c2VyIGVudmlyb25tZW50XG5cdGlmIChcblx0XHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0dHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHR0eXBlb2YgbmF2aWdhdG9yLnVzZXJBZ2VudCA9PT0gXCJzdHJpbmdcIlxuXHQpIHtcblx0XHQvLyBXZWIgV29ya2VyIGVudmlyb25tZW50XG5cdFx0aWYgKHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJldHVybiBFTlZfV0VCX1dPUktFUjtcblx0XHR9XG5cdFx0cmV0dXJuIEVOVl9CUk9XU0VSO1xuXHR9XG5cblx0Ly8gRGVubyBlbnZpcm9ubWVudFxuXHRpZiAodHlwZW9mIERlbm8gIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRyZXR1cm4gRU5WX0RFTk87XG5cdH1cblxuXHQvLyBVbmtub3duIGVudmlyb25tZW50XG5cdHJldHVybiBFTlZfVU5LTk9XTjtcbn1cblxuZXhwb3J0IHtcblx0RU5WX0FXU19MQU1CREEsXG5cdEVOVl9HT09HTEVfRlVOQ1RJT05TLFxuXHRFTlZfRUxFQ1RST04sXG5cdEVOVl9OT0RFLFxuXHRFTlZfQlJPV1NFUixcblx0RU5WX1dFQl9XT1JLRVIsXG5cdEVOVl9ERU5PLFxuXHRFTlZfVU5LTk9XTixcblx0ZGV0ZWN0UnVudGltZUVudmlyb25tZW50LFxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge1N0eWxlc2hlZXR9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldC5tanNcIjtcbmltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG5cbmA7XG5cblxuZGVzY3JpYmUoJ1N0eWxlc2hlZXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKHtcbiAgICAgICAgICAgIHJ1blNjcmlwdHM6IFwiZGFuZ2Vyb3VzbHlcIixcbiAgICAgICAgICAgIHJlc291cmNlczogXCJ1c2FibGVcIlxuICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpXG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnU3R5bGVzaGVldCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnY29ubmVjdCgpLmF2YWlsYWJsZSgpJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3Qgc3R5bGVzaGVldCA9IG5ldyBTdHlsZXNoZWV0KHtcbiAgICAgICAgICAgICAgICBocmVmOiBuZXcgRGF0YVVybCgnJywgJ3RleHQvY3NzJykudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzdHlsZXNoZWV0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHN0eWxlc2hlZXQuZ2V0T3B0aW9uKCdpZCcpXG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnRXh0ZXJuYWwgU3R5bGVzaGVldCcsICgpID0+IHtcblxuICAgICAgICBsZXQgaWQgPSBuZXcgSUQoJ1N0eWxlc2hlZXQnKS50b1N0cmluZygpO1xuICAgICAgICBsZXQgc3R5bGVzaGVldCwgdXJsID0gJ2h0dHBzOi8vYWx2aW5lLmlvL21haW4ubWluLmNzcyc7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIHN0eWxlc2hlZXQgPSBuZXcgU3R5bGVzaGVldCh7XG4gICAgICAgICAgICAgICAgaHJlZjogdXJsLFxuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhcHBlbmQgYW5kIHJlbW92ZSBTdHlsZXNoZWV0ICcsIChkb25lKSA9PiB7XG5cbiAgICAgICAgICAgIGV4cGVjdChzdHlsZXNoZWV0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICBzdHlsZXNoZWV0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3R5bGVzaGVldC5pc0Nvbm5lY3RlZCgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdHlsZXNoZWV0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc3R5bGVzaGVldC5pc0Nvbm5lY3RlZCgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHN0eWxlc2hlZXQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cblxubGV0IGFkZGVkTm9kZXMsIG11dGF0aW9ub2JzZXJ2ZXI7XG5cbmZ1bmN0aW9uIGluaXQoKSB7XG5cbiAgICBhZGRlZE5vZGVzID0gW107XG4gICAgbXV0YXRpb25vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcbiAgICAgICAgbXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2NoaWxkTGlzdCcgJiYgbXV0YXRpb24ucmVtb3ZlZE5vZGVzKSB7XG5cbiAgICAgICAgICAgICAgICBtdXRhdGlvbi5hZGRlZE5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWROb2Rlcy5wdXNoKG4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpIHtcblxuICAgIGlmIChtdXRhdGlvbm9ic2VydmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaW5pdCgpXG4gICAgfVxuXG4gICAgbXV0YXRpb25vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKSwge2NoaWxkTGlzdDogdHJ1ZX0pO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKSB7XG4gICAgbXV0YXRpb25vYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cbiAgICBmb3IgKGNvbnN0IG4gb2YgYWRkZWROb2Rlcykge1xuICAgICAgICBuLnJlbW92ZSgpO1xuICAgIH1cbn0iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtMaW5rfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9saW5rLm1qc1wiO1xuaW1wb3J0IHtEYXRhVXJsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5pbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcblxuY2hhaS51c2UoY2hhaURvbSk7XG5cblxuXG5kZXNjcmliZSgnTGluaycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0xpbmsoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0KDUwMDApO1xuXG4gICAgICAgIGl0KCdjb25uZWN0KCkuYXZhaWxhYmxlKCknLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBsaW5rID0gbmV3IExpbmsoe1xuICAgICAgICAgICAgICAgIGhyZWY6IG5ldyBEYXRhVXJsKCcnLCAndGV4dC9jc3MnKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHJlbDogJ3N0eWxlc2hlZXQnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGluay5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnRXh0ZXJuYWwgTGluaycsICgpID0+IHtcbiAgICAgICAgdGhpcy50aW1lb3V0KDUwMDApO1xuXG4gICAgICAgIGxldCBpZCA9IG5ldyBJRCgnbGluaycpLnRvU3RyaW5nKCk7XG4gICAgICAgIGxldCBsaW5rLCB1cmwgPSAnaHR0cHM6Ly9hbHZpbmUuaW8vbWFpbi5taW4uY3NzJztcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgbGluayA9IG5ldyBMaW5rKHtcbiAgICAgICAgICAgICAgICBocmVmOiB1cmwsXG4gICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgIHJlbDogJ3N0eWxlc2hlZXQnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYXBwZW5kIGFuZCByZW1vdmUgTGluayAnLCAoZG9uZSkgPT4ge1xuXG4gICAgICAgICAgICBleHBlY3QobGluay5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgbGluay5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxpbmsuaXNDb25uZWN0ZWQoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobGluay5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBsaW5rLmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGxpbmsuaXNDb25uZWN0ZWQoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChsaW5rLmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtTY3JpcHR9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL3NjcmlwdC5tanNcIjtcbmltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG5cbmA7XG5cblxuZGVzY3JpYmUoJ1NjcmlwdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1NjcmlwdCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2V0RXZlbnRUeXBlcygpJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0gbmV3IFNjcmlwdCh7XG4gICAgICAgICAgICAgICAgc3JjOiBuZXcgRGF0YVVybCgnJywgJ3RleHQvamF2YXNjcmlwdCcpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxuICAgICAgICAgICAgICAgIGRlZmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBub21vZHVsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbm9uY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByZWZlcnJlcnBvbGljeTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2NyaXB0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gc2NyaXB0LmdldE9wdGlvbignaWQnKVxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0V4dGVybmFsIEpTJywgKCkgPT4ge1xuXG4gICAgICAgIGxldCBpZCA9IG5ldyBJRCgnc2NyaXB0JykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHNlcnZlciwgc2NyaXB0LCB1cmwgPSAnaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGF5enIuanMvMi4yLjIvbGF5enIubWluLmpzJztcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgc2NyaXB0ID0gbmV3IFNjcmlwdCh7XG4gICAgICAgICAgICAgICAgc3JjOiB1cmwsXG4gICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxuICAgICAgICAgICAgICAgIGRlZmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBub21vZHVsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbm9uY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByZWZlcnJlcnBvbGljeTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnLFxuICAgICAgICAgICAgICAgIGlkOiBpZFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2FwcGVuZCBhbmQgcmVtb3ZlIHNjcmlwdCAnLCAoZG9uZSkgPT4ge1xuXG4gICAgICAgICAgICBleHBlY3Qoc2NyaXB0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICBzY3JpcHQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChzY3JpcHQuaXNDb25uZWN0ZWQoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3NyYz1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzY3JpcHQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tzcmM9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBzY3JpcHQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc2NyaXB0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbc3JjPVwiJyArIHVybCArICdcIl0nKSkudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3NyYz1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHNjcmlwdC5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7RGF0YX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvZGF0YS5tanNcIjtcbmltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG5cbmA7XG5cblxuZGVzY3JpYmUoJ0RhdGEnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZmV0Y2hSZWZlcmVuY2UsIHJldHVyblN0YXR1cywgbXV0YXRpb25vYnNlcnZlciwgYWRkZWROb2RlcyA9IFtdO1xuXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuXG4gICAgICAgIHJldHVyblN0YXR1cyA9IDIwMDtcbiAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICBpZiAoIXVybCkgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVybCcpXG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmV0dXJuU3RhdHVzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH07XG5cblxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnRGF0YSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2V0RXZlbnRUeXBlcygpJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBEYXRhKHtcbiAgICAgICAgICAgICAgICBzcmM6IG5ldyBEYXRhVXJsKCcnLCAndGV4dC9qYXZhc2NyaXB0JykudG9TdHJpbmcoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRhdGEuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0V4dGVybmFsIERhdGEnLCAoKSA9PiB7XG5cbiAgICAgICAgbGV0IGlkID0gbmV3IElEKCdkYXRhJykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHNlcnZlciwgZGF0YSwgdXJsID0gJ2h0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2xheXpyLmpzLzIuMi4yL2xheXpyLm1pbi5qcyc7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIGRhdGEgPSBuZXcgRGF0YSh7XG4gICAgICAgICAgICAgICAgc3JjOiB1cmwsXG4gICAgICAgICAgICAgICAgaWQ6IGlkXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnZGF0YSBpcyBub3QgY29ubmVjdGVkJywgKCkgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KGRhdGEuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2Nvbm5lY3QgYW5kIGNoZWNrIGF2YWlsYWJpbGl0eScsIChkb25lKSA9PiB7XG5cbiAgICAgICAgICAgIGRhdGEuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkYXRhLmlzQ29ubmVjdGVkKCksICdpc0Nvbm5lY3RlZCAxJykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3R5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJdJyksICdleGlzdHMgMScpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5wYXJlbnRFbGVtZW50O1xuXG5cbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZGF0YS5pc0Nvbm5lY3RlZCgpLCAnaXNDb25uZWN0ZWQgMicpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIl0nKSwgJ2V4aXN0cyAyJykubm90LnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgZGF0YS5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkYXRhLmlzQ29ubmVjdGVkKCksICdpc0Nvbm5lY3RlZCAzJykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXScpLCAnZXhpc3RzIDMnKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIl0nKSwgJ2V4aXN0cyA0Jykubm90LnRvLmV4aXN0O1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZGF0YS5pc0Nvbm5lY3RlZCgpLCAnaXNDb25uZWN0ZWQgNCcpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcycsICgpID0+IHtcbiAgICBsZXQgZWxlbWVudDtcbiAgICBsZXQgb3B0aW9ucztcbiAgICBsZXQgaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcztcblxuICAgIGJlZm9yZSggZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2RvbS91dGlsL2luaXQtb3B0aW9ucy1mcm9tLWF0dHJpYnV0ZXMubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzID0gbVsnaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyddO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgb3B0aW9ucyA9IHt1cmw6IFwiXCIsIGtleToge3N1YmtleTogXCJcIiwgY2FzZVNlbnNpdGl2ZTogdHJ1ZX19O1xuICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgb3B0aW9ucyB3aXRoIG1hdGNoaW5nIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcsICdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLWtleS1zdWJrZXknLCAndGVzdCcpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LnN1YmtleSkudG8uZXF1YWwoJ3Rlc3QnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IG1vZGlmeSBvcHRpb25zIHdpdGhvdXQgbWF0Y2hpbmcgYXR0cmlidXRlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJycpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKCcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaWdub3JlIGF0dHJpYnV0ZXMgd2l0aG91dCB0aGUgY29ycmVjdCBwcmVmaXgnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXNvbWUtb3B0aW9uLXVybCcsICdodHRwczovL2V4YW1wbGUuY29tJyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpZ25vcmUgYXR0cmlidXRlcyB3aXRoIGludmFsaWQgb3B0aW9uIHBhdGhzJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1ub25leGlzdGVudCcsICd2YWx1ZScpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChvcHRpb25zKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgbWFwcGluZyBmb3IgYSBzaW5nbGUgYXR0cmlidXRlJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi11cmwnLCAnZXhhbXBsZScpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICh2YWx1ZSkgPT4gJ2h0dHBzOi8vJyArIHZhbHVlICsgJy5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJ2h0dHBzOi8vZXhhbXBsZS5jb20nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgbWFwcGluZyBmb3IgYSBuZXN0ZWQgYXR0cmlidXRlJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1rZXktc3Via2V5JywgJzEyMycpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ2tleS5zdWJrZXknOiAodmFsdWUpID0+IHBhcnNlSW50KHZhbHVlLCAxMCkgKiAyXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKFwiMjQ2XCIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBtdWx0aXBsZSBtYXBwaW5ncycsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24ta2V5LXN1YmtleScsICcxMjMnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAodmFsdWUpID0+ICdodHRwczovLycgKyB2YWx1ZSArICcuY29tJyxcbiAgICAgICAgICAgICdrZXkuc3Via2V5JzogKHZhbHVlKSA9PiBwYXJzZUludCh2YWx1ZSwgMTApICogMlxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LnN1YmtleSkudG8uZXF1YWwoXCIyNDZcIik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBtYXBwaW5ncyBmb3Igbm9uLWV4aXN0aW5nIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogKHZhbHVlKSA9PiAnaHR0cHM6Ly8nICsgdmFsdWUgKyAnLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBtYXBwaW5ncyBmb3IgaW52YWxpZCBvcHRpb24gcGF0aHMnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLW5vbmV4aXN0ZW50JywgJ3ZhbHVlJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAnbm9uZXhpc3RlbnQnOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwob3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IG1hcHBpbmcgb25seSB0byBzcGVjaWZpZWQgYXR0cmlidXRlcycsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24ta2V5LXN1YmtleScsICcxMjMnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAodmFsdWUpID0+ICdodHRwczovLycgKyB2YWx1ZSArICcuY29tJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LnN1YmtleSkudG8uZXF1YWwoJzEyMycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYXBwbHkgbWFwcGluZyBpZiBub3QgYSBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAnaHR0cHM6Ly9leGFtcGxlLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnZXhhbXBsZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBtYXBwaW5nIHdpdGggY3VzdG9tIHByZWZpeCcsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtY3VzdG9tLW9wdGlvbi11cmwnLCAnZXhhbXBsZScpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICh2YWx1ZSkgPT4gJ2h0dHBzOi8vJyArIHZhbHVlICsgJy5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nLCAnZGF0YS1jdXN0b20tb3B0aW9uLScpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYXBwbHkgbWFwcGluZyB3aXRoIGluY29ycmVjdCBjdXN0b20gcHJlZml4JywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1jdXN0b20tb3B0aW9uLXVybCcsICdleGFtcGxlJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogKHZhbHVlKSA9PiAnaHR0cHM6Ly8nICsgdmFsdWUgKyAnLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IGNhc2Ugc2Vuc2l0aXZlIG1hcHBpbmcnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLWtleS1jYXNlU2Vuc2l0aXZlJywgJ2ZhbHNlJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5rZXkuY2FzZVNlbnNpdGl2ZSkudG8uZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG59KTtcbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSAnY2hhaSc7XG5pbXBvcnQge2V4dHJhY3RLZXlzfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RvbS91dGlsL2V4dHJhY3Qta2V5cy5tanNcIjtcblxuXG5kZXNjcmliZSgnZXh0cmFjdEtleXMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleHRyYWN0IGtleXMgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBmaXJzdE5hbWU6ICdKb2huJyxcbiAgICAgICAgICAgIGxhc3ROYW1lOiAnRG9lJyxcbiAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgICBzdHJlZXQ6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBuZXcgTWFwKFtcbiAgICAgICAgICAgIFsnZmlyc3RuYW1lJywgJ2ZpcnN0TmFtZSddLFxuICAgICAgICAgICAgWydsYXN0bmFtZScsICdsYXN0TmFtZSddLFxuICAgICAgICAgICAgWydhZGRyZXNzLXN0cmVldCcsICdhZGRyZXNzLnN0cmVldCddLFxuICAgICAgICAgICAgWydhZGRyZXNzLWNpdHknLCAnYWRkcmVzcy5jaXR5J10sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RLZXlzKG9iaik7XG5cbiAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20ocmVzdWx0KSkpLnRvLmVxdWFsKEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20oZXhwZWN0ZWQpKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHVzZSBjdXN0b20ga2V5IGFuZCB2YWx1ZSBzZXBhcmF0b3JzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBmaXJzdE5hbWU6ICdKb2huJyxcbiAgICAgICAgICAgIGxhc3ROYW1lOiAnRG9lJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBleHBlY3RlZCA9IG5ldyBNYXAoW1xuICAgICAgICAgICAgWydwcmVmaXgrZmlyc3RuYW1lJywgJ3ByZWZpeCtmaXJzdE5hbWUnXSxcbiAgICAgICAgICAgIFsncHJlZml4K2xhc3RuYW1lJywgJ3ByZWZpeCtsYXN0TmFtZSddLFxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0S2V5cyhvYmosICdwcmVmaXgnLCAnKycsICcrJyk7XG5cbiAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20ocmVzdWx0KSkpLnRvLmVxdWFsKEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20oZXhwZWN0ZWQpKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2hlY2sgaWYgdmFsdWUgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgZmlyc3ROYW1lOiAnSm9obicsXG4gICAgICAgICAgICBsYXN0TmFtZTogJ0RvZScsXG4gICAgICAgICAgICBhZGRyZXNzOiBudWxsLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gbmV3IE1hcChbXG4gICAgICAgICAgICBbJ2ZpcnN0bmFtZScsICdmaXJzdE5hbWUnXSxcbiAgICAgICAgICAgIFsnbGFzdG5hbWUnLCAnbGFzdE5hbWUnXSxcbiAgICAgICAgICAgIFsnYWRkcmVzcycsICdhZGRyZXNzJ10sXG4gICAgICAgICAgICBcbiAgICAgICAgXSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdEtleXMob2JqKTtcblxuICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShyZXN1bHQpKSkudG8uZXF1YWwoSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShleHBlY3RlZCkpKTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBtb3JlIHRlc3QgY2FzZXMgYXMgbmVlZGVkXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwsIGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgRmFjdG9yeSB9O1xuXG4vKipcbiAqIEEgZmFjdG9yeSBmb3IgY3JlYXRpbmcgd29ya2VyIGluc3RhbmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHNtYWxsIGZhY3RvcnkgdG8gY3JlYXRlIHdvcmtlclxuICovXG5jbGFzcyBGYWN0b3J5IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHdvcmtlcjogbmV3IFdlYWtNYXAoKSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB3b3JrZXIgZnJvbSBhIFVSTFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXNzYWdlSGFuZGxlclxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBlcnJvckhhbmRsZXJcblx0ICogQHJldHVybiB7V29ya2VyfVxuXHQgKi9cblx0Y3JlYXRlRnJvbVVSTCA9IGZ1bmN0aW9uICh1cmwsIG1lc3NhZ2VIYW5kbGVyLCBlcnJvckhhbmRsZXIpIHtcblx0XHRpZiAodXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHRjb25zdCB3b3JrZXJDbGFzcyA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiV29ya2VyXCIpO1xuXHRcdHZhciB3b3JrZXIgPSBuZXcgd29ya2VyQ2xhc3ModmFsaWRhdGVTdHJpbmcodXJsKSk7XG5cblx0XHRpZiAoaXNGdW5jdGlvbihtZXNzYWdlSGFuZGxlcikpIHtcblx0XHRcdHdvcmtlci5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIuY2FsbCh3b3JrZXIsIGV2ZW50KTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKGlzRnVuY3Rpb24oZXJyb3JIYW5kbGVyKSkge1xuXHRcdFx0d29ya2VyLm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0ZXJyb3JIYW5kbGVyLmNhbGwod29ya2VyLCBldmVudCk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiB3b3JrZXI7XG5cdH07XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB3b3JrZXIgZnJvbSBhIHNjcmlwdFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudFxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXNzYWdlSGFuZGxlclxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBlcnJvckhhbmRsZXJcblx0ICogQHJldHVybiB7V29ya2VyfVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0FQSS9VUkwvY3JlYXRlT2JqZWN0VVJMXG5cdCAqL1xuXHRjcmVhdGVGcm9tU2NyaXB0ID0gZnVuY3Rpb24gKGNvbnRlbnQsIG1lc3NhZ2VIYW5kbGVyLCBlcnJvckhhbmRsZXIpIHtcblx0XHRjb25zdCBibG9iRnVuY3Rpb24gPSBuZXcgZ2V0R2xvYmFsRnVuY3Rpb24oXCJCbG9iXCIpO1xuXHRcdGNvbnN0IGJsb2IgPSBuZXcgYmxvYkZ1bmN0aW9uKFt2YWxpZGF0ZVN0cmluZyhjb250ZW50KV0sIHtcblx0XHRcdHR5cGU6IFwic2NyaXB0L2phdmFzY3JpcHRcIixcblx0XHR9KTtcblxuXHRcdGNvbnN0IHVybCA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiVVJMXCIpLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHRjb25zdCB3b3JrZXIgPSB0aGlzLmNyZWF0ZUZyb21VUkwodXJsLCBtZXNzYWdlSGFuZGxlciwgZXJyb3JIYW5kbGVyKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wid29ya2VyXCJdLnNldCh3b3JrZXIsIHVybCk7XG5cblx0XHRyZXR1cm4gd29ya2VyO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBUZXJtaW5hdGUgdGhlIHdvcmtlciBhbmQgY2FsbCByZXZva2VPYmplY3RVUkwgaWYgbmVjZXNzYXJ5LlxuXHQgKlxuXHQgKiBAcGFyYW0gd29ya2VyXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLldvcmtlci5GYWN0b3J5fVxuXHQgKi9cblx0dGVybWluYXRlKHdvcmtlcikge1xuXHRcdGNvbnN0IHdvcmtlckNsYXNzID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJXb3JrZXJcIik7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZSh3b3JrZXIsIHdvcmtlckNsYXNzKTtcblxuXHRcdHdvcmtlci50ZXJtaW5hdGUoKTtcblxuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXVtcIndvcmtlclwiXS5oYXMod29ya2VyKSkge1xuXHRcdFx0Y29uc3QgdXJsID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ3b3JrZXJcIl0uZ2V0KHdvcmtlcik7XG5cdFx0XHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge0ZhY3Rvcnl9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3dvcmtlci9mYWN0b3J5Lm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET00sIGlzTm9kZX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5kZXNjcmliZSgnV29ya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgaWYgKGlzTm9kZSgpKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsWydVUkwnXSwgJ2NyZWF0ZU9iamVjdFVSTCcsIHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIvZXhhbXBsZS5tanNcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGdsb2JhbFsnV29ya2VyJ10gPSBjbGFzcyB7XG4gICAgICAgICAgICAgICAgdGVybWluYXRlKCkge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvbmVycm9yKCkge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvbm1lc3NhZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGEgPSB0eXBlb2YgZ2xvYmFsWydXb3JrZXInXTtcbiAgICAgICAgICAgIGxldCBhMSA9IHR5cGVvZiBXb3JrZXI7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGpzZG9tID0gaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0ZhY3RvcnknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2NyZWF0ZSB3b3JrZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgRmFjdG9yeSgpO1xuICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gZmFjdG9yeS5jcmVhdGVGcm9tU2NyaXB0KCdjb25zb2xlLmxvZyhcImhlbGxvIHdvcmxkXCIpOycpXG4gICAgICAgICAgICBleHBlY3Qod29ya2VyKS5pcy5pbnN0YW5jZW9mKFdvcmtlcik7XG5cbiAgICAgICAgICAgIGV4cGVjdChmYWN0b3J5LnRlcm1pbmF0ZSh3b3JrZXIpKS5pcy5pbnN0YW5jZW9mKEZhY3RvcnkpXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5cbmltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtQcm94eU9ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPHRlbXBsYXRlIGlkPVwiY3VycmVudFwiPlxuICAgICAgICA8bGkgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmN1cnJlbnQgfCB0b2pzb25cIj48L2xpPlxuICAgIDwvdGVtcGxhdGU+XG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgICAgIDx1bCBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiY3VycmVudCBwYXRoOmEuYlwiPlxuICAgICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgICAgICA8dWwgZGF0YS1tb25zdGVyLWluc2VydD1cImN1cnJlbnQgcGF0aDphLmIgfCBkb2l0XCI+XG4gICAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBpZD1cInRlc3QzXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmEuYlwiPlxuICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLmNcIiBpZD1cImlucHV0MVwiPlxuICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2hlY2tlZCBwYXRoOmEuY2hlY2tib3hcIiB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiY2hlY2tib3hcIiBpZD1cImNoZWNrYm94XCI+XG4gICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEudGV4dFwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInRleHRcIiBpZD1cInRleHRcIj5cbiAgICAgICAgICAgIDxpbnB1dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNoZWNrZWQgcGF0aDphLnJhZGlvXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyMVwiIGlkPVwicmFkaW9cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInIyXCIgaWQ9XCJyMlwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicnhcIiBpZD1cInJ4XCI+XG5cbiAgICAgICAgICAgIDxzZWxlY3QgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEuc2VsZWN0XCIgbmFtZT1cInNlbGVjdFwiIGlkPVwic2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm90aGVyLXZhbHVlXCI+dmFsdWUxPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTI8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICA8c2VsZWN0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLm11bHRpc2VsZWN0XCIgbmFtZT1cIm11bHRpc2VsZWN0XCIgbXVsdGlwbGUgaWQ9XCJtdWx0aXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUxPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWU0PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm90aGVyLXZhbHVlNVwiPnZhbHVlNTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPVwidGV4dGFyZWFcIiBpZD1cInRleHRhcmVhXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEudGV4dGFyZWFcIj48L3RleHRhcmVhPlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOnRleHQgfCB0b2xvd2VyXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOnRleHQgfCBjYWxsOm15Zm9ybWF0dGVyXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJzdGF0aWM6aGVsbG9cXFxcIFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuYDtcblxubGV0IGh0bWwzID0gYFxuXG4gICAgPHRlbXBsYXRlIGlkPVwibXlpbm5lcmlkXCI+XG4gICAgICAgIDxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpteWlubmVyaWQgfCB0b2pzb25cIj48L3NwYW4+XG4gICAgPC90ZW1wbGF0ZT5cblxuICAgIDx0ZW1wbGF0ZSBpZD1cIm15aWRcIj5cbiAgICAgICAgPHAgZGF0YS1tb25zdGVyLWluc2VydD1cIm15aW5uZXJpZCBwYXRoOmEuYlwiPjwvcD5cbiAgICA8L3RlbXBsYXRlPlxuXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWluc2VydD1cIm15aWQgcGF0aDphLmJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cblxuYDtcblxubGV0IGh0bWw0ID0gYFxuICAgIDxkaXY+XG4gICAgICAgIDxmb3JtIGlkPVwiZm9ybTFcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cImNoZWNrZWRcIiBuYW1lPVwiY2hlY2tib3hcIiBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6c3RhdGVcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJ0ZXh0XCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyMVwiIGlkPVwicjFcIiBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6cmFkaW9cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInIyXCIgaWQ9XCJyMlwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpyYWRpb1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicnhcIiBpZD1cInJ4XCIgZGF0YS1jb21tZW50PVwibm90IGNhbGxlZCBiZWNhdXNlIG5vIGJpbmQgYXR0cmlidXRlXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG5hbWU9XCJidXR0b25cIj5cblxuICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwic2VsZWN0MVwiIGlkPVwic2VsZWN0MVwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpzZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUyPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwic2VsZWN0MlwiIG11bHRpcGxlIGlkPVwic2VsZWN0MlwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDptdWx0aXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUxPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWU0PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTU8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT1cInRleHRhcmVhXCIgaWQ9XCJ0ZXh0YXJlYVwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDp0ZXh0YXJlYVwiPlxuICAgICAgICAgICAgXG4gICAgICAgIDwvdGV4dGFyZWE+XG5cbiAgICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuXG5gO1xuXG5cblxuZGVzY3JpYmUoJ0RPTScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBVcGRhdGVyID0gbnVsbDtcbiAgICBcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgfVxuICAgICAgICBpbml0SlNET00ob3B0aW9ucykudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXBkYXRlci5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFVwZGF0ZXIgPSBtLlVwZGF0ZXI7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ3Rlc3QgR2V0dGVyICYmIFNldHRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzZXRFdmVudFR5cGVzKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgVXBkYXRlcihlbGVtZW50KS5zZXRFdmVudFR5cGVzKFsndG91Y2gnXSkpLnRvLmJlLmluc3RhbmNlb2YoVXBkYXRlcik7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaXQoJ2dldFN1YmplY3QoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSB7YTogMX07XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBVcGRhdGVyKGVsZW1lbnQsIHN1YmplY3QpLmdldFN1YmplY3QoKS5hKS50by5iZS5lcXVhbCgxKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCd0ZXN0IGNvbnRyb2wgbWV0aG9kcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdlbmFibGVFdmVudFByb2Nlc3NpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBVcGRhdGVyKGVsZW1lbnQpLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpKS50by5iZS5pbnN0YW5jZW9mKFVwZGF0ZXIpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ2Rpc2FibGVFdmVudFByb2Nlc3NpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBVcGRhdGVyKGVsZW1lbnQpLmRpc2FibGVFdmVudFByb2Nlc3NpbmcoKSkudG8uYmUuaW5zdGFuY2VvZihVcGRhdGVyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCd0ZXN0IEVycm9ycycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBVcGRhdGVyKCkpLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgdGhyb3cgdmFsdWUgaXMgd3JvbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBVcGRhdGVyKGVsZW1lbnQsIG51bGwpKS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHRocm93IEVycm9yOiB0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG5cbiAgICAgICAgICAgICAgICBsZXQgdSA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogW11cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IHUucnVuKCk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwic2hvdWxkIG5ldmVyIGNhbGxlZCFcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlKS5pcy5pbnN0YW5jZU9mKEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlICsgXCJcIikudG8uYmUuZXF1YWwoJ0Vycm9yOiB0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcblxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCduZXcgVXBkYXRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZG9jdW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ1JlcGVhdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBidWlsZCA2IGxpIGVsZW1lbnRzJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzAnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICcxJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnMid9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICc0J30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnNSd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8bGkgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmEuYi4nICsgaSArICcgfCB0b2pzb25cIiBkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cImN1cnJlbnQtJyArIGkgKyAnXCI+e1wiaVwiOlwiJyArIGkgKyAnXCJ9PC9saT4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZSkpXG4gICAgICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sNDtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnRXZlbnRoYW5kbGluZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IHVwZGF0ZXIsIGZvcm0xLCBwcm94eW9ic2VydmVyO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlciA9IG5ldyBQcm94eU9ic2VydmVyKHt9KVxuICAgICAgICAgICAgICAgIHVwZGF0ZXIgPSBuZXcgVXBkYXRlcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybTEnKSwgcHJveHlvYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgZm9ybTEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybTEnKTtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgLy8gaGVyZSBjbGljayBldmVudHMgYXJlIHRocm93biBvbiB0aGUgY2hlY2tib3ggYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSB2YWx1ZSBpcyBvYnNlcnZlZCB2aWEgdGhlIHByb3h5b2JzZXJ2ZXIuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSBjaGVja2JveCBjbGljayBldmVudHMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gdXBkYXRlci5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLmlzLmVxdWFsKHByb3h5b2JzZXJ2ZXIuZ2V0U3ViamVjdCgpKTtcblxuICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IFsnY2hlY2tlZCcsIHVuZGVmaW5lZCwgJ2NoZWNrZWQnXTtcbiAgICAgICAgICAgICAgICAvLyBoZXJlIHRoZSBub3RhdGlvbiB3aXRoIGZ1bmN0aW9uIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldFN1YmplY3QoKVsnc3RhdGUnXSAhPT0gZSkgZG9uZShuZXcgRXJyb3IodGhpcy5nZXRTdWJqZWN0KClbJ3N0YXRlJ10gKyAnIHNob3VsZCAnICsgZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0xLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPWNoZWNrYm94XScpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMClcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm0xLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPWNoZWNrYm94XScpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfSwgMTApXG5cblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgcmFkaW8gY2xpY2sgZXZlbnRzIDEnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gdXBkYXRlci5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLmlzLmVxdWFsKHByb3h5b2JzZXJ2ZXIuZ2V0U3ViamVjdCgpKTtcblxuICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IFsncjEnLCAncjInLCAncjEnXTtcbiAgICAgICAgICAgICAgICBsZXQgY2xpY2tUYXJnZXRzID0gWydyMicsICdyMSddXG4gICAgICAgICAgICAgICAgLy8gaGVyZSB0aGUgbm90YXRpb24gd2l0aCBmdW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHRoaXMgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5nZXRTdWJqZWN0KClbJ3JhZGlvJ107XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBlKSBkb25lKG5ldyBFcnJvcih2ICsgJyBzaG91bGQgJyArIGUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2xpY2tUYXJnZXRzLnNoaWZ0KCkpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMClcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyMScpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfSwgMTApXG5cbiAgICAgICAgICAgICAgICAvLyBubyBoYW5kbGVyIC8vIGJpbmRcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3J4JykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9LCAyMClcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgc2VsZWN0IGNsaWNrIGV2ZW50cyAyJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdDEnKTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS5pcy5lcXVhbChwcm94eW9ic2VydmVyLmdldFN1YmplY3QoKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXhwZWN0ZWQgPSBbJ3ZhbHVlMicsICd2YWx1ZTEnLCAndmFsdWUyJ107XG4gICAgICAgICAgICAgICAgLy8gaGVyZSB0aGUgbm90YXRpb24gd2l0aCBmdW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHRoaXMgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5nZXRTdWJqZWN0KClbJ3NlbGVjdCddO1xuICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gZSkgZG9uZShuZXcgRXJyb3IodiArICcgc2hvdWxkICcgKyBlKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IHNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9PT0gMSA/IDAgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHZhbHVlIGFuZCBzaW11bGF0ZSBjbGljayBldmVudCBmb3IgYnViYmxlXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuY2xpY2soKTtcblxuICAgICAgICAgICAgICAgIH0sIDIwKVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgdGV4dGFyZWEgZXZlbnRzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCB0ZXh0YXJlYUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dGFyZWEnKTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS5pcy5lcXVhbChwcm94eW9ic2VydmVyLmdldFN1YmplY3QoKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXhwZWN0ZWQgPSBbJ3Rlc3RYJywgJ2xvcmVtIGlwc3VtJywgJyddO1xuICAgICAgICAgICAgICAgIGxldCB0ZXN0VmFsdWVzID0gW1wibG9yZW0gaXBzdW1cIiwgXCJcIl07XG4gICAgICAgICAgICAgICAgLy8gaGVyZSB0aGUgbm90YXRpb24gd2l0aCBmdW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHRoaXMgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5nZXRTdWJqZWN0KClbJ3RleHRhcmVhJ107XG4gICAgICAgICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoZSkpIGRvbmUobmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHYpICsgJyBzaG91bGQgJyArIEpTT04uc3RyaW5naWZ5KGUpKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhRWxlbWVudC52YWx1ZSA9IHRlc3RWYWx1ZXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYUVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdmFsdWUgYW5kIHNpbXVsYXRlIGNsaWNrIGV2ZW50IGZvciBidWJibGVcbiAgICAgICAgICAgICAgICAgICAgdGV4dGFyZWFFbGVtZW50LnZhbHVlID0gXCJ0ZXN0WFwiO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYUVsZW1lbnQuY2xpY2soKTtcblxuICAgICAgICAgICAgICAgIH0sIDIwKVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgbXVsdGlwbGUgc2VsZWN0IGV2ZW50cycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3QyJyk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVyLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSB1cGRhdGVyLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkuaXMuZXF1YWwocHJveHlvYnNlcnZlci5nZXRTdWJqZWN0KCkpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGV4cGVjdGVkID0gW1xuICAgICAgICAgICAgICAgICAgICBbJ3ZhbHVlMSddLFxuICAgICAgICAgICAgICAgICAgICBbJ3ZhbHVlMicsICd2YWx1ZTMnLCAndmFsdWU0J10sXG4gICAgICAgICAgICAgICAgICAgIFsndmFsdWUxJywgJ3ZhbHVlNCddLFxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICBsZXQgdGVzdFNlbGVjdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgICAgIFt0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICAgIC8vIGhlcmUgdGhlIG5vdGF0aW9uIHdpdGggZnVuY3Rpb24gaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoZSB0aGlzIHBvaW50ZXIgaXMgc2V0LlxuICAgICAgICAgICAgICAgIHByb3h5b2JzZXJ2ZXIuYXR0YWNoT2JzZXJ2ZXIobmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZSA9IGV4cGVjdGVkLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlID09PSB1bmRlZmluZWQgJiYgZXhwZWN0ZWQubGVuZ3RoID09PSAwKSBkb25lKG5ldyBFcnJvcigndG8gbWFueSBjYWxscycpKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IHRoaXMuZ2V0U3ViamVjdCgpWydtdWx0aXNlbGVjdCddO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoZSkpIGRvbmUobmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHYpICsgJyBzaG91bGQgJyArIEpTT04uc3RyaW5naWZ5KGUpKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGVzdFNlbGVjdGlvbnMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB2WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1sxXS5zZWxlY3RlZCA9IHZbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzJdLnNlbGVjdGVkID0gdlsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbM10uc2VsZWN0ZWQgPSB2WzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMV0uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzJdLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1szXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LmNsaWNrKCk7XG5cbiAgICAgICAgICAgICAgICB9LCAyMClcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnUmVwbGFjZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBhZGQgbG93ZXIgaGVsbG8gYW5kIEhFTExPeWVzIScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuXG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBcIkhBTExPXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cblxuICAgICAgICAgICAgICAgIGQuc2V0Q2FsbGJhY2soJ215Zm9ybWF0dGVyJywgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgKyAneWVzISdcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IHRvbG93ZXJcIj5oYWxsbzwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IGNhbGw6bXlmb3JtYXR0ZXJcIj5IQUxMT3llcyE8L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJzdGF0aWM6aGVsbG9cXFxcIFwiPmhlbGxvIDwvZGl2PicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlKSlcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwzO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdSZXBsYWNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkICcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBuZXcgVXBkYXRlcihcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICcwJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcblxuXG4gICAgICAgICAgICAgICAgZC5ydW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGQpLmlzLmVxdWFsKCdvYmplY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXYgZGF0YS1tb25zdGVyLWluc2VydD1cIm15aWQgcGF0aDphLmJcIj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxwIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJteWlubmVyaWQgcGF0aDphLmJcIiBkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm15aWQtMFwiPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPHNwYW4gZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmEuYi4wIHwgdG9qc29uXCIgZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJteWlubmVyaWQtMFwiPntcImlcIjpcIjBcIn08L3NwYW4+Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZSkpXG4gICAgICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgnQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjaGFuZ2UgYXR0cmlidXRlcycsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDMnKVxuXG4gICAgICAgICAgICAgICAgbGV0IHRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dCcpXG4gICAgICAgICAgICAgICAgZXhwZWN0KHRleHQudmFsdWUpLnRvLmJlLmVxdWFsKFwiXCIpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHJhZGlvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhZGlvJylcbiAgICAgICAgICAgICAgICBleHBlY3QocmFkaW8uY2hlY2tlZCkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBsZXQgY2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hlY2tib3gnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChjaGVja2JveC5jaGVja2VkKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0JylcbiAgICAgICAgICAgICAgICBleHBlY3Qoc2VsZWN0LnNlbGVjdGVkSW5kZXgpLnRvLmJlLmVxdWFsKDApO1xuXG4gICAgICAgICAgICAgICAgbGV0IG11bHRpc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ211bHRpc2VsZWN0JylcbiAgICAgICAgICAgICAgICBleHBlY3QobXVsdGlzZWxlY3Quc2VsZWN0ZWRJbmRleCkudG8uYmUuZXF1YWwoLTEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RleHRhcmVhJylcbiAgICAgICAgICAgICAgICBleHBlY3QodGV4dGFyZWEudmFsdWUpLnRvLmJlLmVxdWFsKFwiXCIpO1xuXG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYjogXCJkaXYtY2xhc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcImhlbGxvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogXCJoZWxsb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvOiBcInRydWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYTogXCJ0ZXN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlzZWxlY3Q6IFsndmFsdWUzJywgJ3ZhbHVlNCcsICdvdGhlci12YWx1ZTUnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Q6IFwidmFsdWUyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tib3g6IFwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG5cbiAgICAgICAgICAgICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6YS5iXCIgY2xhc3M9XCJkaXYtY2xhc3NcIj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxpbnB1dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YS5jXCIgaWQ9XCJpbnB1dDFcIiB2YWx1ZT1cImhlbGxvXCI+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8dGV4dGFyZWEgbmFtZT1cInRleHRhcmVhXCIgaWQ9XCJ0ZXh0YXJlYVwiIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLnRleHRhcmVhXCIgdmFsdWU9XCJ0ZXN0XCI+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8aW5wdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjaGVja2VkIHBhdGg6YS5yYWRpb1wiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicjFcIiBpZD1cInJhZGlvXCIgY2hlY2tlZD1cInRydWVcIj4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHRleHQudmFsdWUsICd0ZXh0IGNvbnRyb2wnKS50by5iZS5lcXVhbChkLmdldFN1YmplY3QoKVsnYSddWydjJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHJhZGlvLmNoZWNrZWQsICdyYWRpbyBjb250cm9sJykudG8uYmUuZXF1YWwodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QodGV4dGFyZWEudmFsdWUsICd0ZXh0YXJlYSBjb250cm9sJykudG8uYmUuZXF1YWwoZC5nZXRTdWJqZWN0KClbJ2EnXVsndGV4dGFyZWEnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc2VsZWN0LnNlbGVjdGVkSW5kZXgsICdzZWxlY3QgY29udHJvbCcpLnRvLmJlLmVxdWFsKDEpOyAvLyBbMD0+b3RoZXItdmFsdWUsIDE9PnZhbHVlMl1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG11bHRpc2VsZWN0U2VsZWN0ZWRPcHRpb25zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgb2JqXSBvZiBPYmplY3QuZW50cmllcyhtdWx0aXNlbGVjdC5zZWxlY3RlZE9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlzZWxlY3RTZWxlY3RlZE9wdGlvbnMucHVzaChvYmoudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShtdWx0aXNlbGVjdFNlbGVjdGVkT3B0aW9ucyksICdtdWx0aXNlbGVjdCBjb250cm9sJykudG8uYmUuZXF1YWwoSlNPTi5zdHJpbmdpZnkoZC5nZXRTdWJqZWN0KClbJ2EnXVsnbXVsdGlzZWxlY3QnXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNoZWNrYm94LmNoZWNrZWQsICdjaGVja2JveCBjb250cm9sJykudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlKSlcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnR2V0IEF0dHJpYnV0ZSBQaXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgaWQsIG1vY2tzO1xuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBpZCA9IG5ldyBJRCgnbW9uc3RlcicpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYCA8ZGl2IGlkPVwiYCArIGlkICsgYFwiXG4gICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6YSB8IGlmOnZhbHVlOlxcXFwgXCI+PC9kaXY+YFxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaW5jbHVkZSBzcGFjZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkLnRvU3RyaW5nKCkpXG5cbiAgICAgICAgICAgIGNvbnN0IHBpcGUgPSBkaXYuZ2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItcmVwbGFjZScpO1xuICAgICAgICAgICAgZXhwZWN0KHBpcGUubGVuZ3RoKS50by5iZS5lcXVhbCgyMCk7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdtYW51ZWwgdXBkYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgaWQsIG1vY2tzO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGlkID0gbmV3IElEKCdtb25zdGVyJykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGA8aW5wdXQgaWQ9XCJgICsgaWQgKyBgXCJkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6bXl2YWx1ZVwiPmBcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGdldCB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnZhbHVlID0gXCJoZWxsb1wiO1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlciA9IG5ldyBVcGRhdGVyKG1vY2tzKTtcbiAgICAgICAgICAgIGNvbnN0IHN1YmplY3QgPSB1cGRhdGVyLmdldFN1YmplY3QoKTtcblxuICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdteXZhbHVlJyk7XG4gICAgICAgICAgICB1cGRhdGVyLnJldHJpZXZlKCk7XG4gICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkudG8uaGF2ZS5wcm9wZXJ0eSgnbXl2YWx1ZScpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIC8qKlxuICAgICAqIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzExMlxuICAgICAqL1xuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCkgMjAyMjAxMDcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIC8vIGxhbmd1YWdlPUhUTUxcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcblxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIGA7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ0J1Z2ZpeCAjMTEyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGFkZCAnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBjb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpO1xuICAgICAgICAgICAgICAgIGxldCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSAneWVhaCEgPGI+VGVzdDwvYj4hJztcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckhUTUwgPSBjb250YWluZXJFbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdIVE1MID0gbmV3RWxlbWVudC5pbm5lckhUTUw7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBuZXdFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChjb250YWluZXJFbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXY+eWVhaCEgPGI+VGVzdDwvYj4hPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sIDEwMClcblxuICAgICAgICAgICAgICAgIC8vIGQuc2V0Q2FsbGJhY2soJ215Zm9ybWF0dGVyJywgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuIGEgKyAneWVzISdcbiAgICAgICAgICAgICAgICAvLyB9KVxuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IHRvbG93ZXJcIj5oYWxsbzwvZGl2PicpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IGNhbGw6bXlmb3JtYXR0ZXJcIj5IQUxMT3llcyE8L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJzdGF0aWM6aGVsbG9cXFxcIFwiPmhlbGxvIDwvZGl2PicpO1xuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4gZG9uZSgpO1xuICAgICAgICAgICAgICAgIC8vICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGUgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAvLyB9LCAxMDApXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge0xvY2FsZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7Z2V0TG9jYWxlT2ZEb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0TG9jYWxlT2ZEb2N1bWVudCcsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcImRlXCJdLFxuICAgICAgICAgICAgW1wic2wtSVQtbmVkaXNcIl0sXG4gICAgICAgICAgICBbXCJlbi1HQlwiXSxcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICBpdCgncmV0dXJuIGxhbmd1YWdlICcgKyBhLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpO1xuICAgICAgICAgICAgICAgIGxldCBub2RlID0gaHRtbC5pdGVtKDApO1xuXG4gICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2xhbmcnLCBhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZ2V0TG9jYWxlT2ZEb2N1bWVudCgpLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgaXQoJ3JldHVybiBsYW5ndWFnZSBlbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGh0bWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpO1xuICAgICAgICBsZXQgbm9kZSA9IGh0bWwuaXRlbSgwKTtcbiAgICAgICAgbGV0IGxhbmc9IG5vZGUuZ2V0QXR0cmlidXRlKCdsYW5nJyk7XG5cbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ2xhbmcnKTtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuICAgICAgICBleHBlY3QobG9jYWxlKS50by5iZS5pbnN0YW5jZU9mKExvY2FsZSk7XG4gICAgICAgIGV4cGVjdChsb2NhbGUubG9jYWxlU3RyaW5nKS50by5iZS5lcXVhbChuYXZpZ2F0b3IubGFuZ3VhZ2UpO1xuXG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdsYW5nJywgbGFuZyk7XG4gICAgICAgIFxuICAgIH0pXG5cblxufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2dldERvY3VtZW50RnJhZ21lbnRGcm9tU3RyaW5nfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VGhlbWUsIGdldERvY3VtZW50VGhlbWV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3RoZW1lLm1qc1wiO1xuXG5kZXNjcmliZSgnVGhlbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25ldyBUaGVtZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBUaGVtZSBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRoZW1lKCdteS10aGVtZScpKS5pcy5hLmluc3RhbmNlT2YoVGhlbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gVGhlbWUtTmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVGhlbWUoJ215LXRoZW1lJykuZ2V0TmFtZSgpKS5pcy5lcXVhbCgnbXktdGhlbWUnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgRXJyb3IgYmVjYXVzZSBlbXB0eSBhcmd1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgVGhlbWUoKSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBFcnJvciBiZWNhdXNlIG5vIHN0cmluZyBhcmd1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgVGhlbWUoMikpLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0RG9jdW1lbnRUaGVtZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBUaGVtZSBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoZ2V0RG9jdW1lbnRUaGVtZSgpKS5pcy5hLmluc3RhbmNlT2YoVGhlbWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBEZWZhdWx0IFRoZW1lIG5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoZ2V0RG9jdW1lbnRUaGVtZSgpLmdldE5hbWUoKSkuaXMuZXF1YWwoJ21vbnN0ZXInKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXREb2N1bWVudFRoZW1lKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJykuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZScsICd0ZXN0dGhlbWUnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXRoZW1lLW5hbWUnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0ZXN0dGhlbWUgVGhlbWUgbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRoZW1lKCkuZ2V0TmFtZSgpKS5pcy5lcXVhbCgndGVzdHRoZW1lJyk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG59KTtcblxuXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtpbnRlcm5hbFN5bWJvbH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge2dldERvY3VtZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHtQcm94eU9ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGlucHV0IGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDphXCIgaWQ9XCJ0ZXN0MlwiIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphXCI+XG5gO1xuXG4vLyBkZWZpbmVkIGluIGNvbnN0YW50cy5tanNcbmNvbnN0IHVwZGF0ZXJTeW1ib2xLZXkgPSBcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBvcHRpb25zLXVwZGF0ZXItbGlua1wiXG5jb25zdCB1cGRhdGVyU3ltYm9sU3ltYm9sID0gU3ltYm9sLmZvcih1cGRhdGVyU3ltYm9sS2V5KTtcblxuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IEN1c3RvbUVsZW1lbnQsIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCwgVGVzdENvbXBvbmVudCwgZG9jdW1lbnQsIFRlc3RDb21wb25lbnQyLCBhc3NpZ25VcGRhdGVyVG9FbGVtZW50LFxuICAgICAgICBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudDtcblxuICAgIGRlc2NyaWJlKFwiYXNzaWduVXBkYXRlclRvRWxlbWVudFwiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgICAgICBpbml0SlNET00ob3B0aW9ucykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS91cGRhdGVyLm1qc1wiKS50aGVuKCh5eSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudCA9IHl5WydhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudCddO1xuICAgICAgICAgICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWVsZW1lbnQubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRWxlbWVudCA9IG1bJ0N1c3RvbUVsZW1lbnQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25VcGRhdGVyVG9FbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnRzLCBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50LmNhbGwodGhpcywgZWxlbWVudHMsIHVwZGF0ZXJTeW1ib2xTeW1ib2wsIG9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHRoaXMgdGVzdCB0cnkgdG8gc2ltdWxhdGUgdGhlIGJ1ZyB0aGF0IHdhcyBmb3VuZCBpbiB0aGUgYXNzaWduVXBkYXRlclRvRWxlbWVudCBmdW5jdGlvbi5cbiAgICAgICAgICogVGhlIGJ1ZyB3YXMgdGhhdCB0aGUgdXBkYXRlciB3YXMgbm90IGFzc2lnbmVkIHRvIHRoZSBlbGVtZW50IHdoZW4gdGhlIGVsZW1lbnQgd2FzIGNyZWF0ZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIHVuZm9ydHVuYXRlbHksIHRoaXMgdGVzdCBkb2VzIG5vdCByZXByb2R1Y2UgdGhlIGJ1Zy5cbiAgICAgICAgICovXG4gICAgICAgIGl0KFwic2hvdWxkIGFzc2lnbiBhbiB1cGRhdGVyIHRvIGFuIGVsZW1lbnRcIiwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1vY2tzXCIpLmlubmVySFRNTCkudG8uZXF1YWwoaHRtbDIpO1xuXG4gICAgICAgICAgICBjb25zdCBhID0ge2E6IDF9O1xuICAgICAgICAgICAgY29uc3QgYiA9IHtiOiAyfTtcblxuICAgICAgICAgICAgY29uc3QgYXAgPSBuZXcgUHJveHlPYnNlcnZlcihhKTtcbiAgICAgICAgICAgIGNvbnN0IGJwID0gbmV3IFByb3h5T2JzZXJ2ZXIoYik7XG5cbiAgICAgICAgICAgIGNvbnN0IHggPSBhcC5nZXRTdWJqZWN0KClcbiAgICAgICAgICAgIGNvbnN0IHkgPSBicC5nZXRTdWJqZWN0KClcblxuICAgICAgICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgc2V0LmFkZChlbGVtZW50KTtcblxuICAgICAgICAgICAgYXNzaWduVXBkYXRlclRvRWxlbWVudC5jYWxsKGVsZW1lbnQsIHNldCwgYXApO1xuICAgICAgICAgICAgYXNzaWduVXBkYXRlclRvRWxlbWVudC5jYWxsKGVsZW1lbnQsIHNldCwgYnApO1xuXG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoeCkpLnRvLmVxdWFsKCd7XCJhXCI6MX0nKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeSh5KSkudG8uZXF1YWwoJ3tcImJcIjoyfScpO1xuXG4gICAgICAgICAgICBjb25zdCBzeSA9IHVwZGF0ZXJTeW1ib2xTeW1ib2w7XG5cbiAgICAgICAgICAgIGxldCB2ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItb2JqZWN0bGlua1wiKTtcbiAgICAgICAgICAgIGV4cGVjdCh2KS50by5lcXVhbCgnU3ltYm9sKCcgKyB1cGRhdGVyU3ltYm9sS2V5ICsgJyknKTtcblxuICAgICAgICAgICAgY29uc3QgdXBkYXRlciA9IGVsZW1lbnRbc3ldO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdXBkYXRlcikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdSBvZiB2KSB7XG4gICAgICAgICAgICAgICAgICAgIHUucnVuKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1LmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4cGVjdCh1cGRhdGVyKS50by5iZS5hbi5pbnN0YW5jZW9mKFNldCk7XG4gICAgICAgICAgICBleHBlY3QodXBkYXRlcikudG8uYmUuYShcIlNldFwiKTtcblxuICAgICAgICAgICAgeC5hID0gMztcbiAgICAgICAgICAgIGJwLmdldFN1YmplY3QoKS5iID0gNDtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja0hUTUwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1vY2tzXCIpO1xuXG4gICAgICAgICAgICAgICAgLy8gaHRtbCBleHBleHRlZDpcbiAgICAgICAgICAgICAgICAvLyA8aW5wdXQgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOmFcIiBpZD1cInRlc3QyXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmFcIiBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChAc2NodWthaS9tb25zdGVyL2RvbS9AQG9iamVjdC11cGRhdGVyLWxpbmspXCIgdmFsdWU9XCIzXCI+XG5cbiAgICAgICAgICAgICAgICBleHBlY3QobW9ja0hUTUwucXVlcnlTZWxlY3RvcihcIiN0ZXN0MlwiKSkudG8uaGF2ZS52YWx1ZSgnMycpXG4gICAgICAgICAgICAgICAgZXhwZWN0KG1vY2tIVE1MLnF1ZXJ5U2VsZWN0b3IoXCIjdGVzdDJcIikpLnRvLmhhdmUuYXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb2JqZWN0bGluaycsICdTeW1ib2woJyArIHVwZGF0ZXJTeW1ib2xLZXkgKyAnKScpXG4gICAgICAgICAgICAgICAgLy9leHBlY3QobW9ja0hUTUwpLnRvLmhhdmUuaHRtbChyZXN1bHRIVE1MKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LnZhbHVlKS50by5lcXVhbChcIjNcIik7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoYXAuZ2V0UmVhbFN1YmplY3QoKSkpLnRvLmVxdWFsKCd7XCJhXCI6M30nKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoYnAuZ2V0UmVhbFN1YmplY3QoKSkpLnRvLmVxdWFsKCd7XCJiXCI6NH0nKTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0sIDUwKVxuXG4gICAgICAgIH0pXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0N1c3RvbUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGluaXRKU0RPTSh7fSkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWVsZW1lbnQubWpzXCIpLnRoZW4oKG0pID0+IHtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRWxlbWVudCA9IG1bJ0N1c3RvbUVsZW1lbnQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCA9IG1bJ3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCddO1xuICAgICAgICAgICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudCA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibW9uc3Rlci10ZXN0Y2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnQpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnQyID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtb25zdGVyLXRlc3RjbGFzczJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbW90ZXN0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluOiAnPGgxPjwvaDE+PGFydGljbGU+PHA+dGVzdDwvcD48ZGl2IGlkPVwiY29udGFpbmVyXCI+PC9kaXY+PC9hcnRpY2xlPidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50MilcblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdDdXN0b21FbGVtZW50KCkgd2l0aCBDb25maWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIHJlYWQgY29uZmlnIGZyb20gdGFnJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDxzY3JpcHQgaWQ9XCJjb25maWcxXCIgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIj5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZGVtb3Rlc3RcIjoxNDI1XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvc2NyaXB0PlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDxtb25zdGVyLXRlc3RjbGFzczIgaWQ9XCJ0aGlzaXNhdGVzdFwiIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yPVwiI2NvbmZpZzFcIj5cbiAgICAgICAgICAgICAgICA8L21vbnN0ZXItdGVzdGNsYXNzMj5cbiAgICAgICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vbnN0ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGhpc2lzYXRlc3QnKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobW9uc3Rlci5nZXRPcHRpb24oJ2RlbW90ZXN0JykpLmlzLmVxbCgxNDI1KTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBjdXN0b20tZWxlbWVudCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBuZXcgVGVzdENvbXBvbmVudCgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjb25uZWN0IGVtcHR5IGVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnZG9jdW1lbnQgc2hvdWxkIGNvbnRhaW4gbW9uc3Rlci10ZXN0Y2xhc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpLmFwcGVuZENoaWxkKGQpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbW9uc3Rlci10ZXN0Y2xhc3MnKS5sZW5ndGgpLmlzLmVxdWFsKDEpO1xuICAgICAgICAgICAgICAgIC8vIG5vIGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rPVwiU3ltYm9sKG1vbnN0ZXJVcGRhdGVyKVwiIGJlY2F1c2UgaXQgaGFzIG5vdGhpbmcgdG8gdXBkYXRlXG4gICAgICAgICAgICAgICAgLy8gYnV0IGRhdGEtbW9uc3Rlci1lcnJvcj1cIkVycm9yOiBodG1sIGlzIG5vdCBzZXQuXCJcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdGVzdGNsYXNzIGRhdGEtbW9uc3Rlci1lcnJvcj1cIkVycm9yOiBodG1sIGlzIG5vdCBzZXQuXCI+PC9tb25zdGVyLXRlc3RjbGFzcz4nKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY29ubmVjdCBlbGVtZW50IHdpdGggaHRtbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdkb2N1bWVudCBzaG91bGQgY29udGFpbiBtb25zdGVyLXRlc3RjbGFzczInLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MyJyk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykuYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICAvLyBpbnNlcnQgRE9NIHJ1biBpbiBleHRyYSBwcm9jZXNzIHZpYSBzZXRUaW1lb3V0IVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtb25zdGVyLXRlc3RjbGFzczInKS5sZW5ndGgpLmlzLmVxdWFsKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtb25zdGVyLXRlc3RjbGFzczInKS5pdGVtKDApLnNoYWRvd1Jvb3QuaW5uZXJIVE1MKS5pcy5lcXVhbCgnPGgxPjwvaDE+PGFydGljbGU+PHA+dGVzdDwvcD48ZGl2IGlkPVwiY29udGFpbmVyXCI+PC9kaXY+PC9hcnRpY2xlPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXRlc3RjbGFzczIgZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2woJyArIHVwZGF0ZXJTeW1ib2xLZXkgKyAnKVwiPjwvbW9uc3Rlci10ZXN0Y2xhc3MyPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSwgMTApO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ09wdGlvbnMgY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnZGVsZWdhdGVzRm9jdXMgc2hvdWxkIGNoYW5nZSBmcm9tIHRydWUgdG8gZmFsc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpXG5cbiAgICAgICAgICAgICAgICBjb25zdCBvID0gZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3Q7XG4gICAgICAgICAgICAgICAgZXhwZWN0KE9iamVjdC5pcyhlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdCwgbykpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3Qub3B0aW9ucy5kZWxlZ2F0ZXNGb2N1cykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5vcHRpb25zLmRlbGVnYXRlc0ZvY3VzKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldE9wdGlvbignZGVsZWdhdGVzRm9jdXMnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoT2JqZWN0LmlzKGVsZW1lbnRbaW50ZXJuYWxTeW1ib2xdLnJlYWxTdWJqZWN0LCBvKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TLCBKU09OLnN0cmluZ2lmeSh7ZGVsZWdhdGVzRm9jdXM6IGZhbHNlfSkpO1xuICAgICAgICAgICAgICAgIC8vIGV4cGVjdChPYmplY3QuaXMoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3QsIG8pKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gZXhwZWN0KGVsZW1lbnQuZ2V0T3B0aW9uKCdkZWxlZ2F0ZXNGb2N1cycpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBleHBlY3QoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3Qub3B0aW9ucy5kZWxlZ2F0ZXNGb2N1cykudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gZXhwZWN0KE9iamVjdC5pcyhlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdCwgbykpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdzZXRPcHRpb25zKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydzaGFkb3dNb2RlJywgJ3gxJ10sXG4gICAgICAgICAgICAgICAgWyd0ZW1wbGF0ZXMubWFpbicsICd4MiddLCAvLyBpcyBleHBsaWNpdGx5IHNldCB0byB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBbJ2RlbGVnYXRlc0ZvY3VzJywgJ3g0J10sXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBuZXdWYWx1ZSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgbGV0IHRleHQgPSBrZXkgKyAnIHNob3VsZCByZXR1cm4gJyArIG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBrZXkgKyAnIHdhcyBub3Qgc2V0LCB0aGVyZWZvcmUgZGVmYXVsdCAnICsgbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICBpdCh0ZXh0LCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZC5nZXRPcHRpb24oa2V5KSkudG8uYmUubm90LmVxdWFsKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHggPSBkLnNldE9wdGlvbihrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGQuZ2V0T3B0aW9uKGtleSkpLnRvLmJlLmVxdWFsKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdnZXRPcHRpb25zKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ3NoYWRvd01vZGUnLCAnb3BlbiddLFxuICAgICAgICAgICAgICAgIFsndGVtcGxhdGVzLm1haW4nLCB1bmRlZmluZWRdLCAvLyBpcyBleHBsaWNpdGx5IHNldCB0byB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBbJ2RlbGVnYXRlc0ZvY3VzJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWyd4LnkueicsIHRydWUsIHRydWVdLCAvLyB4LnkueiBpc250IHNldCwgZGVmYXVsdFZhbHVlIGlzIHVzZWRcbiAgICAgICAgICAgICAgICBbJ3gnLCB0cnVlLCB0cnVlXSAvLyB4IGlzbnQgc2V0LCBkZWZhdWx0VmFsdWUgaXMgdXNlZFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cblxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IGtleSArICcgc2hvdWxkIHJldHVybiAnICsgdmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBrZXkgKyAnIHdhcyBub3Qgc2V0LCB0aGVyZWZvcmUgZGVmYXVsdCAnICsgZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgaXQodGV4dCwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHggPSBkLmdldE9wdGlvbihrZXksIGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh4KS50by5iZS5lcXVhbCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTNcbiAgICAgICAgICovXG4gICAgICAgIGRlc2NyaWJlKCdBc3NpZ24gQ1NTU3R5bGUgYXMgQXJyYXkgd2l0aCB3cm9uZyB0eXBlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBodG1sVEFHID0gJ21vbnN0ZXItdGVzdGNsYXNzLXgxJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDE7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cblxuICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnRYMSA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbFRBR1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3RydWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW46ICc8aDE+dGVzdDwvaDE+J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgdGhyb3cgRXhjZXB0aW9uXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGh0bWxUQUcpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmQoZCk7XG5cblxuICAgICAgICAgICAgICAgIGV4cGVjdChkaXYpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWVycm9yPVwiVHlwZUVycm9yOiB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgQ1NTU3R5bGVTaGVldFwiJyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSlcblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTNcbiAgICAgICAgICovXG4gICAgICAgIGRlc2NyaWJlKCdBc3NpZ24gQ1NTU3R5bGUgYXMgQXJyYXkgYW5kIENTU1N0eWxlc2hlZXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGh0bWxUQUcgPSAnbW9uc3Rlci10ZXN0Y2xhc3MteDExMy0yJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDExM1gyO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudFgxMTNYMiA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbFRBR1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczoge21haW46ICc8aDE+dGVzdDwvaDE+J30sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IChuZXcgQ1NTU3R5bGVTaGVldCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcy5pbnNlcnRSdWxlKCdhIHsgY29sb3IgOiByZWR9Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbc107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxMTNYMilcblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdChodG1sVEFHICsgXCIgc2hvdWxkIHRocm93IEV4Y2VwdGlvbiAyXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGh0bWxUQUcpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXEoJzxoMT50ZXN0PC9oMT4nKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzExM1xuICAgICAgICAgKi9cbiAgICAgICAgZGVzY3JpYmUoJ0Fzc2lnbiBDU1NTdHlsZSBhcyBBcnJheSBhbmQgQ1NTIGFzIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgaHRtbFRBRyA9ICdtb25zdGVyLXRlc3RjbGFzcy14MTEzLTIxJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDExM1gyMjtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnRYMTEzWDIyID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sVEFHXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7bWFpbjogJzxoMT50ZXN0PC9oMT4nfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdhIHsgY29sb3I6cmVkIH0nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnRYMTEzWDIyKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgZXEgPHN0eWxlPmEgeyBjb2xvcjpyZWQgfTwvc3R5bGU+PGgxPnRlc3Q8L2gxPlwiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChodG1sVEFHKTtcblxuICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kKGQpO1xuXG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXEoJzxzdHlsZT5hIHsgY29sb3I6cmVkIH08L3N0eWxlPjxoMT50ZXN0PC9oMT4nKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTNcbiAgICAgICAgICovXG4gICAgICAgIGRlc2NyaWJlKCdBc3NpZ24gQ1NTU3R5bGUgYXMgQXJyYXkgYW5kIENTUyBhcyBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGh0bWxUQUcgPSAnbW9uc3Rlci10ZXN0Y2xhc3MteDExMy0yMic7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcywgVGVzdENvbXBvbmVudFgxMTNYMjIzO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudFgxMTNYMjIzID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sVEFHXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7bWFpbjogJzxoMT50ZXN0PC9oMT4nfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnYSB7IGNvbG9yOnJlZCB9J107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxMTNYMjIzKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgZXEgPHN0eWxlPmEgeyBjb2xvcjpyZWQgfTwvc3R5bGU+PGgxPnRlc3Q8L2gxPlwiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChodG1sVEFHKTtcblxuICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kKGQpO1xuXG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXEoJzxzdHlsZT5hIHsgY29sb3I6cmVkIH08L3N0eWxlPjxoMT50ZXN0PC9oMT4nKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2hhc05vZGUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdChcImhhc05vZGUgbW9uc3Rlci10ZXN0Y2xhc3Mgc2hvdWxkIHJldHVybiAuLi5cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MnKTtcblxuICAgICAgICAgICAgICAgIGxldCBwMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBwMS5hcHBlbmRDaGlsZCh0MSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGxldCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ3Rlc3QnKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHAxKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHQpO1xuICAgICAgICAgICAgICAgIGQuYXBwZW5kQ2hpbGQocCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZChkKTtcblxuXG4gICAgICAgICAgICAgICAgbGV0IG4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZShuMSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUodCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZShwKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHAxKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHQxKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoXCJoYXNOb2RlIG1vbnN0ZXItdGVzdGNsYXNzMiBzaG91bGQgcmV0dXJuIC4uLlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzczInKTtcblxuICAgICAgICAgICAgICAgIGxldCBwMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBwMS5hcHBlbmRDaGlsZCh0MSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGxldCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ3Rlc3QnKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHAxKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHQpO1xuXG5cbiAgICAgICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZChkKTtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZC5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKTtcblxuICAgICAgICAgICAgICAgIGQuc2hhZG93Um9vdC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKG4xKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZSh0KSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHApKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUocDEpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUodDEpKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSlcblxuICAgIH0pO1xufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIjtcbmltcG9ydCB7Rm9jdXNNYW5hZ2VyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9mb2N1c21hbmFnZXIubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnRm9jdXNNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykuaW5uZXJIVE1MID0gJydcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIEZvY3VzTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9jdXNNYW5hZ2VyKCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgfSlcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnc3RvcmUgYW5kIHJlc3RvcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBtYW5hZ2VyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbWFuYWdlciA9IG5ldyBGb2N1c01hbmFnZXIoKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHgxXCI+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0ZXN0aXRcIiBpZD1cInR4MlwiPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidGVzdGl0XCIgaWQ9XCJ0eDNcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHg0XCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRlc3RpdFwiIHRhYmluZGV4PVwiMlwiIGlkPVwidHg1XCI+aGVsbG88L3A+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0ZXN0aXRcIiBpZD1cInR4NlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHg3XCI+PC9idXR0b24+XG4gICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50ZXN0aXQnKSkpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9ICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjAwLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMjAwLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3J1biBpc3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIG1hbmFnZXIuZm9jdXMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4MScpKTtcbiAgICAgICAgICAgIG1hbmFnZXIuc3RvcmVGb2N1cygpO1xuXG4gICAgICAgICAgICBjb25zdCBlMSA9IG1hbmFnZXIuZ2V0QWN0aXZlKCk7XG4gICAgICAgICAgICBleHBlY3QoZTEuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3IxJykudG8uYmUuZXF1YWwoJ3R4MScpO1xuXG4gICAgICAgICAgICBtYW5hZ2VyLmZvY3VzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0eDInKSk7XG5cbiAgICAgICAgICAgIG1hbmFnZXIuc3RvcmVGb2N1cygpO1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuZ2V0QWN0aXZlKCkuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3IyJykudG8uYmUuZXF1YWwoJ3R4MicpO1xuICAgICAgICAgICAgbWFuYWdlci5mb2N1c05leHQoKTtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmdldEFjdGl2ZSgpLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yMycpLnRvLmJlLmVxdWFsKCd0eDQnKTtcbiAgICAgICAgICAgIG1hbmFnZXIuZm9jdXNOZXh0KCk7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5nZXRBY3RpdmUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjQnKS50by5iZS5lcXVhbCgndHg1Jyk7XG4gICAgICAgICAgICBtYW5hZ2VyLnJlc3RvcmVGb2N1cygpO1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuZ2V0QWN0aXZlKCkuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3I1JykudG8uYmUuZXF1YWwoJ3R4MicpO1xuICAgICAgICAgICAgbWFuYWdlci5yZXN0b3JlRm9jdXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmdldEFjdGl2ZSgpLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yNicpLnRvLmJlLmVxdWFsKCd0eDEnKTtcbiAgICAgICAgICAgIG1hbmFnZXIucmVzdG9yZUZvY3VzKCk7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5nZXRBY3RpdmUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjcnKS50by5iZS5lcXVhbCgndHgxJyk7XG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgncmV0dXJudHlwZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgZm9jdXNtYW5hZ2VyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgZm9jdXNtYW5hZ2VyID0gbmV3IEZvY3VzTWFuYWdlcigpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjaGVjayByZXR1cm5zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBleHBlY3QoZm9jdXNtYW5hZ2VyLmdldEZvY3VzYWJsZSgpKS5pcy5pbnN0YW5jZW9mKEFycmF5KTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIuZ2V0QWN0aXZlKCkpLmlzLmluc3RhbmNlb2YoSFRNTEVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5mb2N1c05leHQoKSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5mb2N1c1ByZXYoKSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5zdG9yZUZvY3VzKCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIuZm9jdXMoZG9jdW1lbnQuYm9keSkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIucmVzdG9yZUZvY3VzKCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcblxuICAgICAgICB9KVxuXG4gICAgfSlcblxuXG59KTsiLCAiaW1wb3J0IHtcbiAgICBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHNcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gJ2NoYWknO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5mdW5jdGlvbiBzZXR1cFRlc3RFbnZpcm9ubWVudCgpIHtcblxuXG4gICAgY2xhc3MgVGVzdENvbXBvbmVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hTaGFkb3coe21vZGU6ICdvcGVuJ30pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjdXN0b21FbGVtZW50cy5nZXQoJ3Rlc3QtY29tcG9uZW50JykpIHtcbiAgICAgICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKCd0ZXN0LWNvbXBvbmVudCcsIFRlc3RDb21wb25lbnQpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2xlYW51cFRlc3RFbnZpcm9ubWVudCgpIHtcbiAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5kZXNjcmliZSgnZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzJywgKCkgPT4ge1xuICAgIGJlZm9yZSgoZG9uZSkgPT4ge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHNldHVwVGVzdEVudmlyb25tZW50KCk7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlcigoKSA9PiB7XG4gICAgICAgIGNsZWFudXBUZXN0RW52aXJvbm1lbnQoKTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAvLyBTZXQgdXAgdGhlIERPTVxuXG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICA8ZGl2IGlkPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgaWQ9XCJwYXJlbnRcIj5cbiAgICAgICAgICA8ZGl2IGlkPVwiY2hpbGRcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gO1xuXG4gICAgICAgIGNvbnN0IHNoYWRvd0hvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzaGFkb3dIb3N0KTtcbiAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IHNoYWRvd0hvc3QuYXR0YWNoU2hhZG93KHttb2RlOiAnb3Blbid9KTtcbiAgICAgICAgY29uc3QgaW5uZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGlubmVyRWxlbWVudC5pZCA9ICdpbm5lcic7XG4gICAgICAgIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoaW5uZXJFbGVtZW50KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmluZCB0aGUgZWxlbWVudCB3aXRoIHRoZSB0YXJnZXQgSUQgaW4gdGhlIG5vcm1hbCBET00nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoaWxkJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjaGlsZCwgJ3BhcmVudCcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFyZW50JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmaW5kIHRoZSBlbGVtZW50IHdpdGggdGhlIHRhcmdldCBJRCBpbiB0aGUgc2hhZG93IERPTScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5uZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2W3NoYWRvd3Jvb3RdID4gZGl2Jyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhpbm5lckVsZW1lbnQsICdpbm5lcicpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChpbm5lckVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCBpZiB0aGUgZWxlbWVudCB3aXRoIHRoZSB0YXJnZXQgSUQgaXMgbm90IGZvdW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGlsZCcpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoY2hpbGQsICdub25leGlzdGVudCcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5iZS5udWxsO1xuICAgIH0pO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5cbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IHdpbmRvd1JlYWR5O1xubGV0IGRvbVJlYWR5O1xuXG5kZXNjcmliZSgnUmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vcmVhZHkubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBkb21SZWFkeSA9IG1bJ2RvbVJlYWR5J107XG4gICAgICAgICAgICAgICAgd2luZG93UmVhZHkgPSBtWyd3aW5kb3dSZWFkeSddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZG9tUmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBkb21SZWFkeS50aGVuKGRvbmUpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2luZG93UmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICB3aW5kb3dSZWFkeS50aGVuKGRvbmUpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7XG4gICAgZ2V0RG9jdW1lbnQsIGdldFdpbmRvdywgZ2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmdcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcblxuaW1wb3J0IHtnZXRDb250YWluaW5nRG9jdW1lbnR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzXCI7XG5cbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluaXRKU0RPTSgpO1xuICAgIH0pXG4gICAgZGVzY3JpYmUoJ2dldERvY3VtZW50KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGRvY3VtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRXaW5kb3coKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZG9jdW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBnZXRXaW5kb3coKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXREb2N1bWVudEZyYWdtZW50RnJvbVN0cmluZygpJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyc8ZGl2PjwvZGl2PiddLFxuICAgICAgICAgICAgWyc8ZGl2PjxkaXY+MjwvZGl2PjwvZGl2PiddLFxuICAgICAgICAgICAgWyc8ZGl2PjxkaXY+MjwvZGl2PicsICc8ZGl2PjxkaXY+MjwvZGl2PjwvZGl2PiddLCAvLyB0ZXN0IGludmFsaWQgaHRtbFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmICghYikgYiA9IGE7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGRvY3VtZW50RnJhZ21lbnQgb2JqZWN0ICcgKyBhLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZyYWdtZW50ID0gZ2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmcoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGZyYWdtZW50KS50by5iZS5pbnN0YW5jZU9mKERvY3VtZW50RnJhZ21lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChmcmFnbWVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkaXYuaW5uZXJIVE1MKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdnZXRDb250YWluaW5nRG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgIGxldCAganNEb21Eb2N1bWVudDtcblxuICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAganNEb21Eb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICAgICB9KTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgLy8gICAgIGRvbS53aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgLy8gfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZ2V0Q29udGFpbmluZ0RvY3VtZW50KG51bGwpKS50by50aHJvdygnSW52YWxpZCBhcmd1bWVudC4gRXhwZWN0ZWQgYW4gSFRNTEVsZW1lbnQuJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IGNvbnRhaW5pbmcgZG9jdW1lbnQgZm9yIGFuIGVsZW1lbnQgaW4gdGhlIG1haW4gZG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5pbmdEb2N1bWVudCA9IGdldENvbnRhaW5pbmdEb2N1bWVudChlbGVtZW50KTtcblxuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5pbmdEb2N1bWVudCkudG8ubnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgY29udGFpbmluZyBkb2N1bWVudCBmb3IgYW4gZWxlbWVudCBpbnNpZGUgYSBzaGFkb3cgcm9vdCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhvc3QgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZChlbGVtZW50KTtcblxuICAgICAgICAgICAgY29uc3QgY29udGFpbmluZ0RvY3VtZW50ID0gZ2V0Q29udGFpbmluZ0RvY3VtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5pbmdEb2N1bWVudCkudG8ubm90Lm51bGw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IGNvbnRhaW5pbmcgZG9jdW1lbnQgZm9yIGFuIGVsZW1lbnQgaW5zaWRlIGEgbmVzdGVkIHNoYWRvdyByb290JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3V0ZXJIb3N0ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnN0IG91dGVyU2hhZG93Um9vdCA9IG91dGVySG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlubmVySG9zdCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBvdXRlclNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoaW5uZXJIb3N0KTtcblxuICAgICAgICAgICAgY29uc3QgaW5uZXJTaGFkb3dSb290ID0gaW5uZXJIb3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgaW5uZXJTaGFkb3dSb290LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCBjb250YWluaW5nRG9jdW1lbnQgPSBnZXRDb250YWluaW5nRG9jdW1lbnQoZWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbmluZ0RvY3VtZW50KS50by5ub3QubnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCBhdHRhY2hlZCB0byBhbnkgZG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZXRhY2hlZEVsZW1lbnQgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGV0YWNoZWRFbGVtZW50LnJlbW92ZSgpO1xuXG4gICAgICAgICAgICBjb25zdCBjb250YWluaW5nRG9jdW1lbnQgPSBnZXRDb250YWluaW5nRG9jdW1lbnQoZGV0YWNoZWRFbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChjb250YWluaW5nRG9jdW1lbnQpLnRvLmJlLm51bGw7XG4gICAgICAgIH0pO1xuICAgIH0pOyAgICBcbiAgICBcbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2dldERvY3VtZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuLy8gbGV0IGh0bWwxID0gYFxuLy8gICAgIDxkaXYgaWQ9XCJzY3JpcHRob3N0XCI+XG4vLyAgICAgPC9kaXY+XG4vLyAgICBcbi8vICAgICA8ZGl2PlxuLy8gICAgIDxcbi8vIDwvZGl2PlxuLy8gYDtcblxuXG4vLyBkZWZpbmVkIGluIGNvbnN0YW50cy5tanNcbi8vIGNvbnN0IHVwZGF0ZXJTeW1ib2xLZXkgPSBcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBvcHRpb25zLXVwZGF0ZXItbGlua1wiXG4vLyBjb25zdCB1cGRhdGVyU3ltYm9sU3ltYm9sID0gU3ltYm9sLmZvcih1cGRhdGVyU3ltYm9sS2V5KTtcblxuXG5cbmRlc2NyaWJlKCdET00nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgQ3VzdG9tRWxlbWVudCwgcmVnaXN0ZXJDdXN0b21FbGVtZW50LCBUZXN0Q29tcG9uZW50LCBkb2N1bWVudCwgVGVzdENvbXBvbmVudDIsYXNzaWduVXBkYXRlclRvRWxlbWVudDtcblxuICAgIGRlc2NyaWJlKCdpbml0RnJvbVNjcmlwdEhvc3QoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCByYW5kb21UYWdOdW1iZXIgPSBcIm1vbnN0ZXItdGVzdFwiK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApO1xuICAgICAgICBcbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vY3VzdG9tZWxlbWVudC5tanNcIikudGhlbigobSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21FbGVtZW50ID0gbVsnQ3VzdG9tRWxlbWVudCddO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50ID0gbVsncmVnaXN0ZXJDdXN0b21FbGVtZW50J107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnQyID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmFuZG9tVGFnTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluOiAnPGgxPjwvaDE+PGFydGljbGU+PHA+dGVzdDwvcD48ZGl2IGlkPVwiY29udGFpbmVyXCI+PC9kaXY+PC9hcnRpY2xlPidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50MilcblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY2FsbCBjYWxsYmFjaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgbm90IGZvdW5kIGNhbGxiYWNrIGFuZCBhZGQgZXJyb3IgYXR0cmlidXRlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYDxkaXYgaWQ9XCJjYWxsLWJhY2staG9zdFwiPjwvZGl2PjxkaXYgaWQ9XCJjb250YWluZXJcIj48L2Rpdj5gO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGxldCBjb250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChyYW5kb21UYWdOdW1iZXIpO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItc2NyaXB0LWhvc3QnLCBcImNhbGwtYmFjay1ob3N0XCIpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5hcHBlbmRDaGlsZChjb250cm9sKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5nZXRPcHRpb24oJ3Rlc3QnKSkuaXMuZXFsKDApO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sLmhhc0F0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLWVycm9yJykpLmlzLnRydWU7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGZvdW5kIGNhbGxiYWNrIGluaXRDdXN0b21Db250cm9sQ2FsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgPGRpdiBpZD1cImNhbGwtYmFjay1ob3N0XCI+PC9kaXY+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PmA7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbGwtYmFjay1ob3N0Jyk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmluaXRDdXN0b21Db250cm9sQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNldE9wdGlvbigndGVzdCcsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBsZXQgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmFuZG9tVGFnTnVtYmVyKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXNjcmlwdC1ob3N0JywgXCJjYWxsLWJhY2staG9zdFwiKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQoY29udHJvbCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuZ2V0T3B0aW9uKCd0ZXN0JykpLmlzLmVxbCgxKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1lcnJvcicpKS5pcy5mYWxzZTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGl0KCdzaG91bGQgZm91bmQgY2FsbGJhY2sgaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFjayBmcm9tIHNlbGYnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgPGRpdiBpZD1cImNhbGwtYmFjay1ob3N0XCI+PC9kaXY+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PmA7XG5cbiAgICAgICAgICAgICAgICBsZXQgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmFuZG9tVGFnTnVtYmVyKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5nZXRPcHRpb24oJ3Rlc3QnKSkuaXMuZXFsKDApO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFjayA9IGZ1bmN0aW9uIChjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0T3B0aW9uKCd0ZXN0JywgMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItc2NyaXB0LWhvc3QnLCBcImNhbGwtYmFjay1ob3N0XCIpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5hcHBlbmRDaGlsZChjb250cm9sKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5nZXRPcHRpb24oJ3Rlc3QnKSkuaXMuZXFsKDIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sLmhhc0F0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLWVycm9yJykpLmlzLmZhbHNlO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgIH0pO1xufSkiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gJ2NoYWknO1xuaW1wb3J0IHtnZXRTbG90dGVkTm9kZXN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3Nsb3R0ZWQubWpzXCI7XG5cblxuZGVzY3JpYmUoJ2dldFNsb3R0ZWROb2RlcycsICgpID0+IHtcblxuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgU2V0IGlmIHRoZXJlIGlzIG5vIFNoYWRvd1Jvb3QnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChnZXRTbG90dGVkTm9kZXMpLmlzLmEoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG5cblxufSk7XG5cbiIsICJcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7XG4gICAgYWRkQXR0cmlidXRlVG9rZW4sXG4gICAgYWRkVG9PYmplY3RMaW5rLFxuICAgIGNsZWFyQXR0cmlidXRlVG9rZW5zLFxuICAgIGNvbnRhaW5zQXR0cmlidXRlVG9rZW4sXG4gICAgZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSxcbiAgICBmaW5kQ2xvc2VzdE9iamVjdExpbmssXG4gICAgZ2V0TGlua2VkT2JqZWN0cyxcbiAgICBoYXNPYmplY3RMaW5rLFxuICAgIHJlbW92ZUF0dHJpYnV0ZVRva2VuLFxuICAgIHJlbW92ZU9iamVjdExpbmssXG4gICAgcmVwbGFjZUF0dHJpYnV0ZVRva2VuLFxuICAgIHRvZ2dsZUF0dHJpYnV0ZVRva2VuLFxuICAgIGZpbmRDbG9zZXN0QnlDbGFzc1xufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuXG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBodG1sMSwgaHRtbDIsIGh0bWwzO1xuXG5kZXNjcmliZSgnQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBodG1sMSA9IGA8ZGl2IGlkPVwidGVzdDFcIj48L2Rpdj5gO1xuICAgICAgICBodG1sMiA9IGA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8ZGl2IGlkPVwic3ViMVwiPlxuICAgICAgICA8ZGl2IGlkPVwic3ViMlwiPlxuICAgICAgICAgICAgPGRpdiBpZD1cInN1YjNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic3ViNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic3ViNVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5gO1xuICAgICAgICBcbiAgICAgICAgaHRtbDMgPSBgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInRlc3QxXCI+XG4gICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN1YjFcIiBpZD1cImExXCIgY2xhc3M9XCJzdWIxXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWIyXCIgaWQ9XCJhMlwiIGNsYXNzPVwic3ViMlwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN1YjNcIiBpZD1cImEzXCIgY2xhc3M9XCJzdWIzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN1YjRcIiBpZD1cImE0XCIgY2xhc3M9XCJzdWI0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWI1XCIgaWQ9XCJhNVwiIGNsYXNzPVwic3ViNVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5gO1xuXG5cbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdPYmplY3RMaW5rJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IFN5bWJvbCgnbXl0ZXN0Jyk7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgb2JqZWN0LWxpbmtzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9iaiA9IHthOiAxfTtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBleHBlY3QoaGFzT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGFkZFRvT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wsIG9iaik7XG4gICAgICAgICAgICBleHBlY3QoaGFzT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICBsZXQgbyA9IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgc3ltYm9sKS5uZXh0KCk7XG4gICAgICAgICAgICBleHBlY3Qoby52YWx1ZSkudG8uZXF1YWwob2JqKTtcblxuICAgICAgICAgICAgcmVtb3ZlT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpO1xuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCBzeW1ib2wpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pXG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2ZpbmRDbG9zZXN0T2JqZWN0TGluaygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IFN5bWJvbCgnbXl0ZXN0Jyk7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gb2JqZWN0bGluaycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IHN1YjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ViNCcpXG4gICAgICAgICAgICBsZXQgc3ViMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWIyJylcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHt9O1xuXG4gICAgICAgICAgICBleHBlY3QoaGFzT2JqZWN0TGluayhzdWIyLCBzeW1ib2wpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGFkZFRvT2JqZWN0TGluayhzdWIyLCBzeW1ib2wsIG9iaik7XG4gICAgICAgICAgICBleHBlY3QoaGFzT2JqZWN0TGluayhzdWIyLCBzeW1ib2wpKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGZpbmRDbG9zZXN0T2JqZWN0TGluayhzdWI0KTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5pcy5pbnN0YW5jZU9mKEhUTUxEaXZFbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSkudG8uYmUuZXF1YWwoJ3N1YjInKTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0F0dHJpYnV0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMztcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdmaW5kIGNsb3Nlc3QgQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYTUnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCB1bmRlZmluZWQsICdzdWI1J10sXG4gICAgICAgICAgICAgICAgWydhNScsICdkYXRhLW1vbnN0ZXItcm9sZScsICdzdWIzJywgJ3N1YjMnXSxcbiAgICAgICAgICAgICAgICBbJ2E1JywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTQnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCAnc3ViMScsICdzdWIxJ10sXG4gICAgICAgICAgICAgICAgWydhMycsICdkYXRhLW1vbnN0ZXItcm9sZScsICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2EyJywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgdW5kZWZpbmVkLCAnc3ViMiddLFxuICAgICAgICAgICAgICAgIFsnYTUnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCAnc3ViNScsICdzdWI1J11cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGl0KCdmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKCcgKyBhICsgJywgJyArIGIgKyAnLCcgKyBjICsgJykgc2hvdWxkIHJldHVybiAnICsgZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKSwgYiwgYykuZ2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItcm9sZScpKS50by5iZS5lcXVhbChkKTtcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTsgXG4gICAgICAgIFxuICAgICAgICBkZXNjcmliZSgnZmluZCBjbG9zZXN0IEVsZW1lbnQgd2l0aCBjbGFzcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYTUnLCAgJ3N1YjMnLCAnc3ViMyddLFxuICAgICAgICAgICAgICAgIFsnYTUnLCAgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTQnLCAgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTMnLCAgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTUnLCAgJ3N1YjUnLCAnc3ViNSddXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGl0KCdmaW5kQ2xvc2VzdEJ5Q2xhc3MoJyArIGEgKyAnLCAnICsgYiArICcpIHNob3VsZCByZXR1cm4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGZpbmRDbG9zZXN0QnlDbGFzcyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKSwgYikuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS50by5iZS5lcXVhbChjKTtcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGF0cmlidXRlS2V5ID0gJ2RhdGEtdGVzdCc7XG5cbiAgICAgICAgaXQoJ3RvZ2dsZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdmFsdWUpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXksICdhcHBsZSBiYW5hbm5hJylcbiAgICAgICAgICAgIHRvZ2dsZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAncGluYXBwbGUnKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdhcHBsZSBiYW5hbm5hIHBpbmFwcGxlJyk7XG4gICAgICAgICAgICB0b2dnbGVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgYmFuYW5uYScpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdhZGRBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAncGluYXBwbGUnKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdwaW5hcHBsZScpO1xuICAgICAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdiYW5hbm5hJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgncGluYXBwbGUgYmFuYW5uYScpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdyZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSwgJ2FwcGxlIGJhbmFubmEgbGVtbW9uJylcbiAgICAgICAgICAgIHJlbW92ZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAncGluYXBwbGUnKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdhcHBsZSBiYW5hbm5hIGxlbW1vbicpO1xuICAgICAgICAgICAgcmVtb3ZlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdiYW5hbm5hJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgbGVtbW9uJyk7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJykpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXksICdhcHBsZSBiYW5hbm5hJylcbiAgICAgICAgICAgIGV4cGVjdChjb250YWluc0F0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAncGluYXBwbGUnKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ2JhbmFubmEnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChjb250YWluc0F0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAnYXBwbGUnKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCcgcmVwbGFjZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdmFsdWUpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0cmlidXRlS2V5LCAnYXBwbGUgYmFuYW5uYSB0b21hdG8nKVxuICAgICAgICAgICAgcmVwbGFjZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAndG9tYXRvJywgJ2xlbW1vbicpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ2FwcGxlIGJhbmFubmEgbGVtbW9uJyk7XG4gICAgICAgICAgICByZXBsYWNlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdiYW5hbm5hJywgJ3BlYXInKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdhcHBsZSBwZWFyIGxlbW1vbicpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjbGVhckF0dHJpYnV0ZVRva2VucyhlbGVtZW50LCBrZXkpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0cmlidXRlS2V5LCAnYXBwbGUgYmFuYW5uYScpXG4gICAgICAgICAgICBjbGVhckF0dHJpYnV0ZVRva2VucyhlbGVtZW50LCBhdHJpYnV0ZUtleSk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnJyk7XG5cbiAgICAgICAgfSlcblxuXG4gICAgfSlcbn0pIiwgIid1c2Ugc3RyaWN0JztcblxuXG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxubGV0IFJlc291cmNlLERlcml2ZWRSZXNvdXJjZTtcblxuXG5cbmRlc2NyaWJlKCdSZXNvdXJjZScsIGZ1bmN0aW9uKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgUmVzb3VyY2UgPSBtWydSZXNvdXJjZSddO1xuXG5cbiAgICAgICAgICAgICAgICBEZXJpdmVkUmVzb3VyY2UgPSBjbGFzcyAgZXh0ZW5kcyBSZXNvdXJjZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS11cmxcIjogXCJodHRwOi8vZXhhbXBsZS5jb21cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGF0YS11cmwnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0Rlcml2ZWRSZXNvdXJjZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlb2YgUmVzb3VyY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IERlcml2ZWRSZXNvdXJjZSgpKS50by5iZS5hbi5pbnN0YW5jZW9mKFJlc291cmNlKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge1Jlc291cmNlTWFuYWdlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2VtYW5hZ2VyLm1qc1wiO1xuaW1wb3J0IHtjbGVhbnVwRE9NRnJvbVRlc3RpbmcsIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZ30gZnJvbSBcIi4uLy4uL3V0aWwvY2xlYW51cGRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ1Jlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBmZXRjaFJlZmVyZW5jZSwgcmV0dXJuU3RhdHVzO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuXG4gICAgICAgIHJldHVyblN0YXR1cyA9IDIwMDtcbiAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICBpZiAoIXVybCkgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVybCcpXG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmV0dXJuU3RhdHVzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH07XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ25ldyBSZXNvdXJjZU1hbmFnZXIoKSBzaG91bGQgcmV0dXJuIFJlc291cmNlTWFuYWdlciBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBSZXNvdXJjZU1hbmFnZXIoKTtcbiAgICAgICAgICAgIGV4cGVjdChkKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2xvYWQgcmVzb3VyY2VzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtYW5hZ2VyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbWFuYWdlciA9IG5ldyBSZXNvdXJjZU1hbmFnZXIoKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnYWRkIHNjcmlwdCBzaG91bGQgaW5zdGFuY2Ugb2YgUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkU2NyaXB0KCcvZXhhbXBsZS5qcycpKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhZGQgc3R5bGUgc2hvdWxkIGluc3RhbmNlIG9mIFJlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZFN0eWxlc2hlZXQoJy9zdHlsZS5qcycpKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhZGQgZGF0YSBzaG91bGQgaW5zdGFuY2Ugb2YgUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkRGF0YSgnL2RhdGEuanNvbicpKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjb25uZWN0IHJlc291cmNlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdhZGQgc2NyaXB0IGFuZCBjb25uZWN0IHNob3VsZCBpbnN0YW5jZSBvZiBSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkU2NyaXB0KCcvZXhhbXBsZS5qcycpLmNvbm5lY3QoKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdhZGQgc3R5bGUgYW5kIGNvbm5lY3Qgc2hvdWxkIGluc3RhbmNlIG9mIFJlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGRTdHlsZXNoZWV0KCcvc3R5bGUuanMnKS5jb25uZWN0KCkpLnRvLmJlLmluc3RhbmNlT2YoUmVzb3VyY2VNYW5hZ2VyKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnYWRkIGRhdGEgYW5kIGNvbm5lY3QgIHNob3VsZCBpbnN0YW5jZSBvZiBSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkRGF0YSgnL2RhdGEuanNvbicpLmNvbm5lY3QoKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cblxuICAgICAgICBkZXNjcmliZSgnY2hlY2sgYXZhaWxhYmlsaXR5IHJlc291cmNlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdhZGQgc2NyaXB0IGFuZCBjaGVjayBhdmFpbGFiaWxpdHkgc2hvdWxkIHJldHVybiBQcm9taXNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZFNjcmlwdCgnL2V4YW1wbGUuanMnKS5hdmFpbGFibGUoKSkudG8uYmUuaW5zdGFuY2VPZihQcm9taXNlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnYWRkIHN0eWxlIGFuZCBjaGVjayBhdmFpbGFiaWxpdHkgc2hvdWxkIHNob3VsZCByZXR1cm4gUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGRTdHlsZXNoZWV0KCcvc3R5bGUuanMnKS5hdmFpbGFibGUoKSkudG8uYmUuaW5zdGFuY2VPZihQcm9taXNlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnYWRkIGRhdGEgYW5kIGNoZWNrIGF2YWlsYWJpbGl0eSAgc2hvdWxkIHNob3VsZCByZXR1cm4gUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGREYXRhKCcvZGF0YS5qc29uJykuYXZhaWxhYmxlKCkpLnRvLmJlLmluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY2hlY2sgYXZhaWxhYmlsaXR5IGV4YW1wbGUuanNvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdhZGQgZGF0YSBhbmQgY2hlY2sgY29udGVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbWFuYWdlci5hZGREYXRhKCdodHRwczovL2V4YW1wbGUuY29tL2V4YW1wbGUuanNvbicpLmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLm91dGVySFRNTCkuY29udGFpbnMoJz57XCJhXCI6XCJ0ZXN0XCJ9PC9zY3JpcHQ+PC9oZWFkPicpO1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IEFUVFJJQlVURVBSRUZJWCwgQXNzZW1ibGVyIH07XG5cbi8qKlxuICogYXR0cmlidXRlIHByZWZpeFxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURVBSRUZJWCA9IFwiZGF0YS1tb25zdGVyLVwiO1xuXG4vKipcbiAqIEFzc2VtYmxlciBjbGFzc1xuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQWxsb3dzIHlvdSB0byBidWlsZCBhbiBodG1sIGZyYWdtZW50XG4gKi9cbmNsYXNzIEFzc2VtYmxlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHtEb2N1bWVudEZyYWdtZW50fSBmcmFnbWVudFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZnVuY3Rpb24gaXMgbm90IGRlZmluZWRcblx0ICovXG5cdGNvbnN0cnVjdG9yKGZyYWdtZW50KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmF0dHJpYnV0ZVByZWZpeCA9IEFUVFJJQlVURVBSRUZJWDtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKGZyYWdtZW50LCBnZXRHbG9iYWxGdW5jdGlvbihcIkRvY3VtZW50RnJhZ21lbnRcIikpO1xuXHRcdHRoaXMuZnJhZ21lbnQgPSBmcmFnbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG5cdCAqIEByZXR1cm4ge0Fzc2VtYmxlcn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICovXG5cdHNldEF0dHJpYnV0ZVByZWZpeChwcmVmaXgpIHtcblx0XHR2YWxpZGF0ZVN0cmluZyhwcmVmaXgpO1xuXHRcdHRoaXMuYXR0cmlidXRlUHJlZml4ID0gcHJlZml4O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldEF0dHJpYnV0ZVByZWZpeCgpIHtcblx0XHRyZXR1cm4gdGhpcy5hdHRyaWJ1dGVQcmVmaXg7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtQcm94eU9ic2VydmVyfHVuZGVmaW5lZH0gZGF0YVxuXHQgKiBAcmV0dXJuIHtEb2N1bWVudEZyYWdtZW50fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKi9cblx0Y3JlYXRlRG9jdW1lbnRGcmFnbWVudChkYXRhKSB7XG5cdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZGF0YSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKGRhdGEsIFByb3h5T2JzZXJ2ZXIpO1xuXHRcdGNvbnN0IGZyYWdtZW50ID0gdGhpcy5mcmFnbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0cmV0dXJuIGZyYWdtZW50O1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtBVFRSSUJVVEVQUkVGSVgsIEFzc2VtYmxlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vYXNzZW1ibGVyLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnQXNzZW1ibGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluaXRKU0RPTSgpO1xuICAgIH0pXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZURvY3VtZW50RnJhZ21lbnQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gPGRpdj5PbmU8L2Rpdj48ZGl2PlR3bzwvZGl2PicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoJzxkaXY+T25lPC9kaXY+PGRpdj5Ud288L2Rpdj4nKTtcblxuICAgICAgICAgICAgbGV0IGYgPSBuZXcgQXNzZW1ibGVyKGZyYWdtZW50KTtcblxuICAgICAgICAgICAgLy8gY29udmVydCB0byBzdHJpbmdcbiAgICAgICAgICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChmLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS5jbG9uZU5vZGUodHJ1ZSkpO1xuXG4gICAgICAgICAgICBleHBlY3QoY29udGFpbmVyLmlubmVySFRNTCkudG8uYmUuZXF1YWwoJzxkaXY+T25lPC9kaXY+PGRpdj5Ud288L2Rpdj4nKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBEb2N1bWVudEZyYWdtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IEFzc2VtYmxlcihkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgZXhwZWN0KGQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS50by5iZS5pbnN0YW5jZU9mKERvY3VtZW50RnJhZ21lbnQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCduZXcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgUmVuZGVyZXIoKSBzaG91bGQgcmV0dXJuIEFzc2VtYmxlciBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBBc3NlbWJsZXIoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgIGV4cGVjdChkKS50by5iZS5pbnN0YW5jZU9mKEFzc2VtYmxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEF0dHJpYnV0ZVByZWZpeCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAnICsgQVRUUklCVVRFUFJFRklYLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBBc3NlbWJsZXIoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgIGV4cGVjdChkLmdldEF0dHJpYnV0ZVByZWZpeCgpKS50by5iZS5lcXVhbChBVFRSSUJVVEVQUkVGSVgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzZXRBdHRyaWJ1dGVQcmVmaXgoKS5nZXRBdHRyaWJ1dGVQcmVmaXgoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gc2FtZSB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IEFzc2VtYmxlcihkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgZXhwZWN0KGQuc2V0QXR0cmlidXRlUHJlZml4KCd0ZXN0MDEnKS5nZXRBdHRyaWJ1dGVQcmVmaXgoKSkudG8uYmUuZXF1YWwoJ3Rlc3QwMScpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtnZXREb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxuZGVzY3JpYmUoJ0RPTScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBDdXN0b21Db250cm9sLCByZWdpc3RlckN1c3RvbUVsZW1lbnQsIFRlc3RDb21wb25lbnQsIGRvY3VtZW50LCBqc2RvbUZsYWc7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKHt9KS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIG0ucG9seWZpbGwoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBqc2RvbSBkb2VzIG5vdCBzdXBwb3J0IEVsZW1lbnRJbnRlcm5hbHNcbiAgICAgICAgICAgIGpzZG9tRmxhZyA9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoXCJqc2RvbVwiKTtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiKS50aGVuKChtKSA9PiB7XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQgPSBtWydyZWdpc3RlckN1c3RvbUVsZW1lbnQnXTtcblxuXG4gICAgICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21jb250cm9sLm1qc1wiKS50aGVuKChtKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21Db250cm9sID0gbVsnQ3VzdG9tQ29udHJvbCddO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50ID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21Db250cm9sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtb25zdGVyLWN1c3RvbWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdmb3JtRGlzYWJsZWRDYWxsYmFjaygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBcbiAgICAgICAgbGV0IGVsZW1lbnRcbiAgICAgICAgXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBUZXN0Q29tcG9uZW50MiA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24uXG4gICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gZGVzY3JpcHRpb24gb2YgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibW9uc3Rlci1jdXN0b21jb250cm9sMlwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnQyKVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChlKS50by5iZS5ub3QubnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wyJyk7XG5cbiAgICAgICAgfSlcbiAgICAgICAgXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5mb3JtRGlzYWJsZWRDYWxsYmFjaygpKS50by5iZS51bmRlZmluZWQ7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZm9ybURpc2FibGVkQ2FsbGJhY2sodHJ1ZSkpLnRvLmJlLnVuZGVmaW5lZDtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGV4cGVjdChkKS50by5ub3QuYmUubnVsbDtcbiAgICAgICAgICAgIFxuICAgICAgICB9KTtcblxuICAgIH0pXG5cblxuICAgIGRlc2NyaWJlKCdDdXN0b21Db250cm9sKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgY2xlYW51cERPTUZyb21UZXN0aW5nKCk7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gY3VzdG9tLWVsZW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBkXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZCA9IG5ldyBUZXN0Q29tcG9uZW50KCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZSkudG8uYmUubnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGQpLmlzLmVxdWFsKCdvYmplY3QnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY29ubmVjdCBlbXB0eSBlbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ2RvY3VtZW50IHNob3VsZCBjb250YWluIG1vbnN0ZXItY3VzdG9tY29udHJvbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykuYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpLmxlbmd0aCkuaXMuZXF1YWwoMSk7XG4gICAgICAgICAgICAgICAgLy8gbm8gZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2wobW9uc3RlclVwZGF0ZXIpXCIgYmVjYXVzZSBpdCBoYXMgbm90aGluZyB0byB1cGRhdGUgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWN1c3RvbWNvbnRyb2wgZGF0YS1tb25zdGVyLWVycm9yPVwiRXJyb3I6IGh0bWwgaXMgbm90IHNldC5cIj48L21vbnN0ZXItY3VzdG9tY29udHJvbD4nKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGRlc2NyaWJlKCdPcHRpb25zIGNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIGl0KCdkZWxlZ2F0ZXNGb2N1cyBzaG91bGQgY2hhbmdlIGZyb20gdHJ1ZSB0byBmYWxzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIC8vICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKVxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldE9wdGlvbignZGVsZWdhdGVzRm9jdXMnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgLy8gICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlMsIEpTT04uc3RyaW5naWZ5KHtkZWxlZ2F0ZXNGb2N1czogZmFsc2V9KSk7XG4gICAgICAgIC8vICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0T3B0aW9uKCdkZWxlZ2F0ZXNGb2N1cycpKS50by5iZS5mYWxzZTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgfSwgMTApO1xuICAgICAgICAvLyAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIH0pLnRpbWVvdXQoMTAwKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gfSlcblxuICAgICAgICBkZXNjcmliZSgnVGVzdCBFbGVtZW50SW50ZXJuYWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgZm9ybTtcblxuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCdmb3JtQXNzb2NpYXRlZCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLmNvbnN0cnVjdG9yLmZvcm1Bc3NvY2lhdGVkKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2Zvcm0nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5mb3JtKS50by5iZS5pbnN0YW5jZW9mKEhUTUxGb3JtRWxlbWVudClcblxuICAgICAgICAgICAgICAgIC8vIGlmIChqc2RvbUZsYWcpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgZXhwZWN0KCgpID0+IGQuZm9ybSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICAgICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGV4cGVjdChkLmZvcm0pLnRvLmJlLmluc3RhbmNlb2YoSFRNTEZvcm1FbGVtZW50KVxuICAgICAgICAgICAgICAgIC8vIH1cblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3ZhbHVlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBkLnZhbHVlKS50by50aHJvdyhFcnJvcik7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndmFsdWUgc2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IGQudmFsdWUgPSA0KS50by50aHJvdyhFcnJvcik7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2V0Rm9ybVZhbHVlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ25hbWUgZ2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGQubmFtZSkudG8uYmUubnVsbDtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCd0eXBlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLnR5cGUpLnRvLmJlLmVxdWFsKCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCd2YWxpZGl0eSBnZXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndmFsaWRhdGlvbk1lc3NhZ2UgZ2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnd2lsbFZhbGlkYXRlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0KCdjaGVja1ZhbGlkaXR5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdyZXBvcnRWYWxpZGl0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIGl0KCdzZXRWYWxpZGl0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLnNldFZhbGlkaXR5KHsndmFsdWVNaXNzaW5nJzogdHJ1ZX0sIFwibXkgbWVzc2FnZVwiKSkudG8uYmUudW5kZWZpbmVkO1xuXG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG59KTtcblxuXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtBVFRSSUJVVEVfVEhFTUVfTkFNRX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQge2ZpbmREb2N1bWVudFRlbXBsYXRlLCBUZW1wbGF0ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdGVtcGxhdGUubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1RlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaW5pdEpTRE9NKCk7XG4gICAgfSlcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgPHRlbXBsYXRlIGlkPVwibXl0ZW1wbGF0ZVwiPjwvdGVtcGxhdGU+YDtcbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUgSFRNTEZyYWdtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBbXG4gICAgICAgICAgICBbXCI8ZGl2PmZpcnN0PC9kaXY+PGRpdj5zZWNvbmQ8L2Rpdj5cIl0sXG4gICAgICAgICAgICBbXCI8ZGl2PmZpcnN0PC9kaXY+XCJdLFxuICAgICAgICAgICAgW1wiPGRpdj5maXJzdDwvZGl2PjxwPnNlY29uZDwvcD5cIl1cblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ25ldyBUZW1wbGF0ZSgpLmdldE5ld0RvY3VtZW50RnJhZ21lbnRBc1N0cmluZygpIHNob3VsZCByZXR1cm4gc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYTtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250YWluZXIuaW5uZXJIVE1MKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgVGVtcGxhdGUoKSBzaG91bGQgcmV0dXJuIGRvY3VtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IFRlbXBsYXRlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJykpO1xuICAgICAgICAgICAgZXhwZWN0KGQpLnRvLmJlLmluc3RhbmNlT2YoVGVtcGxhdGUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuZ2V0VGVtcGxhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgVGVtcGxhdGUoKS5nZXRUZW1wbGF0ZUVsZW1lbnQoKSBzaG91bGQgcmV0dXJuIEhUTUxUZW1wbGF0ZUVsZW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBuZXcgVGVtcGxhdGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKSk7XG4gICAgICAgICAgICBleHBlY3QoZC5nZXRUZW1wbGF0ZUVsZW1lbnQoKSkudG8uYmUuaW5zdGFuY2VPZihIVE1MVGVtcGxhdGVFbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmZpbmREb2N1bWVudFRlbXBsYXRlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgVGVtcGxhdGUgbm90IGZvdW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpbmREb2N1bWVudFRlbXBsYXRlKFwibm93YXlcIiwgZGl2KVxuICAgICAgICAgICAgfSkudG8udGhyb3dzKEVycm9yKTtcbiAgICAgICAgfSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuZmluZERvY3VtZW50VGVtcGxhdGUoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ1RlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBmaW5kIHRlbXBsYXRlIG92ZXIgb3duZXJEb2N1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBkaXYucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUw7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IHQgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15dGVtcGxhdGVcIiwgZGl2KTtcbiAgICAgICAgICAgICAgICBleHBlY3QodCkuaXMuaW5zdGFuY2VvZihUZW1wbGF0ZSk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdUaG1lbmVkIFRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG1lbUF0dHJpYnV0ZVZhbHVlO1xuXG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15dGVtcGxhdGVcIj48cD4xPC9wPjwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15dGVtcGxhdGUtbW9uc3RlclwiPjxwPjI8L3A+PC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlkPVwibXl0ZW1wbGF0ZS10ZXN0dGhlbWVcIj48cD40PC9wPjwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15cHJlZml4LW15dGVtcGxhdGUtbW9uc3RlclwiPjxwPjM8L3A+PC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJyk7XG4gICAgICAgICAgICAgICAgaWYgKGh0bWwuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKSkge1xuICAgICAgICAgICAgICAgICAgICBtZW1BdHRyaWJ1dGVWYWx1ZSA9IGh0bWwuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaHRtbC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWVtQXR0cmlidXRlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUsIG1lbUF0dHJpYnV0ZVZhbHVlKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGZpbmQgdGVtcGxhdGUgb3ZlciBvd25lckRvY3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBodG1sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci10ZW1wbGF0ZS1wcmVmaXgnLCAnbXlwcmVmaXgnKVxuICAgICAgICAgICAgICAgIGRpdi5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15dGVtcGxhdGVcIiwgZGl2KTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDEpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0MS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkudGV4dENvbnRlbnQpLmlzLmVxdWFsKFwiM1wiKTtcblxuICAgICAgICAgICAgICAgIGRpdi5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci10ZW1wbGF0ZS1wcmVmaXgnKVxuICAgICAgICAgICAgICAgIGxldCB0MiA9IGZpbmREb2N1bWVudFRlbXBsYXRlKFwibXl0ZW1wbGF0ZVwiLCBkaXYpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0MikuaXMuaW5zdGFuY2VvZihUZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS50ZXh0Q29udGVudCkuaXMuZXF1YWwoXCIyXCIpO1xuXG4gICAgICAgICAgICAgICAgaHRtbC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUsJ3Rlc3R0aGVtZScpO1xuICAgICAgICAgICAgICAgIGxldCBhPSBodG1sLm91dGVySFRNTDtcbiAgICAgICAgICAgICAgICBsZXQgdDMgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15dGVtcGxhdGVcIiwgZGl2KTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDMpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0My5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkudGV4dENvbnRlbnQpLmlzLmVxdWFsKFwiNFwiKTtcblxuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7ZmlyZUV2ZW50LCBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCwgZmlyZUN1c3RvbUV2ZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdFdmVudHMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBpbml0SlNET00oKTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2ZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZpbmQgb2JqZWN0JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3RlcicsICdoZWxsbycpO1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGRpdik7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZSA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCAnZGF0YS1tb25zdGVyJyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXInKSkudG8uYmUuZXF1YWwoJ2hlbGxvJylcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZmlyZUV2ZW50KGRpdiwgJ2NsaWNrJyk7XG4gICAgICAgICAgICB9LCAwKVxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZmlyZUV2ZW50KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIGNsaWNrIGV2ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZmlyZUV2ZW50KGRpdiwgJ2NsaWNrJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZmlyZUV2ZW50KGRpdiwgJ3RvdWNoJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50IG9uIGNvbGxlY3Rpb24nLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKCdkaXYnKTtcblxuXG4gICAgICAgICAgICBmaXJlRXZlbnQoY29sbGVjdGlvbiwgJ3RvdWNoJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnZGl2Jyk7XG5cblxuICAgICAgICAgICAgZmlyZUV2ZW50KGNvbGxlY3Rpb24sICd0b3VjaCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGZpcmVFdmVudCh7fSwgJ3RvdWNoJykpLnRvLnRocm93KEVycm9yKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdmaXJlQ3VzdG9tRXZlbnQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgY2xpY2sgZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBmaXJlQ3VzdG9tRXZlbnQoZGl2LCAnY2xpY2snKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBmaXJlQ3VzdG9tRXZlbnQoZGl2LCAndG91Y2gnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQgb24gY29sbGVjdGlvbjEnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwuZGV0YWlsICE9PSAnaGVsbG8gd29ybGQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKCdkaXYnKTtcblxuICAgICAgICAgICAgZmlyZUN1c3RvbUV2ZW50KGNvbGxlY3Rpb24sICd0b3VjaCcsIFwiaGVsbG8gd29ybGRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50IG9uIGNvbGxlY3Rpb24yJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsLmEgIT09ICdoZWxsbyB3b3JsZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgnZXJyb3InKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdicpO1xuXG4gICAgICAgICAgICBmaXJlQ3VzdG9tRXZlbnQoY29sbGVjdGlvbiwgJ3RvdWNoJywge2E6IFwiaGVsbG8gd29ybGRcIn0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdicpO1xuXG5cbiAgICAgICAgICAgIGZpcmVDdXN0b21FdmVudChjb2xsZWN0aW9uLCAndG91Y2gnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBmaXJlQ3VzdG9tRXZlbnQoe30sICd0b3VjaCcpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vZGF0YXNvdXJjZS5tanNcIjtcblxuZXhwb3J0IHsgRG9tU3RvcmFnZSB9O1xuXG4vKipcbiAqIFRoZSBEb21TdG9yYWdlIGlzIGEgY2xhc3MgdGhhdCBzdG9yZXMgZGF0YSBpbiBtZW1vcnkuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBEb21TdG9yYWdlIGV4dGVuZHMgRGF0YXNvdXJjZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhc291cmNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UvZG9tLXN0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGRlZmF1bHRzXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkZWZhdWx0cy5yZWFkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkZWZhdWx0cy5yZWFkLnNlbGVjdG9yXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkZWZhdWx0cy53cml0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZGVmYXVsdHMud3JpdGUuc2VsZWN0b3Jcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHJlYWQ6IHtcblx0XHRcdFx0c2VsZWN0b3I6IHVuZGVmaW5lZCxcblx0XHRcdH0sXG5cdFx0XHR3cml0ZToge1xuXHRcdFx0XHRzZWxlY3RvcjogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlIHJlYWQgc2VsZWN0b3IgaXMgbm90IGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGFyZSBubyBzdG9yYWdlIGVsZW1lbnRcblx0ICovXG5cdHJlYWQoKSB7XG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldE9wdGlvbihcInJlYWQuc2VsZWN0b3JcIiwgdW5kZWZpbmVkKTtcblx0XHRpZiAoIXNlbGVjdG9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcmVhZCBzZWxlY3RvciBpcyBub3QgZGVmaW5lZFwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBzdG9yYWdlID0gZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzKHRoaXMsIHNlbGVjdG9yKTtcblx0XHRpZiAoIXN0b3JhZ2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIHN0b3JhZ2UgZWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZS5pbm5lckhUTUwpO1xuXHRcdFx0XHR0aGlzLnNldChkYXRhKTtcblx0XHRcdFx0cmVzb2x2ZShkYXRhKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGUgd3JpdGUgc2VsZWN0b3IgaXMgbm90IGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGFyZSBubyBzdG9yYWdlIGVsZW1lbnRcblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5zZWxlY3RvclwiKTtcblx0XHRpZiAoIXNlbGVjdG9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgb3B0aW9uIHdyaXRlLnNlbGVjdG9yIGlzIG5vdCBkZWZpbmVkXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHN0b3JhZ2UgPSBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHModGhpcywgc2VsZWN0b3IpO1xuXHRcdGlmICghc3RvcmFnZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gc3RvcmFnZSBlbGVtZW50XCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRzdG9yYWdlLmlubmVySFRNTCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0KCkpO1xuXHRcdFx0XHRyZXNvbHZlKHN0b3JhZ2UpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtEb21TdG9yYWdlfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9kb20ubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1NlcnZlRG9tcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGl0KCdzaG91bGQgaW5pdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBkb20gPSBuZXcgRG9tU3RvcmFnZSh7XG4gICAgICAgICAgICBcbiAgICAgICAgfSlcblxuICAgICAgICBleHBlY3QoZG9tKS50by5iZS5ub3QubnVsbFxuXG5cbiAgICB9KVxuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vLi4vZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IFN0b3JhZ2UsIHN0b3JhZ2VPYmplY3RTeW1ib2wgfSBmcm9tIFwiLi4vc3RvcmFnZS5tanNcIjtcblxuZXhwb3J0IHsgTG9jYWxTdG9yYWdlIH07XG5cbi8qKlxuICogVGhlIExvY2FsU3RvcmFnZSBEYXRhc291cmNlIHByb3ZpZGVzIGEgZGF0YSBzdG9yZSBpbiB0aGUgYnJvd3NlciBsb2NhbFN0b3JhZ2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIExvY2FsU3RvcmFnZSBleHRlbmRzIFN0b3JhZ2Uge1xuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtleHRlcm5hbDpsb2NhbFN0b3JhZ2V9XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRbc3RvcmFnZU9iamVjdFN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIGdldEdsb2JhbE9iamVjdChcImxvY2FsU3RvcmFnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UvbG9jYWxzdG9yYWdlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSBjbG9uZVxuXHQgKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IExvY2FsU3RvcmFnZShcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLmtleSxcblx0XHQpO1xuXHR9XG59XG4iLCAiZnVuY3Rpb24gY3JlYXRlU3RvcmFnZSgpIHtcbiAgICBcbiAgICBsZXQgVU5TRVQgPSBTeW1ib2woKTtcbiAgICBsZXQgcyA9IHt9LFxuICAgICAgICBub29wQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgIH0sXG4gICAgICAgIF9pdGVtSW5zZXJ0aW9uQ2FsbGJhY2sgPSBub29wQ2FsbGJhY2s7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ3NldEl0ZW0nLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChrLCB2ID0gVU5TRVQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodiA9PT0gVU5TRVQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldEl0ZW0nIG9uICdTdG9yYWdlJzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IDEgcHJlc2VudC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgayA9IGsgKyAnJztcbiAgICAgICAgICAgICAgICBpZiAoIXMuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgX2l0ZW1JbnNlcnRpb25DYWxsYmFjayhzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNba10gPSB2ICsgJyc7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICdnZXRJdGVtJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBrID0+IHtcbiAgICAgICAgICAgICAgICBrID0gayArICcnO1xuICAgICAgICAgICAgICAgIGlmIChzLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzW2tdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ3JlbW92ZUl0ZW0nLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGsgPT4ge1xuICAgICAgICAgICAgICAgIGsgPSBrICsgJyc7XG4gICAgICAgICAgICAgICAgaWYgKHMuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNba107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAnY2xlYXInLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrIGluIHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzW2tdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAnbGVuZ3RoJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzKS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgXCJrZXlcIiwge1xuICAgICAgICB2YWx1ZTogayA9PiB7XG4gICAgICAgICAgICBsZXQga2V5ID0gT2JqZWN0LmtleXMocylba107XG4gICAgICAgICAgICByZXR1cm4gKCFrZXkpID8gbnVsbCA6IGtleTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ2l0ZW1JbnNlcnRpb25DYWxsYmFjaycsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gX2l0ZW1JbnNlcnRpb25DYWxsYmFjaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB2ID0+IHtcbiAgICAgICAgICAgIGlmICghdiB8fCB0eXBlb2YgdiAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdiA9IG5vb3BDYWxsYmFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9pdGVtSW5zZXJ0aW9uQ2FsbGJhY2sgPSB2O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHM7XG59XG5cblxuZXhwb3J0IHtjcmVhdGVTdG9yYWdlfTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0xvY2FsU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzXCI7XG5pbXBvcnQge2NyZWF0ZVN0b3JhZ2V9IGZyb20gXCIuLi8uLi8uLi8uLi91dGlsL2xvY2Fsc3RvcmFnZS5tanNcIjtcblxuXG5sZXQgbG9jYWxTdG9yYWdlUmVmZXJlbmNlO1xuXG5kZXNjcmliZSgnTG9jYWxTdG9yYWdlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZ2xvYmFsVGhpc1snbG9jYWxTdG9yYWdlJ10gPSBsb2NhbFN0b3JhZ2VSZWZlcmVuY2U7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsb2NhbFN0b3JhZ2VSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydsb2NhbFN0b3JhZ2UnXVxuICAgICAgICBnbG9iYWxUaGlzWydsb2NhbFN0b3JhZ2UnXSA9IGNyZWF0ZVN0b3JhZ2UoKTtcblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIExvY2FsU3RvcmFnZSAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTG9jYWxTdG9yYWdlKCdteWtleScpKS50by5iZS5pbnN0YW5jZW9mKExvY2FsU3RvcmFnZSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVhZCBzaG91bGQgcmV0dXJuIG9iamVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBMb2NhbFN0b3JhZ2UoJ215a2V5JylcbiAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IExvY2FsU3RvcmFnZSgnbXlrZXknKVxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG5cbn0pIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi8uLi9kYXRhc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgU3RvcmFnZSwgc3RvcmFnZU9iamVjdFN5bWJvbCB9IGZyb20gXCIuLi9zdG9yYWdlLm1qc1wiO1xuXG5leHBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9O1xuXG4vKipcbiAqIFRoZSBTZXNzaW9uU3RvcmFnZSBjbGFzcyBwcm92aWRlcyBhIGRhdGEgc291cmNlIHRoYXQgdXNlcyB0aGUgU2Vzc2lvblN0b3JhZ2UgQVBJIG9uIHRoZSBjbGllbnQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIFNlc3Npb25TdG9yYWdlIGV4dGVuZHMgU3RvcmFnZSB7XG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge2V4dGVybmFsOnNlc3Npb25TdG9yYWdlfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0W3N0b3JhZ2VPYmplY3RTeW1ib2xdKCkge1xuXHRcdHJldHVybiBnZXRHbG9iYWxPYmplY3QoXCJzZXNzaW9uU3RvcmFnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uLXN0b3JhZ2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSBDbG9uZVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtTZXNzaW9uU3RvcmFnZX1cblx0ICovXG5cdGdldENsb25lKCkge1xuXHRcdHJldHVybiBuZXcgU2Vzc2lvblN0b3JhZ2UoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXS5rZXksXG5cdFx0KTtcblx0fVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtTZXNzaW9uU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS5tanNcIjtcbmltcG9ydCB7Y3JlYXRlU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvbG9jYWxzdG9yYWdlLm1qc1wiO1xuXG5cbmxldCBzdG9yYWdlUmVmZXJlbmNlO1xuXG5kZXNjcmliZSgnU2Vzc2lvblN0b3JhZ2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydzZXNzaW9uU3RvcmFnZSddID0gc3RvcmFnZVJlZmVyZW5jZTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHN0b3JhZ2VSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydzZXNzaW9uU3RvcmFnZSddXG4gICAgICAgIGdsb2JhbFRoaXNbJ3Nlc3Npb25TdG9yYWdlJ10gPSBjcmVhdGVTdG9yYWdlKCk7XG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBTZXNzaW9uU3RvcmFnZSAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgU2Vzc2lvblN0b3JhZ2UoJ215a2V5JykpLnRvLmJlLmluc3RhbmNlb2YoU2Vzc2lvblN0b3JhZ2UpXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncncnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3JlYWQgc2hvdWxkIHJldHVybiBvYmplY3QnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgU2Vzc2lvblN0b3JhZ2UoJ215a2V5JylcbiAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IFNlc3Npb25TdG9yYWdlKCdteWtleScpXG4gICAgICAgICAgICBkcy53cml0ZSgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSkiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNPYmplY3QgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uL2RhdGFzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBkaWZmIH0gZnJvbSBcIi4uL2RpZmYubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBQaXBlIH0gZnJvbSBcIi4uL3BpcGUubWpzXCI7XG5cbmV4cG9ydCB7IFNlcnZlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzZXJ2ZXJWZXJzaW9uU3ltYm9sID0gU3ltYm9sKFwic2VydmVyVmVyc2lvblwiKTtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgc2VydmVyIGRhdGEgc291cmNlc1xuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIFNlcnZlciBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBhIHNlcnZlciBkYXRhc291cmNlXG4gKi9cbmNsYXNzIFNlcnZlciBleHRlbmRzIERhdGFzb3VyY2Uge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlclwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIHByZXBhcmVzIHRoZSBkYXRhIHRoYXQgY29tZXMgZnJvbSB0aGUgc2VydmVyLlxuXHQgKiBTaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtPYmplY3R9IHBheWxvYWRcblx0ICogQHJldHVybiB7T2JqZWN0fVxuXHQgKi9cblx0dHJhbnNmb3JtU2VydmVyUGF5bG9hZChwYXlsb2FkKSB7XG5cdFx0cGF5bG9hZCA9IGRvVHJhbnNmb3JtLmNhbGwodGhpcywgXCJyZWFkXCIsIHBheWxvYWQpO1xuXHRcdHRoaXNbc2VydmVyVmVyc2lvblN5bWJvbF0gPSBwYXlsb2FkO1xuXG5cdFx0Y29uc3QgZGF0YVBhdGggPSB0aGlzLmdldE9wdGlvbihcInJlYWQucGF0aFwiKTtcblx0XHRpZiAoZGF0YVBhdGgpIHtcblx0XHRcdHBheWxvYWQgPSBuZXcgUGF0aGZpbmRlcihwYXlsb2FkKS5nZXRWaWEoZGF0YVBhdGgpO1xuXHRcdH1cblxuXHRcdHJldHVybiBwYXlsb2FkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgcHJlcGFyZXMgdGhlIGRhdGEgZm9yIHdyaXRpbmcgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGF5bG9hZFxuXHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdCAqL1xuXHRwcmVwYXJlU2VydmVyUGF5bG9hZChwYXlsb2FkKSB7XG5cdFx0cGF5bG9hZCA9IGRvVHJhbnNmb3JtLmNhbGwodGhpcywgXCJ3cml0ZVwiLCBwYXlsb2FkKTtcblx0XHRwYXlsb2FkID0gZG9EaWZmLmNhbGwodGhpcywgcGF5bG9hZCk7XG5cblx0XHRjb25zdCBzaGVhdGhpbmdPYmplY3QgPSB0aGlzLmdldE9wdGlvbihcIndyaXRlLnNoZWF0aGluZy5vYmplY3RcIik7XG5cdFx0Y29uc3Qgc2hlYXRoaW5nUGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUuc2hlYXRoaW5nLnBhdGhcIik7XG5cblx0XHRpZiAoc2hlYXRoaW5nT2JqZWN0ICYmIHNoZWF0aGluZ1BhdGgpIHtcblx0XHRcdGNvbnN0IHN1YiA9IHBheWxvYWQ7XG5cdFx0XHRwYXlsb2FkID0gc2hlYXRoaW5nT2JqZWN0O1xuXHRcdFx0bmV3IFBhdGhmaW5kZXIocGF5bG9hZCkuc2V0VmlhKHNoZWF0aGluZ1BhdGgsIHN1Yik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBheWxvYWQ7XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIG9ialxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gZG9EaWZmKG9iaikge1xuXHRpZiAoXG5cdFx0dGhpc1tzZXJ2ZXJWZXJzaW9uU3ltYm9sXSA9PT0gbnVsbCB8fFxuXHRcdHRoaXNbc2VydmVyVmVyc2lvblN5bWJvbF0gPT09IHVuZGVmaW5lZFxuXHQpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcIndyaXRlLnBhcnRpYWwuY2FsbGJhY2tcIik7XG5cdGlmICghaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0cyA9IGRpZmYodGhpc1tzZXJ2ZXJWZXJzaW9uU3ltYm9sXSwgb2JqKTtcblx0aWYgKCFyZXN1bHRzKSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdG9iaiA9IGNhbGxiYWNrKG9iaiwgcmVzdWx0cyk7XG5cdHRoaXNbc2VydmVyVmVyc2lvblN5bWJvbF0gPSBvYmo7XG5cblx0cmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZG9UcmFuc2Zvcm0odHlwZSwgb2JqKSB7XG5cdGNvbnN0IHRyYW5zZm9ybWF0aW9uID0gdGhpcy5nZXRPcHRpb24oYCR7dHlwZX0ubWFwcGluZy50cmFuc2Zvcm1lcmApO1xuXHRpZiAodHJhbnNmb3JtYXRpb24gIT09IHVuZGVmaW5lZCAmJiB0cmFuc2Zvcm1hdGlvbiAhPT0gbnVsbCkge1xuXHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZSh0cmFuc2Zvcm1hdGlvbik7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5nZXRPcHRpb24oYCR7dHlwZX0ubWFwcGluZy5jYWxsYmFja3NgKTtcblxuXHRcdGlmIChpc0FycmF5KGNhbGxiYWNrcykpIHtcblx0XHRcdGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHBpcGUuc2V0Q2FsbGJhY2soY2FsbGJhY2spO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzT2JqZWN0KGNhbGxiYWNrcykpIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGNhbGxiYWNrcykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Y2FsbGJhY2tzLmhhc093blByb3BlcnR5KGtleSkgJiZcblx0XHRcdFx0XHR0eXBlb2YgY2FsbGJhY2tzW2tleV0gPT09IFwiZnVuY3Rpb25cIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKGtleSwgY2FsbGJhY2tzW2tleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0b2JqID0gcGlwZS5ydW4ob2JqKTtcblx0fVxuXG5cdHJldHVybiBvYmo7XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7U2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1NlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtIGRhdGEnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHdyaXRlQ2FsbGJhY2tDYWxsZWQgPSBmYWxzZVxuICAgICAgICBsZXQgcmVhZENhbGxiYWNrQ2FsbGVkID0gZmFsc2VcblxuICAgICAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgU2VydmVyKHtcbiAgICAgICAgICAgIHdyaXRlOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjogXCJjYWxsOm9uV3JpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbldyaXRlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlQ2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2hlYXRoaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVtbzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eXo6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBcImRhdGEueHl6XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWFkOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjogXCJjYWxsOm9uUmVhZFwiLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVhZDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGF0aDogJ2RhdGEueHl6JyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBleHBlY3Qoc2VydmVyLnRyYW5zZm9ybVNlcnZlclBheWxvYWQoe2RlbW86IDEsIGRhdGE6IHt4eXo6IDJ9fSkpLnRvLmRlZXAuZXF1YWwoe2RlbW86IDEsIGRhdGE6IHt4eXo6IDJ9fSlcbiAgICAgICAgZXhwZWN0KHNlcnZlci5wcmVwYXJlU2VydmVyUGF5bG9hZCh7ZGVtbzogMSwgZGF0YToge3h5ejogMn19KSkudG8uZGVlcC5lcXVhbCh7ZGVtbzogMSwgZGF0YToge3h5ejogMn19KVxuXG5cbiAgICB9KVxuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcsIGlzT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgV2ViQ29ubmVjdCBhcyBOZXRXZWJDb25uZWN0IH0gZnJvbSBcIi4uLy4uLy4uL25ldC93ZWJjb25uZWN0Lm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gXCIuLi8uLi8uLi9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qc1wiO1xuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIi4uL3NlcnZlci5tanNcIjtcblxuZXhwb3J0IHsgV2ViQ29ubmVjdCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICpcbiAqIGhpbnQ6IHRoaXMgbmFtZSBpcyB1c2VkIGluIHRoZSB0ZXN0cy4gaWYgeW91IHdhbnQgdG8gY2hhbmdlIGl0LCBwbGVhc2UgY2hhbmdlIGl0IGluIHRoZSB0ZXN0cyBhcyB3ZWxsLlxuICovXG5jb25zdCB3ZWJDb25uZWN0U3ltYm9sID0gU3ltYm9sKFwiY29ubmVjdGlvblwiKTtcblxuLyoqXG4gKiBUaGUgUmVzdEFQSSBpcyBhIGNsYXNzIHRoYXQgZW5hYmxlcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uLy4uLy4uL2V4YW1wbGUvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0Lm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4xLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgTG9jYWxTdG9yYWdlIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgYWNjZXNzIHRvIGRhdGEgb2JqZWN0cy5cbiAqL1xuY2xhc3MgV2ViQ29ubmVjdCBleHRlbmRzIFNlcnZlciB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhc291cmNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9O1xuXHRcdH1cblxuXHRcdGlmICghaXNPYmplY3Qob3B0aW9ucykpIG9wdGlvbnMgPSB7fTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0dGhpc1t3ZWJDb25uZWN0U3ltYm9sXSA9IG5ldyBOZXRXZWJDb25uZWN0KHtcblx0XHRcdHVybDogdGhpcy5nZXRPcHRpb24oXCJ1cmxcIiksXG5cdFx0XHRjb25uZWN0aW9uOiB7XG5cdFx0XHRcdHRpbWVvdXQ6IHRoaXMuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi50aW1lb3V0XCIpLFxuXHRcdFx0XHRyZWNvbm5lY3Q6IHtcblx0XHRcdFx0XHR0aW1lb3V0OiB0aGlzLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LnRpbWVvdXRcIiksXG5cdFx0XHRcdFx0YXR0ZW1wdHM6IHRoaXMuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi5yZWNvbm5lY3QuYXR0ZW1wdHNcIiksXG5cdFx0XHRcdFx0ZW5hYmxlZDogdGhpcy5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC5lbmFibGVkXCIpLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Y29ubmVjdCgpIHtcblx0XHRyZXR1cm4gdGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5jb25uZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ29ubmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLmlzQ29ubmVjdGVkKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmw9dW5kZWZpbmVkIERlZmluZXMgdGhlIHJlc291cmNlIHRoYXQgeW91IHdpc2ggdG8gZmV0Y2guXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb25uZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb25uZWN0aW9uLnRpbWVvdXQ9NTAwMCBEZWZpbmVzIHRoZSB0aW1lb3V0IGZvciB0aGUgY29ubmVjdGlvbi5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LnRpbWVvdXQgVGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB0aGUgcmVjb25uZWN0LlxuXHQgKiBAcHJvcGVydHkge051bWJlcn0gY29ubmVjdGlvbi5yZWNvbm5lY3QuYXR0ZW1wdHMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHJlY29ubmVjdHMuXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbH0gY29ubmVjdGlvbi5yZWNvbm5lY3QuZW5hYmxlZCBJZiB0aGUgcmVjb25uZWN0IGlzIGVuYWJsZWQuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZT17fSBPcHRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYmVmb3JlIHdyaXRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB3cml0ZS5tYXBwaW5nLnRyYW5zZm9ybWVyIFRyYW5zZm9ybWVyIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgZW50cmllc1xuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuRGF0YS5EYXRhc291cmNlfmV4YW1wbGVDYWxsYmFja1tdfSB3cml0ZS5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYmVmb3JlIHdyaXRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmdcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnNoZWF0aGluZy5vYmplY3QgT2JqZWN0IHRvIGJlIHdyYXBwZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLnNoZWF0aGluZy5wYXRoIFBhdGggdG8gdGhlIGRhdGFcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQ9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gcmVhZC5wYXRoIFBhdGggdG8gZGF0YVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZC5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHJlYWQubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tbXX0gcmVhZC5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHVybDogdW5kZWZpbmVkLFxuXHRcdFx0d3JpdGU6IHtcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHRyYW5zZm9ybWVyOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y2FsbGJhY2tzOiB7fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0c2hlYXRoaW5nOiB7XG5cdFx0XHRcdFx0b2JqZWN0OiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0cGF0aDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHJlYWQ6IHtcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHRyYW5zZm9ybWVyOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y2FsbGJhY2tzOiB7fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0cGF0aDogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHRcdGNvbm5lY3Rpb246IHtcblx0XHRcdFx0dGltZW91dDogNTAwMCxcblx0XHRcdFx0cmVjb25uZWN0OiB7XG5cdFx0XHRcdFx0dGltZW91dDogMTAwMCxcblx0XHRcdFx0XHRhdHRlbXB0czogMSxcblx0XHRcdFx0XHRlbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY2xvc2VzIHRoZSBjb25uZWN0aW9uLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Y2xvc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0uY2xvc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cmVhZCgpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0d2hpbGUgKHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0uZGF0YVJlY2VpdmVkKCkgPT09IHRydWUpIHtcblx0XHRcdFx0bGV0IG9iaiA9IHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0ucG9sbCgpO1xuXHRcdFx0XHRpZiAoIWlzT2JqZWN0KG9iaikpIHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiVGhlIHJlY2VpdmVkIGRhdGEgaXMgbm90IGFuIG9iamVjdC5cIikpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghKG9iaiBpbnN0YW5jZW9mIE1lc3NhZ2UpKSB7XG5cdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIlRoZSByZWNlaXZlZCBkYXRhIGlzIG5vdCBhIE1lc3NhZ2UuXCIpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRvYmogPSBvYmouZ2V0RGF0YSgpO1xuXHRcdFx0XHRvYmogPSB0aGlzLnRyYW5zZm9ybVNlcnZlclBheWxvYWQuY2FsbCh0aGlzLCBvYmopO1xuXHRcdFx0XHR0aGlzLnNldChvYmopO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXNvbHZlKHRoaXMuZ2V0KCkpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHRjb25zdCBvYmogPSB0aGlzLnByZXBhcmVTZXJ2ZXJQYXlsb2FkKHRoaXMuZ2V0KCkpO1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLnNlbmQob2JqKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtSZXN0QVBJfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBXZWJDb25uZWN0KHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdKTtcblx0fVxufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1dlYkNvbm5lY3R9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0Lm1qc1wiO1xuaW1wb3J0IHtpbml0V2ViU29ja2V0fSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbC93ZWJzb2NrZXQubWpzXCI7XG5cbmNvbnN0IHRlc3RVcmwgPSBcIndzczovL3dzLnBvc3RtYW4tZWNoby5jb20vcmF3XCJcblxuZGVzY3JpYmUoJ1dlYnNvY2tldCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBkcyA9IHVuZGVmaW5lZFxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRXZWJTb2NrZXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGlmIChkcykge1xuICAgICAgICAgICAgZHMuY2xvc2UoKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gd29ya2Fyb3VuZDogd2l0aG91dCB0aGlzLCB0aGUgbm9kZSB0ZXN0IHdpbGwgbm90IGV4aXQgXG4gICAgICAgIGZvciAoY29uc3Qgc3ltIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZHMpKSB7XG4gICAgICAgICAgICBpZiAoc3ltLnRvU3RyaW5nKCkgPT09ICdTeW1ib2woY29ubmVjdGlvbiknKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGRzW3N5bV1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN5bTIgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjb25uZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3ltMi50b1N0cmluZygpID09PSAnU3ltYm9sKGNvbm5lY3Rpb24pJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc29ja2V0ID0gY29ubmVjdGlvbltzeW0yXT8uc29ja2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvY2tldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc29ja2V0Py50ZXJtaW5hdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0Py5bJ3Rlcm1pbmF0ZSddKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkb25lKClcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2V0IGNsb25lJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3QodGVzdFVybClcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkcy5nZXRDbG9uZSgpXG4gICAgICAgIGV4cGVjdChjbG9uZSkudG8uYmUuYW4uaW5zdGFuY2VvZihXZWJDb25uZWN0KVxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtIGRhdGEnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCB3cml0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2VcbiAgICAgICAgbGV0IHJlYWRDYWxsYmFja0NhbGxlZCA9IGZhbHNlXG5cbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgICAgICB3cml0ZToge1xuICAgICAgICAgICAgICAgIG1hcHBpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IFwiY2FsbDpvbldyaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25Xcml0ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNoZWF0aGluZzoge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbW86IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeHl6OiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogXCJkYXRhLnh5elwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVhZDoge1xuICAgICAgICAgICAgICAgIG1hcHBpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IFwiY2FsbDpvblJlYWRcIixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvblJlYWQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhdGg6ICdkYXRhLnh5eicsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZHMuc2V0KHtcbiAgICAgICAgICAgICAgICBlbnZlbG9wOiB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBkcy5zZXQoe30pXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHt9KTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG5cbiAgICAgICAgICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHtlbnZlbG9wOnttZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJ9fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qod3JpdGVDYWxsYmFja0NhbGxlZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHJlYWRDYWxsYmFja0NhbGxlZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgMjAwKVxuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgY29ubmVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3Qoe1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICAgICAgcmVjb25uZWN0OiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBzZW5kIGEgbWVzc2FnZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnRpbWVvdXQoMTAwMDApXG4gICAgICAgIFxuICAgICAgICBkcyA9IG5ldyBXZWJDb25uZWN0KHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgICAgIHJlY29ubmVjdDoge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZHMuc2V0KHtcbiAgICAgICAgICAgICAgICBlbnZlbG9wOiB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBkcy5zZXQoe30pXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHt9KTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHtlbnZlbG9wOnttZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJ9fSk7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sNTAwKVxuICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcblxuXG4gICAgfSk7XG5cbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNGdW5jdGlvbiwgaXNBcnJheSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGRpZmYgfSBmcm9tIFwiLi4vLi4vZGlmZi5tanNcIjtcbmltcG9ydCB7IFNlcnZlciB9IGZyb20gXCIuLi9zZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBXcml0ZUVycm9yIH0gZnJvbSBcIi4vcmVzdGFwaS93cml0ZWVycm9yLm1qc1wiO1xuaW1wb3J0IHsgRGF0YUZldGNoRXJyb3IgfSBmcm9tIFwiLi9yZXN0YXBpL2RhdGEtZmV0Y2gtZXJyb3IubWpzXCI7XG5cbmV4cG9ydCB7IFJlc3RBUEkgfTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4xMi4wXG4gKi9cbmNvbnN0IHJhd0RhdGFTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL3Jhd2RhdGFcIixcbik7XG5cbi8qKlxuICogVGhlIFJlc3RBUEkgaXMgYSBjbGFzcyB0aGF0IGVuYWJsZXMgYSBSRVNUIEFQSSBzZXJ2ZXIuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi8uLi9leGFtcGxlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBSZXN0QVBJIGlzIGEgY2xhc3MgdGhhdCBiaW5kcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqL1xuY2xhc3MgUmVzdEFQSSBleHRlbmRzIFNlcnZlciB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhc291cmNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGU9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUuaW5pdD17fSBBbiBvcHRpb25zIG9iamVjdCBjb250YWluaW5nIGFueSBjdXN0b20gc2V0dGluZ3MgdGhhdCB5b3Ugd2FudCB0byBhcHBseSB0byB0aGUgcmVxdWVzdC4gVGhlIHBhcmFtZXRlcnMgYXJlIGlkZW50aWNhbCB0byB0aG9zZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXF1ZXN0L1JlcXVlc3R8UmVxdWVzdCBjb25zdHJ1Y3Rvcn1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLmluaXQubWV0aG9kPVBPU1Rcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLmluaXQuaGVhZGVycyBPYmplY3QgY29udGFpbmluZyBhbnkgY3VzdG9tIGhlYWRlcnMgdGhhdCB5b3Ugd2FudCB0byBhcHBseSB0byB0aGUgcmVxdWVzdC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLnJlc3BvbnNlQ2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaGFzIGJlZW4gY29tcGxldGVkLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gd3JpdGUuYWNjZXB0ZWRTdGF0dXM9WzIwMCwyMDFdXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS51cmwgVVJMXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYmVmb3JlIHdyaXRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB3cml0ZS5tYXBwaW5nLnRyYW5zZm9ybWVyIFRyYW5zZm9ybWVyIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgZW50cmllc1xuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuRGF0YS5EYXRhc291cmNlfmV4YW1wbGVDYWxsYmFja1tdfSB3cml0ZS5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYmVmb3JlIHdyaXRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5yZXBvcnRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHdyaXRlLnJlcG9ydC5wYXRoIFBhdGggdG8gdmFsaWRhdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnBhcnRpYWxcblx0ICogQHByb3BlcnR5IHtGdW5jdGlvbn0gd3JpdGUucGFydGlhbC5jYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgcmVxdWVzdCBoYXMgYmVlbiBjb21wbGV0ZWQuIChvYmosIGRpZmZSZXN1bHQpID0+IG9ialxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUuc2hlYXRoaW5nXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmcub2JqZWN0IE9iamVjdCB0byBiZSB3cmFwcGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5zaGVhdGhpbmcucGF0aCBQYXRoIHRvIHRoZSBkYXRhXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByZWFkPXt9IE9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQuaW5pdD17fSBBbiBvcHRpb25zIG9iamVjdCBjb250YWluaW5nIGFueSBjdXN0b20gc2V0dGluZ3MgdGhhdCB5b3Ugd2FudCB0byBhcHBseSB0byB0aGUgcmVxdWVzdC4gVGhlIHBhcmFtZXRlcnMgYXJlIGlkZW50aWNhbCB0byB0aG9zZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXF1ZXN0L1JlcXVlc3R8UmVxdWVzdCBjb25zdHJ1Y3Rvcn1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlYWQuaW5pdC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWFkLmFjY2VwdGVkU3RhdHVzPVsyMDBdXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWFkLnVybCBVUkxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZWFkLm1hcHBpbmcudHJhbnNmb3JtZXIgVHJhbnNmb3JtZXIgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5EYXRhLkRhdGFzb3VyY2V+ZXhhbXBsZUNhbGxiYWNrW119IHJlYWQubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR3cml0ZToge1xuXHRcdFx0XHRpbml0OiB7XG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzcG9uc2VDYWxsYmFjazogdW5kZWZpbmVkLFxuXHRcdFx0XHRhY2NlcHRlZFN0YXR1czogWzIwMCwgMjAxXSxcblx0XHRcdFx0dXJsOiBudWxsLFxuXHRcdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdFx0dHJhbnNmb3JtZXI6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjYWxsYmFja3M6IFtdLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaGVhdGhpbmc6IHtcblx0XHRcdFx0XHRvYmplY3Q6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRwYXRoOiB1bmRlZmluZWQsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlcG9ydDoge1xuXHRcdFx0XHRcdHBhdGg6IHVuZGVmaW5lZCxcblx0XHRcdFx0fSxcblxuXHRcdFx0XHRwYXJ0aWFsOiB7XG5cdFx0XHRcdFx0Y2FsbGJhY2s6IG51bGwsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0cmVhZDoge1xuXHRcdFx0XHRpbml0OiB7XG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRwYXRoOiBudWxsLFxuXHRcdFx0XHRyZXNwb25zZUNhbGxiYWNrOiB1bmRlZmluZWQsXG5cdFx0XHRcdGFjY2VwdGVkU3RhdHVzOiBbMjAwXSxcblx0XHRcdFx0dXJsOiBudWxsLFxuXHRcdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdFx0dHJhbnNmb3JtZXI6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjYWxsYmFja3M6IFtdLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGRhdGEgY2Fubm90IGJlIHJlYWRcblx0ICovXG5cdHJlYWQoKSB7XG5cdFx0bGV0IGluaXQgPSB0aGlzLmdldE9wdGlvbihcInJlYWQuaW5pdFwiKTtcblx0XHRpZiAoIWlzT2JqZWN0KGluaXQpKSBpbml0ID0ge307XG5cdFx0aWYgKCFpbml0W1wibWV0aG9kXCJdKSBpbml0W1wibWV0aG9kXCJdID0gXCJHRVRcIjtcblxuXHRcdGxldCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwicmVhZC5yZXNwb25zZUNhbGxiYWNrXCIpO1xuXHRcdGlmICghY2FsbGJhY2spIHtcblx0XHRcdGNhbGxiYWNrID0gKG9iaikgPT4ge1xuXHRcdFx0XHR0aGlzLnNldCh0aGlzLnRyYW5zZm9ybVNlcnZlclBheWxvYWQuY2FsbCh0aGlzLCBvYmopKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZldGNoRGF0YS5jYWxsKHRoaXMsIGluaXQsIFwicmVhZFwiLCBjYWxsYmFjayk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7V3JpdGVFcnJvcn0gdGhlIGRhdGEgY2Fubm90IGJlIHdyaXR0ZW5cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGxldCBpbml0ID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5pbml0XCIpO1xuXHRcdGlmICghaXNPYmplY3QoaW5pdCkpIGluaXQgPSB7fTtcblx0XHRpZiAodHlwZW9mIGluaXRbXCJoZWFkZXJzXCJdICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRpbml0W1wiaGVhZGVyc1wiXSA9IHtcblx0XHRcdFx0XCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAoIWluaXRbXCJtZXRob2RcIl0pIGluaXRbXCJtZXRob2RcIl0gPSBcIlBPU1RcIjtcblxuXHRcdGNvbnN0IG9iaiA9IHRoaXMucHJlcGFyZVNlcnZlclBheWxvYWQodGhpcy5nZXQoKSk7XG5cdFx0aW5pdFtcImJvZHlcIl0gPSBKU09OLnN0cmluZ2lmeShvYmopO1xuXG5cdFx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcIndyaXRlLnJlc3BvbnNlQ2FsbGJhY2tcIik7XG5cdFx0cmV0dXJuIGZldGNoRGF0YS5jYWxsKHRoaXMsIGluaXQsIFwid3JpdGVcIiwgY2FsbGJhY2spO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Jlc3RBUEl9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFJlc3RBUEkoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXS5yZWFkLFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ud3JpdGUsXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gaW5pdFxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGZldGNoRGF0YShpbml0LCBrZXksIGNhbGxiYWNrKSB7XG5cdGxldCByZXNwb25zZTtcblxuXHRyZXR1cm4gZmV0Y2godGhpcy5nZXRPcHRpb24oYCR7a2V5fS51cmxgKSwgaW5pdClcblx0XHQudGhlbigocmVzcCkgPT4ge1xuXHRcdFx0cmVzcG9uc2UgPSByZXNwO1xuXG5cdFx0XHRjb25zdCBhY2NlcHRlZFN0YXR1cyA9IHRoaXMuZ2V0T3B0aW9uKGAke2tleX0uYWNjZXB0ZWRTdGF0dXNgLCBbMjAwXSkubWFwKFxuXHRcdFx0XHROdW1iZXIsXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoYWNjZXB0ZWRTdGF0dXMuaW5kZXhPZihyZXNwLnN0YXR1cykgPT09IC0xKSB7XG5cdFx0XHRcdHRocm93IG5ldyBEYXRhRmV0Y2hFcnJvcihcblx0XHRcdFx0XHRgdGhlIHJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYW4gYWNjZXB0ZWQgc3RhdHVzIChhY3R1YWw6ICR7cmVzcC5zdGF0dXN9KS5gLFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzcC50ZXh0KCk7XG5cdFx0fSlcblx0XHQudGhlbigoYm9keSkgPT4ge1xuXHRcdFx0bGV0IG9iajtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0b2JqID0gSlNPTi5wYXJzZShib2R5KTtcblxuXHRcdFx0XHRyZXNwb25zZVtyYXdEYXRhU3ltYm9sXSA9IG9iajtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0aWYgKGJvZHkubGVuZ3RoID4gMTAwKSB7XG5cdFx0XHRcdFx0Ym9keSA9IGAke2JvZHkuc3Vic3RyaW5nKDAsIDk3KX0uLi5gO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhyb3cgbmV3IERhdGFGZXRjaEVycm9yKFxuXHRcdFx0XHRcdGB0aGUgcmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gKGFjdHVhbDogJHtib2R5fSkuYCxcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHRcdGNhbGxiYWNrKG9iaik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2U7XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHRocm93IGU7XG5cdFx0fSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgV3JpdGVFcnJvciB9O1xuXG4vKipcbiAqIEVycm9yIG1lc3NhZ2UgZm9yIEFQSSByZXF1ZXN0cyB3aXRoIGV4dGVuc2lvbiBvZiByZXF1ZXN0IGFuZCB2YWxpZGF0aW9uLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IHRoZSBlcnJvciBpcyB0aHJvd24gYnkgdGhlIHJlc3QgYXBpIGluIGNhc2Ugb2YgZXJyb3JcbiAqL1xuY2xhc3MgV3JpdGVFcnJvciBleHRlbmRzIEVycm9yIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7UmVzcG9uc2V9IHJlc3BvbnNlXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSB2YWxpZGF0aW9uXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlLCByZXNwb25zZSwgdmFsaWRhdGlvbikge1xuXHRcdHN1cGVyKG1lc3NhZ2UpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0cmVzcG9uc2U6IHJlc3BvbnNlLFxuXHRcdFx0dmFsaWRhdGlvbjogdmFsaWRhdGlvbixcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS93cml0ZS1lcnJvclwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UmVzcG9uc2V9XG5cdCAqL1xuXHRnZXRSZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJyZXNwb25zZVwiXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdCAqL1xuXHRnZXRWYWxpZGF0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXVtcInZhbGlkYXRpb25cIl07XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhRmV0Y2hFcnJvciB9O1xuXG4vKipcbiAqIEVycm9yIG1lc3NhZ2UgZm9yIEFQSSByZXF1ZXN0c1xuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNDMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IHRoZSBlcnJvciBpcyB0aHJvd24gYnkgdGhlIHJlc3QgYXBpIGluIGNhc2Ugb2YgZXJyb3JcbiAqL1xuY2xhc3MgRGF0YUZldGNoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuXHQgKiBAcGFyYW0ge1Jlc3BvbnNlfSByZXNwb25zZVxuXHQgKi9cblx0Y29uc3RydWN0b3IobWVzc2FnZSwgcmVzcG9uc2UpIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHJlc3BvbnNlOiByZXNwb25zZSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL2RhdGFmZXRjaGVycm9yQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UmVzcG9uc2V9XG5cdCAqL1xuXHRnZXRSZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJyZXNwb25zZVwiXTtcblx0fVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtSZXN0QVBJfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanNcIjtcbmltcG9ydCB7dmFsaWRhdGVPYmplY3R9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmRlc2NyaWJlKCdSZXN0QVBJJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGZldGNoUmVmZXJlbmNlO1xuICAgIGxldCByZXR1cm5TdGF0dXM7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICByZXR1cm5TdGF0dXMgPSAyMDA7XG4gICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsVGhpc1snZmV0Y2gnXTtcbiAgICAgICAgZ2xvYmFsVGhpc1snZmV0Y2gnXSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmV0dXJuU3RhdHVzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH07XG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBSZXN0QVBJICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBSZXN0QVBJKCdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nKSkudG8uYmUuaW5zdGFuY2VvZihSZXN0QVBJKVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3J3JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZWFkIHNob3VsZCByZXR1cm4gb2JqZWN0JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IFJlc3RBUEkoe3VybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbid9KVxuICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVPYmplY3QoZGF0YSk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3dyaXRlIHNob3VsZCAnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgUmVzdEFQSSh7XG4gICAgICAgICAgICAgICAgICAgIHJlYWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbidcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHRlZFN0YXR1czogWzk5XVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoXCJzaG91bGQgbm90IGJlIGhlcmVcIik7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgncncgd2l0aCBlcnJvcnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3JlYWQgc2hvdWxkIHRocm93IGV4Y2VwdGlvbicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm5TdGF0dXMgPSA0MDA7IC8vIGZldGNoIHJlc3BvbnNlIHdpdGggNDAwXG5cbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IFJlc3RBUEkoe3VybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbid9KVxuICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShcInNob3VsZCBub3QgcnVuLlwiKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZSgpKTsgLy8gc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBiZWNhdXNlIHJldHVyblN0YXR1cz00MDBcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3dyaXRlIHNob3VsZCAnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuU3RhdHVzID0gNDAwOyAvLyBmZXRjaCByZXNwb25zZSB3aXRoIDQwMFxuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgUmVzdEFQSSh7dXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJ30sIHt1cmw6ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nfSlcbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZU9iamVjdChkYXRhKTtcbiAgICAgICAgICAgICAgICBkb25lKFwiZXJyb3JcIik7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoKSk7IC8vIHNob3VsZCB0aHJvdyBleGNlcHRpb24gYmVjYXVzZSByZXR1cm5TdGF0dXM9NDAwXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG5cbn0pXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0RhdGFzb3VyY2V9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdEYXRhc291cmNlJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIERhdGFzb3VyY2UgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IERhdGFzb3VyY2UoKSkudG8uYmUuaW5zdGFuY2VvZihEYXRhc291cmNlKVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ09wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzZXRPcHRpb24gc2hvdWxkIGNoYW5nZSB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzb3VyY2UgPSBuZXcgRGF0YXNvdXJjZSgpO1xuICAgICAgICAgICAgZXhwZWN0KGRhdGFzb3VyY2UuZ2V0T3B0aW9uKCdkZWZhdWx0JykpLnRvLmJlLnVuZGVmaW5lZFxuICAgICAgICAgICAgZGF0YXNvdXJjZS5zZXRPcHRpb24oJ2RlZmF1bHQnLCB0cnVlKVxuICAgICAgICAgICAgZXhwZWN0KGRhdGFzb3VyY2UuZ2V0T3B0aW9uKCdkZWZhdWx0JykpLnRvLmJlLnRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3NldE9wdGlvbnMgc2hvdWxkIHNldCBhbGwgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YXNvdXJjZSA9IG5ldyBEYXRhc291cmNlKCk7XG4gICAgICAgICAgICBleHBlY3QoZGF0YXNvdXJjZS5nZXRPcHRpb24oJ2RlZmF1bHQnKSkudG8uYmUudW5kZWZpbmVkXG4gICAgICAgICAgICBkYXRhc291cmNlLnNldE9wdGlvbnMoe2RlZmF1bHQ6IHRydWV9KVxuICAgICAgICAgICAgZXhwZWN0KGRhdGFzb3VyY2UuZ2V0T3B0aW9uKCdkZWZhdWx0JykpLnRvLmJlLnRydWVcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ3J3JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkYXRhc291cmNlID0gbmV3IERhdGFzb3VyY2UoKTtcbiAgICAgICAgaXQoJ3JlYWQgc2hvdWxkIHRocm93IGV4ZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGRhdGFzb3VyY2UucmVhZCgpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3dyaXRlIHNob3VsZCB0aHJvdyBleGVwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBkYXRhc291cmNlLnJlYWQoKSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcbiAgICBcbiAgICBkZXNjcmliZSgnZ2V0L3NldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZGF0YXNvdXJjZSA9IG5ldyBEYXRhc291cmNlKCk7XG4gICAgICAgIGl0KCdnZXQgc2hvdWxkIHJldHVybiB1bmRlZmluZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoIGRhdGFzb3VyY2UuZ2V0KCkpLnRvLmJlLmVxbCh7fSk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3dyaXRlIHNob3VsZCB0aHJvdyBleGVwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCggZGF0YXNvdXJjZS5nZXQoKSkudG8uYmUuZXFsKHt9KTtcbiAgICAgICAgICAgIGV4cGVjdCggZGF0YXNvdXJjZS5zZXQoe2E6J215dmFsdWUnfSkpLnRvLmJlLmluc3RhbmNlb2YoRGF0YXNvdXJjZSk7XG4gICAgICAgICAgICBleHBlY3QoIGRhdGFzb3VyY2UuZ2V0KCkpLnRvLmJlLmVxbCh7YTonbXl2YWx1ZSd9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSkiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2J1aWxkTWFwfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvYnVpbGRtYXAubWpzXCI7XG5cblxuZGVzY3JpYmUoJ2J1aWxkTWFwJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGNvbnZlcnRNYXBSZXN1bHQgPSBmdW5jdGlvbiAocikge1xuICAgICAgICBpZiAociBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgciA9IE9iamVjdC5mcm9tRW50cmllcyhyKTtcbiAgICAgICAgICAgIGlmIChyIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgICAgICByID0gci5tYXAoKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRNYXBSZXN1bHQoZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHIgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCBvXSBvZiBPYmplY3QuZW50cmllcyhyKSkge1xuICAgICAgICAgICAgICAgICAgICByW2tdID0gY29udmVydE1hcFJlc3VsdChvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBkZXNjcmliZSgnYnVpbGQgTWFwIHdpdGggY2FsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdkZWZpbml0aW9uIHNob3VsZCByZXR1cm4gbWFwIHdpdGggc3ViIGFuZCBwYXJlbnQga2V5cycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBcImRhdGFcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiQ2Fzc2FuZHJhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAyLCBsYWJlbDogXCJYU1wiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCwgbGFiZWw6IFwiTFwiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIlllc3NleSFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LCBsYWJlbDogXCJMXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IGNhbGxiYWNrID0gZnVuY3Rpb24gKHN1YmplY3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgbSA9IG5ldyBNYXA7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtpLCBiXSBvZiBPYmplY3QuZW50cmllcyhzdWJqZWN0LmRhdGEpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGtleTEgPSBpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2osIGNdIG9mIE9iamVjdC5lbnRyaWVzKGIuZW5yaWNobWVudC52YXJpYW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkyID0gajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgZF0gb2YgT2JqZWN0LmVudHJpZXMoYy5wcmljZSkpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkzID0gaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQubmFtZSA9IGIubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmxhYmVsID0gYy5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmlkID0gW2tleTEsIGtleTIsIGtleTNdLmpvaW4oJy4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uc2V0KGQuaWQsIGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBtYXAgPSBidWlsZE1hcChvYmosIGNhbGxiYWNrLCAnJHtuYW1lfSAke2xhYmVsfScsICcke2lkfScpXG4gICAgICAgICAgICBsZXQgaSA9IGNvbnZlcnRNYXBSZXN1bHQobWFwKTtcblxuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGkpKS50by5iZS5lcXVhbCgne1wiMC4wLjBcIjpcIkNhc3NhbmRyYSBYWFNcIixcIjAuMC4xXCI6XCJDYXNzYW5kcmEgWFhTXCIsXCIwLjEuMFwiOlwiQ2Fzc2FuZHJhIFhTXCIsXCIwLjEuMVwiOlwiQ2Fzc2FuZHJhIFhTXCIsXCIwLjIuMFwiOlwiQ2Fzc2FuZHJhIFNcIixcIjAuMi4xXCI6XCJDYXNzYW5kcmEgU1wiLFwiMC4zLjBcIjpcIkNhc3NhbmRyYSBMXCIsXCIwLjMuMVwiOlwiQ2Fzc2FuZHJhIExcIixcIjEuMC4wXCI6XCJZZXNzZXkhIFhYU1wiLFwiMS4wLjFcIjpcIlllc3NleSEgWFhTXCIsXCIxLjEuMFwiOlwiWWVzc2V5ISBYU1wiLFwiMS4xLjFcIjpcIlllc3NleSEgWFNcIixcIjEuMi4wXCI6XCJZZXNzZXkhIFNcIixcIjEuMi4xXCI6XCJZZXNzZXkhIFNcIixcIjEuMy4wXCI6XCJZZXNzZXkhIExcIixcIjEuMy4xXCI6XCJZZXNzZXkhIExcIn0nKTtcblxuICAgICAgICB9KVxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYnVpbGQgc3VibWFwIHdpdGggKicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ2RlZmluaXRpb24gc2hvdWxkIHJldHVybiB7XCIxMFwiOlwiQ2Fzc2FuZHJhIDEwXCIsXCIyMFwiOlwiWWVzc2V5ISAyMFwifScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBcImRhdGFcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiQ2Fzc2FuZHJhXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIlllc3NleSFcIixcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBtYXAgPSBidWlsZE1hcChvYmosICdkYXRhLionLCAnJHtuYW1lfSAke2lkfScsICcke2lkfScpXG4gICAgICAgICAgICBsZXQgaSA9IGNvbnZlcnRNYXBSZXN1bHQobWFwKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShpKSkudG8uYmUuZXF1YWwoJ3tcIjEwXCI6XCJDYXNzYW5kcmEgMTBcIixcIjIwXCI6XCJZZXNzZXkhIDIwXCJ9Jyk7XG5cbiAgICAgICAgfSlcbiAgICB9KVxuXG5cbiAgICBkZXNjcmliZSgnYnVpbGQgc3VibWFwIHdpdGggKionLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdkZWZpbml0aW9uIHNob3VsZCByZXR1cm4gTWFwJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJDYXNzYW5kcmFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJywgaWQ6IDF9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQycsIGlkOiAyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQycsIGlkOiAzfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnLCBpZDogNH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQycsIGlkOiA1fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnLCBpZDogNn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LCBsYWJlbDogXCJMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQycsIGlkOiA3fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnLCBpZDogOH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiWWVzc2V5IVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnJpY2htZW50XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDEsIGxhYmVsOiBcIlhYU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnLCBpZDogOX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJywgaWQ6IDEwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQycsIGlkOiAxMX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJywgaWQ6IDEyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDMsIGxhYmVsOiBcIlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJywgaWQ6IDEzfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnLCBpZDogMTR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIkxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJywgaWQ6IDE1fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnLCBpZDogMTZ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQ0LjEyIFx1MjBBQycsIGlkOiAxN31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IG1hcCA9IGJ1aWxkTWFwKG9iaiwgJ2RhdGEuKi5lbnJpY2htZW50LnZhcmlhbnRzLioucHJpY2UuKicsICcke3ZrfSAke14ubGFiZWx9ICR7Xi5eLm5hbWV9JywgJyR7Xi5eLnNrdX0nKVxuICAgICAgICAgICAgbGV0IGkgPSBjb252ZXJ0TWFwUmVzdWx0KG1hcCk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoaSkpLnRvLmJlLmVxdWFsKCd7XCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4wLnByaWNlLjBcIjpcIjEyLjEyIFx1MjBBQyBYWFMgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4wLnByaWNlLjFcIjpcIjEyLjEyIFx1MjBBQyBYWFMgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4xLnByaWNlLjBcIjpcIjIyLjEyIFx1MjBBQyBYUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjEucHJpY2UuMVwiOlwiMjIuMTIgXHUyMEFDIFhTIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMi5wcmljZS4wXCI6XCIzMi4xMiBcdTIwQUMgUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjIucHJpY2UuMVwiOlwiMzIuMTIgXHUyMEFDIFMgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4zLnByaWNlLjBcIjpcIjQyLjEyIFx1MjBBQyBMIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMy5wcmljZS4xXCI6XCI0Mi4xMiBcdTIwQUMgTCBDYXNzYW5kcmFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjAucHJpY2UuMFwiOlwiMTIuMTIgXHUyMEFDIFhYUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4wLnByaWNlLjFcIjpcIjEyLjEyIFx1MjBBQyBYWFMgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMS5wcmljZS4wXCI6XCIyMi4xMiBcdTIwQUMgWFMgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMS5wcmljZS4xXCI6XCIyMi4xMiBcdTIwQUMgWFMgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMi5wcmljZS4wXCI6XCIzMi4xMiBcdTIwQUMgUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4yLnByaWNlLjFcIjpcIjMyLjEyIFx1MjBBQyBTIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjMucHJpY2UuMFwiOlwiNDIuMTIgXHUyMEFDIEwgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMy5wcmljZS4xXCI6XCI0Mi4xMiBcdTIwQUMgTCBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4zLnByaWNlLjJcIjpcIjQ0LjEyIFx1MjBBQyBMIFllc3NleSFcIn0nKTtcblxuICAgICAgICB9KVxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZXhhbXBsZWNvZGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBleGVjdXRlIGV4YW1wbGUgY29kZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBcImRhdGFcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiQ2Fzc2FuZHJhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFkZHJlc3NcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3RyZWV0XCI6IFwiNDkzLTQxMDUgVnVscHV0YXRlIFN0cmVldFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2l0eVwiOiBcIlNhdW11clwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiemlwXCI6IFwiNTI2MjhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiSG9sbHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRkcmVzc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJlZXRcIjogXCIxNzYyIEVnZXQgUmQuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaXR5XCI6IFwiU2Nod2FsYmFjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiemlwXCI6IFwiOTUyMzQwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAzMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkd1eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhZGRyZXNzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0cmVldFwiOiBcIjk1Ny0zODggU29sbGljaXR1ZGluIEF2ZW51ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2l0eVwiOiBcIlBhbmNoaVx1MDBFMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiemlwXCI6IFwiNDIwNzI5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBtYXA7XG4gICAgICAgICAgICBtYXAgPSBidWlsZE1hcChvYmosICdkYXRhLionLCAnJHtuYW1lfSAoJHthZGRyZXNzLnppcH0gJHthZGRyZXNzLmNpdHl9KScsICdpZCcpXG4gICAgICAgICAgICBleHBlY3QobWFwKS50by5iZS5pbnN0YW5jZU9mKE1hcCk7XG5cbiAgICAgICAgICAgIG1hcCA9IGJ1aWxkTWFwKG9iaiwgJ2RhdGEuKicsICcke25hbWV9ICgke2FkZHJlc3MuemlwfSAke2FkZHJlc3MuY2l0eX0pJylcbiAgICAgICAgICAgIGV4cGVjdChtYXApLnRvLmJlLmluc3RhbmNlT2YoTWFwKTtcblxuICAgICAgICAgICAgbWFwID0gYnVpbGRNYXAob2JqLCAnZGF0YS4qJywgJyR7bmFtZX0gKCR7YWRkcmVzcy56aXB9ICR7YWRkcmVzcy5jaXR5fSknLCAnaWQnLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodmFsdWVbJ2lkJ10gPj0gMjApID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZXhwZWN0KG1hcCkudG8uYmUuaW5zdGFuY2VPZihNYXApO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYnVpbGRtYXAoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgb2JqMSA9IHtcbiAgICAgICAgICAgIGRhdGFzZXQ6IHtcbiAgICAgICAgICAgICAgICBcIjEwMDgyXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDFcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDFcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIxMDA4NFwiOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAyXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAyXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gTWFwIEluc3RhbmNlLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChidWlsZE1hcCh7fSwgJycpKS50by5iZS5pbnN0YW5jZU9mKE1hcCk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW29iajEsICdkYXRhc2V0LionLCAnYWRkcmVzcycsICd7XCJkYXRhc2V0LjEwMDgyXCI6XCJIZXJlIDFcIixcImRhdGFzZXQuMTAwODRcIjpcIkhlcmUgMlwifSddLFxuICAgICAgICAgICAgW29iajEsICd4JywgdW5kZWZpbmVkLCAne30nXSxcbiAgICAgICAgICAgIFtvYmoxLCAnZGF0YXNldC4qJywgJ25hbWUnLCAne1wiZGF0YXNldC4xMDA4MlwiOlwiVGVzdCAxXCIsXCJkYXRhc2V0LjEwMDg0XCI6XCJUZXN0IDJcIn0nXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdidWlsZE1hcCgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnLCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcsJyArIEpTT04uc3RyaW5naWZ5KGMpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoZCkgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IGJ1aWxkTWFwKGEsIGIsIGMpO1xuICAgICAgICAgICAgICAgIGxldCBtID0gSlNPTi5zdHJpbmdpZnkoY29udmVydE1hcFJlc3VsdCh0KSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG0pLnRvLmJlLmVxdWFsKGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG59KTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VHJhbnNmb3JtZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS90cmFuc2Zvcm1lci5tanNcIjtcbmltcG9ydCB7Z2V0TG9jYWxlT2ZEb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHtFbWJlZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ1RyYW5zZm9ybWVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgcHJvbWlzZXMucHVzaChpbml0SlNET00oKSk7XG4gICAgICAgIGlmICghZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1RyYW5zZm9ybWVyLnJ1bigpIGxvY2FsaXplIGNvbW1hbmRzJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgY29uc3QgaXNOb2RlID0gdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgJ1tvYmplY3QgZ2xvYmFsXScgPT09IGdsb2JhbC50b1N0cmluZy5jYWxsKGdsb2JhbCk7XG5cblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2RhdGV0aW1lZm9ybWF0JywgXCIyMDIzLTAyLTA0IDA4OjAyOjAxXCIsIFwiRmViIDQsIDIwMjMsIDA4OjAyOjAxXCIsIFwiNCBGZWIgMjAyMywgMDg6MDI6MDFcIl0sXG4gICAgICAgICAgICBbJ2RhdGV0aW1lZm9ybWF0Omxvbmc6c2hvcnQnLCBcIjIwMjMtMDItMDQgMDg6MDI6MDFcIiwgXCJGZWJydWFyeSA0LCAyMDIzIGF0IDA4OjAyXCIsIFwiNCBGZWJydWFyeSAyMDIzIGF0IDA4OjAyXCJdLFxuICAgICAgICAgICAgWydkYXRldGltZWZvcm1hdDpzaG9ydDpzaG9ydCcsIFwiMjAyMy0wMi0wNCAwODowMjowMVwiLCBcIjIvNC8yMywgMDg6MDJcIiwgXCIwNC8wMi8yMDIzLCAwODowMlwiXSxcbiAgICAgICAgICAgIFsnY3VycmVuY3knLCBcIkVVUjBcIiwgXCJcdTIwQUMwLjAwXCIsIFwiXHUyMEFDMC4wMFwiXSxcbi8vICAgICAgICAgICAgWydjdXJyZW5jeToxOjInLCBcIkVVUjE0LjI1XCIsIFwiXHUyMEFDMTQuM1wiLCBcIlx1MjBBQzE0LjJcIl0sXG4gICAgICAgICAgICBbJ2N1cnJlbmN5JywgXCJFVVIxNC4yNVwiLCBcIlx1MjBBQzE0LjI1XCIsIFwiXHUyMEFDMTQuMjVcIl0sXG4gICAgICAgICAgICBbJ2RhdGV0aW1lJywgXCIyMDIzLTAyLTE0IDE0OjEyOjEwXCIsIFwiMi8xNC8yMDIzLCAxNDoxMjoxMFwiLFwiMTQvMDIvMjAyMywgMTQ6MTI6MTBcIl0sXG4gICAgICAgICAgICBbJ2RhdGV0aW1lJywgXCIyMDIzLTAyLTE0IDA4OjAyOjAxXCIsIFwiMi8xNC8yMDIzLCAwODowMjowMVwiLFwiMTQvMDIvMjAyMywgMDg6MDI6MDFcIl0sXG4gICAgICAgICAgICBbJ2RhdGUnLCBcIjIwMjMtMDItMTRcIiwgXCIwMi8xNC8yMDIzXCIsXCIxNC8wMi8yMDIzXCJdLFxuXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzEyNFxuXG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpIC8vIGNvbW1hbmRcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpIC8vIHZhbHVlXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKSAvLyBleHBlY3RlZCByZXN1bHQgbm9kZSAgICBcbiAgICAgICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpIC8vIGV4cGVjdGVkIHJlc3VsdCBicm93c2VyICAgIFxuXG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IGlzTm9kZSA/IGMgOiBkXG5cbiAgICAgICAgICAgIGl0KCdUcmFuc2Zvcm1lci5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykucnVuKCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0LnJ1bihiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZXhwZWN0ZWQpLnRvLmJlLmVxbChyLCBcIlRyYW5zZm9ybWVyLnJ1bihcIiArIEpTT04uc3RyaW5naWZ5KGEpICsgXCIpLnJ1bihcIiArIEpTT04uc3RyaW5naWZ5KGIpICsgXCIpIHNob3VsZCByZXR1cm4gXCIgKyBKU09OLnN0cmluZ2lmeShjKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ1RyYW5zZm9ybWVyLnJ1bigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnZXF1YWxzOmEnLCBcImFcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczphJywgXCJiXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCAzLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCA2LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpvbicsIHRydWUsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6dHJ1ZScsIHRydWUsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6b24nLCBmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6dHJ1ZScsIGZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpvZmYnLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpmYWxzZScsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOm9mZicsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOmZhbHNlJywgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6MycsIDMsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6MycsIDYsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOnVuZGVmaW5lZCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczp1bmRlZmluZWQnLCAzLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpudWxsJywgbnVsbCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpudWxsJywgMywgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6MycsIDYsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCB7fSwgZmFsc2VdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIHthOiA0fSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgW10sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCBcIlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgWzEsIDIsIDNdLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCBbMV0sIHRydWVdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIFtcIjFcIl0sIHRydWVdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIFt0cnVlXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2NvbnRhaW5zOngnLCBcImFzZCB3eGQgc2RmXCIsIHRydWVdLFxuICAgICAgICAgICAgWydjb250YWluczp4JywgXCJhc2Qgd2Qgc2RmXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnY29udGFpbnM6YicsIFtcImFcIiwgXCJiXCIsIFwiY1wiXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2NvbnRhaW5zOngnLCBbXCJhXCIsIFwiYlwiLCBcImNcIl0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXN1bmRlZmluZWQnLCBcImFcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc3VuZGVmaW5lZCcsIG51bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXN1bmRlZmluZWQnLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWydpc251bGwnLCBcImFcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc251bGwnLCBudWxsLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNzZXQnLCBudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzc2V0JywgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzc2V0JywgXCJcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzbnVtYmVyJywgXCJhXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNudW1iZXInLCA0LCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNudW1iZXInLCA0LjUsIHRydWVdLFxuICAgICAgICAgICAgWydpc2ludGVnZXInLCA0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNpbnRlZ2VyJywgNCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzZmxvYXQnLCA1LjYsIHRydWVdLFxuICAgICAgICAgICAgWydpc2Zsb2F0JywgNSwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc29iamVjdCcsIDQsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNvYmplY3QnLCB7fSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzYXJyYXknLCBbe31dLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNhcnJheScsIFwiYVwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ25vdCcsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnbm90JywgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgWydtYXA6YT00OmI9NTpjPTYnLCBcImFcIiwgXCI0XCJdLFxuICAgICAgICAgICAgWyd5ZWFyJywgXCIyMDIzLTAyLTE0XCIsIDIwMjNdLFxuICAgICAgICAgICAgWydtb250aCcsIFwiMjAyMy0wMi0xNFwiLCAyXSxcbiAgICAgICAgICAgIFsnZGF5JywgXCIyMDIzLTAyLTE0XCIsIDE0XSxcbiAgICAgICAgICAgIFsnd2Vla2RheScsIFwiMjAyMy0wMi0xNFwiLCAyXSxcbiAgICAgICAgICAgIFsnbWludXRlcycsIFwiMjAyMy0wMi0xNCAwNjoxMjoyMVwiLCAxMl0sXG4gICAgICAgICAgICBbJ3NlY29uZHMnLCBcIjIwMjMtMDItMTQgMDY6MTI6MjFcIiwgMjFdLFxuICAgICAgICAgICAgWydob3VycycsIFwiMjAyMy0wMi0xNCAwNjoxMjoyMVwiLCA2XSxcbiAgICAgICAgICAgIFsndGltZScsIFwiMjAyMy0wMi0xNCAwNjoxMjoyMVwiLCBcIjA2OjEyOjIxXCJdLFxuICAgICAgICAgICAgWyd0aW1lc3RhbXAnLCBcIjIwMjMtMDItMTRcIiwgMTY3NjMzMjgwMDAwMF0sXG4gICAgICAgICAgICBbJ2NvbmNhdDphLmIuYzp0ZXN0OmEuYi5kJywge2E6IHtiOiB7YzogNCwgZDogNn19fSwgXCI0dGVzdDZcIl0sXG4gICAgICAgICAgICBbJ2NvbmNhdDphLmIuYzpcXFxcIFxcXFwgOmEuYi5kJywge2E6IHtiOiB7YzogNCwgZDogNn19fSwgXCI0ICA2XCJdLFxuICAgICAgICAgICAgWydjb25jYXQ6YS5iLmM6LDphLmIuZCcsIHthOiB7Yjoge2M6IDQsIGQ6IDZ9fX0sIFwiNCw2XCJdLFxuICAgICAgICAgICAgWydjb25jYXQ6YS5iLmM6LDpcXFxcIDphLmIuZCcsIHthOiB7Yjoge2M6IDQsIGQ6IDZ9fX0sIFwiNCwgNlwiXSxcbiAgICAgICAgICAgIFsnPz86YScsIG51bGwsICdhJ10sXG4gICAgICAgICAgICBbJz8/OmEnLCB1bmRlZmluZWQsICdhJ10sXG4gICAgICAgICAgICBbJz8/OmEnLCAndHJ1ZScsICd0cnVlJ10sXG4gICAgICAgICAgICBbJz8/OmEnLCBmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgWycgaWY6YTogJywgZmFsc2UsIHVuZGVmaW5lZF0sIC8vIHdpdGhvdXQgXFxcXFxuICAgICAgICAgICAgWycgaWY6YTpcXFxcICcsIGZhbHNlLCBcIiBcIl0sXG4gICAgICAgICAgICBbJyBpZjphOlxcXFwgJywgdHJ1ZSwgXCJhXCJdLFxuICAgICAgICAgICAgWydkZWZhdWx0OnVuZGVmaW5lZDpib29sJywgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6eWVzJywgbnVsbCwgJ3llcyddLFxuICAgICAgICAgICAgWydkZWZhdWx0OnllcycsIHVuZGVmaW5lZCwgJ3llcyddLFxuICAgICAgICAgICAgWydkZWZhdWx0OjE6Ym9vbCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6b246Ym9vbCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6dHJ1ZTpib29sJywgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp5ZXM6Ym9vbCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6ZmFsc2U6Ym9vbCcsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWydkZWZhdWx0OjE6aW50JywgdW5kZWZpbmVkLCAxXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDoxOnN0cmluZycsIHVuZGVmaW5lZCwgJzEnXSxcbiAgICAgICAgICAgIFsnZmlyc3Qta2V5Jywge2E6IDEsIGM6IDMsIGI6IDJ9LCAxXSxcbiAgICAgICAgICAgIFsnbGFzdC1rZXknLCB7YTogMSwgYzogMywgYjogMn0sIDNdLFxuICAgICAgICAgICAgWydudGgtbGFzdC1rZXk6MCcsIHthOiAxLCBjOiAzLCBiOiAyfSwgM10sXG4gICAgICAgICAgICBbJ250aC1sYXN0LWtleToxJywge2E6IDEsIGM6IDMsIGI6IDJ9LCAyXSxcbiAgICAgICAgICAgIFsnbnRoLWxhc3Qta2V5OjInLCB7YTogMSwgYzogMywgYjogMn0sIDFdLFxuICAgICAgICAgICAgWydudGgta2V5OjInLCB7YTogMSwgYjogMiwgYzogM30sIDNdLFxuICAgICAgICAgICAgWydudGgta2V5OjAnLCB7YzogMywgYTogMSwgYjogMn0sIDFdLFxuICAgICAgICAgICAgWydudGgta2V5OjInLCB7YTogMSwgYzogMywgYjogMn0sIDNdLFxuICAgICAgICAgICAgWydwcmVmaXg6SGVsbG9cXFxcICcsICd0ZXN0JywgXCJIZWxsbyB0ZXN0XCJdLFxuICAgICAgICAgICAgWyd0b2pzb24nLCB7YTogNH0sIFwie1xcXCJhXFxcIjo0fVwiXSxcbiAgICAgICAgICAgIFsncHJlZml4OmFcXFxcXFxcXDogJywgJ3Rlc3QnLCBcImFcXFxcdGVzdFwiXSxcbiAgICAgICAgICAgIFsncHJlZml4OmFcXFxcICcsICd0ZXN0JywgXCJhIHRlc3RcIl0sXG4gICAgICAgICAgICBbJ3N0YXRpYzphYmM6YTpiOngnLCBcInRlc3RcIiwgXCJhYmM6YTpiOnhcIl0sXG4gICAgICAgICAgICBbJ3RvbG93ZXJjYXNlJywgXCJBOmI6Q3NlNFwiLCBcImE6Yjpjc2U0XCJdLFxuICAgICAgICAgICAgWyd0b3VwcGVyJywgXCJBOmI6Q3NlNFwiLCBcIkE6QjpDU0U0XCJdLFxuICAgICAgICAgICAgWyd0b3N0cmluZycsIDUsIFwiNVwiXSxcbiAgICAgICAgICAgIFsndG9zdHJpbmcnLCBbMSwgMiwgMywge31dLCBcIjEsMiwzLFtvYmplY3QgT2JqZWN0XVwiXSxcbiAgICAgICAgICAgIFsndG9pbnRlZ2VyJywgXCI1XCIsIDVdLFxuICAgICAgICAgICAgWyd0cmltJywgXCIgNSBcIiwgXCI1XCJdLFxuICAgICAgICAgICAgWyd0cmltJywgXCIgYVwiLCBcImFcIl0sXG4gICAgICAgICAgICBbJ3RyaW0nLCBcIiBcIiwgXCJcIl0sXG4gICAgICAgICAgICBbJ3Jhd3VybGVuY29kZScsIFwiXHUwMEZDXHUwMEY2XHUwMEU0XCIsIFwiJUMzJUJDJUMzJUI2JUMzJUE0XCJdLFxuICAgICAgICAgICAgWydjYWxsOnRlc3RjYWxsYmFjazo0OjU6NicsIFwidGVzdFwiLCBcInRlc3Q0NTZcIl0sXG4gICAgICAgICAgICBbJ3BsYWluJywgJ3Q8YnI+ZXN0JywgXCJ0ZXN0XCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCB0cnVlLCBcImFcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsICdvbicsIFwiYVwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgJ3RydWUnLCBcImFcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsICdmYWxzZScsIFwiYlwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgOSwgXCJhXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCAnJywgXCJiXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCB1bmRlZmluZWQsIFwiYlwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgZmFsc2UsIFwiYlwiXSxcbiAgICAgICAgICAgIFsndWNmaXJzdCcsICdjYXInLCBcIkNhclwiXSxcbiAgICAgICAgICAgIFsndWNmaXJzdCcsICdjQXInLCBcIkNBclwiXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp0ZXN0JywgJ2EnLCBcImFcIl0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6dGVzdCcsIHVuZGVmaW5lZCwgXCJ0ZXN0XCJdLFxuICAgICAgICAgICAgWydmcm9tanNvbicsICd7fScsIHt9XSxcbiAgICAgICAgICAgIFsnZnJvbWpzb24nLCAne1wiYVwiOjF9Jywge2E6IDF9XSxcbiAgICAgICAgICAgIFsndWN3b3JkcycsICdjQXIgcnVucycsIFwiQ0FyIFJ1bnNcIl0sXG4gICAgICAgICAgICBbJ3RvaW50ZWdlcicsICc2JywgNl0sXG4gICAgICAgICAgICBbJ2xlbmd0aCcsICd0ZXN0JywgNF0sXG4gICAgICAgICAgICBbJ3RvLWJhc2U2NCcsICdIZWxsbyBXb3JsZCEnLCBcIlNHVnNiRzhnVjI5eWJHUWhcIl0sXG4gICAgICAgICAgICBbJ2Zyb20tYmFzZTY0JywgJ1NHVnNiRzhnVjI5eWJHUWgnLCBcIkhlbGxvIFdvcmxkIVwiXSxcbiAgICAgICAgICAgIFsndG8tYmFzZTY0JywgJ3Rlc3QnLCBcImRHVnpkQT09XCJdLFxuICAgICAgICAgICAgWydmcm9tLWJhc2U2NCcsIFwiZEdWemRBPT1cIiwgJ3Rlc3QnXSxcbiAgICAgICAgICAgIFsncHJlZml4OmEnLCAndGVzdCcsIFwiYXRlc3RcIl0sXG4gICAgICAgICAgICBbJ3N1ZmZpeDphJywgJ3Rlc3QnLCBcInRlc3RhXCJdLFxuICAgICAgICAgICAgWydpbmRleDphJywge2E6IDR9LCA0XSxcbiAgICAgICAgICAgIFsnaW5kZXg6MicsIFsyLCA0LCA3XSwgN10sXG4gICAgICAgICAgICBbJ2luZGV4Ong6dGVzdCcsIFsyLCA0LCA3XSwgJ3Rlc3QnXSxcbiAgICAgICAgICAgIFsncGF0aDphLmIuYycsIHthOiB7Yjoge2M6IDR9fX0sIDRdLFxuICAgICAgICAgICAgWydwYXRoOmEuYi5kJywge2E6IHtiOiB7YzogNH19fSwgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIFsnaW5kZXg6YScsIG5ldyBNYXAoKS5zZXQoJ2EnLCA1KSwgNV0sXG4gICAgICAgICAgICBbJ3N1YnN0cmluZzoyOjQnLCAnYWJjZGVmZ2hpamtsbW5vcCcsICdjZGVmJ10sXG4gICAgICAgICAgICBbJ25vcCcsICdhYmNkZWZnaGlqa2xtbm9wJywgJ2FiY2RlZmdoaWprbG1ub3AnXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjJywgJ2EgYiBjJywgJ2EgYiddLFxuICAgICAgICAgICAgWydzZXQtdG9nZ2xlOmMnLCAnYSBiJywgJ2EgYiBjJ10sXG4gICAgICAgICAgICBbJ3NldC1zZXQ6YycsICdhIGInLCAnYSBiIGMnXSxcbiAgICAgICAgICAgIFsnc2V0LXNldDpjJywgJ2EgYiBjJywgJ2EgYiBjJ10sXG4gICAgICAgICAgICBbJ3NldC1yZW1vdmU6YycsICdhIGIgYycsICdhIGInXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjOiwnLCAnYSxiLGMnLCAnYSxiJ10sXG4gICAgICAgICAgICBbJ3NldC10b2dnbGU6YzosJywgJ2EsYicsICdhLGIsYyddLFxuICAgICAgICAgICAgWydzZXQtc2V0OmM6LCcsICdhLGInLCAnYSxiLGMnXSxcbiAgICAgICAgICAgIFsnc2V0LXNldDpjOiwnLCAnYSxiLGMnLCAnYSxiLGMnXSxcbiAgICAgICAgICAgIFsnc2V0LXJlbW92ZTpjOiwnLCAnYSxiLGMnLCAnYSxiJ10sXG4gICAgICAgICAgICBbJ3NldC10b2dnbGU6YyxkOiwnLCAnYSxiLGMnLCAnYSxiLGQnXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjLGQ6LCcsICdhLGIsYyxkJywgJ2EsYiddLFxuICAgICAgICAgICAgWydzZXQtdG9nZ2xlOmMsZDosJywgJ2EsYicsICdhLGIsYyxkJ10sXG4gICAgICAgICAgICBbJ3NldC1zZXQ6YyxkOiwnLCAnYSxiJywgJ2EsYixjLGQnXSxcbiAgICAgICAgICAgIFsnc2V0LXNldDpjLGQ6LCcsICdhLGIsYycsICdhLGIsYyxkJ10sXG4gICAgICAgICAgICBbJ3NldC1yZW1vdmU6YzosJywgJ2EsYixjJywgJ2EsYiddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ1RyYW5zZm9ybWVyLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYyksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBUcmFuc2Zvcm1lcihhKTtcblxuICAgICAgICAgICAgICAgIHQuc2V0Q2FsbGJhY2soJ3Rlc3RjYWxsYmFjaycsIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhICsgYiArIGMgKyBkO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHQucnVuKGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjKS50by5iZS5lcWwociwgXCJUcmFuc2Zvcm1lci5ydW4oXCIgKyBKU09OLnN0cmluZ2lmeShhKSArIFwiKS5ydW4oXCIgKyBKU09OLnN0cmluZ2lmeShiKSArIFwiKSBzaG91bGQgcmV0dXJuIFwiICsgSlNPTi5zdHJpbmdpZnkoYykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVHJhbnNmb3JtZXIucnVuKCkgdGhyb3dzIEVycm9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndG9sb3dlcmNhc2UnLCBbXV0sXG4gICAgICAgICAgICBbJ3RvbG93ZXJjYXNlJywge31dLFxuICAgICAgICAgICAgWyd0b2xvd2VyY2FzZScsIDQuNV0sXG4gICAgICAgICAgICBbJ3RvdXBwZXInLCB0cnVlXSxcbiAgICAgICAgICAgIFsndG91cHBlcicsIDVdLFxuICAgICAgICAgICAgWyd0b2ludGVnZXInLCBcImFcIl0sXG4gICAgICAgICAgICBbJ3RyaW0nLCA1XSxcbiAgICAgICAgICAgIFsndHJpbScsIHRydWVdLFxuICAgICAgICAgICAgWyd0cmltJywge31dLFxuICAgICAgICAgICAgWyd0cmltJywgW11dLFxuICAgICAgICAgICAgWydyYXd1cmxlbmNvZGUnLCBbXV0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsIHt9XSxcbiAgICAgICAgICAgIFsndWN3b3JkcycsIHt9XSxcbiAgICAgICAgICAgIFsndWN3b3JkcycsIGZhbHNlXSxcbiAgICAgICAgICAgIFsndWN3b3JkcycsIDRdLFxuICAgICAgICAgICAgWydwYXRoOmEuYi5jJywgXCJcIiwgNF0sXG4gICAgICAgICAgICBbJ3RvaW50ZWdlcicsIHt9XSxcbiAgICAgICAgICAgIFsnYmFzZTY0Jywge31dLFxuICAgICAgICAgICAgWydmcm9tanNvbicsICcnXSxcbiAgICAgICAgICAgIFsncHJlZml4Jywge31dLFxuICAgICAgICAgICAgWydzdWZmaXgnLCB7fV0sXG4gICAgICAgICAgICBbJ2luZGV4JywgXCJ0ZXN0XCJdLFxuICAgICAgICAgICAgWyd4eHh4eHgnLCBcInRlc3RcIl0sIC8vIHVuc3VwcG9ydGVkIGNvbW1hbmRcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnVHJhbnNmb3JtZXIucnVuKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYikgKyAnKSBzaG91bGQgdGhyb3cgRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB0LnJ1bihiKSkudG8udGhyb3coRXJyb3IpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCduZXcgVHJhbnNmb3JtZXIoKS5ydW4oXCJ1bmlxaWRcIiknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIFN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKCd1bmlxaWQnKTtcbiAgICAgICAgICAgIGV4cGVjdCh0LnJ1bihcIlwiKSkudG8uYmUuYSgnc3RyaW5nJyk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbmV3IFRyYW5zZm9ybWVyKCkucnVuKFwiZGVmYXVsdDpleUppSWpveGZRPT06b2JqZWN0XCIpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdCA9IG5ldyBUcmFuc2Zvcm1lcignZGVmYXVsdDpleUppSWpveGZRPT06b2JqZWN0Jyk7XG4gICAgICAgICAgICBleHBlY3QodC5ydW4odW5kZWZpbmVkKSkudG8uZXFsKHtiOiAxfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCduZXcgVHJhbnNmb3JtZXIoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBUcmFuc2Zvcm1lcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVHJhbnNmb3JtZXIoXCJcIikpLnRvLmluc3RhbmNlT2YoVHJhbnNmb3JtZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIFRyYW5zZm9ybWVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUcmFuc2Zvcm1lcihcInN1ZmZpeDphYmNcIikpLnRvLmluc3RhbmNlT2YoVHJhbnNmb3JtZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnZmFsc2UgYXMgYXJndW1lbnQgc2hvdWxkIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbmV3IFRyYW5zZm9ybWVyKGZhbHNlKVxuICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ29iamVjdCBhcyBhcmd1bWVudCBzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBuZXcgVHJhbnNmb3JtZXIoe30pXG4gICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2kxOG4nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGh0bWwxID0gYFxuPGRpdiBpZD1cIm1vY2stdHJhbnNsYXRpb25zXCI+PC9kaXY+XG48c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJ0cmFuc2xhdGlvbnNcIj5cbiAgICB7XG4gICAgICAgIFwidGVzdDFcIjogXCJ4eXpcIixcbiAgICAgICAgXCJ0ZXN0M1wiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwieHl6XCJcbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PiAgXG5gO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKGRvbmUpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrLXRyYW5zbGF0aW9ucycpO1xuICAgICAgICAgICAgRW1iZWQuYXNzaWduVHJhbnNsYXRpb25zVG9FbGVtZW50KGVsZW0pLnRoZW4oKG8pID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2kxOG46dGVzdDEnLCBcIlwiLCBcInh5elwiXSxcbiAgICAgICAgICAgIFsnaTE4bjonLCBcInRlc3QxXCIsIFwieHl6XCJdLCAvLyBrZXkgYnkgdmFsdWVcbiAgICAgICAgICAgIFsnaTE4bjo6JywgXCJ0ZXN0MVwiLCBcInh5elwiXSwgLy8ga2V5IGJ5IHZhbHVlIG5vIGRlZmF1bHRcbiAgICAgICAgICAgIFsnaTE4bjo6ZWVlJywgXCJ0ZXN0MlwiLCBcImVlZVwiXSwgLy8ga2V5IGJ5IHZhbHVlIHdpdGggZGVmYXVsdFxuICAgICAgICAgICAgWydpMThuOjpkZGQnLCBcInRlc3QyXCIsIFwiZGRkXCJdLCAvLyBrZXkgYnkgdmFsdWUgYW5kIGRlZmF1bHRcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHRyYW5zZm9ybSgnICsgYSArICcpLnJ1bignICsgYiArICcpIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYyksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gbmV3IFRyYW5zZm9ybWVyKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0LnJ1bihiKSkudG8uYmUuZXFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfSlcblxuXG59KTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZGlmZn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL2RpZmYubWpzXCI7XG5pbXBvcnQge1F1ZXVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3F1ZXVlLm1qc1wiO1xuXG5kZXNjcmliZSgnRGlmZicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCd0ZXN0IHRvIGRhdGFzZXRzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBvYmoxLCBvYmoyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgb2JqMSA9IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwidGVzdDJcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgb2JqMiA9IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogXCIzXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcInRlc3QyXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZGF0YXNldHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IGRpZmYob2JqMSwgb2JqMik7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoZCkpLmlzLmVxdWFsKCdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcIjFcIixcImlkXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjIsXCJ0eXBlXCI6XCJudW1iZXJcIn0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOlwiM1wiLFwidHlwZVwiOlwic3RyaW5nXCJ9fV0nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBcbiAgICB9KVxuICAgIFxuICAgIGRlc2NyaWJlKCdEaWZmIHNwZWNpYWwgY2FzZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIG9iajEsIG9iajI7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBvYmoxID0ge1xuICAgICAgICAgICAgICAgIFwiY291bnRcIjogMSxcbiAgICAgICAgICAgICAgICBcInJlYXNvblwiOiBudWxsLFxuICAgICAgICAgICAgICAgIFwiaW5mb1wiOiBcInRlc3RcIixcbiAgICAgICAgICAgICAgICBcImV4Y2hhbmdlXCI6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgb2JqMiA9IHtcbiAgICAgICAgICAgICAgICBcImNvdW50XCI6IDIsXG4gICAgICAgICAgICAgICAgXCJyZWFzb25cIjogbnVsbCxcbiAgICAgICAgICAgICAgICBcImluZm9cIjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFwiZXhjaGFuZ2VcIjogW11cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ0RpZmYgdmFsdWUgd2l0aCBudWxsICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZGlmZihvYmoxLCBvYmoyKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShkKSkuaXMuZXF1YWwoJ1t7XCJvcGVyYXRvclwiOlwidXBkYXRlXCIsXCJwYXRoXCI6W1wiY291bnRcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6MixcInR5cGVcIjpcIm51bWJlclwifX0se1wib3BlcmF0b3JcIjpcImRlbGV0ZVwiLFwicGF0aFwiOltcImluZm9cIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6XCJ0ZXN0XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn19XScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnRGlmZiBpZGVudGljYWwgdmFsdWUgd2l0aCBudWxsICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZGlmZihvYmoxLCBvYmoxKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShkKSkuaXMuZXF1YWwoJ1tdJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG4gICAgY29uc3QgZGF0ZTEgPSBuZXcgRGF0ZTtcblxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGUvcGFyc2VcbiAgICBjb25zdCBkYXRlMiA9IERhdGUucGFyc2UoJzAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVCcpO1xuICAgIGNvbnN0IGRhdGUzID0gRGF0ZS5wYXJzZSgnMDQgRGVjIDE5OTUgMDA6MTI6MDAgR01UJyk7IC8vIE51bWJlclxuICAgIGNvbnN0IGRhdGU0ID0gRGF0ZS5wYXJzZSgnMDQgRGVjIDE5OTUgMDA6MTI6MDEgR01UJyk7IC8vIE51bWJlclxuXG4gICAgY29uc3QgZGF0ZTUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKCcwNCBEZWMgMTk5NSAwMDoxMjowMSBHTVQnKSk7IC8vIERhdGVcbiAgICBjb25zdCBkYXRlNiA9IG5ldyBEYXRlKERhdGUucGFyc2UoJzA0IERlYyAxOTk1IDAwOjEyOjAyIEdNVCcpKTsgLy8gRGF0ZVxuXG4gICAgW1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG5ldyBRdWV1ZSgpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiYVwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6e1wiZGF0YVwiOltdfSxcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIlF1ZXVlXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjogMVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYzoge1xuICAgICAgICAgICAgICAgICAgICBkOiAyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGU6IDNcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGY6IHtcbiAgICAgICAgICAgICAgICAgICAgZDogMlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCIsXCJiXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCIsXCJlXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjozLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiY1wiXSxcImZpcnN0XCI6e1widmFsdWVcIjp7XCJkXCI6Mn0sXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJPYmplY3RcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJmXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjp7XCJkXCI6Mn0sXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJPYmplY3RcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTEsXG4gICAgICAgICAgICAgICAgYzogZGF0ZTRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTIsXG4gICAgICAgICAgICAgICAgYjogZGF0ZTNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJ1cGRhdGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOlwiJyArIGRhdGUxLnRvSVNPU3RyaW5nKCkgKyAnXCIsXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJEYXRlXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjowLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiY1wiXSxcImZpcnN0XCI6e1widmFsdWVcIjo4MTgwMzU5MjEwMDAsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJiXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjo4MTgwMzU5MjAwMDAsXCJ0eXBlXCI6XCJudW1iZXJcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYjogZGF0ZTZcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOlwiMTk5NS0xMi0wNFQwMDoxMjowMS4wMDBaXCIsXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJEYXRlXCJ9fSx7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiYlwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6XCIxOTk1LTEyLTA0VDAwOjEyOjAyLjAwMFpcIixcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIkRhdGVcIn19XSdcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1tdJ1xuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlM1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImFcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjgxODAzNTkyMDAwMCxcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlMlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlM1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MCxcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6ODE4MDM1OTIwMDAwLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogMlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6MixcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHg6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJ4XCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogMixcbiAgICAgICAgICAgICAgICB4OiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwidXBkYXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjoyLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wieFwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjpudWxsLFwidHlwZVwiOlwib2JqZWN0XCJ9fV0nXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW10nXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjpudWxsLFwidHlwZVwiOlwib2JqZWN0XCJ9fV0nXG4gICAgICAgIF0sIFtcbiAgICAgICAge30sXG4gICAgICAgIHthOiB1bmRlZmluZWR9LFxuICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCJdLFwic2Vjb25kXCI6e1widHlwZVwiOlwidW5kZWZpbmVkXCJ9fV0nXG4gICAgXVxuXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgaXQoJ0RpZmYgc2hvdWxkIHJlc3VsdCAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBkaWZmKGEsIGIpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGQpKS5pcy5lcXVhbChjKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG59KSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7YnVpbGRUcmVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvYnVpbGR0cmVlLm1qc1wiO1xuaW1wb3J0IHtOb2RlTGlzdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlbGlzdC5tanNcIjtcblxuXG5kZXNjcmliZSgnYnVpbGRUcmVlJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICBkZXNjcmliZSgnbGVnYWN5IG5hdmlnYXRpb24gZXhhbXBsZSAoaXNzdWUgIzIzMCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gZXhhbXBsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3Qgb2JqZWN0cyA9IEpTT04ucGFyc2UoYHtcbiAgICBcImRhdGFzZXRcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMDAwMSxcbiAgICAgICAgICAgIFwicGFyZW50X2lkXCI6IDIwMDAwMSxcbiAgICAgICAgICAgIFwidGl0bGVcIjogXCJlQmF5XCIsXG4gICAgICAgICAgICBcInVybFwiOiBcIi9cIixcbiAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEsXG4gICAgICAgICAgICBcImNzc19zdHlsZXNcIjogXCJcIixcbiAgICAgICAgICAgIFwiY3NzX2NsYXNzZXNcIjogXCJcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDIwMDAwMSxcbiAgICAgICAgICAgIFwicGFyZW50X2lkXCI6IDIwMDAwMSxcbiAgICAgICAgICAgIFwidGl0bGVcIjogXCJhbHZpbmVjb25zb2xlXCIsXG4gICAgICAgICAgICBcInVybFwiOiBcIlwiLFxuICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMSxcbiAgICAgICAgICAgIFwiY3NzX3N0eWxlc1wiOiBcIlwiLFxuICAgICAgICAgICAgXCJjc3NfY2xhc3Nlc1wiOiBcIlwiXG4gICAgICAgIH1cbiAgICBdLFxuICAgIFwic3lzXCI6IHtcbiAgICAgICAgXCJjb2RlXCI6IDIwMCxcbiAgICAgICAgXCJyZXN1bHRcIjoge30sXG4gICAgICAgIFwiYXBpX3ZlcnNpb25cIjogXCIxXCJcbiAgICB9XG59YCk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYnVpbGRUcmVlKG9iamVjdHMsICdkYXRhc2V0LionLCAnaWQnLCAncGFyZW50X2lkJyk7ICAgIFxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZXJyb3IpLnRvLmJlLmluc3RhbmNlT2YoRXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG5cbiAgICAgICAgICAgIFxuXG4gICAgICAgIH0pXG4gICAgfSkgICAgXG4gICAgXG5cbiAgICBkZXNjcmliZSgnZXhhbXBsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1biBleGFtcGxlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBvYmplY3RzID0ge1xuICAgICAgICAgICAgICAgIGRhdGFzZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgXCIxXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwidmVoaWNsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsXG5cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCIyXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiY2FyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiM1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCIzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInRydWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiNFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vdG9yY3ljbGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIxXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCI1XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIjVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU1VWXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiNlwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCI2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNwb3J0cyBjYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBidWlsZFRyZWUob2JqZWN0cywgJ2RhdGFzZXQuKicsICdpZCcsICdwYXJlbnQnKTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVzKS50by5iZS5pbnN0YW5jZU9mKE5vZGVMaXN0KTtcbiAgICAgICAgICAgIGV4cGVjdChub2Rlcy5sZW5ndGgpLnRvLmVxdWFsKDEpO1xuICAgICAgICAgICAgZXhwZWN0KG5vZGVzLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKCd7XCJpZFwiOlwiMVwiLFwibmFtZVwiOlwidmVoaWNsZVwiLFwicGFyZW50XCI6bnVsbH1cXG4gXHUyNTFDe1wiaWRcIjpcIjJcIixcIm5hbWVcIjpcImNhclwiLFwicGFyZW50XCI6XCIxXCJ9XFxuIHwgXHUyNTFDe1wiaWRcIjpcIjVcIixcIm5hbWVcIjpcIlNVVlwiLFwicGFyZW50XCI6XCIyXCJ9XFxuIHwgXHUyNTE0e1wiaWRcIjpcIjZcIixcIm5hbWVcIjpcInNwb3J0cyBjYXJcIixcInBhcmVudFwiOlwiMlwifVxcbiBcdTI1MUN7XCJpZFwiOlwiM1wiLFwibmFtZVwiOlwidHJ1Y2tcIixcInBhcmVudFwiOlwiMVwifVxcbiBcdTI1MTR7XCJpZFwiOlwiNFwiLFwibmFtZVwiOlwibW90b3JjeWNsZVwiLFwicGFyZW50XCI6XCIxXCJ9JyApO1xuXG5cbiAgICAgICAgfSlcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2J1aWxkVHJlZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBvYmoxID0ge1xuICAgICAgICAgICAgZGF0YXNldDoge1xuICAgICAgICAgICAgICAgIFwiMVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDFcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDFcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsXG5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiMlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDJcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDJcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjFcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgM1wiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgM1wiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjRcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI0XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA0XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA0XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiNVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjVcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDVcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDVcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjFcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI2XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgNlwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgNlwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiNFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIE5vZGUgSW5zdGFuY2UuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGJ1aWxkVHJlZSh7fSwgJycpKS50by5iZS5pbnN0YW5jZU9mKE5vZGVMaXN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW29iajEsICdkYXRhc2V0LionLCAne1wiaWRcIjpcIjFcIixcIm5hbWVcIjpcIlRlc3QgMVwiLFwiYWRkcmVzc1wiOlwiSGVyZSAxXCIsXCJwYXJlbnRcIjpudWxsfVxcbiBcdTI1MUN7XCJpZFwiOlwiMlwiLFwibmFtZVwiOlwiVGVzdCAyXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDJcIixcInBhcmVudFwiOlwiMVwifVxcbiB8IFx1MjUxQ3tcImlkXCI6XCIzXCIsXCJuYW1lXCI6XCJUZXN0IDNcIixcImFkZHJlc3NcIjpcIkhlcmUgM1wiLFwicGFyZW50XCI6XCIyXCJ9XFxuIHwgXHUyNTE0e1wiaWRcIjpcIjRcIixcIm5hbWVcIjpcIlRlc3QgNFwiLFwiYWRkcmVzc1wiOlwiSGVyZSA0XCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gfCB8IFx1MjUxNHtcImlkXCI6XCI2XCIsXCJuYW1lXCI6XCJUZXN0IDZcIixcImFkZHJlc3NcIjpcIkhlcmUgNlwiLFwicGFyZW50XCI6XCI0XCJ9XFxuIFx1MjUxNHtcImlkXCI6XCI1XCIsXCJuYW1lXCI6XCJUZXN0IDVcIixcImFkZHJlc3NcIjpcIkhlcmUgNVwiLFwicGFyZW50XCI6XCIxXCJ9J10sXG4gICAgICAgICAgICBbb2JqMSwgJ3gnLCAnJ10sXG4gICAgICAgICAgICBbb2JqMSwgJ2RhdGFzZXQuKicsICd7XCJpZFwiOlwiMVwiLFwibmFtZVwiOlwiVGVzdCAxXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDFcIixcInBhcmVudFwiOm51bGx9XFxuIFx1MjUxQ3tcImlkXCI6XCIyXCIsXCJuYW1lXCI6XCJUZXN0IDJcIixcImFkZHJlc3NcIjpcIkhlcmUgMlwiLFwicGFyZW50XCI6XCIxXCJ9XFxuIHwgXHUyNTFDe1wiaWRcIjpcIjNcIixcIm5hbWVcIjpcIlRlc3QgM1wiLFwiYWRkcmVzc1wiOlwiSGVyZSAzXCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gfCBcdTI1MTR7XCJpZFwiOlwiNFwiLFwibmFtZVwiOlwiVGVzdCA0XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDRcIixcInBhcmVudFwiOlwiMlwifVxcbiB8IHwgXHUyNTE0e1wiaWRcIjpcIjZcIixcIm5hbWVcIjpcIlRlc3QgNlwiLFwiYWRkcmVzc1wiOlwiSGVyZSA2XCIsXCJwYXJlbnRcIjpcIjRcIn1cXG4gXHUyNTE0e1wiaWRcIjpcIjVcIixcIm5hbWVcIjpcIlRlc3QgNVwiLFwiYWRkcmVzc1wiOlwiSGVyZSA1XCIsXCJwYXJlbnRcIjpcIjFcIn0nXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2J1aWxkVHJlZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnLCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5vZGVsaXN0ID0gYnVpbGRUcmVlKGEsIGIsICdpZCcsICdwYXJlbnQnKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qobm9kZWxpc3QudG9TdHJpbmcoKSkudG8uYmUuZXFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdidWlsZFRyZWUoKSB0ZXN0IDInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIDJcbiAgICAgICAgICogICAgMVxuICAgICAgICAgKiAgICAzXG4gICAgICAgICAqIDRcbiAgICAgICAgICogICAgNlxuICAgICAgICAgKiA1XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBsZXQgb2JqMSA9IHtcbiAgICAgICAgICAgIGRhdGFzZXQ6IHtcbiAgICAgICAgICAgICAgICBcIjFcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAxXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAxXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiMlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDJcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDJcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjBcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgM1wiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgM1wiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjRcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI0XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA0XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA0XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIwXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiNVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjVcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDVcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDVcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjBcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI2XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgNlwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgNlwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiNFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjdcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI3XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA3XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA3XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIxXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gTm9kZSBJbnN0YW5jZS4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoYnVpbGRUcmVlKHt9LCAnJykpLnRvLmJlLmluc3RhbmNlT2YoTm9kZUxpc3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbb2JqMSwgJ2RhdGFzZXQuKicsICd7XCJpZFwiOlwiMlwiLFwibmFtZVwiOlwiVGVzdCAyXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDJcIixcInBhcmVudFwiOlwiMFwifVxcbiBcdTI1MUN7XCJpZFwiOlwiMVwiLFwibmFtZVwiOlwiVGVzdCAxXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDFcIixcInBhcmVudFwiOlwiMlwifVxcbiB8IFx1MjUxNHtcImlkXCI6XCI3XCIsXCJuYW1lXCI6XCJUZXN0IDdcIixcImFkZHJlc3NcIjpcIkhlcmUgN1wiLFwicGFyZW50XCI6XCIxXCJ9XFxuIFx1MjUxNHtcImlkXCI6XCIzXCIsXCJuYW1lXCI6XCJUZXN0IDNcIixcImFkZHJlc3NcIjpcIkhlcmUgM1wiLFwicGFyZW50XCI6XCIyXCJ9XFxue1wiaWRcIjpcIjRcIixcIm5hbWVcIjpcIlRlc3QgNFwiLFwiYWRkcmVzc1wiOlwiSGVyZSA0XCIsXCJwYXJlbnRcIjpcIjBcIn1cXG4gXHUyNTE0e1wiaWRcIjpcIjZcIixcIm5hbWVcIjpcIlRlc3QgNlwiLFwiYWRkcmVzc1wiOlwiSGVyZSA2XCIsXCJwYXJlbnRcIjpcIjRcIn1cXG57XCJpZFwiOlwiNVwiLFwibmFtZVwiOlwiVGVzdCA1XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDVcIixcInBhcmVudFwiOlwiMFwifSddLFxuICAgICAgICAgICAgW29iajEsICd4JywgJyddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnYnVpbGRUcmVlKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcsJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYykgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgbm9kZWxpc3QgPSBidWlsZFRyZWUoYSwgYiwgJ2lkJywgJ3BhcmVudCcsIHtcbiAgICAgICAgICAgICAgICAgICAgcm9vdFJlZmVyZW5jZXM6IFsnMCddXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3Qobm9kZWxpc3QudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoYyk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG4gICAgXG4gICAgXG4gICAgXG5cblxufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1BhdGhmaW5kZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuXG5kZXNjcmliZSgnUGF0aGZpbmRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBjb252ZXJ0TWFwUmVzdWx0ID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICAgIHIgPSBPYmplY3QuZnJvbUVudHJpZXMocik7XG4gICAgICAgICAgICBpZiAociBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIubWFwKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0TWFwUmVzdWx0KGUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgb10gb2YgT2JqZWN0LmVudHJpZXMocikpIHtcbiAgICAgICAgICAgICAgICAgICAgcltrXSA9IGNvbnZlcnRNYXBSZXN1bHQobyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG5cbiAgICBkZXNjcmliZSgnd2l0aCBXaWxkY2FyZCBhbmQgSXRlcmF0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IHBmLCBvYmo7XG5cbiAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBvYmogPSB7XG4gICAgICAgICAgICAgICAgYTogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIjEtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiMS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZDogJyEnXG5cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogXCIyLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIjItMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6ICc/J1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGYgPSBuZXcgUGF0aGZpbmRlcihvYmopO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2EuKi5iLionLCAne1wiMFwiOntcIjBcIjp7XCJjXCI6XCIxLTFcIn0sXCIxXCI6e1wiY1wiOlwiMS0yXCJ9fSxcIjFcIjp7XCIwXCI6e1wiY1wiOlwiMi0xXCJ9LFwiMVwiOntcImNcIjpcIjItMlwifX19J10sXG4gICAgICAgICAgICBbJ2EuKi5iJywgJ3tcIjBcIjpbe1wiY1wiOlwiMS0xXCJ9LHtcImNcIjpcIjEtMlwifV0sXCIxXCI6W3tcImNcIjpcIjItMVwifSx7XCJjXCI6XCIyLTJcIn1dfSddLFxuICAgICAgICAgICAgWydhLjEuYicsICdbe1wiY1wiOlwiMi0xXCJ9LHtcImNcIjpcIjItMlwifV0nXSxcbiAgICAgICAgICAgIFsnYS4wLmInLCAnW3tcImNcIjpcIjEtMVwifSx7XCJjXCI6XCIxLTJcIn1dJ10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICBpdCgnLnNldFZpYSgnICsgYSArICcpIHNob3VsZCByZXN1bHQgaW4gJyArIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCByID0gcGYuZ2V0VmlhKGEpO1xuICAgICAgICAgICAgICAgIGxldCBpID0gY29udmVydE1hcFJlc3VsdChyKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoaSkpLmlzLmVxdWFsKGIpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdhcGkgdGVzdHMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHBhdGhmaW5kZXIsIG9iamVjdDtcblxuXG4gICAgICAgIGNsYXNzIEEge1xuICAgICAgICAgICAgZ2V0IGEoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICBvYmplY3QgPSB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgXCJ0ZXN0MVwiLCBmYWxzZSwgdW5kZWZpbmVkLCBwYXJzZUludChcImFcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGY6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiBbXCJ0ZXN0MlwiXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBqOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGs6IChuZXcgTWFwKS5zZXQoJ20nLCB7bjogM30pLFxuICAgICAgICAgICAgICAgICAgICAgICAgbDogKG5ldyBTZXQpLmFkZCh7bjogNH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGI6IG5ldyBBXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBwYXRoZmluZGVyID0gbmV3IFBhdGhmaW5kZXIob2JqZWN0KTtcblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgbmV3IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxMl0sXG4gICAgICAgICAgICAgICAgW3VuZGVmaW5lZF0sXG4gICAgICAgICAgICAgICAgW251bGxdLFxuICAgICAgICAgICAgICAgIFtcInRlc3RcIl1cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgbGFiZWwgPSB0eXBlb2YgYTtcbiAgICAgICAgICAgICAgICBpZiAoYSA9PT0gbnVsbCkgbGFiZWwgPSAnbnVsbCc7XG5cblxuICAgICAgICAgICAgICAgIGl0KGxhYmVsICsgJyBzaG91bGQgdGhyb3cgZXJyb3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQYXRoZmluZGVyKGEpXG4gICAgICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KEVycm9yKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJy5zZXRWaWEoeCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBwZiwgb2JqO1xuXG4gICAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBvYmogPSB7fVxuICAgICAgICAgICAgICAgIHBmID0gbmV3IFBhdGhmaW5kZXIob2JqKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhLmIuMC4wLmMnLCB0cnVlLCAne1wiYVwiOntcImJcIjpbW3tcImNcIjp0cnVlfV1dfX0nXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi4wLmMnLCB0cnVlLCAne1wiYVwiOntcImJcIjpbe1wiY1wiOnRydWV9XX19J10sXG4gICAgICAgICAgICAgICAgWydhLmIuMy5jJywgdHJ1ZSwgJ3tcImFcIjp7XCJiXCI6W251bGwsbnVsbCxudWxsLHtcImNcIjp0cnVlfV19fSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLmMnLCB0cnVlLCAne1wiYVwiOntcImJcIjp7XCJjXCI6dHJ1ZX19fSddXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgICAgICBpdCgnLnNldFZpYSgnICsgYSArICcsICcgKyBiICsgJykgc2hvdWxkIHJlc3VsdCBpbiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBwZi5zZXRWaWEoYSwgYilcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG9iaikpLmlzLmVxdWFsKGMpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJy5zZXRWaWEoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IGE7XG4gICAgICAgICAgICBsZXQgYjtcbiAgICAgICAgICAgIGxldCBjO1xuXG4gICAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBhID0gXCJhLnhcIjtcbiAgICAgICAgICAgICAgICBiID0gXCJ0cnVlXCI7XG4gICAgICAgICAgICAgICAgYyA9IFwiYS55LmRcIjtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCcuc2V0VmlhKCcgKyBhICsgJywgJyArIGIgKyAnKSBzaG91bGQgcmV0dXJuIFBhdGhmaW5kZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHBhdGhmaW5kZXIuc2V0VmlhKGEsIGIpKS5pcy5pbnN0YW5jZU9mKFBhdGhmaW5kZXIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCcuc2V0VmlhKCcgKyBhICsgJywgJyArIGIgKyAnKSBzaG91bGQgY2hhbmdlIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBwYXRoZmluZGVyLnNldFZpYShhLCBiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkob2JqZWN0KSkuaXMuZXF1YWwoJ3tcImFcIjp7XCJiXCI6e1wiY1wiOls0LFwidGVzdDFcIixmYWxzZSxudWxsLG51bGxdLFwiZVwiOmZhbHNlLFwiZlwiOlt7XCJnXCI6ZmFsc2UsXCJoXCI6MyxcImlcIjpbXCJ0ZXN0MlwiXX1dLFwialwiOnt9LFwia1wiOnt9LFwibFwiOnt9fSxcInhcIjpcInRydWVcIn0sXCJiXCI6e319Jyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJy5zZXRWaWEoJyArIGMgKyAnLCAnICsgYiArICcpIHNob3VsZCBjaGFuZ2Ugb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHBhdGhmaW5kZXIuc2V0VmlhKGMsIGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShvYmplY3QpKS5pcy5lcXVhbCgne1wiYVwiOntcImJcIjp7XCJjXCI6WzQsXCJ0ZXN0MVwiLGZhbHNlLG51bGwsbnVsbF0sXCJlXCI6ZmFsc2UsXCJmXCI6W3tcImdcIjpmYWxzZSxcImhcIjozLFwiaVwiOltcInRlc3QyXCJdfV0sXCJqXCI6e30sXCJrXCI6e30sXCJsXCI6e319LFwieVwiOntcImRcIjpcInRydWVcIn19LFwiYlwiOnt9fScpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgICAgICBkZXNjcmliZSgnLmV4aXN0cygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYS5iLmMuMScsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYi5hJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWydhLmIueCcsIGZhbHNlXSxcbiAgICAgICAgICAgICAgICBbJ2EueCcsIGZhbHNlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5xJywgZmFsc2VdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmMuMCcsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmQnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5mLjAuZycsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYuMC5pLjAnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5mLjAuaS4yJywgZmFsc2VdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmUnLCB0cnVlXSxcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgICAgICBpdCgnLmV4aXN0cygnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHBhdGhmaW5kZXIuZXhpc3RzKGEpKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCcuZGVsZXRlVmlhKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhLmIuZScsICd7XCJhXCI6e1wiYlwiOntcImNcIjpbNCxcInRlc3QxXCIsZmFsc2UsbnVsbCxudWxsXSxcImZcIjpbe1wiZ1wiOmZhbHNlLFwiaFwiOjMsXCJpXCI6W1widGVzdDJcIl19XSxcImpcIjp7fSxcImtcIjp7fSxcImxcIjp7fX19LFwiYlwiOnt9fSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYnLCAne1wiYVwiOntcImJcIjp7XCJjXCI6WzQsXCJ0ZXN0MVwiLGZhbHNlLG51bGwsbnVsbF0sXCJlXCI6ZmFsc2UsXCJqXCI6e30sXCJrXCI6e30sXCJsXCI6e319fSxcImJcIjp7fX0nXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5qJywgJ3tcImFcIjp7XCJiXCI6e1wiY1wiOls0LFwidGVzdDFcIixmYWxzZSxudWxsLG51bGxdLFwiZVwiOmZhbHNlLFwiZlwiOlt7XCJnXCI6ZmFsc2UsXCJoXCI6MyxcImlcIjpbXCJ0ZXN0MlwiXX1dLFwia1wiOnt9LFwibFwiOnt9fX0sXCJiXCI6e319J10sXG5cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgaXQoJy5kZWxldGVWaWEoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGhmaW5kZXIuZGVsZXRlVmlhKGEpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShvYmplY3QpKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnLmdldFZpYSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZGVzY3JpYmUoJy5nZXRWaWEoKScsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgXCJ0ZXN0MVwiLCBmYWxzZSwgdW5kZWZpbmVkLCBwYXJzZUludChcImFcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTogW1widGVzdDJcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGs6IChuZXcgTWFwKS5zZXQoJ20nLCB7bjogM30pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiAobmV3IFNldCkuYWRkKHtuOiA0fSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwOiB7cTogMSwgcjogdHJ1ZX19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6IHtxOiAyLCByOiB0cnVlfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cDoge3E6IDMsIHI6IHRydWV9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwOiB7cTogNCwgcjogdHJ1ZX19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6IHtxOiA1LCByOiB0cnVlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDoge2E6IDF9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdToge2E6IDJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjoge2E6IDN9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDoge2E6IDR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcGF0aGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKG9iamVjdCk7XG5cblxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBbJ2EuKicsICdbW1wiYlwiLHtcImNcIjpbNCxcInRlc3QxXCIsZmFsc2UsbnVsbCxudWxsXSxcImVcIjpmYWxzZSxcImZcIjpbe1wiZ1wiOmZhbHNlLFwiaFwiOjMsXCJpXCI6W1widGVzdDJcIl19XSxcImpcIjp7fSxcImtcIjp7fSxcImxcIjp7fSxcIm9cIjpbe1wicFwiOntcInFcIjoxLFwiclwiOnRydWV9fSx7XCJwXCI6e1wicVwiOjIsXCJyXCI6dHJ1ZX19LHtcInBcIjp7XCJxXCI6MyxcInJcIjp0cnVlfX0se1wicFwiOntcInFcIjo0LFwiclwiOnRydWV9fSx7XCJwXCI6e1wicVwiOjUsXCJyXCI6dHJ1ZX19XSxcInNcIjp7XCJ0XCI6e1wiYVwiOjF9LFwidVwiOntcImFcIjoyfSxcInZcIjp7XCJhXCI6M30sXCJ4XCI6e1wiYVwiOjR9fX1dXSddLFxuICAgICAgICAgICAgICAgICAgICBbJ2EuYi5zLiouYScsICdbW1widFwiLDFdLFtcInVcIiwyXSxbXCJ2XCIsM10sW1wieFwiLDRdXSddLFxuICAgICAgICAgICAgICAgICAgICBbJ2EuYi5zLionLCAnW1tcInRcIix7XCJhXCI6MX1dLFtcInVcIix7XCJhXCI6Mn1dLFtcInZcIix7XCJhXCI6M31dLFtcInhcIix7XCJhXCI6NH1dXSddLFxuICAgICAgICAgICAgICAgICAgICBbJ2EuYi5vLioucC5xJywgJ1tbXCIwXCIsMV0sW1wiMVwiLDJdLFtcIjJcIiwzXSxbXCIzXCIsNF0sW1wiNFwiLDVdXSddLFxuICAgICAgICAgICAgICAgICAgICBbJ2EuYi5vLioucC5yJywgJ1tbXCIwXCIsdHJ1ZV0sW1wiMVwiLHRydWVdLFtcIjJcIix0cnVlXSxbXCIzXCIsdHJ1ZV0sW1wiNFwiLHRydWVdXSddLFxuICAgICAgICAgICAgICAgICAgICBbJ2EuYi5vLioucCcsICdbW1wiMFwiLHtcInFcIjoxLFwiclwiOnRydWV9XSxbXCIxXCIse1wicVwiOjIsXCJyXCI6dHJ1ZX1dLFtcIjJcIix7XCJxXCI6MyxcInJcIjp0cnVlfV0sW1wiM1wiLHtcInFcIjo0LFwiclwiOnRydWV9XSxbXCI0XCIse1wicVwiOjUsXCJyXCI6dHJ1ZX1dXSddXG4gICAgICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgICAgICBpdCgnLmdldFZpYSgnICsgYSArICcpIHNob3VsZCByZXN1bHQgJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByID0gcGF0aGZpbmRlci5nZXRWaWEoYSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHIpKSkuaXMuZXF1YWwoYik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCcuZ2V0VmlhKCkgc2hvdWxkIHJlc3VsdCAnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgcCA9IG5ldyBQYXRoZmluZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjOiAxfSwge2M6IDJ9XG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2M6IDEsIGQ6IGZhbHNlfSwge2M6IDJ9XG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbGV0IHIgPSBwLmdldFZpYShcIioueC4qLmNcIilcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1hcFRvT2JqKG1hcCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0ge31cbiAgICAgICAgICAgICAgICAgICAgbWFwLmZvckVhY2goZnVuY3Rpb24gKHYsIGspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tdID0gbWFwVG9PYmoodilcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tdID0gdlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkobWFwVG9PYmoocikpKS5pcy5lcXVhbCgne1wiYVwiOntcIjBcIjoxLFwiMVwiOjJ9LFwiYlwiOntcIjBcIjoxLFwiMVwiOjJ9fScpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCcuZ2V0VmlhKGEuYi5sLjAubikgd2l0aCBtYXAgc2hvdWxkIHJldHVybiA0ICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QocGF0aGZpbmRlci5nZXRWaWEoJ2EuYi5sLjAubicpKS5pcy5lcXVhbCg0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhLmIuay5tLm4nLCAzXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5sLjAubicsIDRdLFxuICAgICAgICAgICAgICAgIFsnYS54JywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5xJywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5jLjEnLCBcInRlc3QxXCJdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmMuMCcsIDRdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmQnLCB1bmRlZmluZWRdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYuMC5nJywgZmFsc2VdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYuMC5pLjAnLCBcInRlc3QyXCJdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmUnLCBmYWxzZV0sXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICAgICAgaXQoJy5nZXRWaWEoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChwYXRoZmluZGVyLmdldFZpYShhKSkuaXMuZXF1YWwoYik7XG4gICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2EuYi5kLmUnXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5kLngnXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5sLmUubiddLFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgaXQoJy5nZXRWaWEoJyArIGEgKyAnKSBzaG91bGQgdGhyb3cgRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gcGF0aGZpbmRlci5nZXRWaWEoYSkpLnRvLnRocm93KEVycm9yKVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7UGlwZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL3BpcGUubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge0VtYmVkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdQaXBlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgaWYgKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncnVuIGRpZmZlcmVudCBwaXBlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgW1xuICAgICAgICAgICAgWydwYXRoOmIgfCBpZjp4OlxcXFwgJywge2E6IHRydWV9LCAnICddLCAgIC8vICdcXFxcICcubGVuZ3RoIFx1MjFBNiAyXG4gICAgICAgICAgICBbJ3BhdGg6YSB8IGlmOng6XFxcXCAnLCB7YTogdHJ1ZX0sICd4J10sXG4gICAgICAgICAgICBbJ25vcCcsICdhYmNkZWZnaGlqa2xtbm9wJywgJ2FiY2RlZmdoaWprbG1ub3AnXSxcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnUGlwZS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykucnVuKCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgUGlwZShhKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0LnJ1bihiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QocikudG8uYmUuZXFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ25ldyBQaXBlIHNob3VsZCBjcmVhdGUgbmV3IEluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIEluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBQaXBlKCcnKSkudG8uYmUuaW5zdGFuY2VPZihQaXBlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gSW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFBpcGUoJ2luZGV4OmF8dG91cHBlciB8cHJlZml4OmEnKS5ydW4oe2E6IFwidGVzdFwifSkpLnRvLmJlLmVxdWFsKCdhVEVTVCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2luZGV4OmF8dG91cHBlciB8cHJlZml4OmEnLCB7YTogXCJ0ZXN0XCJ9LCAnYVRFU1QnXSxcbiAgICAgICAgICAgIFsncGF0aDphLmIuYy5kIHwgdG91cHBlciB8IHByZWZpeDpIZWxsb1xcXFwgJywge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IFwid29ybGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgJ0hlbGxvIFdPUkxEJ10sXG4gICAgICAgICAgICBbJ3BhdGg6YS5iLmN8aW5kZXg6ZHx0b3VwcGVyIHxzdWZmaXg6eCcsIHthOiB7Yjoge2M6IHtkOiBcInRlc3RcIn19fX0sICdURVNUeCddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnbmV3IFBpcGUoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykucnVuKCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgUGlwZShhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodC5ydW4oYikpLnRvLmJlLmVxdWFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCduZXcgUGlwZSBhbmQgbG9jYWxlJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgbGV0IGh0bWwxID0gYFxuPGRpdiBpZD1cIm1vY2stdHJhbnNsYXRpb25zXCI+PC9kaXY+XG48c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJ0cmFuc2xhdGlvbnNcIj5cbiAgICB7XG4gICAgICAgIFwiNTFcIjogXCJ4eXpcIixcbiAgICAgICAgXCI1MlwiOiBcImFiY1wiLFxuICAgICAgICBcIjUzXCI6IFwiZGVmXCJcbiAgICB9XG48L3NjcmlwdD4gIFxuYDtcblxuICAgICAgICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9jay10cmFuc2xhdGlvbnMnKTtcbiAgICAgICAgICAgIEVtYmVkLmFzc2lnblRyYW5zbGF0aW9uc1RvRWxlbWVudChlbGVtKS50aGVuKChvKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3BhdGg6c3RhdHVzIHwgdG9zdHJpbmcgfCBpMThuJywge3N0YXR1czogNTF9LCBcInh5elwiXVxuXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBwaXBlID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgb2JqID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZXhwZWN0ZWQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCB0cmFuc2Zvcm0oJyArIHBpcGUgKyAnKS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KG9iaikgKyAnKSByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gbmV3IFBpcGUocGlwZSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQucnVuKG9iaikpLnRvLmJlLmVxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG5cbn0pO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4dGVuZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cblxuY2xhc3MgTW9ja0ZvckV4dGVuZHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgIH1cbn1cblxuXG5kZXNjcmliZSgnZXh0ZW5kJywgZnVuY3Rpb24gKCkge1xuXG4gICAgW1xuICAgICAgICBbXG4gICAgICAgICAgICd7XCJ0aGVrZXlcIjp7fX0nLHt9LHt0aGVrZXk6bmV3IE1vY2tGb3JFeHRlbmRzfSBcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3tcImFcIjp7XCJiXCI6W119fScsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIzXCJcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sICAgICAgICBbXG4gICAgICAgICAgICAne1wiYVwiOntcImJcIjoxLFwiZFwiOjF9fScsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiAxXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGQ6IDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgICd7XCJhXCI6e1wiYlwiOjEsXCJkXCI6e1wieFwiOltcImNhclwiXSxcImZcIjp0cnVlLFwiZ1wiOltdfX19JyxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjogMSxcbiAgICAgICAgICAgICAgICAgICAgZDoge3g6IFtcImNhclwiXX1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGc6IFtdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICBdXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYSA9IGRhdGFcblxuICAgICAgICBpdCgnLmV4dGVuZCgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgcmVzdWx0IGluICcgKyBkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgeCA9IGV4dGVuZC5hcHBseSh0aGlzLCBhKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeSh4KSkuaXMuZXF1YWwoZCk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgW1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiAxLFxuICAgICAgICAgICAgICAgICAgICBkOiBbXCJjYXJcIl1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGc6IFtdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge31cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhXG5cbiAgICAgICAgaXQoJy5leHRlbmQoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkIHRocm93IEVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBleHRlbmQuYXBwbHkodGhpcywgYSkpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG59KVxuXG5cblxuZGVzY3JpYmUoJ2V4dGVuZCBmdW5jdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGV4dGVuZCBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGZyb20gYW5vdGhlciBvYmplY3QnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHsgYTogMSB9O1xuICAgICAgICBjb25zdCBzb3VyY2UgPSB7IGI6IDIgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0ZW5kKHRhcmdldCwgc291cmNlKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7IGE6IDEsIGI6IDIgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBub24tb2JqZWN0IHRhcmdldCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgY29uc3Qgc291cmNlID0geyBiOiAyIH07XG4gICAgICAgIGV4cGVjdCgoKSA9PiBleHRlbmQodGFyZ2V0LCBzb3VyY2UpKS50by50aHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3Igbm9uLW9iamVjdCBzb3VyY2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHsgYTogMSB9O1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBcIm5vdCBhbiBvYmplY3RcIjtcbiAgICAgICAgZXhwZWN0KCgpID0+IGV4dGVuZCh0YXJnZXQsIHNvdXJjZSkpLnRvLnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBkZWVwIG9iamVjdCBleHRlbnNpb24nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHsgYTogeyBiOiAxIH0gfTtcbiAgICAgICAgY29uc3Qgc291cmNlID0geyBhOiB7IGM6IDIgfSwgZDogMyB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBleHRlbmQodGFyZ2V0LCBzb3VyY2UpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHsgYTogeyBiOiAxLCBjOiAyIH0sIGQ6IDMgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBhcnJheSBleHRlbnNpb24nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHsgYTogWzEsIDJdIH07XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHsgYTogWzMsIDRdIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dGVuZCh0YXJnZXQsIHNvdXJjZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoeyBhOiBbMywgNF0gfSk7XG4gICAgfSk7XG59KTtcblxuXG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEFic3RyYWN0Q29uc3RyYWludCB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBUaGUgYWJzdHJhY3QgY29uc3RyYWludCBkZWZpbmVzIHRoZSBhcGkgZm9yIGFsbCBjb25zdHJhaW50cy4gbWFpbmx5IHRoZSBtZXRob2QgaXNWYWxpZCgpIGlzIGRlZmluZWQuXG4gKlxuICogRGVyaXZlZCBjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSBtZXRob2QgaXNWYWxpZCgpLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIGFic3RyYWN0IGNvbnN0cmFpbnRcbiAqL1xuY2xhc3MgQWJzdHJhY3RDb25zdHJhaW50IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCBtdXN0IHJldHVybiBhIHByb21pc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdCh2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL2Fic3RyYWN0LWNvbnN0cmFpbnRcIik7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBYnN0cmFjdENvbnN0cmFpbnQgfSBmcm9tIFwiLi9hYnN0cmFjdC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IEludmFsaWQgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIGludmFsaWQgY29uc3RyYWludCBhbGxvd3MgYW4gYWx3YXlzIGludmFsaWQgcXVlcnkgdG8gYmUgcGVyZm9ybWVkLiB0aGlzIGNvbnN0cmFpbnQgaXMgbWFpbmx5IGludGVuZGVkIGZvciB0ZXN0aW5nLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvY29uc3RyYWludHMvaW52YWxpZC8gQSBzaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25zdHJhaW50IHRoYXQgYWx3YXlzIGludmFsaWRcbiAqL1xuY2xhc3MgSW52YWxpZCBleHRlbmRzIEFic3RyYWN0Q29uc3RyYWludCB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXR1cm5zIGEgcmVqZWN0ZWQgcHJvbWlzZVxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvaW52YWxpZFwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7SW52YWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pbnZhbGlkLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ0ludmFsaWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGlzdmFsaWQgPSBuZXcgSW52YWxpZCgpXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXNvbHZlIHByb21pc2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgaXN2YWxpZC5pc1ZhbGlkKCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGUpLnRvLmJlLnVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge0Fic3RyYWN0T3BlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvYWJzdHJhY3RvcGVyYXRvci5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmNsYXNzIEFic3RyYWN0Q29uc3RyYWludE1vY2sgZXh0ZW5kcyBCYXNlIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGlzVmFsaWQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcbiAgICB9XG59XG5cblxuZGVzY3JpYmUoJ0Fic3RyYWN0T3BlcmF0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIHRoZSBjb25zdHJhaW50IGlzIG5vdCBjYWxsIHdpdGggcGFyYW1ldGVyJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBBYnN0cmFjdE9wZXJhdG9yKClcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IG5vdCBhbiBlcnJvciB3aGVuIHRoZSBjb25zdHJhaW50IGlzIG5vdCBjYWxsIHdpdGggcGFyYW1ldGVyJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyBBYnN0cmFjdE9wZXJhdG9yKG5ldyBBYnN0cmFjdENvbnN0cmFpbnRNb2NrKCksIG5ldyBBYnN0cmFjdENvbnN0cmFpbnRNb2NrKCkpICAgIFxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgXG5cbiAgICB9KTtcbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH0gZnJvbSBcIi4vYWJzdHJhY3QubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBBYnN0cmFjdE9wZXJhdG9yIH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIE9wZXJhdG9ycyBhbGxvdyB5b3UgdG8gbGluayBjb25zdHJhaW50cyB0b2dldGhlci4gZm9yIGV4YW1wbGUsIHlvdSBjYW4gY2hlY2sgd2hldGhlciBhIHZhbHVlIGlzXG4gKiBhbiBvYmplY3Qgb3IgYW4gYXJyYXkuIGVhY2ggb3BlcmF0b3IgaGFzIHR3byBvcGVyYW5kcyB0aGF0IGFyZSBsaW5rZWQgdG9nZXRoZXIuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgYWJzdHJhY3Qgb3BlcmF0b3IgY29uc3RyYWludFxuICovXG5jbGFzcyBBYnN0cmFjdE9wZXJhdG9yIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJhaW50IHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7QWJzdHJhY3RDb25zdHJhaW50fSBvcGVyYW50QVxuXHQgKiBAcGFyYW0ge0Fic3RyYWN0Q29uc3RyYWludH0gb3BlcmFudEJcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSBcInBhcmFtZXRlcnMgbXVzdCBiZSBmcm9tIHR5cGUgQWJzdHJhY3RDb25zdHJhaW50XCJcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wZXJhbnRBLCBvcGVyYW50Qikge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoXG5cdFx0XHQhKFxuXHRcdFx0XHRvcGVyYW50QSBpbnN0YW5jZW9mIEFic3RyYWN0Q29uc3RyYWludCAmJlxuXHRcdFx0XHRvcGVyYW50QiBpbnN0YW5jZW9mIEFic3RyYWN0Q29uc3RyYWludFxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInBhcmFtZXRlcnMgbXVzdCBiZSBmcm9tIHR5cGUgQWJzdHJhY3RDb25zdHJhaW50XCIpO1xuXHRcdH1cblxuXHRcdHRoaXMub3BlcmFudEEgPSBvcGVyYW50QTtcblx0XHR0aGlzLm9wZXJhbnRCID0gb3BlcmFudEI7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL2Fic3RyYWN0LW9wZXJhdG9yXCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH0gZnJvbSBcIi4vYWJzdHJhY3QubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBWYWxpZCB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBUaGUgdmFsaWQgY29uc3RyYWludCBhbGxvd3MgYW4gYWx3YXlzIHZhbGlkIHF1ZXJ5IHRvIGJlIHBlcmZvcm1lZC4gdGhpcyBjb25zdHJhaW50IGlzIG1haW5seSBpbnRlbmRlZCBmb3IgdGVzdGluZy5cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3ZhbGlkLyBBIHNpbXBsZSBleGFtcGxlXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGNvbnN0cmFpbnQgdGhhdCBhbHdheXMgdmFsaWRcbiAqL1xuY2xhc3MgVmFsaWQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cmFpbnQge1xuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmV0dXJuIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL3ZhbGlkXCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQWJzdHJhY3RPcGVyYXRvciB9IGZyb20gXCIuL2Fic3RyYWN0b3BlcmF0b3IubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBPck9wZXJhdG9yIH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIFRoZSBPck9wZXJhdG9yIGlzIHVzZWQgdG8gbGluayBzZXZlcmFsIGNvbnN0cmFpbnRzLiBUaGUgY29uc3RyYWludCBpcyBmdWxmaWxsZWQgaWYgb25lIG9mIHRoZSBjb25zdHJhaW50cyBpcyBmdWxmaWxsZWQuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9jb25zdHJhaW50cy9vcm9wZXJhdG9yLyBBIHNpbXBsZSBleGFtcGxlXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIG9yIG9wZXJhdG9yXG4gKi9cbmNsYXNzIE9yT3BlcmF0b3IgZXh0ZW5kcyBBYnN0cmFjdE9wZXJhdG9yIHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJldHVybnMgYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGlzVmFsaWQodmFsdWUpIHtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0bGV0IGE7XG5cdFx0XHRsZXQgYjtcblxuXHRcdFx0c2VsZi5vcGVyYW50QVxuXHRcdFx0XHQuaXNWYWxpZCh2YWx1ZSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRhID0gZmFsc2U7XG5cdFx0XHRcdFx0LyoqIGIgaGFzIGFscmVhZHkgYmVlbiBldmFsdWF0ZWQgYW5kIHdhcyBub3QgdHJ1ZSAqL1xuXHRcdFx0XHRcdGlmIChiID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0c2VsZi5vcGVyYW50QlxuXHRcdFx0XHQuaXNWYWxpZCh2YWx1ZSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRiID0gZmFsc2U7XG5cdFx0XHRcdFx0LyoqIGIgaGFzIGFscmVhZHkgYmVlbiBldmFsdWF0ZWQgYW5kIHdhcyBub3QgdHJ1ZSAqL1xuXHRcdFx0XHRcdGlmIChhID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvb3Itb3BlcmF0b3JcIik7XG5cdH1cbn1cbiIsICJpbXBvcnQge1ZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qc1wiO1xuaW1wb3J0IHtJbnZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2ludmFsaWQubWpzXCI7XG5pbXBvcnQge09yT3BlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvb3JvcGVyYXRvci5tanNcIjtcblxuZGVzY3JpYmUoJ09yT3BlcmF0b3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbbmV3IFZhbGlkKCksIG5ldyBWYWxpZCgpLCB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgVmFsaWQoKSwgbmV3IEludmFsaWQoKSwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IEludmFsaWQoKSwgbmV3IFZhbGlkKCksIHRydWVdLFxuICAgICAgICAgICAgW25ldyBJbnZhbGlkKCksIG5ldyBJbnZhbGlkKCksIGZhbHNlXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnY29uc3RyYWludC5pc1ZhbGlkKCkgc2hvdWxkIHJldHVybiAnICsgYywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IE9yT3BlcmF0b3IoYSwgYik7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludC5pc1ZhbGlkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMgPT09IHRydWUgPyBkb25lKCkgOiBkb25lKG5ldyBFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMgPT09IHRydWUgPyBkb25lKG5ldyBFcnJvcigpKSA6IGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFic3RyYWN0Q29uc3RyYWludCB9IGZyb20gXCIuL2Fic3RyYWN0Lm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgSXNPYmplY3QgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9jb25zdHJhaW50cy9pc29iamVjdC8gQSBzaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25zdHJhaW50IHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYW4gb2JqZWN0XG4gKi9cbmNsYXNzIElzT2JqZWN0IGV4dGVuZHMgQWJzdHJhY3RDb25zdHJhaW50IHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJldHVybnMgYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGlzVmFsaWQodmFsdWUpIHtcblx0XHRpZiAoaXNPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50L2lzLW9iamVjdFwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7SXNPYmplY3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaXNvYmplY3QubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnSXNPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBuZXcgSXNPYmplY3QoKVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmVzb2x2ZSBwcm9taXNlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnQuaXNWYWxpZCh7fSkudGhlbihyID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QocikuaXMuYSgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbm90IHJlYWNoZWQ6IFwiICsgZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBYnN0cmFjdE9wZXJhdG9yIH0gZnJvbSBcIi4vYWJzdHJhY3RvcGVyYXRvci5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IEFuZE9wZXJhdG9yIH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIFRoZSBBbmRPcGVyYXRvciBpcyB1c2VkIHRvIGxpbmsgc2V2ZXJhbCBjb25zdHJhaW50cy4gVGhlIGNvbnN0cmFpbnQgaXMgZnVsZmlsbGVkIGlmIGFsbCBjb25zdHJhaW50cyBvZiB0aGUgb3BlcmF0b3JzIGFyZSBmdWxmaWxsZWQuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9jb25zdHJhaW50cy9hbmRvcGVyYXRvci8gQSBzaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBhbmQgb3BlcmF0b3IgY29uc3RyYWludFxuICovXG5jbGFzcyBBbmRPcGVyYXRvciBleHRlbmRzIEFic3RyYWN0T3BlcmF0b3Ige1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHByb21pc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChbXG5cdFx0XHR0aGlzLm9wZXJhbnRBLmlzVmFsaWQodmFsdWUpLFxuXHRcdFx0dGhpcy5vcGVyYW50Qi5pc1ZhbGlkKHZhbHVlKSxcblx0XHRdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvYW5kLW9wZXJhdG9yXCIpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtWYWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy92YWxpZC5tanNcIjtcbmltcG9ydCB7SW52YWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pbnZhbGlkLm1qc1wiO1xuaW1wb3J0IHtBbmRPcGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hbmRvcGVyYXRvci5tanNcIjtcblxuZGVzY3JpYmUoJ0FuZE9wZXJhdG9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5pc1ZhbGlkKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW25ldyBWYWxpZCgpLCBuZXcgVmFsaWQoKSwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IFZhbGlkKCksIG5ldyBJbnZhbGlkKCksIGZhbHNlXSxcbiAgICAgICAgICAgIFtuZXcgSW52YWxpZCgpLCBuZXcgVmFsaWQoKSwgZmFsc2VdLFxuICAgICAgICAgICAgW25ldyBJbnZhbGlkKCksIG5ldyBJbnZhbGlkKCksIGZhbHNlXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnY29uc3RyYWludC5pc1ZhbGlkKCkgc2hvdWxkIHJldHVybiAnICsgYywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IEFuZE9wZXJhdG9yKGEsIGIpO1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQuaXNWYWxpZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjID09PSB0cnVlID8gZG9uZSgpIDogZG9uZShuZXcgRXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjID09PSB0cnVlID8gZG9uZShuZXcgRXJyb3IoKSkgOiBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFic3RyYWN0Q29uc3RyYWludCB9IGZyb20gXCIuL2Fic3RyYWN0Lm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgSXNBcnJheSB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL2NvbnN0cmFpbnRzL2lzYXJyYXkvIEEgc2ltcGxlIGV4YW1wbGVcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgY29uc3RyYWludCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGFuIGFycmF5XG4gKi9cbmNsYXNzIElzQXJyYXkgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cmFpbnQge1xuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmV0dXJucyBhIHByb21pc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludC9pcy1hcnJheVwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7SXNBcnJheX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pc2FycmF5Lm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ0lzQXJyYXknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBuZXcgSXNBcnJheSgpXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXNvbHZlIHByb21pc2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3RyYWludC5pc1ZhbGlkKFsxLDIsM10pLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHIpLmlzLmEoJ2FycmF5Jyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbm90IHJlYWNoZWQ6IFwiICsgZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge1ZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ1ZhbGlkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5pc1ZhbGlkKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IFZhbGlkKClcblxuICAgICAgICBpdCgnc2hvdWxkIHJlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50LmlzVmFsaWQoe30pLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbm90IHJlYWNoZWQ6IFwiICsgZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge05vZGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7Tm9kZUxpc3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzXCI7XG5cbmRlc2NyaWJlKCdOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnI2NvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhbiBlbXB0eSBOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdCgpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3Quc2l6ZSkudG8uZXF1YWwoMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgTm9kZUxpc3QgZnJvbSBhbiBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdChbXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JylcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3Quc2l6ZSkudG8uZXF1YWwoMyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgTm9kZUxpc3QgZnJvbSBhIE5vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KFtcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKVxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGxldCBub2RlTGlzdDIgPSBuZXcgTm9kZUxpc3Qobm9kZUxpc3QpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3QyLnNpemUpLnRvLmVxdWFsKDMpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgfSk7XG4gICAgXG4gICAgIFxuICAgIGl0KCdjcmVhdGUgTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKSkuaXMuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdhZGQgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmFkZChuZXcgTm9kZSgpKSkudG8uYmUuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdyZW1vdmUgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLnJlbW92ZShuZXcgTm9kZSgpKSkudG8uYmUuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdoYXMgdW5rbm93biBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuaGFzKG5ldyBOb2RlKSkudG8uYmUuZmFsc2U7XG4gICAgfSlcblxuICAgIGl0KCdoYXMgYWRkZWQgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbiA9IG5ldyBOb2RlO1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuYWRkKG4pLmhhcyhuKSkudG8uYmUudHJ1ZTtcbiAgICB9KVxuICAgIFxuICAgIGl0KCd0b1N0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbiA9IG5ldyBOb2RlO1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuYWRkKG5ldyBOb2RlKCdhJykuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJ2InKSkpLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKCdhXFxuIFx1MjUxNGInKTtcbiAgICB9KVxuXG4gICAgaXQoJ3Rocm93IGV4Y2VwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBOb2RlTGlzdCgpLmFkZCgxKSkudG8udGhyb3coRXJyb3IpO1xuICAgIH0pXG5cblxufSk7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge2luc3RhbmNlU3ltYm9sfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0YW50cy5tanNcIjtcblxuXG5cbmNsYXNzIEJhc2VEaWZmZXJlbnRSZWFsbSBleHRlbmRzIE9iamVjdCB7XG4gICAgXG5cbiAgICBzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG4gICAgICAgIHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9iYXNlXCIpO1xuICAgIH1cblxuXG59XG5cbmNsYXNzIFN1YmNsYXNzIGV4dGVuZHMgQmFzZURpZmZlcmVudFJlYWxtIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuICAgICAgICByZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvc3ViY2xhc3NcIik7XG4gICAgfVxufVxuXG5kZXNjcmliZSgnQmFzZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgQmFzZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgQmFzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZSkudG8uYmUuaW5zdGFuY2VPZihCYXNlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2lzIGluc3RhbmNlIG9mIE9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZSkudG8uYmUuaW5zdGFuY2VPZihPYmplY3QpO1xuICAgICAgICB9KTtcblxuICAgIH0pXG4gICAgXG4gICAgZGVzY3JpYmUoJ2luc3RhbmNvZicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgQmFzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZSkudG8uYmUuaW5zdGFuY2VPZihCYXNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc3ViY2xhc3MgaW5zdGFuY2VvZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKG5ldyBTdWJjbGFzcyBpbnN0YW5jZW9mIEJhc2UpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QodHJ1ZSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSAge1xuICAgICAgICAgICAgICAgIGV4cGVjdChmYWxzZSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbn0pIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TWVkaWFUeXBlLCBwYXJzZU1lZGlhVHlwZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9tZWRpYXR5cGUubWpzXCI7XG5cbmRlc2NyaWJlKCdEYXRhdXJsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgW1xuICAgICAgICBbXCIqLypcIixcIipcIiwnKiddLFxuICAgICAgICBbXCJ0ZXh0LypcIixcInRleHRcIiwnKiddLFxuICAgICAgICBbXCIqL3Rlc3RcIixcIipcIiwndGVzdCddLFxuICAgICAgICBbXCJpbWFnZS9wbmdcIiwgXCJpbWFnZVwiLCBcInBuZ1wiXSxcbiAgICAgICAgW1wiYXVkaW8vbXAzXCIsIFwiYXVkaW9cIiwgXCJtcDNcIl0sXG4gICAgICAgIFtcInZpZGVvL21wZWdcIiwgXCJ2aWRlb1wiLCBcIm1wZWdcIl0sXG4gICAgICAgIFtcInRleHQvcGxhaW5cIiwgXCJ0ZXh0XCIsIFwicGxhaW5cIl0sXG4gICAgICAgIFtcInRleHQvaHRtbFwiLCBcInRleHRcIiwgXCJodG1sXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldD1VUy1BU0NJSVwiLCBcInRleHRcIiwgXCJodG1sXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldD1cXFwiVVMtQVNDSUlcXFwiXCIsIFwidGV4dFwiLCBcImh0bWxcIl0sXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgaXQoJ3BhcnNlTWVkaWFUeXBlKCcgKyBhICsgJyknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGQgPSBwYXJzZU1lZGlhVHlwZShhKTtcblxuICAgICAgICAgICAgZXhwZWN0KGQpLmlzLmluc3RhbmNlb2YoTWVkaWFUeXBlKTtcbiAgICAgICAgICAgIGV4cGVjdChkLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGQudHlwZSkudG8uYmUuZXF1YWwoYik7XG4gICAgICAgICAgICBleHBlY3QoZC5zdWJ0eXBlKS50by5iZS5lcXVhbChjKTtcbiAgICAgICAgICAgIGV4cGVjdChkLnBhcmFtZXRlcikuaXMuaW5zdGFuY2VvZihNYXApXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuICAgIFtcbiAgICAgICAgW1widmlkZW8vXCJdLFxuICAgICAgICBbXCJ0ZXh0XCJdLFxuICAgICAgICBbXCIvbXAzXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldFVTLUFTQ0lJXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldFxcXCJVUy1BU0NJSVxcXCJcIl0sXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgIGl0KCcnICsgYSArICcgc2hvdWxkIHRocm93IGV4Y2VwdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cGFyc2VNZWRpYVR5cGUoYSl9KS50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VG9rZW5MaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3Rva2VubGlzdC5tanNcIjtcblxuXG5kZXNjcmliZSgnVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy50b1N0cmluZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgdG9rZW5MaXN0ID0gbmV3IFRva2VuTGlzdCgpXG4gICAgICAgIGxldCByZXN1bHQgPSB0b2tlbkxpc3QudG9TdHJpbmcoKTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmJlLmEoJ3N0cmluZycpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2V0IGFuZCByZW1vdmUgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uYmUuYSgnc3RyaW5nJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2luaXQgd2l0aCBzdHJpbmcgaXRlcmFibGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoJyArIHR5cGVvZiBhICsgJykgdGhyb3cgVHlwZUVycm9yICcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IHRva2VucyA9IFtcImFiY1wiLCBcImRlZlwiLCBcImdoaVwiXVxuICAgICAgICAgICAgbGV0IGxpc3QgPSBuZXcgVG9rZW5MaXN0KHRva2Vucyk7XG4gICAgICAgICAgICBleHBlY3QobGlzdC50b1N0cmluZygpKS5pcy5lcXVhbChcImFiYyBkZWYgZ2hpXCIpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2luaXQgd2l0aCBpdGVyYWJsZSB3aXRob3V0IHN0cmluZyB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoJyArIHR5cGVvZiBhICsgJykgdGhyb3cgVHlwZUVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0b2tlbnMgPSBbXCJhYmNcIiwgNCwgXCJnaGlcIl1cbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgVG9rZW5MaXN0KHRva2VucykpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnaW5pdCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgLy8gY3VycmVudCwgZXhwZWN0ZWQsIHR5cGVycm9yXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0MVwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ3Rlc3QxIHRlc3QyJywgXCJ0ZXN0MSB0ZXN0MlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBcIlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIHVuZGVmaW5lZCwgdHJ1ZV0sIC8vIE5hTlxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbMiwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWzQuNSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFt7fSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtbXCIxXCIsIFwiMlwiLCBcIjNcIl0sICcxIDIgMycsIGZhbHNlXSwgLy8gaXRlcmFibGUgc3RyaW5nc1xuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpdCgnbmV3IFRva2VuTGlzdCgnICsgdHlwZW9mIGEgKyAnKSB0aHJvdyBUeXBlRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFRva2VuTGlzdChhKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QobmV3IFRva2VuTGlzdChhKS50b1N0cmluZygpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdpdGVyYXRvciBwcm90b2NvbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbGlzdDtcbiAgICAgICAgaXQoJy5hZGQoJyArIFwic2Vjb25kXCIgKyAnKSBzaG91bGQgcmV0dXJuIFRva2VuTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5nZXRJdGVyYXRvcigpKS50by5iZS5hbignb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuYWRkKCcgKyBcInNlY29uZFwiICsgJykgc2hvdWxkIHJldHVybiBUb2tlbkxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChbLi4ubGlzdF0pLnRvLmJlLmFuKCdhcnJheScpO1xuICAgICAgICAgICAgZXhwZWN0KFsuLi5saXN0XSkudG8uYmUuYW4oJ2FycmF5JykudG8uaW5jbHVkZSgnc3RhcnQnKS50by5pbmNsdWRlKCdlbmQnKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5lbnRyaWVzKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGxpc3Q7XG4gICAgICAgIGl0KCcuZW50cmllcygpIHNob3VsZCByZXR1cm4gQXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuZW50cmllcygpKS50by5iZS5hbignYXJyYXknKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5lbnRyaWVzKCkgc2hvdWxkIHJldHVybiBBcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgZW5kXCIpLmVudHJpZXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0KS50by5iZS5hbignYXJyYXknKS50by5pbmNsdWRlKCdzdGFydCcpLnRvLmluY2x1ZGUoJ2VuZCcpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmZvckVhY2goKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbGlzdDtcbiAgICAgICAgaXQoJy5mb3JFYWNoKCkgc2hvdWxkIGl0ZXJhdGUgb3ZlciB0b2tlbmxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcImFhYSBiYmIgY2NjIGRkZCBlZWUgZmZmXCIpO1xuXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIlxuICAgICAgICAgICAgbGlzdC5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IFwiIVwiICsgYSArIFwiIVwiO1xuICAgICAgICAgICAgICAgIGV4cGVjdChhKS50by5iZS5hbignc3RyaW5nJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLmlzLmVxdWFsKFwiIWFhYSEhYmJiISFjY2MhIWRkZCEhZWVlISFmZmYhXCIpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuZW50cmllcygpIHNob3VsZCByZXR1cm4gQXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IGVuZFwiKS5lbnRyaWVzKCk7XG4gICAgICAgICAgICBleHBlY3QobGlzdCkudG8uYmUuYW4oJ2FycmF5JykudG8uaW5jbHVkZSgnc3RhcnQnKS50by5pbmNsdWRlKCdlbmQnKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NvbnRhaW5zIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGxpc3RcbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQsIG1pZGRsZSBlbmQpIHNob3VsZCBjb250YWluIG1pZGRsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgbWlkZGxlIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKCdzdGFydCcpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoJ21pZGRsZScpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoJ2VuZCcpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoWydlbmQnLCAnc3RhcnQnLCAnbWlkZGxlJ10pKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChzdGFydCwgbWlkZGxlIGVuZCkgc2hvdWxkIG5vdCBjb250YWluIHh5eicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgbWlkZGxlIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKCd4eXonKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucyhbJ2VuZCcsICdzdGFydCcsICdtaWRkbGUnLCAneHl6J10pKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQsIG1pZGRsZSBlbmQpIHNob3VsZCBub3QgY29udGFpbiB1bmRlZmluZWQgbnVsbCBOYU4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IG1pZGRsZSBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucyh1bmRlZmluZWQpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKHBhcnNlSW50KFwiYVwiKSkpLnRvLmJlLmZhbHNlOyAvLyBOYU5cbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKG51bGwpKS50by5iZS5mYWxzZTsgLy8gTmFOXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgndG9nZ2xlIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGxpc3RcbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQgbWlkZGxlIGVuZCkudG9nZ2xlKG5ldy12YWx1ZSkgc2hvdWxkIGNvbnRhaW4gbmV3LXZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBtaWRkbGUgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9nZ2xlKCduZXctdmFsdWUnKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IG1pZGRsZSBlbmQgbmV3LXZhbHVlXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChzdGFydCBtaWRkbGUgZW5kKS50b2dnbGUobWlkZGxlKSBzaG91bGQgbm90IGNvbnRhaW4gbWlkZGxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBtaWRkbGUgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9nZ2xlKCdtaWRkbGUnKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IGVuZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoKS50b2dnbGUoKSBzaG91bGQgLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUb2tlbkxpc3QoXCJhYmMgZGVmIGdoaVwiKS50b2dnbGUoXCJkZWYgeHl6XCIpLnRvU3RyaW5nKCkpLnRvLmVxdWFsKFwiYWJjIGdoaSB4eXpcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KCkudG9nZ2xlKCkgc2hvdWxkIC4uLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVG9rZW5MaXN0KFwiYWJjIGRlZiBnaGlcIikudG9nZ2xlKFtcImFiY1wiLCBcInh5elwiXSkudG9TdHJpbmcoKSkudG8uZXF1YWwoXCJkZWYgZ2hpIHh5elwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoKS50b2dnbGUoKSBzaG91bGQgLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUb2tlbkxpc3QoXCJhYmMgZGVmIGdoaVwiKS50b2dnbGUodW5kZWZpbmVkKS50b1N0cmluZygpKS50by5lcXVhbChcImFiYyBkZWYgZ2hpXCIpO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbWFuaXB1bGF0ZSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGxpc3RcblxuICAgICAgICBpdCgncmVzdWx0IFRva2VuTGlzdChcIicgKyBcInN0YXJ0XCIgKyAnXCIpIHNob3VsZCBiZSBcIicgKyBcInN0YXJ0XCIgKyAnXCInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydFwiKVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmFkZCgnICsgXCJzZWNvbmRcIiArICcpIHNob3VsZCByZXR1cm4gVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmFkZChcInNlY29uZFwiKSkudG8uYmUuYW4uaW5zdGFuY2VvZihUb2tlbkxpc3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmFkZCgnICsgXCJzZWNvbmRcIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IHNlY29uZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoXCJzZWNvbmRcIikudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBzZWNvbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuYWRkKCcgKyBcInNlY29uZCB0aGlyZFwiICsgJykudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgc2Vjb25kIHRoaXJkXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmFkZChcInNlY29uZCB0aGlyZFwiKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IHNlY29uZCB0aGlyZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5hZGQoJyArIFwiW3NlY29uZCx0aGlyZF1cIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IHNlY29uZCB0aGlyZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoW1wic2Vjb25kXCIsIFwidGhpcmRcIl0pLnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgc2Vjb25kIHRoaXJkXCIpO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGl0KCcuY2xlYXIoKS50b1N0cmluZygpIHNob3VsZCBcIlwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoW1wic2Vjb25kXCIsIFwidGhpcmRcIl0pLmNsZWFyKCkudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJcIik7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpLnJlbW92ZSgnICsgXCJzZWNvbmRcIiArICcpIHNob3VsZCByZXR1cm4gVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QucmVtb3ZlKFwic2Vjb25kXCIpKS50by5iZS5hbi5pbnN0YW5jZW9mKFRva2VuTGlzdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZW1vdmUoJyArIFwic2Vjb25kXCIgKyAnKS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCB0aGlyZCBlbmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5yZW1vdmUoXCJzZWNvbmRcIikudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCB0aGlyZCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZW1vdmUoJyArIFwic2Vjb25kIHRoaXJkXCIgKyAnKS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCBlbmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5yZW1vdmUoXCJzZWNvbmQgdGhpcmRcIikudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZW1vdmUoJyArIFwiW3NlY29uZCx0aGlyZF1cIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IGVuZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnJlbW92ZShbXCJzZWNvbmRcIiwgXCJ0aGlyZFwiXSkudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZXBsYWNlKHNlY29uZCwgeHl6KS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCB4eXogdGhpcmQgZW5kXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QucmVwbGFjZShcInNlY29uZFwiLCBcInh5elwiKSkudG8uYmUuaW5zdGFuY2VPZihUb2tlbkxpc3QpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCB4eXogdGhpcmQgZW5kXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIikucmVwbGFjZShlbmQsIHh5eikudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgc2Vjb25kIHRoaXJkIHh5elwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnJlcGxhY2UoXCJlbmRcIiwgXCJ4eXpcIikpLnRvLmJlLmluc3RhbmNlT2YoVG9rZW5MaXN0KTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgc2Vjb25kIHRoaXJkIHh5elwiKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHtpc09iamVjdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5cbmltcG9ydCB7UHJveHlPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuXG5kZXNjcmliZSgnUHJveHlPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pO1xuICAgICAgICAgICAgZXh0ZW5kKG8uZ2V0U3ViamVjdCgpLCB7YTogNH0pO1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHthOiA0fSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3NldFN1YmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcnVuIG9ic2VydmVyJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe2E6IDF9KTtcbiAgICAgICAgICAgIGV4cGVjdChvLmdldFJlYWxTdWJqZWN0KCkpLmlzLmVxbCh7YTogMX0pO1xuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgby5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdCh0aGlzKSAmJiB0aGlzIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgb25lIGNoYW5nZSBhcyBub3RpZnkgcnVucyBsYXRlclxuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoXCJjYWxsZWQgZm9yIGVycm9yXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJ0aGlzIGlzIG5vdCBQcm94eU9ic2VydmVyXCIpKVxuICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgIG8uZ2V0U3ViamVjdCgpLmMgPSA0O1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHthOiAxLCBjOiA0fSk7XG5cbiAgICAgICAgICAgIG8uc2V0U3ViamVjdCh7YjogMn0pO1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHtiOiAyfSk7XG5cbiAgICAgICAgICAgIG8uZ2V0U3ViamVjdCgpLmQgPSA1O1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHtiOiAyLCBkOiA1fSk7XG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pO1xuICAgICAgICAgICAgZXhwZWN0KG8pLmlzLmluc3RhbmNlT2YoUHJveHlPYnNlcnZlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Byb3h5IG9iamVjdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdQcm94eSBvYmplY3RzIHNob3VsZCBub3QgYmUgcmVjb21taXR0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG5ldyBQcm94eU9ic2VydmVyKHthOiB7YjogdHJ1ZX19KTtcbiAgICAgICAgICAgIG8uZ2V0U3ViamVjdCgpLmEuYiA9IG8uZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgby5nZXRTdWJqZWN0KCkuYS5iLmEuYiA9IGZhbHNlO1xuICAgICAgICAgICAgLy9leHBlY3Qoby5nZXRTdWJqZWN0KCk9PT1wLmdldFN1YmplY3QoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbm90aWZ5IG9ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGluZm9ybSBvYnNlcnZlcicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICAvLyB0aGUgbWV0aG9kIGlzIGNhbGxlZCB0d2ljZSwgb25jZSBmb3IgZGVmaW5lUHJvcGVydHkgYW5kIGZvciBzZXQgdHJhcFxuICAgICAgICAgICAgbGV0IG8gPSBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QodGhpcykgJiYgdGhpcyBpbnN0YW5jZW9mIFByb3h5T2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcInRoaXMgaXMgbm90IFByb3h5T2JzZXJ2ZXJcIikpXG4gICAgICAgICAgICB9LCB0cnVlKVxuXG4gICAgICAgICAgICBsZXQgcmVhbFN1YmplY3QgPSB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6IDVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBwID0gbmV3IFByb3h5T2JzZXJ2ZXIocmVhbFN1YmplY3QpO1xuICAgICAgICAgICAgZXhwZWN0KHApLmlzLmluc3RhbmNlT2YoUHJveHlPYnNlcnZlcik7XG4gICAgICAgICAgICBleHBlY3QocC5hdHRhY2hPYnNlcnZlcihvKSkuaXMuaW5zdGFuY2VPZihQcm94eU9ic2VydmVyKTtcblxuICAgICAgICAgICAgbGV0IHMgPSBwLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgIGxldCByID0gcC5nZXRSZWFsU3ViamVjdCgpO1xuXG4gICAgICAgICAgICBzLmEuZCA9IGZhbHNlO1xuICAgICAgICAgICAgcy5hLmIuZCA9IDI7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzQzXG4gICAgICovXG4gICAgZGVzY3JpYmUoJ1JlZmxlY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2NoZWNrIFJlZmxlY3Quc2V0KCkgd2l0aCBTdWJqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHI7XG5cbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IChuZXcgUHJveHlPYnNlcnZlcih7fSkpLmdldFN1YmplY3QoKTtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwieWVzIVwiLFxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBcIm5vXCJcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYmpbJ2RhdGEnXSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgfSkudG8ubm90LnRocm93KCk7XG4gICAgICAgICAgICAgICAgLy9yID0gUmVmbGVjdC5zZXQob2JqLCAnZGF0YScsIHZhbHVlKVxuICAgICAgICAgICAgICAgIC8vZXhwZWN0KHIpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG5cblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3RoYXQnLCB7dGhhdDogJ2NoZWNrZWQxJ31dLFxuICAgICAgICAgICAgWyd0aGF0JywgbmV3IFByb3h5KHt0aGF0OiAnY2hlY2tlZDInfSwge30pXSxcbiAgICAgICAgICAgIFsndGhhdCcsIChuZXcgUHJveHlPYnNlcnZlcih7dGhhdDogJ2NoZWNrZWQzJ30pKS5nZXRSZWFsU3ViamVjdCgpXSxcbiAgICAgICAgICAgIFsndGhhdCcsIChuZXcgUHJveHlPYnNlcnZlcih7dGhhdDogJ2NoZWNrZWQ0J30pKS5nZXRTdWJqZWN0KCldXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQga2V5ID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdjaGVjayBSZWZsZWN0LnNldCgnICsga2V5ICsgJywnICsgSlNPTi5zdHJpbmdpZnkodGFyZ2V0KSArICcpIHNob3VsZCB3cml0YWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWU7XG5cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFwiMVwiLFxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBrZXkpWyd3cml0YWJsZSddLCAnd3JpdGFibGUgZm9yICcgKyB2YWx1ZSArICcgc2hvdWxkIHJldHVybiB0cnVlJykudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIHZhbHVlKSwgJ3NldCBmb3IgJyArIHZhbHVlICsgJyBzaG91bGQgcmV0dXJuIHRydWUnKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwga2V5KVsnd3JpdGFibGUnXSwgJ3dyaXRhYmxlIGZvciAnICsgdmFsdWUgKyAnIHNob3VsZCByZXR1cm4gdHJ1ZScpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25vdGlmeSBvYnNlcnZlciB3aXRoIGNoYW5nZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG9yaWdpbmFsLCBvYnNlcnZlciwgcHJveHk7XG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsID0ge307XG4gICAgICAgICAgICBwcm94eSA9IG5ldyBQcm94eU9ic2VydmVyKG9yaWdpbmFsKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2EnLCA0LCBKU09OLnN0cmluZ2lmeSh7YTogNH0pXSxcbiAgICAgICAgICAgIFsnYicsIDksIEpTT04uc3RyaW5naWZ5KHthOiA0LCBiOiA5fSldXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzZXQga2V5ICcgKyBhICsgJyB2YWx1ZSAnICsgYiArICcgZXhwZWN0ICcgKyBjLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyID0gbmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRSZWFsU3ViamVjdCgpKSkuaXMuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFjaE9ic2VydmVyKG9ic2VydmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBwcm94eS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcilcbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHByb3h5LmdldFN1YmplY3QoKVxuXG4gICAgICAgICAgICAgICAgc3ViamVjdFthXSA9IGI7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25vdGlmeSBvYnNlcnZlciAnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gcHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBwcm94eSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcHJveHkuYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpXG4gICAgICAgICAgICBleHBlY3QocHJveHkubm90aWZ5T2JzZXJ2ZXJzKCkpLmlzLmluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG59KVxuXG4iLCAiaW1wb3J0IHtcbiAgICBWZXJzaW9uXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvdmVyc2lvbi5tanNcIlxuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnVmVyc2lvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuY29tcGFyZVRvKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycxLjIuMycsICcxLjIuMycsIDBdLFxuICAgICAgICAgICAgWycxLjIuMicsICcxLjIuMycsIC0xXSxcbiAgICAgICAgICAgIFsnMicsICcyLjAuMCcsIDBdLFxuICAgICAgICAgICAgWycxLjIuNCcsICcxLjIuMycsIDFdXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuICcgKyBjICsgJyB3aGVuIHRoZSB2YWx1ZSAnICsgYSArICcgaXMgJyArIGIgKyAnJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgVmVyc2lvbihhKS5jb21wYXJlVG8oYikpLnRvLmJlLmVxdWFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnRvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycxLjEuMScsICcyLjMnLCAzLCAnMS4yLjMnXSxcbiAgICAgICAgICAgIFsnMS4yLjQnLCAnMS4yLjMnLCA1LCAnMS4xLjUnXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIGQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IFZlcnNpb24oYSwgYiwgYykudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSlcblxufSk7XG5cbiIsICJpbXBvcnQge2dldEdsb2JhbCwgZ2V0R2xvYmFsT2JqZWN0LCBnZXRHbG9iYWxGdW5jdGlvbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnR2xvYmFsJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCdnZXRHbG9iYWwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZ2xvYmFsIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gdHlwZW9mIGdldEdsb2JhbCgpO1xuICAgICAgICAgICAgZXhwZWN0KHQpLnRvLmJlLmVxdWFsKCdvYmplY3QnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdnZXRHbG9iYWxGdW5jdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBnbG9iYWwgZnVuY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdCA9IHR5cGVvZiBnZXRHbG9iYWxGdW5jdGlvbigncGFyc2VJbnQnKTtcbiAgICAgICAgICAgIGV4cGVjdCh0KS50by5iZS5lcXVhbCgnZnVuY3Rpb24nKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdnZXRHbG9iYWxPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZ2xvYmFsIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gdHlwZW9mIGdldEdsb2JhbE9iamVjdCgnSlNPTicpO1xuICAgICAgICAgICAgZXhwZWN0KHQpLnRvLmJlLmVxdWFsKCdvYmplY3QnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG5cbiIsICJpbXBvcnQge09ic2VydmVyTGlzdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlcmxpc3QubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ09ic2VydmVyTGlzdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuYXR0YWNoKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBPYnNlcnZlckxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gb2JzZXJ2ZXJMaXN0LmF0dGFjaChuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5iZS5pbnN0YW5jZU9mKE9ic2VydmVyTGlzdClcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5kZXRhY2goKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIE9ic2VydmVyTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBvYnNlcnZlckxpc3QuZGV0YWNoKG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmJlLmluc3RhbmNlT2YoT2JzZXJ2ZXJMaXN0KVxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLm5vdGlmeSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdFZhbHVlID0gXCJZZXMhXCI7XG4gICAgICAgIGxldCBvO1xuICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0O1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbyA9IG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFZhbHVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG4gICAgICAgICAgICBvYnNlcnZlckxpc3QuYXR0YWNoKG8pXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZW9mIFByb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0Lm5vdGlmeSh7fSkpLnRvLmJlLmluc3RhbmNlT2YoUHJvbWlzZSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIHJlc3VsdFZhbHVlLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge31cblxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0Lm5vdGlmeShvYmopLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHIpLnRvLmJlLmFuKCdhcnJheScpLnRoYXQuaW5jbHVkZXMocmVzdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmNvbnRhaW5zKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG8xID0gbmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBvMiA9IG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbm90IGNvbnRhaW4gbzEgYW5kIG8yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuXG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8xKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8yKSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29udGFpbiBvMiBhbmQgbm90IG8xJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0LmF0dGFjaChvMilcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzEpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzIpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW4gbzEgYW5kIG5vdCBvMicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcbiAgICAgICAgICAgIG9ic2VydmVyTGlzdC5hdHRhY2gobzEpXG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8xKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzIpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cblxuICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW4gbzIgYW5kIG8xJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0LmF0dGFjaChvMikuYXR0YWNoKG8xKVxuICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyTGlzdC5jb250YWlucyhvMSkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8yKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2VxdWlwV2l0aEludGVybmFsfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2ludGVybmFsLm1qc1wiO1xuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcblxuY2xhc3MgU29tZVJhbmRvbUNsYXNzMSBleHRlbmRzIE9iamVjdCB7XG5cbiAgICBkb2l0KCkge1xuICAgICAgICByZXR1cm4gXCJkb25lXCI7XG4gICAgfVxufVxuXG5jbGFzcyBTb21lUmFuZG9tQ2xhc3MyIGV4dGVuZHMgT2JqZWN0IHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBlcXVpcFdpdGhJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGdldCBkZWZhdWx0SW50ZXJuYWwoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXN0OiBcInRlc3RcIlxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmRlc2NyaWJlKCdCYXNlIGluamVjdCB3aXRoIG9wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnbmV3IFNvbWVSYW5kb21DbGFzcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgU29tZVJhbmRvbUNsYXNzMScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgU29tZVJhbmRvbUNsYXNzMikubm90LnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMSk7XG4gICAgICAgICAgICBleHBlY3QobmV3IFNvbWVSYW5kb21DbGFzczIpLnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBTb21lUmFuZG9tQ2xhc3MyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBTb21lUmFuZG9tQ2xhc3MxKS50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczEpO1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBTb21lUmFuZG9tQ2xhc3MxKS5ub3QudG8uYmUuaW5zdGFuY2VPZihTb21lUmFuZG9tQ2xhc3MyKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0V4dGVuZHMgU29tZVJhbmRvbUNsYXNzIHdpdGggaW50ZXJuYWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdhdHRhY2ggYW5kIG5vdGlmeSBpbnRlcm5hbCBvYnNlcnZlcicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG4gICAgICAgICAgICBjLmF0dGFjaEludGVybmFsT2JzZXJ2ZXIobmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIGMuc2V0SW50ZXJuYWwoXCJ0ZXN0XCIsIFwidGVzdFwiKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYXR0YWNoIGFuZCByZW1vdmUgaW50ZXJuYWwgb2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG5cblxuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZXhwZWN0KGMuY29udGFpbnNJbnRlcm5hbE9ic2VydmVyKG9ic2VydmVyKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBjLmF0dGFjaEludGVybmFsT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuY29udGFpbnNJbnRlcm5hbE9ic2VydmVyKG9ic2VydmVyKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGMuZGV0YWNoSW50ZXJuYWxPYnNlcnZlcihvYnNlcnZlcik7XG4gICAgICAgICAgICBleHBlY3QoYy5jb250YWluc0ludGVybmFsT2JzZXJ2ZXIob2JzZXJ2ZXIpKS50by5iZS5mYWxzZTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdChcImdldEludGVybmFsIGFuZCBzZXRJbnRlcm5hbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG4gICAgICAgICAgICBleHBlY3QoYy5zZXRJbnRlcm5hbChcInRlc3RcIiwgXCJ5ZWFoXCIpKS50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInllYWhcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwiZGVhbCB3aXRoIGRlZmF1bHQgdmFsdWVzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RDbGFzcyA9IGNsYXNzIGV4dGVuZHMgT2JqZWN0IHtcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgZXF1aXBXaXRoSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgaW50ZXJuYWxEZWZhdWx0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6IFwieHl6XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IHRlc3RDbGFzcztcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdFwiKSkudG8uYmUuZXF1YWwoXCJ4eXpcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QyXCIsIFwiYWJjXCIpKS50by5iZS5lcXVhbChcImFiY1wiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJkZWFsIHdpdGggZGVmYXVsdHMgZnJvbSBkZWZhdWx0c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0Q2xhc3MgPSBjbGFzcyBleHRlbmRzIE9iamVjdCB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZ2V0IGludGVybmFsRGVmYXVsdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0OiBcInh5elwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRlc3RDbGFzczIgPSBjbGFzcyBleHRlbmRzIHRlc3RDbGFzcyB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZ2V0IGludGVybmFsRGVmYXVsdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5pbnRlcm5hbERlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0MjogXCJhYmNcIlxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyB0ZXN0Q2xhc3MyO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInh5elwiKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdDJcIikpLnRvLmJlLmVxdWFsKFwiYWJjXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KFwic2V0IG11bHRpcGxlIHZhbHVlc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG4gICAgICAgICAgICBleHBlY3QoYy5zZXRJbnRlcm5hbHMoe1xuICAgICAgICAgICAgICAgIHRlc3Q6IFwieWVhaFwiLFxuICAgICAgICAgICAgICAgIHRlc3QyOiBcInllYWgyXCJcbiAgICAgICAgICAgIH0pKS50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInllYWhcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QyXCIpKS50by5iZS5lcXVhbChcInllYWgyXCIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjLnNldEludGVybmFscyh7XG4gICAgICAgICAgICAgICAgdGVzdDI6IFwieWVhaDItbmV3XCIsXG4gICAgICAgICAgICAgICAgdGVzdDM6IFwieWVhaDNcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdFwiKSkudG8uYmUuZXF1YWwoXCJ5ZWFoXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0MlwiKSkudG8uYmUuZXF1YWwoXCJ5ZWFoMi1uZXdcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QzXCIpKS50by5iZS5lcXVhbChcInllYWgzXCIpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge09ic2VydmFibGVRdWV1ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZhYmxlcXVldWUubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuXG5kZXNjcmliZSgnT2JzZXJ2YWJsZVF1ZXVlJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCdPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIG5vdGlmeScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgcXVldWUgPSBuZXcgT2JzZXJ2YWJsZVF1ZXVlO1xuICAgICAgICAgICAgbGV0IG8gPSBuZXcgT2JzZXJ2ZXIoKHEpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcXVldWUuYXR0YWNoT2JzZXJ2ZXIobyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoT2JzZXJ2YWJsZVF1ZXVlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge3BhcnNlRGF0YVVSTH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuXG5kZXNjcmliZSgnRGF0YXVybCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIFtcbiAgICAgICAgW1wiIGRhdGE6dGV4dC9odG1sLCUzQ2gxJTNFSGVsbG8lMkMlMjBXb3JsZCElM0MlMkZoMSUzRVwiXSxcbiAgICAgICAgW1wiZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD1VUy1BU0NJSSwlM0NoMSUzRUhlbGxvISUzQyUyRmgxJTNFXCJdLFxuICAgICAgICBbXCJkYXRhOixBJTIwYnJpZWYlMjBub3RlXCIsICdkYXRhOnRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSSxBJTIwYnJpZWYlMjBub3RlJ10sXG4gICAgICAgIFtcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUFRTUFBQUFsUFcwaUFBQUFCbEJNVkVVQUFBRC8vLytsMlovZEFBQUFNMGxFUVZSNG5HUDQvNS9oLzErRy81OFpEckF6M0QvTWNIOHl3ODNORERlTkdlNFVnOUM5end6M2dWTE1EQS9BNlA5L0FGR0dGeWpPWFp0UUFBQUFBRWxGVGtTdVFtQ0NcIl0sXG4gICAgICAgIFtcIiBkYXRhOixIZWxsbyUyQyUyMFdvcmxkIVwiLCAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUksSGVsbG8lMkMlMjBXb3JsZCEnXSxcbiAgICAgICAgW1wiICAgZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBZ0FBQUFJQkFNQUFBQTJJYU80QUFBQUZWQk1WRVhrNU9UbjUrZnQ3ZTMxOWZYMjl2YjUrZm4vLy8rK0dVbVZBQUFBTFVsRVFWUUlIV05JQ25ZTFpuQUxUZ3BtTUdZSUZXWUlaVEEyWkZBelRURmxTREZWTXdWeVFobUF3c1lNQUtEYUJ5MGF4WC9pQUFBQUFFbEZUa1N1UW1DQyAgIFwiXSxcbiAgICAgICAgW1wiIGRhdGE6LEhlbGxvIFdvcmxkIVwiLCAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUksSGVsbG8lMjBXb3JsZCEnXSxcbiAgICAgICAgW1wiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBZ0FBQUFJQkFNQUFBQTJJYU80QUFBQUZWQk1WRVhrNU9UbjUrZnQ3ZTMxOWZYMjl2YjUrZm4vLy8rK0dVbVZBQUFBTFVsRVFWUUlIV05JQ25ZTFpuQUxUZ3BtTUdZSUZXWUlaVEEyWkZBelRURmxTREZWTXdWeVFobUF3c1lNQUtEYUJ5MGF4WC9pQUFBQUFFbEZUa1N1UW1DQ1wiXSxcbiAgICAgICAgW1wiIGRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsU0dWc2JHOHNJRmR2Y214a0lRJTNEJTNEXCJdXG5cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaWYgKGIgPT09IHVuZGVmaW5lZCkgYiA9IGEudHJpbSgpO1xuXG5cbiAgICAgICAgaXQoJ3BhcnNlRGF0YVVSTCgnICsgYSArICcpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBleHBlY3QocGFyc2VEYXRhVVJMKGEpLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICB9KVxuXG4gICAgfSk7XG5cbiAgICBbXG4gICAgICAgIFtcImRhdGF4YmFzZTY0XCJdLFxuICAgICAgICBbXCJkYXRhOkhlbGxvV29ybGRcIl0sXG4gICAgICAgIFtcImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9LCUzQ2gxJTNFSGVsbG8hJTNDJTJGaDElM0VcIl0sXG4gICAgICAgIFtcImRhdGE6dGV4dC9odG1sO2NoYXJzZXQsJTNDaDElM0VIZWxsbyElM0MlMkZoMSUzRVwiLCBcImRhdGE6YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQVFNQUFBQWxQVzBpQUFBQUJsQk1WRVVBQUFELy8vK2wyWi9kQUFBQU0wbEVRVlI0bkdQNC81L2gvMStHLzU4WkRyQXozRC9NY0g4eXc4M05ERGVOR2U0VWc5Qzl6d3ozZ1ZMTURBL0E2UDkvQUZHR0Z5ak9YWnRRQUFBQUFFbEZUa1N1UW1DQ1wiXSxcbiAgICAgICAgW1wiXCJdLFxuICAgICAgICBbXCJodHRwOi8vd2lraXBlZGlhLm9yZ1wiXSxcbiAgICAgICAgW1wiYmFzZTY0XCJdLFxuICAgICAgICBbXCJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUFRTUFBQUFsUFcwaUFBQUFCbEJNVkVVQUFBRC8vLytsMlovZEFBQUFNMGxFUVZSNG5HUDQvNS9oLzErRy81OFpEckF6M0QvTWNIOHl3ODNORERlTkdlNFVnOUM5end6M2dWTE1EQS9BNlA5L0FGR0dGeWpPWFp0UUFBQUFBRWxGVGtTdVFtQ0NcIl1cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBwYXJzZURhdGFVUkwoJyArIGEgKyAnKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHBhcnNlRGF0YVVSTChhKSkudGhyb3coVHlwZUVycm9yKVxuICAgICAgICB9KVxuXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IHRvQmluYXJ5LCBmcm9tQmluYXJ5IH07XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLnRvQmluYXJ5KClgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBiaW5hcnlcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE4LjBcbiAqL1xuZnVuY3Rpb24gdG9CaW5hcnkoc3RyaW5nKSB7XG5cdGNvbnN0IGNvZGVVbml0cyA9IG5ldyBVaW50MTZBcnJheSh2YWxpZGF0ZVN0cmluZyhzdHJpbmcpLmxlbmd0aCk7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY29kZVVuaXRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29kZVVuaXRzW2ldID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XG5cdH1cblxuXHRjb25zdCBjaGFyQ29kZXMgPSBuZXcgVWludDhBcnJheShjb2RlVW5pdHMuYnVmZmVyKTtcblx0bGV0IHJlc3VsdCA9IFwiXCI7XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGFyQ29kZXMuYnl0ZUxlbmd0aDsgaSsrKSB7XG5cdFx0cmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGVzW2ldKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLmZyb21CaW5hcnkoKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGJpbmFyeVxuICogQHJldHVybiB7U3RyaW5nfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTguMFxuICovXG5mdW5jdGlvbiBmcm9tQmluYXJ5KGJpbmFyeSkge1xuXHRjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHZhbGlkYXRlU3RyaW5nKGJpbmFyeSkubGVuZ3RoKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdGJ5dGVzW2ldID0gYmluYXJ5LmNoYXJDb2RlQXQoaSk7XG5cdH1cblx0Y29uc3QgY2hhckNvZGVzID0gbmV3IFVpbnQxNkFycmF5KGJ5dGVzLmJ1ZmZlcik7XG5cdGxldCByZXN1bHQgPSBcIlwiO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJDb2Rlcy5sZW5ndGg7IGkrKykge1xuXHRcdHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2Rlc1tpXSk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2Zyb21CaW5hcnksIHRvQmluYXJ5fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2JpbmFyeS5tanNcIjtcblxuZGVzY3JpYmUoJ0JpbmFyeScsIGZ1bmN0aW9uICgpIHtcblxuICAgIFtcbiAgICAgICAgWydhJywgJ2FcXHUwMDAwJ10sXG4gICAgICAgIFsnXHUyNjM5JywgJzkmJ10sXG4gICAgICAgIFsnSVx1MDBGMXRcdTAwRUJyblx1MDBFMnRpXHUwMEY0blx1MDBFMGxpelx1MDBFNnRpXHUwMEY4bicsICdJXFx1MDAwMFx1MDBGMVxcdTAwMDB0XFx1MDAwMFx1MDBFQlxcdTAwMDByXFx1MDAwMG5cXHUwMDAwXHUwMEUyXFx1MDAwMHRcXHUwMDAwaVxcdTAwMDBcdTAwRjRcXHUwMDAwblxcdTAwMDBcdTAwRTBcXHUwMDAwbFxcdTAwMDBpXFx1MDAwMHpcXHUwMDAwXHUwMEU2XFx1MDAwMHRcXHUwMDAwaVxcdTAwMDBcdTAwRjhcXHUwMDAwblxcdTAwMDAnXVxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICBpdCgnZnJvbUJpbmFyeSh0b0JpbmFyeSgnICsgYSArICcpKSBzaG91bGQgd29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCByID0gdG9CaW5hcnkoYSk7XG4gICAgICAgICAgICBleHBlY3QocikudG8uYmUuZXF1YWwoYik7XG4gICAgICAgICAgICBleHBlY3QoZnJvbUJpbmFyeShyKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcblxuXG5kZXNjcmliZSgnT2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgfTtcblxuICAgIGxldCBvYnNlcnZlciA9IG5ldyBPYnNlcnZlcihjYWxsYmFjaylcblxuICAgIGRlc2NyaWJlKCcuYWRkVGFnKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MSddLFxuICAgICAgICAgICAgWyd0ZXN0MiddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2FkZFRhZygnICsgYSArICcpIHNob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXIuYWRkVGFnKGEpKS5pcy5pbnN0YW5jZU9mKE9ic2VydmVyKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnJlbW92ZVRhZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnXSxcbiAgICAgICAgICAgIFsndGVzdDInXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdyZW1vdmVUYWcoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgT2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyLnJlbW92ZVRhZyhhKSkuaXMuaW5zdGFuY2VPZihPYnNlcnZlcilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5oYXNUYWcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3Rlc3QyJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3Rlc3QzJywgZmFsc2VdLFxuICAgICAgICAgICAgWyd0ZXN0NCcsIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCB0ZW1wT2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoY2FsbGJhY2spXG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnb2JzZXJ2ZXIuaGFzdFRhZygnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGlmIChiID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBPYnNlcnZlci5hZGRUYWcoYSlcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHRlbXBPYnNlcnZlci5oYXNUYWcoYSkpLmlzLmJlLnRydWVcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodGVtcE9ic2VydmVyLmhhc1RhZyhhKSkuaXMuYmUuZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudXBkYXRlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG9iaiA9IHt9XG4gICAgICAgIGl0KCdvYnNlcnZlci51cGRhdGUoJyArIG9iaiArICcpIGlzICcgKyAxICsgMyArIDYsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCB0ZW1wT2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYSArIGIgKyBjXG4gICAgICAgICAgICB9LCAxLCAzLCA2KVxuXG5cbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKS50aGVuKGEgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChhKS5pcy5lcXVhbCgxICsgMyArIDYpXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncnVuIGZ1bmN0aW9uIC51cGRhdGUoKSBzZXZlcmFsIHRpbWVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBvYmogPSB7fVxuICAgICAgICBpdCgnb2JzZXJ2ZXIudXBkYXRlKCcgKyBvYmogKyAnKSBpcyAnICsgMSArIDMgKyA2LCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICBsZXQgdGVtcE9ic2VydmVyID0gbmV3IE9ic2VydmVyKGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopO1xuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopO1xuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopO1xuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopO1xuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopLnRoZW4oXyA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5nZXRUYWdzKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW1sndGVzdDEnLCAndGVzdDInLCAndGVzdDMnLCAndGVzdDQnXSwgNF0sXG4gICAgICAgICAgICBbWyd0ZXN0MScsICd0ZXN0MScsICd0ZXN0MycsICd0ZXN0NCddLCAzXSwgLy8gZG91YmxlIHRlc3QxIChzZXQgaXMgdW5pcXVldWUpXG4gICAgICAgICAgICBbWyd0ZXN0MScsICd0ZXN0MScsICd0ZXN0MScsICd0ZXN0NCddLCAyXSwgLy8gbXVsdGlwbGUgdGVzdDEgKHNldCBpcyB1bmlxdWV1ZSlcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCB0ZW1wT2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoY2FsbGJhY2spXG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbWF4ID0gYS5sZW5ndGg7IGkgPCBtYXg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRlbXBPYnNlcnZlci5hZGRUYWcoYVtpXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0KCdvYnNlcnZlci5nZXRUYWdzKCcgKyBhICsgJykgaXMgYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHRlbXBPYnNlcnZlci5nZXRUYWdzKCkpLnRvLmJlLmFuKCdhcnJheScpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ29ic2VydmVyLmdldFRhZ3MoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiICsgXCIgdGFnc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHRlbXBPYnNlcnZlci5nZXRUYWdzKCkubGVuZ3RoKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGVzY2FwZVN0cmluZyB9O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcHJlZml4ZXMgYWxsIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IG1heSBhcHBlYXIgaW4gYSByZWdleCB3aXRoIGEgc2xhc2guXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcodmFsdWUpIHtcblx0cmV0dXJuIHZhbGlkYXRlU3RyaW5nKHZhbHVlKVxuXHRcdC5yZXBsYWNlKC9bfFxcXFx7fSgpW1xcXV4kKyo/Ll0vZywgXCJcXFxcJCZcIilcblx0XHQucmVwbGFjZSgvLS9nLCBcIlxcXFx4MmRcIik7XG59XG4iLCAiXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtlc2NhcGVTdHJpbmd9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvcmVnZXgubWpzXCJcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuXG5kZXNjcmliZSgnZXNjYXBlU3RyaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgcHJvbWlzZXMucHVzaChpbml0SlNET00oKSk7XG4gICAgICAgIGlmKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbiAgICBcbiAgICBbXG4gICAgICAgIFsndGVzdDEnLCAndGVzdDEnXSxcbiAgICAgICAgWyckeycsICdcXFxcJFxcXFx7J10sXG4gICAgICAgIFsnaTE4bnsnLCAnaTE4blxcXFx7J10sXG4gICAgICAgIFsnLy8nLCAnLy8nXSxcbiAgICAgICAgWydcXFxcJywgJ1xcXFxcXFxcJ10sXG4gICAgICAgXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICBpdCgnZXNjYXBlU3RyaW5nKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGVzY2FwZVN0cmluZyhhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7XG5cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnUmFuZG9tSUQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBjbGFzcyBSYW5kb21JRCB7fVxuICAgIFxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIGlmKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvcmFuZG9taWQubWpzXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICBSYW5kb21JRCA9IG0uUmFuZG9tSUQ7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkpXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcudG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGlkID0gbmV3IFJhbmRvbUlEKClcbiAgICAgICAgbGV0IHJlc3VsdCA9IGlkLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS5pcy5hKCdzdHJpbmcnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnSUQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcudG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGlkID0gbmV3IElEKClcbiAgICAgICAgbGV0IHJlc3VsdCA9IGlkLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS5pcy5hKCdzdHJpbmcnKVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBJRCgndGV4dDE0MjVpZCcpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKCd0ZXh0MTQyNWlkMScpXG4gICAgICAgICAgICBleHBlY3QobmV3IElEKCd0ZXh0MTQyNWlkJykudG9TdHJpbmcoKSkuaXMuZXF1YWwoJ3RleHQxNDI1aWQyJylcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSUQoJ3RleHQxNDI1aWQnKS50b1N0cmluZygpKS5pcy5lcXVhbCgndGV4dDE0MjVpZDMnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdVVUlEJywgZnVuY3Rpb24gKCkge1xuXG4gICAgY2xhc3MgVVVJRCB7fVxuICAgIFxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIFxuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3V1aWQubWpzXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICBVVUlEID0gbS5VVUlEO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKVxuICAgICAgICBcbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcudG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdXVpZCA9IG5ldyBVVUlEKClcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB1dWlkLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLmlzLmEoJ3N0cmluZycpXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0Lmxlbmd0aCkuaXMuZXF1YWwoMzYpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd0ZXN0IGZvcm1hdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgdXVpZCA9IG5ldyBVVUlEKClcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB1dWlkLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4RXhwID0gL15bQS1GXFxkXXs4fS1bQS1GXFxkXXs0fS00W0EtRlxcZF17M30tWzg5QUJdW0EtRlxcZF17M30tW0EtRlxcZF17MTJ9JC9pO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDA7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSBuZXcgVVVJRCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHJlZ2V4RXhwLnRlc3QodSk7XG5cbiAgICAgICAgICAgICAgICBpZiAociAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKCdubyB1dWlkICcgKyB1ICsgJyA9PiAnICsgcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7XG4gICAgaXNQcmltaXRpdmUsXG4gICAgaXNCb29sZWFuLFxuICAgIGlzU3RyaW5nLFxuICAgIGlzT2JqZWN0LFxuICAgIGlzQXJyYXksXG4gICAgaXNJbnN0YW5jZSxcbiAgICBpc0Z1bmN0aW9uLFxuICAgIGlzSXRlcmFibGUsXG4gICAgaXNJbnRlZ2VyLFxuICAgIGlzU3ltYm9sXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaXMubWpzXCI7XG5cblxuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIlxuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnSXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcuaXNQcmltaXRpdmUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtudWxsLCB0cnVlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdHJ1ZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNC41LCB0cnVlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzUHJpbWl0aXZlKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNQcmltaXRpdmUoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuICAgIGRlc2NyaWJlKCcuaXNTeW1ib2woKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNTeW1ib2woJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc1N5bWJvbChhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmlzSW50ZWdlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCB0cnVlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc0ludGVnZXIoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0ludGVnZXIoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc0l0ZXJhYmxlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNJdGVyYWJsZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzSXRlcmFibGUoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc0Jvb2xlYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc0Jvb2xlYW4oJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0Jvb2xlYW4oYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc1N0cmluZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCB0cnVlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc1N0cmluZygnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzU3RyaW5nKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNJbnN0YW5jZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtuZXcgSUQoKSwgSUQsICB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgSUQoKSwgKCk9Pnt9LCAgZmFsc2VdLFxuICAgICAgICAgICAgWyd0ZXN0MScsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNJbnN0YW5jZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgcmV0dXJuICcgKyB0eXBlb2YgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0luc3RhbmNlKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc0luc3RhbmNlRXh0ZW5kZWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2xhc3MgQmFzZSB7fVxuICAgICAgICBjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7fVxuICAgICAgICBmdW5jdGlvbiBBbm90aGVyQ2xhc3MoKSB7fVxuXG4gICAgICAgIGxldCBiYXNlSW5zdGFuY2UgPSBuZXcgQmFzZSgpO1xuICAgICAgICBsZXQgZGVyaXZlZEluc3RhbmNlID0gbmV3IERlcml2ZWQoKTtcblxuICAgICAgICAvLyBUZXN0IGNhc2VzXG4gICAgICAgIGNvbnN0IGNhc2VzID0gW1xuICAgICAgICAgICAgWygpID0+IHt9LCB1bmRlZmluZWQsIGZhbHNlLFwiZnVuY3Rpb24gdnMgdW5kZWZpbmVkXCJdLFxuICAgICAgICAgICAgW25ldyBJRCgpLCAoKT0+e30sIGZhbHNlLCBcIklEIGluc3RhbmNlIHZzIGZ1bmN0aW9uXCJdLFxuICAgICAgICAgICAgW25ldyBJRCgpLCBJRCwgdHJ1ZSwgXCJJRCBpbnN0YW5jZSB2cyBJRFwiXSxcbiAgICAgICAgICAgIFsndGVzdDEnLCB1bmRlZmluZWQsIGZhbHNlLCBcInN0cmluZyB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlLCBcInVuZGVmaW5lZCB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbbnVsbCwgdW5kZWZpbmVkLCBmYWxzZSwgXCJudWxsIHZzIHVuZGVmaW5lZFwiXSxcbiAgICAgICAgICAgIFsyLCB1bmRlZmluZWQsIGZhbHNlLCBcIm51bWJlciB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbZmFsc2UsIHVuZGVmaW5lZCwgZmFsc2UsIFwiZmFsc2UgdnMgdW5kZWZpbmVkXCJdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgdW5kZWZpbmVkLCBmYWxzZSwgXCJOYU4gdnMgdW5kZWZpbmVkXCJdLFxuICAgICAgICAgICAgW3RydWUsIHVuZGVmaW5lZCwgZmFsc2UsIFwidHJ1ZSB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbNC41LCB1bmRlZmluZWQsIGZhbHNlLCBcImZsb2F0IHZzIHVuZGVmaW5lZFwiXSxcbiAgICAgICAgICAgIFt7fSwgdW5kZWZpbmVkLCBmYWxzZSwgXCJvYmplY3QgdnMgdW5kZWZpbmVkXCJdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdW5kZWZpbmVkLCBmYWxzZSwgXCJhcnJheSB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB1bmRlZmluZWQsIGZhbHNlLCBcInN5bWJvbCB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbYmFzZUluc3RhbmNlLCBCYXNlLCB0cnVlLCBcIkJhc2UgaW5zdGFuY2UgdnMgQmFzZVwiXSxcbiAgICAgICAgICAgIFtkZXJpdmVkSW5zdGFuY2UsIEJhc2UsIHRydWUsIFwiRGVyaXZlZCBpbnN0YW5jZSB2cyBCYXNlXCJdLFxuICAgICAgICAgICAgW2Rlcml2ZWRJbnN0YW5jZSwgRGVyaXZlZCwgdHJ1ZSwgXCJEZXJpdmVkIGluc3RhbmNlIHZzIERlcml2ZWRcIl0sXG4gICAgICAgICAgICBbYmFzZUluc3RhbmNlLCBEZXJpdmVkLCBmYWxzZSwgXCJCYXNlIGluc3RhbmNlIHZzIERlcml2ZWRcIl0sXG4gICAgICAgICAgICBbYmFzZUluc3RhbmNlLCBBbm90aGVyQ2xhc3MsIGZhbHNlLCBcIkJhc2UgaW5zdGFuY2UgdnMgQW5vdGhlckNsYXNzXCJdLFxuICAgICAgICAgICAgW2Rlcml2ZWRJbnN0YW5jZSwgKCk9Pnt9LCBmYWxzZSwgXCJEZXJpdmVkIGluc3RhbmNlIHZzIGZ1bmN0aW9uXCJdLFxuICAgICAgICAgICAgW25ldyBBbm90aGVyQ2xhc3MoKSwgQW5vdGhlckNsYXNzLCB0cnVlLCBcIkFub3RoZXJDbGFzcyBpbnN0YW5jZSB2cyBBbm90aGVyQ2xhc3NcIl0sXG4gICAgICAgIF07XG5cbiAgICAgICAgLy8gQWRkaW5nIHByb3RvdHlwZSBtb2RpZmljYXRpb24gdGVzdFxuICAgICAgICBsZXQgcHJvdG9Nb2RpZmllZEluc3RhbmNlID0gbmV3IEJhc2UoKTtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvTW9kaWZpZWRJbnN0YW5jZSwgRGVyaXZlZC5wcm90b3R5cGUpO1xuICAgICAgICBjYXNlcy5wdXNoKFxuICAgICAgICAgICAgW3Byb3RvTW9kaWZpZWRJbnN0YW5jZSwgQmFzZSwgdHJ1ZSwgXCJQcm90byBtb2RpZmllZCBCYXNlIGluc3RhbmNlIHZzIEJhc2VcIl0sIFxuICAgICAgICAgICAgW3Byb3RvTW9kaWZpZWRJbnN0YW5jZSwgRGVyaXZlZCwgdHJ1ZSwgXCJQcm90byBtb2RpZmllZCBCYXNlIGluc3RhbmNlIHZzIERlcml2ZWRcIl1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBSdW5uaW5nIHRoZSB0ZXN0c1xuICAgICAgICBjYXNlcy5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBhID0gZGF0YS5zaGlmdCgpO1xuICAgICAgICAgICAgY29uc3QgYiA9IGRhdGEuc2hpZnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBkYXRhLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBkID0gZGF0YS5zaGlmdCgpO1xuXG4gICAgICAgICAgICBpdCgnaXNJbnN0YW5jZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnLCBbRnVuY3Rpb25dKSBzaG91bGQgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKGlzSW5zdGFuY2UoYSwgYikhPT1jKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGV4cGVjdChpc0luc3RhbmNlKGEsIGIpKS50by5lcXVhbChjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnLmlzT2JqZWN0KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgdHJ1ZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzT2JqZWN0KCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNPYmplY3QoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnLmlzQXJyYXkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNBcnJheSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzQXJyYXkoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmlzRnVuY3Rpb24oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCB0cnVlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNGdW5jdGlvbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzRnVuY3Rpb24oYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVByaW1pdGl2ZSxcbiAgICB2YWxpZGF0ZUJvb2xlYW4sXG4gICAgdmFsaWRhdGVTdHJpbmcsXG4gICAgdmFsaWRhdGVPYmplY3QsXG4gICAgdmFsaWRhdGVBcnJheSxcbiAgICB2YWxpZGF0ZUZ1bmN0aW9uLFxuICAgIHZhbGlkYXRlSW50ZWdlcixcbiAgICB2YWxpZGF0ZUluc3RhbmNlLFxuICAgIHZhbGlkYXRlSXRlcmFibGUsXG4gICAgdmFsaWRhdGVTeW1ib2xcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanNcIlxuXG5pbXBvcnQge0Jhc2V9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvYmFzZS5tanNcIlxuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIlxuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgndmFsaWRhdGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlUHJpbWl0aXZlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbbnVsbCwgdHJ1ZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIHRydWVdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFs0LjUsIHRydWVdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVQcmltaXRpdmUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHZhbGlkYXRlUHJpbWl0aXZlKGEpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVQcmltaXRpdmUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZVByaW1pdGl2ZShhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUludGVnZXIoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdHJ1ZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJbnRlZ2VyKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB2YWxpZGF0ZUludGVnZXIoYSkpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUludGVnZXIoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZUludGVnZXIoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlU3ltYm9sKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlU3ltYm9sKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB2YWxpZGF0ZVN5bWJvbChhKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlU3ltYm9sKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVTeW1ib2woYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVJdGVyYWJsZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCB0cnVlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlSXRlcmFibGUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlSXRlcmFibGUoYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJdGVyYWJsZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlSXRlcmFibGUoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVCb29sZWFuKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVCb29sZWFuKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUJvb2xlYW4oYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlQm9vbGVhbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlQm9vbGVhbihhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlU3RyaW5nKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0cmluZyhhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZVN0cmluZygnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlU3RyaW5nKGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlT2JqZWN0KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgdHJ1ZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlT2JqZWN0KCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZU9iamVjdChhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZU9iamVjdCgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlT2JqZWN0KGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlSW5zdGFuY2UoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgT2JqZWN0XSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIE9iamVjdF0sXG4gICAgICAgICAgICBbbnVsbCwgT2JqZWN0XSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBPYmplY3RdLFxuICAgICAgICAgICAgWzIsIE9iamVjdF0sXG4gICAgICAgICAgICBbZmFsc2UsIE9iamVjdF0sXG4gICAgICAgICAgICBbdHJ1ZSwgT2JqZWN0XSxcbiAgICAgICAgICAgIFs0LjUsIE9iamVjdF0sXG4gICAgICAgICAgICBbe30sIEJhc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgT2JqZWN0XSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIE9iamVjdF0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICBpdCgnLnZhbGlkYXRlSW5zdGFuY2UoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUluc3RhbmNlKGEsIGIpXG4gICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlSW5zdGFuY2UoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbe30sIE9iamVjdCwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IEJhc2UsIEJhc2UsIHRydWVdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJbnN0YW5jZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVJbnN0YW5jZShhLCBiKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVBcnJheSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIHRydWVdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUFycmF5KCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFycmF5KGEpXG4gICAgICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlQXJyYXkoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZUFycmF5KGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUZ1bmN0aW9uKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgdHJ1ZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlRnVuY3Rpb24oJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb24oYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVGdW5jdGlvbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlRnVuY3Rpb24oYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtTdGFja30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9zdGFjay5tanNcIjtcbmltcG9ydCB7XG4gICAgdHlwZU9mXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvdHlwZW9mLm1qc1wiXG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCd0eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLnR5cGVPZigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFt0cnVlLCAnYm9vbGVhbiddLFxuICAgICAgICAgICAgW251bGwsICdudWxsJ10sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCAndW5kZWZpbmVkJ10sXG4gICAgICAgICAgICBbUHJvbWlzZS5yZXNvbHZlKCksICdwcm9taXNlJ10sXG4gICAgICAgICAgICBbbmV3IFdlYWtNYXAoKSwgJ3dlYWttYXAnXSxcbiAgICAgICAgICAgIFtuZXcgTWFwKCksICdtYXAnXSxcbiAgICAgICAgICAgIFtOYU4sICdudW1iZXInXSxcbiAgICAgICAgICAgIFtmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgfSwgJ2dlbmVyYXRvcmZ1bmN0aW9uJ10sXG4gICAgICAgICAgICBbNSwgJ251bWJlciddLFxuICAgICAgICAgICAgW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIH0sICdmdW5jdGlvbiddLFxuICAgICAgICAgICAgWy9hLywgJ3JlZ2V4cCddLFxuICAgICAgICAgICAgW25ldyBEYXRlKCksICdkYXRlJ10sXG4gICAgICAgICAgICBbe30sICdvYmplY3QnXSxcbiAgICAgICAgICAgIFtbXSwgJ2FycmF5J10sXG4gICAgICAgICAgICBbJycsICdzdHJpbmcnXSxcbiAgICAgICAgICAgIFtuZXcgRXJyb3IsICdlcnJvciddLFxuICAgICAgICAgICAgW25ldyBTdGFjaywgJ3N0YWNrJ11cblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuICcgKyBiICsgJyB3aGVuIHRoZSB2YWx1ZSAnICsgdHlwZU9mKGEpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVPZihhKSkudG8uYmUuZXF1YWwoYik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTtcblxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1VuaXF1ZVF1ZXVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3VuaXF1ZXF1ZXVlLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdVbmlxdWVRdWV1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcXVldWU7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIHF1ZXVlID0gbmV3IFVuaXF1ZVF1ZXVlO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnaXNFbXB0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdmaXJzdCBpdCBzaG91bGQgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIHNlcXVlbmNlIHBlZWsgYW5kIHBvbGwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc3VsdCBhLGEsYSxiJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCh7YTogMX0pKS50by5iZS5pbnN0YW5jZU9mKFVuaXF1ZVF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCh7YTogMn0pKS50by5iZS5pbnN0YW5jZU9mKFVuaXF1ZVF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoe2E6IDN9KSkudG8uYmUuaW5zdGFuY2VPZihVbmlxdWVRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucGVlaygpKS50by5kZWVwLmVxdWFsKHthOjF9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmRlZXAuZXF1YWwoe2E6MX0pO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBvbGwoKSkudG8uZGVlcC5lcXVhbCh7YToxfSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucG9sbCgpKS50by5kZWVwLmVxdWFsKHthOjJ9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uZGVlcC5lcXVhbCh7YTozfSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucG9sbCgpKS50by5kZWVwLmVxdWFsKHthOjN9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdhZGQgYW5kIGNsZWFyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCh7YTogMX0pKS50by5iZS5pbnN0YW5jZU9mKFVuaXF1ZVF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmNsZWFyKCkpLnRvLmJlLmluc3RhbmNlT2YoVW5pcXVlUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuICAgIFxuICAgIGRlc2NyaWJlKCdhZGQgbm8gb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKFtdKX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIGV4cGVjdCgoKT0+e3F1ZXVlLmFkZCgxKX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIGV4cGVjdCgoKT0+e3F1ZXVlLmFkZCh0cnVlKX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIGV4cGVjdCgoKT0+e3F1ZXVlLmFkZCgpfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKFN5bWJvbChcIjFcIikpfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKGZ1bmN0aW9uKCl7fSl9KS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgIH0pO1xuXG4gICAgfSlcbn0pIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1N0YWNrfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3N0YWNrLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdTdGFjaycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgc3RhY2s7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIHN0YWNrID0gbmV3IFN0YWNrO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnaXNFbXB0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdmaXJzdCBpdCBzaG91bGQgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIHNlcXVlbmNlIHBlZWsgYW5kIHB1bGwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc3VsdCBhLGEsYSxiJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnB1c2goJ2EnKSkudG8uYmUuaW5zdGFuY2VPZihTdGFjayk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wdXNoKCdiJykpLnRvLmJlLmluc3RhbmNlT2YoU3RhY2spO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnB1c2goJ2MnKSkudG8uYmUuaW5zdGFuY2VPZihTdGFjayk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucGVlaygpKS50by5iZS5lcXVhbCgnYycpO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2MnKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wb3AoKSkudG8uYmUuZXF1YWwoJ2MnKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wZWVrKCkpLnRvLmJlLmVxdWFsKCdiJyk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBhbmQgY2xlYXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucHVzaCgnYScpKS50by5iZS5pbnN0YW5jZU9mKFN0YWNrKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmNsZWFyKCkpLnRvLmJlLmluc3RhbmNlT2YoU3RhY2spO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxufSkiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0Jhc2VXaXRoT3B0aW9uc30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0Jhc2VXaXRoT3B0aW9ucycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgQmFzZVdpdGhPcHRpb25zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBCYXNlV2l0aE9wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEJhc2VXaXRoT3B0aW9ucykudG8uYmUuaW5zdGFuY2VPZihCYXNlV2l0aE9wdGlvbnMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgT2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBCYXNlV2l0aE9wdGlvbnMpLnRvLmJlLmluc3RhbmNlT2YoT2JqZWN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2dldCBvcHRpb24gaXMgdHJ1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZVdpdGhPcHRpb25zKHthOiB0cnVlfSkuZ2V0T3B0aW9uKCdhJykpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtOb2RlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGUubWpzXCI7XG5pbXBvcnQge05vZGVMaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHtOb2RlUmVjdXJzaXZlSXRlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZXJlY3Vyc2l2ZWl0ZXJhdG9yLm1qc1wiO1xuXG5kZXNjcmliZSgnTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJyNjb25zdHJ1Y3RvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBjcmVhdGUgYW4gZW1wdHkgTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoKTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVMaXN0LnNpemUpLnRvLmVxdWFsKDApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIE5vZGVMaXN0IGZyb20gYW4gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoW1xuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVMaXN0LnNpemUpLnRvLmVxdWFsKDMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIE5vZGVMaXN0IGZyb20gYSBOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdChbXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JylcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QyID0gbmV3IE5vZGVMaXN0KG5vZGVMaXN0KTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVMaXN0Mi5zaXplKS50by5lcXVhbCgzKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY3JlYXRlIE5vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkpLmlzLmluc3RhbmNlb2YoTm9kZUxpc3QpO1xuICAgIH0pXG5cbiAgICBpdCgnYWRkIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5hZGQobmV3IE5vZGUoKSkpLnRvLmJlLmluc3RhbmNlb2YoTm9kZUxpc3QpO1xuICAgIH0pXG5cbiAgICBpdCgncmVtb3ZlIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5yZW1vdmUobmV3IE5vZGUoKSkpLnRvLmJlLmluc3RhbmNlb2YoTm9kZUxpc3QpO1xuICAgIH0pXG5cbiAgICBpdCgnaGFzIHVua25vd24gTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmhhcyhuZXcgTm9kZSkpLnRvLmJlLmZhbHNlO1xuICAgIH0pXG5cbiAgICBpdCgnaGFzIGFkZGVkIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG4gPSBuZXcgTm9kZTtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmFkZChuKS5oYXMobikpLnRvLmJlLnRydWU7XG4gICAgfSlcblxuICAgIGl0KCd0aHJvdyBleGNlcHRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgTm9kZUxpc3QoKS5hZGQoMSkpLnRvLnRocm93KEVycm9yKTtcbiAgICB9KVxuXG4gICAgaXQoJ2NoZWNrIGxldmVsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgTm9kZSgncm9vdCcpO1xuXG4gICAgICAgIGNvbnN0IG4xID0gbmV3IE5vZGUoJ24xJyk7XG4gICAgICAgIGNvbnN0IG4yID0gbmV3IE5vZGUoJ24yJyk7XG4gICAgICAgIGNvbnN0IG4zID0gbmV3IE5vZGUoJ24zJyk7XG4gICAgICAgIGNvbnN0IG40ID0gbmV3IE5vZGUoJ240Jyk7XG5cbiAgICAgICAgY29uc3QgbjExID0gbmV3IE5vZGUoJ24xMScpO1xuICAgICAgICBjb25zdCBuMTIgPSBuZXcgTm9kZSgnbjEyJyk7XG4gICAgICAgIGNvbnN0IG4xMyA9IG5ldyBOb2RlKCduMTMnKTtcblxuICAgICAgICBjb25zdCBuMjEgPSBuZXcgTm9kZSgnbjIxJyk7XG4gICAgICAgIGNvbnN0IG4yMiA9IG5ldyBOb2RlKCduMjInKTtcbiAgICAgICAgY29uc3QgbjIzID0gbmV3IE5vZGUoJ24yMycpO1xuXG4gICAgICAgIGNvbnN0IG40MSA9IG5ldyBOb2RlKCduNDEnKTtcbiAgICAgICAgY29uc3QgbjQyID0gbmV3IE5vZGUoJ240MicpO1xuXG4gICAgICAgIGNvbnN0IG40MTEgPSBuZXcgTm9kZSgnbjQxMScpO1xuICAgICAgICBjb25zdCBuNDEyID0gbmV3IE5vZGUoJ240MTInKTtcbiAgICAgICAgY29uc3QgbjQxMyA9IG5ldyBOb2RlKCduNDEzJyk7XG5cbiAgICAgICAgY29uc3QgbjQxMjEgPSBuZXcgTm9kZSgnbjQxMjEnKTtcblxuICAgICAgICByb290LmFwcGVuZENoaWxkKG4xKS5hcHBlbmRDaGlsZChuMikuYXBwZW5kQ2hpbGQobjMpLmFwcGVuZENoaWxkKG40KTtcbiAgICAgICAgbjEuYXBwZW5kQ2hpbGQobjExKS5hcHBlbmRDaGlsZChuMTIpLmFwcGVuZENoaWxkKG4xMyk7XG4gICAgICAgIG4yLmFwcGVuZENoaWxkKG4yMSkuYXBwZW5kQ2hpbGQobjIyKS5hcHBlbmRDaGlsZChuMjMpO1xuICAgICAgICBuNC5hcHBlbmRDaGlsZChuNDEpLmFwcGVuZENoaWxkKG40Mik7XG4gICAgICAgIG40MS5hcHBlbmRDaGlsZChuNDExKS5hcHBlbmRDaGlsZChuNDEyKS5hcHBlbmRDaGlsZChuNDEzKTtcbiAgICAgICAgbjQxMi5hcHBlbmRDaGlsZChuNDEyMSk7XG5cbiAgICAgICAgbGV0IGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihyb290KTtcblxuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlICsgXCI6XCIgKyBuLmxldmVsKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbXG4gICAgICAgICAgICAncm9vdDowJyxcbiAgICAgICAgICAgICduMToxJyxcbiAgICAgICAgICAgICduMTE6MicsXG4gICAgICAgICAgICAnbjEyOjInLFxuICAgICAgICAgICAgJ24xMzoyJyxcbiAgICAgICAgICAgICduMjoxJyxcbiAgICAgICAgICAgICduMjE6MicsXG4gICAgICAgICAgICAnbjIyOjInLFxuICAgICAgICAgICAgJ24yMzoyJyxcbiAgICAgICAgICAgICduMzoxJyxcbiAgICAgICAgICAgICduNDoxJyxcbiAgICAgICAgICAgICduNDE6MicsXG4gICAgICAgICAgICAnbjQxMTozJyxcbiAgICAgICAgICAgICduNDEyOjMnLFxuICAgICAgICAgICAgJ240MTIxOjQnLFxuICAgICAgICAgICAgJ240MTM6MycsXG4gICAgICAgICAgICAnbjQyOjInXG5cbiAgICAgICAgXSk7XG5cbiAgICAgICAgbjQxMjEuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJ240MTIxMScpKTtcblxuICAgICAgICBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3Iocm9vdCk7XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGV4cGVjdChuKS50by5iZS5hbi5pbnN0YW5jZW9mKE5vZGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobi52YWx1ZSArIFwiOlwiICsgbi5sZXZlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFtcbiAgICAgICAgICAgICdyb290OjAnLFxuICAgICAgICAgICAgJ24xOjEnLFxuICAgICAgICAgICAgJ24xMToyJyxcbiAgICAgICAgICAgICduMTI6MicsXG4gICAgICAgICAgICAnbjEzOjInLFxuICAgICAgICAgICAgJ24yOjEnLFxuICAgICAgICAgICAgJ24yMToyJyxcbiAgICAgICAgICAgICduMjI6MicsXG4gICAgICAgICAgICAnbjIzOjInLFxuICAgICAgICAgICAgJ24zOjEnLFxuICAgICAgICAgICAgJ240OjEnLFxuICAgICAgICAgICAgJ240MToyJyxcbiAgICAgICAgICAgICduNDExOjMnLFxuICAgICAgICAgICAgJ240MTI6MycsXG4gICAgICAgICAgICAnbjQxMjE6NCcsXG4gICAgICAgICAgICAnbjQxMjExOjUnLFxuICAgICAgICAgICAgJ240MTM6MycsXG4gICAgICAgICAgICAnbjQyOjInXG5cbiAgICAgICAgXSk7XG5cblxuICAgICAgICBjb25zdCBiYiA9IG5ldyBOb2RlKCdiYicpIC8vIGJpZyBiYW5nXG5cbiAgICAgICAgYmIuYXBwZW5kQ2hpbGQocm9vdCk7XG4gICAgICAgIGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihiYik7XG5cbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlICsgXCI6XCIgKyBuLmxldmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoW1xuICAgICAgICAgICAgJ2JiOjAnLFxuICAgICAgICAgICAgJ3Jvb3Q6MScsXG4gICAgICAgICAgICAnbjE6MicsXG4gICAgICAgICAgICAnbjExOjMnLFxuICAgICAgICAgICAgJ24xMjozJyxcbiAgICAgICAgICAgICduMTM6MycsXG4gICAgICAgICAgICAnbjI6MicsXG4gICAgICAgICAgICAnbjIxOjMnLFxuICAgICAgICAgICAgJ24yMjozJyxcbiAgICAgICAgICAgICduMjM6MycsXG4gICAgICAgICAgICAnbjM6MicsXG4gICAgICAgICAgICAnbjQ6MicsXG4gICAgICAgICAgICAnbjQxOjMnLFxuICAgICAgICAgICAgJ240MTE6NCcsXG4gICAgICAgICAgICAnbjQxMjo0JyxcbiAgICAgICAgICAgICduNDEyMTo1JyxcbiAgICAgICAgICAgICduNDEyMTE6NicsXG4gICAgICAgICAgICAnbjQxMzo0JyxcbiAgICAgICAgICAgICduNDI6MydcblxuICAgICAgICBdKTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnTGV2ZWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCduMiBzaG91bGQgbGV2ZWwgMicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgbjAgPSBuZXcgTm9kZSgnYWJjJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG4xID0gbmV3IE5vZGUoJ2RlZicpO1xuICAgICAgICAgICAgbjAuYXBwZW5kQ2hpbGQobjEpXG5cbiAgICAgICAgICAgIGNvbnN0IG4yID0gbmV3IE5vZGUoJ2doaScpO1xuICAgICAgICAgICAgbjEuYXBwZW5kQ2hpbGQobjIpO1xuXG4gICAgICAgICAgICBjb25zdCBuMyA9IG5ldyBOb2RlKCdqa2wnKTtcbiAgICAgICAgICAgIG4yLmFwcGVuZENoaWxkKG4zKTtcblxuICAgICAgICAgICAgZXhwZWN0KG4wLmxldmVsKS50by5iZS5lcXVhbCgwKTtcbiAgICAgICAgICAgIGV4cGVjdChuMS5sZXZlbCkudG8uYmUuZXF1YWwoMSk7XG4gICAgICAgICAgICBleHBlY3QobjIubGV2ZWwpLnRvLmJlLmVxdWFsKDIpO1xuICAgICAgICAgICAgZXhwZWN0KG4zLmxldmVsKS50by5iZS5lcXVhbCgzKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ3RvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBvdXRwdXQgZW1wdHkgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBOb2RlKCk7XG4gICAgICAgICAgICBleHBlY3Qobm9kZS50b1N0cmluZygpKS5pcy5lcXVhbCgnJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgb3V0cHV0IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IG4wID0gbmV3IE5vZGUoJ2FiYycpO1xuXG4gICAgICAgICAgICBjb25zdCBuMSA9IG5ldyBOb2RlKCdkZWYnKTtcbiAgICAgICAgICAgIG4wLmFwcGVuZENoaWxkKG4xKVxuXG4gICAgICAgICAgICBjb25zdCBuMTEgPSBuZXcgTm9kZSgnZ2hpJyk7XG4gICAgICAgICAgICBuMC5hcHBlbmRDaGlsZChuMTEpXG5cbiAgICAgICAgICAgIGNvbnN0IG4yID0gbmV3IE5vZGUoJ2prbCcpO1xuICAgICAgICAgICAgbjEuYXBwZW5kQ2hpbGQobjIpO1xuXG4gICAgICAgICAgICBjb25zdCBuMyA9IG5ldyBOb2RlKCdtbm8nKTtcbiAgICAgICAgICAgIG4xLmFwcGVuZENoaWxkKG4zKTtcblxuICAgICAgICAgICAgY29uc3QgbjQgPSBuZXcgTm9kZSgncHFyJyk7XG4gICAgICAgICAgICBuMi5hcHBlbmRDaGlsZChuNCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChuMi5sZXZlbCkudG8uYmUuZXF1YWwoMilcblxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhuMC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIC8vIGV4cGVjdChuMC50b1N0cmluZygpKS5pcy5lcXVhbCgnJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtRdWV1ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9xdWV1ZS5tanNcIjtcblxuZGVzY3JpYmUoJ1F1ZXVlJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBxdWV1ZTtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgcXVldWUgPSBuZXcgUXVldWU7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdpc0VtcHR5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZpcnN0IGl0IHNob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdhZGQgc2VxdWVuY2UgcGVlayBhbmQgcG9sbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVzdWx0IGEsYSxhLGInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdiJykpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCgnYycpKS50by5iZS5pbnN0YW5jZU9mKFF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmJlLmVxdWFsKCdhJyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucGVlaygpKS50by5iZS5lcXVhbCgnYScpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBvbGwoKSkudG8uYmUuZXF1YWwoJ2EnKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmJlLmVxdWFsKCdiJyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBhbmQgY2xlYXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuY2xlYXIoKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cblxuICAgIFxufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtOb2RlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGUubWpzXCI7XG5pbXBvcnQge05vZGVMaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHtOb2RlUmVjdXJzaXZlSXRlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZXJlY3Vyc2l2ZWl0ZXJhdG9yLm1qc1wiO1xuXG5kZXNjcmliZSgnTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBleGVwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3IoKSkudG8udGhyb3coRXJyb3IpXG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBiZSBhIGZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QoTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKS50by5iZS5hKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBiZSBhIGNvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihuZXcgTm9kZSkpLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT3BlcmF0b3JzL3lpZWxkXG4gICAgICovXG4gICAgaXQoJ3VuZGVmaW5lZCBzaG91bGQgbm90IHJlc3VsdCBpbiB1bmRlZmluZWQgbm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKG5ldyBOb2RlKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbdW5kZWZpbmVkXSk7XG5cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaXRlcmF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9XG4gICAgICAgICAgICBuZXcgTm9kZSgnMScpXG4gICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgICAobmV3IE5vZGUoJzInKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMScpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4yJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjMnKSkpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCczJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0JykuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQuMScpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNC4yJykpKTtcblxuICAgICAgICBjb25zdCBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3Iobm9kZSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoWycxJywgJzInLCAnMi4xJywgJzIuMicsICcyLjMnLCAnMycsICc0JywgJzQuMScsICc0LjInXSk7XG5cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaXRlcmF0ZSBub2RlbGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoKTtcblxuICAgICAgICBub2RlTGlzdC5hZGQoXG4gICAgICAgICAgICAobmV3IE5vZGUoJzInKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMScpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4yJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjMnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzMnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQnKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNC4xJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0LjInKSkpKTtcblxuICAgICAgICBub2RlTGlzdC5hZGQobmV3IE5vZGUoJ3gnKSk7XG5cbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKG5vZGVMaXN0KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFsnMicsICcyLjEnLCAnMi4yJywgJzIuMycsICczJywgJzQnLCAnNC4xJywgJzQuMicsICd4J10pO1xuXG4gICAgfSk7XG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCwgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuXG5pbXBvcnQgeyBGb3JtYXR0ZXIgYXMgVGV4dEZvcm1hdHRlciB9IGZyb20gXCIuLi90ZXh0L2Zvcm1hdHRlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25zIH0gZnJvbSBcIi4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5leHBvcnQgeyBGb3JtYXR0ZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxUcmFuc2xhdGlvblN5bWJvbCA9IFN5bWJvbChcImludGVybmFsVHJhbnNsYXRpb25cIik7XG5cbi8qKlxuICogVGhlIEZvcm1hdHRlciBleHRlbmRzIHRoZSBUZXh0LkZvcm1hdHRlciB3aXRoIHRoZSBwb3NzaWJpbGl0eSB0byByZXBsYWNlIHRoZSBrZXkgYnkgYSB0cmFuc2xhdGlvbi5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIEZvcm1hdHRlciBleHRlbmRzIFRleHRGb3JtYXR0ZXIge1xuXHQvKipcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBtYXJrZXJzIGFyZSBgJHtgIGFuZCBgfWBcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0LCB0cmFuc2xhdGlvbiwgb3B0aW9ucykge1xuXHRcdHN1cGVyKG9iamVjdCwgb3B0aW9ucyk7XG5cdFx0dGhpc1tpbnRlcm5hbFRyYW5zbGF0aW9uU3ltYm9sXSA9IHZhbGlkYXRlSW5zdGFuY2UoXG5cdFx0XHR0cmFuc2xhdGlvbixcblx0XHRcdFRyYW5zbGF0aW9ucyxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi9mb3JtYXR0ZXJAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtYXJrZXJcblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLm9wZW49W1wiaTE4bntcIixcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IG1hcmtlci5jbG9zZT1bXCIke1wiXVxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gcGFyYW1ldGVyXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuZGVsaW1pdGVyPVwiOjpcIlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcGFyYW1ldGVyLmFzc2lnbm1lbnQ9XCI9XCJcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGNhbGxiYWNrc1xuXHQgKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBjYWxsYmFja3MuaTE4bj0oKT0+e31cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0Y2FsbGJhY2tzOiB7XG5cdFx0XHRcdGkxOG46ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzW2ludGVybmFsVHJhbnNsYXRpb25TeW1ib2xdLmdldFRleHQodmFsaWRhdGVTdHJpbmcodmFsdWUpKTtcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRtYXJrZXI6IHtcblx0XHRcdFx0b3BlbjogW1wiaTE4bntcIiwgXCIke1wiXSxcblx0XHRcdFx0Y2xvc2U6IFtcIn1cIl0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7RXJyb3J9IHRvbyBkZWVwIG5lc3Rpbmdcblx0ICogQHRocm93cyB7RXJyb3J9IGtleSBub3QgZm91bmRcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBjbG9zaW5nIG1hcmtlciBpcyBtaXNzaW5nXG5cdCAqL1xuXHRmb3JtYXQodGV4dCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHRleHQpO1xuXG5cdFx0Y29uc3Qgb3Blbk1hcmtlciA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wib3BlblwiXT8uWzBdO1xuXHRcdGNvbnN0IGNsb3NlTWFya2VyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJjbG9zZVwiXT8uWzBdO1xuXG5cdFx0aWYgKHRleHQuaW5kZXhPZihvcGVuTWFya2VyKSA9PT0gMCkge1xuXHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKTtcblxuXHRcdFx0aWYgKHRleHQuaW5kZXhPZihjbG9zZU1hcmtlcikgPT09IHRleHQubGVuZ3RoIC0gY2xvc2VNYXJrZXIubGVuZ3RoKSB7XG5cdFx0XHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0Lmxlbmd0aCAtIGNsb3NlTWFya2VyLmxlbmd0aCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgY2xvc2luZyBtYXJrZXIgaXMgbWlzc2luZ1wiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBwYXJ0cyA9IHZhbGlkYXRlU3RyaW5nKHRleHQpLnNwbGl0KFwiOjpcIik7XG5cdFx0Y29uc3QgdHJhbnNsYXRpb25LZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKTsgLy8ga2V5IHZhbHVlIGRlbGltaXRlclxuXHRcdGNvbnN0IHBhcmFtZXRlciA9IHBhcnRzLmpvaW4oXCI6OlwiKS50cmltKCk7XG5cblx0XHRsZXQgYXNzZW1ibGVkVGV4dCA9IGAke29wZW5NYXJrZXJ9c3RhdGljOiR7dHJhbnNsYXRpb25LZXl9IHwgY2FsbDppMThuYDtcblx0XHRpZiAocGFyYW1ldGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdGFzc2VtYmxlZFRleHQgKz0gYDo6JHtwYXJhbWV0ZXJ9YDtcblx0XHR9XG5cdFx0YXNzZW1ibGVkVGV4dCArPSBjbG9zZU1hcmtlcjtcblx0XHRyZXR1cm4gc3VwZXIuZm9ybWF0KGFzc2VtYmxlZFRleHQpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0Zvcm1hdHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdleGFtcGxlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIHdpdGggbWFya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBuZXcgVHJhbnNsYXRpb25zKCdlbicpXG4gICAgICAgICAgICAgICAgLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHRoZWtleTogXCIke2FuaW1hbH0gaGFzIGVhdGVuIHRoZSAke2Zvb2R9IVwiXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGYgPSBuZXcgRm9ybWF0dGVyKHt9LCB0cmFuc2xhdGlvbnMpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBleHBlY3QoZi5mb3JtYXQoXCJpMThue3RoZWtleTo6YW5pbWFsPWRvZzo6Zm9vZD1jYWtlfVwiKSkudG8uYmUuZXF1YWwoJ2RvZyBoYXMgZWF0ZW4gdGhlIGNha2UhJyk7XG4gICAgICAgICAgICAvLyBcdTIxQTYgZG9nIGhhcyBlYXRlbiB0aGUgY2FrZSEgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc2hvdWxkIHJ1biB3aXRob3V0IG1hcmtlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zID0gbmV3IFRyYW5zbGF0aW9ucygnZW4nKVxuICAgICAgICAgICAgICAgIC5hc3NpZ25UcmFuc2xhdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICB0aGVrZXk6IFwiJHthbmltYWx9IGhhcyBlYXRlbiB0aGUgJHtmb29kfSFcIlxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBtaXNzaW5nIG1hcmtlclxuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIoe30sIHRyYW5zbGF0aW9ucykuZm9ybWF0KFwidGhla2V5OjphbmltYWw9ZG9nOjpmb29kPWNha2VcIikpLnRvLmJlLmVxdWFsKCdkb2cgaGFzIGVhdGVuIHRoZSBjYWtlIScpO1xuICAgICAgICAgICAgLy8gXHUyMUE2IGRvZyBoYXMgZWF0ZW4gdGhlIGNha2UhICAgICAgICAgICAgICAgIFxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnaTE4bnt0cmFuc2xhdGlvbmtleTo6YT0zOjpiPTV9JywgJ3Rlc3QgaXMgMyBhbmQgNSddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2Zvcm1hdCAnICsgYSArICcgc2hvdWxkICcgKyBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBuZXcgVHJhbnNsYXRpb25zKCdkZScpLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9ua2V5OiBcInRlc3QgaXMgJHthfSBhbmQgJHtifVwiXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGV4cGVjdChcbiAgICAgICAgICAgICAgICAgICAgbmV3IEZvcm1hdHRlcih7fSwgdHJhbnNsYXRpb25zKS5mb3JtYXQoYSlcbiAgICAgICAgICAgICAgICApLnRvLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSlcbjsiLCAiXG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge3BhcnNlTG9jYWxlLCBMb2NhbGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9sb2NhbGUubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0xvY2FsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzU2NDYuaHRtbFxuICAgICAgICAgICAgWyd6aCcsIHVuZGVmaW5lZCwgJ0hhbnQnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnemgtSGFudCddLCAvLyB6aC1IYW50IChDaGluZXNlIHdyaXR0ZW4gdXNpbmcgdGhlIFRyYWRpdGlvbmFsIENoaW5lc2Ugc2NyaXB0KVxuICAgICAgICAgICAgWydkZScsICdDSCcsIHVuZGVmaW5lZCwgJzE5MDEnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ2RlLUNILTE5MDEnXSwgIC8vIGRlLUNILTE5MDEgKEdlcm1hbiBhcyB1c2VkIGluIFN3aXR6ZXJsYW5kIHVzaW5nIHRoZSAxOTAxIHZhcmlhbnQgW29ydGhvZ3JhcGh5XSlcbiAgICAgICAgICAgIFsnc2wnLCAnSVQnLCB1bmRlZmluZWQsICduZWRpcycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc2wtSVQtbmVkaXMnXSwgIC8vIHNsLUlULW5lZGlzIChTbG92ZW5pYW4gYXMgdXNlZCBpbiBJdGFseSwgTmFkaXphIGRpYWxlY3QpXG4gICAgICAgICAgICBbJ2h5JywgJ0lUJywgJ0xhdG4nLCAnYXJldmVsYScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnaHktTGF0bi1JVC1hcmV2ZWxhJ10sIC8vIGh5LUxhdG4tSVQtYXJldmVsYSAoRWFzdGVybiBBcm1lbmlhbiB3cml0dGVuIGluIExhdGluIHNjcmlwdCwgYXMgdXNlZCBpbiBJdGFseSlcbiAgICAgICAgICAgIFsnemgnLCAnQ04nLCAnSGFucycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW5zLUNOJ10sIC8vIHpoLUhhbnMtQ04gKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgU2ltcGxpZmllZCBzY3JpcHQgYXMgdXNlZCBpbiAgbWFpbmxhbmQgQ2hpbmEpXG4gICAgICAgICAgICBbJ3NyJywgJ1JTJywgJ0xhdG4nLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc3ItTGF0bi1SUyddLCAvLyBzci1MYXRuLVJTIChTZXJiaWFuIHdyaXR0ZW4gdXNpbmcgdGhlIExhdGluIHNjcmlwdCBhcyB1c2VkIGluIFNlcmJpYSlcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBlID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGcgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ25ldyBMb2NhbGUoJyArIGEgKyAnLCcgKyBiICsgJywnICsgYyArICcsJyArIGQgKyAnLCcgKyBlICsgJywnICsgZiArICcpIHNob3VsZCByZXR1cm4gJyArIGcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgTG9jYWxlKGEsIGIsIGMsIGQsIGUsIGYpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKGcpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwYXJzZUxvY2FsZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcblxuICAgICAgICAgICAgLy8gbGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzU2NDYuaHRtbFxuICAgICAgICAgICAgWyd6aCcsIHVuZGVmaW5lZCwgJ0hhbnQnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnemgtSGFudCddLCAvLyB6aC1IYW50IChDaGluZXNlIHdyaXR0ZW4gdXNpbmcgdGhlIFRyYWRpdGlvbmFsIENoaW5lc2Ugc2NyaXB0KVxuICAgICAgICAgICAgWydkZScsICdDSCcsIHVuZGVmaW5lZCwgJzE5MDEnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ2RlLUNILTE5MDEnXSwgIC8vIGRlLUNILTE5MDEgKEdlcm1hbiBhcyB1c2VkIGluIFN3aXR6ZXJsYW5kIHVzaW5nIHRoZSAxOTAxIHZhcmlhbnQgW29ydGhvZ3JhcGh5XSlcbiAgICAgICAgICAgIFsnc2wnLCAnSVQnLCB1bmRlZmluZWQsICduZWRpcycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc2wtSVQtbmVkaXMnXSwgIC8vIHNsLUlULW5lZGlzIChTbG92ZW5pYW4gYXMgdXNlZCBpbiBJdGFseSwgTmFkaXphIGRpYWxlY3QpXG4gICAgICAgICAgICBbJ2h5JywgJ0lUJywgJ0xhdG4nLCAnYXJldmVsYScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnaHktTGF0bi1JVC1hcmV2ZWxhJ10sIC8vIGh5LUxhdG4tSVQtYXJldmVsYSAoRWFzdGVybiBBcm1lbmlhbiB3cml0dGVuIGluIExhdGluIHNjcmlwdCwgYXMgdXNlZCBpbiBJdGFseSlcbiAgICAgICAgICAgIFsnemgnLCAnQ04nLCAnSGFucycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW5zLUNOJ10sIC8vIHpoLUhhbnMtQ04gKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgU2ltcGxpZmllZCBzY3JpcHQgYXMgdXNlZCBpbiAgbWFpbmxhbmQgQ2hpbmEpXG4gICAgICAgICAgICBbJ3NyJywgJ1JTJywgJ0xhdG4nLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc3ItTGF0bi1SUyddLCAvLyBzci1MYXRuLVJTIChTZXJiaWFuIHdyaXR0ZW4gdXNpbmcgdGhlIExhdGluIHNjcmlwdCBhcyB1c2VkIGluIFNlcmJpYSlcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBlID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGcgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ25ldyBMb2NhbGUoJyArIGEgKyAnLCcgKyBiICsgJywnICsgYyArICcsJyArIGQgKyAnLCcgKyBlICsgJywnICsgZiArICcpIHNob3VsZCByZXR1cm4gJyArIGcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsZSA9IHBhcnNlTG9jYWxlKGcpXG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5sb2NhbGVTdHJpbmcpLnRvLmJlLmVxdWFsKGcpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUubGFuZ3VhZ2UpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUucmVnaW9uKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLnNjcmlwdCkudG8uYmUuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS52YXJpYW50cykudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5leHRsYW5nKS50by5iZS5lcXVhbChlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLnByaXZhdGVVc2UpLnRvLmJlLmVxdWFsKGYpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2NhbGUoYSwgYiwgYywgZCwgZSwgZikudG9TdHJpbmcoKSkuaXMuZXF1YWwoZylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtBVFRSSUJVVEVfT0JKRUNUTElOS30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtnZXRMaW5rZWRPYmplY3RzfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtQcm92aWRlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVyLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXREb2N1bWVudFRyYW5zbGF0aW9ucywgVHJhbnNsYXRpb25zfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5kZXNjcmliZSgnUHJvdmlkZXInLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgIGxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG5cbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdQcm92aWRlciBhbmQgRG9tJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAbGlua1wiKTtcblxuICAgICAgICBpdCgnYXNzaWduVG9FbGVtZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBuZXcgUHJvdmlkZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBwLmFzc2lnblRvRWxlbWVudCh1bmRlZmluZWQsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICByLnRoZW4oKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09CSkVDVExJTkspO1xuICAgICAgICAgICAgICAgIGlmIChzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwiQXR0cmlidXRlIG5vdCBzZXRcIikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaSA9IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbClcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcIk5vIGxpbmtlZCBvYmplY3QgZm91bmRcIikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IHYgb2YgaSkge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJObyBsaW5rZWQgb2JqZWN0IGZvdW5kXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRvY1RyYW5zID0gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoZWxlbWVudClcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jVHJhbnMpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcblxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBpc0luc3RhbmNlLCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IHBhcnNlTG9jYWxlIH0gZnJvbSBcIi4uL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcIi4uL3Byb3ZpZGVyLm1qc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25zIH0gZnJvbSBcIi4uL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuZXhwb3J0IHsgRmV0Y2ggfTtcblxuLyoqXG4gKiBUaGUgZmV0Y2ggcHJvdmlkZXIgcmV0cmlldmVzIGEgSlNPTiBmaWxlIGZyb20gdGhlIGdpdmVuIFVSTCBhbmQgcmV0dXJucyBhIHRyYW5zbGF0aW9uIG9iamVjdC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uLy4uL2V4YW1wbGUvaTE4bi9wcm92aWRlcnMvZmV0Y2gubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZ9XG4gKiBAdHV0b3JpYWwgaTE4bi1sb2NhbGUtYW5kLWZvcm1hdHRlclxuICovXG5jbGFzcyBGZXRjaCBleHRlbmRzIFByb3ZpZGVyIHtcblx0LyoqXG5cdCAqIEFzIG9wdGlvbnMgdGhlIGtleSBgZmV0Y2hgIGNhbiBiZSBwYXNzZWQuIFRoaXMgY29uZmlnIG9iamVjdCBpcyBwYXNzZWQgdG8gdGhlIGZldGNoIG1ldGhvZCBhcyBpbml0LlxuXHQgKlxuXHQgKiBUaGUgdXJsIG1heSBjb250YWluIHBsYWNlaG9sZGVycyAobGFuZ3VhZ2UsIHNjcmlwdCwgcmVnaW9uLCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZSksIHNvIHlvdSBjYW4gc3BlY2lmeSBvbmUgdXJsIGZvciBhbGwgdHJhbnNsYXRpb25zLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogbmV3IEZldGNoKCdodHRwczovL3d3dy5leGFtcGxlLmNvbS9hc3NldHMvJHtsYW5ndWFnZX0uanNvbicpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBzZWUge0BsaW5rIE1vbnN0ZXIuSTE4bi5Qcm92aWRlcnMuRmV0Y2gjZGVmYXVsdHN9XG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9mZXRjaH1cblx0ICovXG5cdGNvbnN0cnVjdG9yKHVybCwgb3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0aWYgKGlzSW5zdGFuY2UodXJsLCBVUkwpKSB7XG5cdFx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zID0ge307XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVTdHJpbmcodXJsKTtcblxuXHRcdC8qKlxuXHRcdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdHRoaXMudXJsID0gdXJsO1xuXG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcHJvcGVydHkge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqL1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gZXh0ZW5kKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHRoaXMuZGVmYXVsdHMsXG5cdFx0XHR2YWxpZGF0ZU9iamVjdChvcHRpb25zKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmF1bHRzXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1jb3JzXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jYWNoZT1uby1jYWNoZVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9b21pdFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gucmVkaXJlY3Q9Zm9sbG93XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWZlcnJlclBvbGljeT1uby1yZWZlcnJlclxuXHQgKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoXG5cdFx0XHR7XG5cdFx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLCAvLyAqR0VULCBQT1NULCBQVVQsIERFTEVURSwgZXRjLlxuXHRcdFx0XHRcdG1vZGU6IFwiY29yc1wiLCAvLyBuby1jb3JzLCAqY29ycywgc2FtZS1vcmlnaW5cblx0XHRcdFx0XHRjYWNoZTogXCJuby1jYWNoZVwiLCAvLyAqZGVmYXVsdCwgbm8tY2FjaGUsIHJlbG9hZCwgZm9yY2UtY2FjaGUsIG9ubHktaWYtY2FjaGVkXG5cdFx0XHRcdFx0Y3JlZGVudGlhbHM6IFwib21pdFwiLCAvLyBpbmNsdWRlLCAqc2FtZS1vcmlnaW4sIG9taXRcblx0XHRcdFx0XHRyZWRpcmVjdDogXCJmb2xsb3dcIiwgLy8gbWFudWFsLCAqZm9sbG93LCBlcnJvclxuXHRcdFx0XHRcdHJlZmVycmVyUG9saWN5OiBcIm5vLXJlZmVycmVyXCIsIC8vIG5vLXJlZmVycmVyLCAqbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUsIG9yaWdpbiwgb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luLCBzYW1lLW9yaWdpbiwgc3RyaWN0LW9yaWdpbiwgc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbiwgdW5zYWZlLXVybFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtMb2NhbGV8c3RyaW5nfSBsb2NhbGVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGdldFRyYW5zbGF0aW9ucyhsb2NhbGUpIHtcblx0XHRpZiAoaXNTdHJpbmcobG9jYWxlKSkge1xuXHRcdFx0bG9jYWxlID0gcGFyc2VMb2NhbGUobG9jYWxlKTtcblx0XHR9XG5cblx0XHRjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKGxvY2FsZS5nZXRNYXAoKSk7XG5cblx0XHRyZXR1cm4gZ2V0R2xvYmFsRnVuY3Rpb24oXCJmZXRjaFwiKShcblx0XHRcdGZvcm1hdHRlci5mb3JtYXQodGhpcy51cmwpLFxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSksXG5cdFx0KVxuXHRcdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5qc29uKCkpXG5cdFx0XHQudGhlbigoZGF0YSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFRyYW5zbGF0aW9ucyhsb2NhbGUpLmFzc2lnblRyYW5zbGF0aW9ucyhkYXRhKTtcblx0XHRcdH0pO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5pbXBvcnQge0ZldGNofSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2ZldGNoLm1qc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5cblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5sZXQgZmV0Y2hSZWZlcmVuY2U7XG5cblxuZGVzY3JpYmUoJ1RyYW5zbGF0aW9uIFByb3ZpZGVyIEZldGNoJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBqc29uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZmV0Y2ggbW9jayBkYXRhIGFuZCBjcmVhdGUgdHJhbnNsYXRpb24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZldGNoJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IHAgPSAobmV3IEZldGNoKG5ldyBVUkwoJ2h0dHA6Ly9leGFtcGxlLmNvbScpKSkuZ2V0VHJhbnNsYXRpb25zKCdlbicpO1xuXG4gICAgICAgICAgICBleHBlY3QocCkuaXMuaW5zdGFuY2VvZihQcm9taXNlKTtcblxuICAgICAgICAgICAgcC50aGVuKHIgPT4ge1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHIpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5pbXBvcnQge0VtYmVkfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmNvbnN0IGh0bWwxID0gYFxuPHNjcmlwdCBpZD1cInRlbXBsb2NhbGVcIiB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxue1xuICAgICAgICBcImtleVwiOiBcInRyYW5zbGF0aW9uXCJcbn1cbjwvc2NyaXB0PlxuYDtcblxuZGVzY3JpYmUoJ1RyYW5zbGF0aW9uIFByb3ZpZGVyIEVtYmVkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2dldCBtb2NrIGRhdGEgYW5kIGNyZWF0ZSB0cmFuc2xhdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZW1iZWQnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBlID0gbmV3IEVtYmVkKCd0ZW1wbG9jYWxlJyk7XG4gICAgICAgICAgICBsZXQgcCA9IGUuZ2V0VHJhbnNsYXRpb25zKCdlbicpO1xuICAgICAgICAgICAgZXhwZWN0KHApLmlzLmluc3RhbmNlb2YoUHJvbWlzZSk7XG5cbiAgICAgICAgICAgIHAudGhlbihyID0+IHtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChyKS5pcy5pbnN0YW5jZW9mKFRyYW5zbGF0aW9ucyk7XG4gXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ID0gci5nZXRUZXh0KCdrZXknKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QodCkuaXMuZXF1YWwoJ3RyYW5zbGF0aW9uJyk7XG5cblxuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtwYXJzZUxvY2FsZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7RW1iZWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5pbXBvcnQge1xuICAgIFRyYW5zbGF0aW9ucyxcbiAgICBnZXREb2N1bWVudFRyYW5zbGF0aW9uc1xuICAgIFxufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnVHJhbnNsYXRpb25zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ0luc3RhbmNlIGFuZCBJbml0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB0cmFuc2xhdGlvbjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gbmV3IFRyYW5zbGF0aW9ucyhwYXJzZUxvY2FsZSgnZW4tR0InKSk7XG5cbiAgICAgICAgICAgIHRyYW5zbGF0aW9uLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgdGVzdDE6IFwiYWJjXCIsXG4gICAgICAgICAgICAgICAgdGVzdDI6IHsnb3RoZXInOiAneHl6J31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjcmVhdGUgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRyYW5zbGF0aW9ucyhwYXJzZUxvY2FsZSgnZW4tR0InKSkpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2luaXQgdHJhbnNsYXRpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyYW5zbGF0aW9uLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgdGVzdDE6IFwiYWJjXCIsXG4gICAgICAgICAgICAgICAgdGVzdDI6IHsnb3RoZXInOiAneHl6J31cbiAgICAgICAgICAgIH0pKS5pcy5pbnN0YW5jZW9mKFRyYW5zbGF0aW9ucyk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0VGV4dCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgdHJhbnNsYXRpb247XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICB0cmFuc2xhdGlvbiA9IG5ldyBUcmFuc2xhdGlvbnMocGFyc2VMb2NhbGUoJ2VuLUdCJykpO1xuXG4gICAgICAgICAgICB0cmFuc2xhdGlvbi5hc3NpZ25UcmFuc2xhdGlvbnMoe1xuICAgICAgICAgICAgICAgIHRlc3QxOiBcImFiY1wiLFxuICAgICAgICAgICAgICAgIHRlc3QyOiB7J290aGVyJzogJ3h5eid9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY3JlYXRlLCBzZXQgYW5kIGdldCBlbi1HQicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCh0cmFuc2xhdGlvbi5nZXRUZXh0KCd0ZXN0MScpKS5pcy5lcXVhbCgnYWJjJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdjcmVhdGUsIHNldCBhbmQgZ2V0ICBlbi1HQiB3aXRoIHBsdXJhbHJ1bGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyYW5zbGF0aW9uLmdldFRleHQoJ3Rlc3QyJykpLmlzLmVxdWFsKCd4eXonKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogaW5pdERvY3VtZW50VHJhbnNsYXRpb25cbiAgICAgKi9cblxuICAgIGRlc2NyaWJlKFwidGVzdCBpbml0RG9jdW1lbnRUcmFuc2xhdGlvbiBcIiwgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgbGV0IGh0bWwxID0gYDxkaXYgaWQ9XCJtb2NrLXRyYW5zbGF0aW9uc1wiPjwvZGl2PlxuICAgIFxuPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwidHJhbnNsYXRpb25zXCI+XG4gICAge1xuICAgICAgICBcInRlc3QxXCI6IFwiYWJjXCIsXG4gICAgICAgIFwidGVzdDJcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcInh5elwiXG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD5cblxuPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwidHJhbnNsYXRpb25zXCI+XG4gICAge1xuICAgICAgICBcInRlc3QxXCI6IFwieHl6XCIsXG4gICAgICAgIFwidGVzdDNcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcInh5elwiXG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD4gICAgXG4gICAgXG5gO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGl0KCdJbml0IHRyYW5zbGF0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2stdHJhbnNsYXRpb25zJyk7XG4gICAgICAgICAgICBFbWJlZC5hc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoZWxlbSkudGhlbigobykgPT4ge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gbm8gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgZGVmYXVsdFxuICAgICAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRyYW5zbGF0aW9ucyhlbGVtKS5nZXRUZXh0KCduby1rZXknLCd3aXRoLWRlZmF1bHQnKSlcbiAgICAgICAgICAgICAgICAgICAgLmlzLmVxdWFsKCd3aXRoLWRlZmF1bHQnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBleHBlY3QoZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoZWxlbSkuZ2V0VGV4dCgndGVzdDEnKSlcbiAgICAgICAgICAgICAgICAgICAgLmlzLmVxdWFsKCd4eXonKTtcblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG5cbn0pOyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUNBLFdBQVMsV0FBVyxPQUFPO0FBQzFCLFFBQUksVUFBVSxPQUFXLFFBQU87QUFDaEMsUUFBSSxVQUFVLEtBQU0sUUFBTztBQUMzQixXQUFPLE9BQU8sUUFBUSxPQUFPLFFBQVEsTUFBTTtBQUFBLEVBQzVDO0FBY0EsV0FBUyxZQUFZLE9BQU87QUFDM0IsUUFBSUE7QUFFSixRQUFJLFVBQVUsVUFBYSxVQUFVLE1BQU07QUFDMUMsYUFBTztBQUFBLElBQ1I7QUFFQSxJQUFBQSxRQUFPLE9BQU87QUFFZCxRQUNDQSxVQUFTLFlBQ1RBLFVBQVMsWUFDVEEsVUFBUyxhQUNUQSxVQUFTLFVBQ1I7QUFDRCxhQUFPO0FBQUEsSUFDUjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBY0EsV0FBUyxTQUFTLE9BQU87QUFDeEIsV0FBTyxhQUFhLE9BQU8sUUFBUSxPQUFPO0FBQUEsRUFDM0M7QUFjQSxXQUFTLFVBQVUsT0FBTztBQUN6QixRQUFJLFVBQVUsUUFBUSxVQUFVLE9BQU87QUFDdEMsYUFBTztBQUFBLElBQ1I7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQWNBLFdBQVMsU0FBUyxPQUFPO0FBQ3hCLFFBQUksVUFBVSxVQUFhLE9BQU8sVUFBVSxVQUFVO0FBQ3JELGFBQU87QUFBQSxJQUNSO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFjQSxXQUFTLFNBQVMsT0FBTztBQUN4QixRQUFJLFFBQVEsS0FBSyxFQUFHLFFBQU87QUFDM0IsUUFBSSxZQUFZLEtBQUssRUFBRyxRQUFPO0FBRS9CLFFBQUksT0FBTyxVQUFVLFVBQVU7QUFDOUIsYUFBTztBQUFBLElBQ1I7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQWVBLFdBQVMsV0FBVyxPQUFPLFVBQVU7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QUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxVQUNJLEdBQUc7QUFBQSxVQUNILEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQSwwREFBMEQsTUFBTSxZQUFZLElBQUk7QUFBQSxNQUNwRjtBQUFBLE1BRUE7QUFBQSxRQUNJO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsUUFDSTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLFFBQ0ksQ0FBQztBQUFBLFFBQ0Q7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUVBO0FBQUEsUUFDSTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFFQTtBQUFBLFFBQ0k7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUFBLE1BRUE7QUFBQSxRQUNJO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUVBO0FBQUEsUUFDSTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsVUFDSSxHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLFFBQ0k7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQSxDQUFDO0FBQUEsUUFDRDtBQUFBLE1BQ0o7QUFB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O0FBQzNDLGNBQU0sWUFBWUE7QUFBQSxNQUV0QixDQUFDO0FBRUQsZ0JBQVUsTUFBTTtBQUNaLFlBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFlBQVk7QUFBQSxNQUN0QixDQUFDO0FBRUQsYUFBTyxTQUFVLE1BQU07QUFDbkIsa0JBQVUsRUFBRSxLQUFLLE1BQU07QUFDbkIsZUFBSztBQUFBLFFBQ1QsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUdELFNBQUcscUJBQXFCLFNBQVUsTUFBTTtBQUVwQyxZQUFJLE9BQU8sU0FBUyxlQUFlLG1CQUFtQjtBQUN0RCxjQUFNLDRCQUE0QixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU07QUFFaEQsY0FBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBRzNDLGlCQUFPLHdCQUF3QixJQUFJLEVBQUUsUUFBUSxVQUFTLGNBQWMsQ0FBQyxFQUNoRSxHQUFHLE1BQU0sY0FBYztBQUU1QixpQkFBTyx3QkFBd0IsSUFBSSxFQUFFLFFBQVEsT0FBTyxDQUFDLEVBQ2hELEdBQUcsTUFBTSxLQUFLO0FBRW5CLGVBQUs7QUFBQSxRQUVULENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTTtBQUNkLGVBQUssQ0FBQztBQUFBLFFBQ1IsQ0FBQztBQUFBLE1BR0wsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBR0wsQ0FBQzsiLAogICJuYW1lcyI6IFsidHlwZSIsICJ0eXBlIiwgImEiLCAiU3RvcmFnZSIsICJzZWxmIiwgIm5vZGUiLCAiYWRkZWROb2RlcyIsICJfYSIsICJnZXQiLCAiYSIsICJvcHRpb25zIiwgIkJ1ZmZlclNvdXJjZUNvbnZlcnRlciIsICJ0eXBlIiwgImEiLCAic2l6ZSIsICJvZmZzZXQiLCAiQ29udmVydCIsICJjb21iaW5lIiwgInJldEJ1ZiIsICJyZXRWaWV3IiwgIkJvb2xlYW4iLCAiU2V0IiwgIl9hIiwgIm1heCIsICJyZXRWaWV3IiwgInNpemUiLCAidGVtcEJ1ZmZlclZpZXciLCAib2Zmc2V0IiwgImZsYWciLCAiaGV4IiwgIkFzblR5cGVUeXBlcyIsICJBc25Qcm9wVHlwZXMiLCAiaW1wb3J0X3B2dHN1dGlscyIsICJ0eXBlIiwgIkJvb2xlYW4iLCAiX2EiLCAiU2V0IiwgIm9wdGlvbnMiLCAiZGVmYXVsdENvbnZlcnRlciIsICJfYSIsICJTZXQiLCAiU2V0IiwgImltcG9ydF9wdnRzdXRpbHMiLCAidHlwZSIsICJpc0NvbnZlcnRpYmxlIiwgInNjaGVtYVN0b3JhZ2UiLCAiaW5pdF9pbmRleF9lcyIsICJKc29uUHJvcFR5cGVzIiwgIm1pbiIsICJtYXgiLCAib3B0aW9ucyIsICJpbXBvcnRfcHZ0c3V0aWxzIiwgIk9iamVjdElkZW50aWZpZXIiLCAiaW5pdF9pbmRleF9lcyIsICJvZmZzZXQiLCAib3B0aW9ucyIsICJmb3JtYXQiLCAiX2EiLCAidHlwZSIsICJFY1B1YmxpY0tleSIsICJzaXplIiwgIkVkUHJpdmF0ZUtleSIsICJFZFB1YmxpY0tleSIsICJDdXJ2ZVByaXZhdGVLZXkiLCAibGVuIiwgImkiLCAic3RhcnQiLCAiZW5kIiwgImxlbjIiLCAib2Zmc2V0IiwgIkJ1ZmZlciIsICJpc0luc3RhbmNlIiwgInNpemUiLCAiYSIsICJjb25jYXQiLCAic3RhcnQiLCAiZW5kIiwgInRvU3RyaW5nIiwgImluc3BlY3QiLCAibWF4IiwgInJlYWQiLCAiaSIsICJvZmZzZXQiLCAid3JpdGUiLCAiYnl0ZUxlbmd0aCIsICJtaW4iLCAidHlwZSIsICJDcnlwdG8iLCAiQnVmZmVyJDEiLCAiYSIsICJjcnlwdG8iLCAic3RhcnQiLCAiZW5kIiwgInByb2Nlc3MiLCAiaW1wb3J0X3B2dHN1dGlscyIsICJDcnlwdG9LZXkiLCAiQWVzQ2JjUHJvdmlkZXIiLCAiQWVzQ21hY1Byb3ZpZGVyIiwgIkFlc0N0clByb3ZpZGVyIiwgIkFlc0djbVByb3ZpZGVyIiwgIkFlc0t3UHJvdmlkZXIiLCAiQWVzRWNiUHJvdmlkZXIiLCAiUnNhUHJpdmF0ZUtleSIsICJSc2FQdWJsaWNLZXkiLCAiUnNhU3NhUHJvdmlkZXIiLCAiUnNhUHNzUHJvdmlkZXIiLCAiUnNhT2FlcFByb3ZpZGVyIiwgIkVjUHJpdmF0ZUtleSIsICJFY1B1YmxpY0tleSIsICJFY2RzYVByb3ZpZGVyIiwgIkVjZGhQcm92aWRlciIsICJFZFByaXZhdGVLZXkiLCAiRWRQdWJsaWNLZXkiLCAiRWREc2FQcm92aWRlciIsICJFY2RoRXNQcm92aWRlciIsICJFZDI1NTE5UHJvdmlkZXIiLCAiWDI1NTE5UHJvdmlkZXIiLCAiUGJrZGYyUHJvdmlkZXIiLCAiSG1hY1Byb3ZpZGVyIiwgIkhrZGZQcm92aWRlciIsICJTaGFrZTEyOFByb3ZpZGVyIiwgIlNoYWtlMjU2UHJvdmlkZXIiLCAiU3VidGxlQ3J5cHRvIiwgImluaXRfaW5kZXhfZXMiLCAiZm9ybWF0IiwgIm9wdGlvbnMiLCAiaGFzaCIsICJ0eXBlIiwgIl9hIiwgImluaXRfZW51bXMiLCAibmFtZSIsICJzdHlsZSIsICJnZXRDb21wdXRlZFN0eWxlIiwgImdldENvbXB1dGVkU3R5bGUiLCAid2luZG93IiwgIm1pbiIsICJtYXgiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm1pbiIsICJtYXgiLCAib2Zmc2V0IiwgImVmZmVjdCIsICJpbml0X2VudW1zIiwgInRvUGFkZGluZ09iamVjdCIsICJwb3BwZXIiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJvcHRpb25zIiwgImluaXRfZW51bXMiLCAiZWZmZWN0IiwgIm9wdGlvbnMiLCAid2luZG93IiwgImhhc2giLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJnZXRDb21wdXRlZFN0eWxlIiwgImNsaXBwaW5nUGFyZW50cyIsICJnZXRDb21wdXRlZFN0eWxlIiwgImluaXRfZW51bXMiLCAicmVmZXJlbmNlIiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm9mZnNldCIsICJpbml0X2VudW1zIiwgIm9wdGlvbnMiLCAicGxhY2VtZW50cyIsICJwbGFjZW1lbnQiLCAiYSIsICJpbml0X2VudW1zIiwgIm9wdGlvbnMiLCAicGxhY2VtZW50cyIsICJwbGFjZW1lbnQiLCAiX2xvb3AiLCAiX2kiLCAiY2hlY2tzIiwgImluaXRfZW51bXMiLCAiaGlkZSIsICJpbml0X2VudW1zIiwgIm9mZnNldCIsICJvcHRpb25zIiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm9mZnNldCIsICJtaW4iLCAibWF4IiwgImluaXRfZW51bXMiLCAiaW5pdF9lbnVtcyIsICJmbiIsICJtZXJnZWQiLCAiZGVmYXVsdE1vZGlmaWVycyIsICJjcmVhdGVQb3BwZXIiLCAicmVmZXJlbmNlIiwgInBvcHBlciIsICJvcHRpb25zIiwgImZuIiwgInN0YXRlIiwgImVmZmVjdCIsICJub29wRm4iLCAiaW5pdF9lbnVtcyIsICJzeW1ib2wiLCAiaW5pdCIsICJhIiwgImluaXRfY29uc3RhbnRzIiwgInN5bWJvbCIsICJpbml0X2NvbnN0YW50cyIsICJkb2N1bWVudCIsICJnZXRXaW5kb3ciLCAid2luZG93IiwgImRvY3VtZW50IiwgImluaXRfbG9jYWxlIiwgIm5hdmlnYXRvciIsICJvcHRpb25zIiwgImluaXRfbG9jYWxlIiwgImluaXRfY29uc3RhbnRzIiwgImNvbnNvbGUiLCAiY29uY2F0IiwgInN0YXJ0IiwgImVuZCIsICJvcHRpb25zIiwgInNldCIsICJ0b2dnbGUiLCAiaW5pdF9sb2NhbGUiLCAiREVMSU1JVEVSIiwgIm9wdGlvbnMiLCAidHlwZSIsICJhIiwgImludGVybmFsIiwgInNlbGYiLCAiZG9jdW1lbnQiLCAiaW5pdF9jb25zdGFudHMiLCAiZG9jdW1lbnQiLCAiSFRNTFRlbXBsYXRlRWxlbWVudCIsICJEb2N1bWVudEZyYWdtZW50IiwgIkRvY3VtZW50IiwgImluaXRfY29uc3RhbnRzIiwgImEiLCAidHlwZSIsICJkaWZmIiwgImdldE9wZXJhdG9yIiwgInR5cGUiLCAiZG9jdW1lbnQiLCAib3B0aW9ucyIsICJ2YWx1ZSIsICJ0eXBlIiwgImUiLCAiaSIsICJzeW1ib2wiLCAiY29uZmlnIiwgImluaXRfY29uc3RhbnRzIiwgImdldFdpbmRvdyIsICJvcHRpb25zIiwgIm9wdGlvbnMiLCAic2VsZiIsICJmbGFnIiwgIm9wdGlvbnMiLCAiY3VzdG9tRWxlbWVudHMiLCAiaW5pdF9jb25zdGFudHMiLCAibWluIiwgIm1heCIsICJnbG9iYWxSZWZlcmVuY2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJ0IiwgImluaXRfdGhlbWUiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJpbml0X3BvcHBlciIsICJ0eXBlIiwgInNlbGYiLCAib3B0aW9ucyIsICJzaG93IiwgInJlZmVyZW5jZSIsICJpbml0X3RhYnMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF90aGVtZSIsICJpbml0X3BvcHBlciIsICJkb2N1bWVudCIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJjb250cm9sRWxlbWVudFN5bWJvbCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X21lc3NhZ2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfbm90aWZ5IiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfbWVzc2FnZSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJzZWxmIiwgIm1pbiIsICJtYXgiLCAiYXBwbHkiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9zcGxpdF9wYW5lbCIsICJpbml0X25vdGlmeSIsICJpbml0X2NvbnN0YW50cyIsICJhdHRhY2hSZXNpemVPYnNlcnZlciIsICJyZXNpemVPYnNlcnZlclN5bWJvbCIsICJ0aW1lckNhbGxiYWNrU3ltYm9sIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJpbml0RXZlbnRIYW5kbGVyIiwgImdldFRlbXBsYXRlIiwgImluaXRfcGFuZWwiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAib2JzZXJ2ZXIiLCAibG9hZENvbnRlbnQiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJzZWxmIiwgInR5cGUiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfYnV0dG9uIiwgImluaXRfY29uc3RhbnRzIiwgIm9wdGlvbnMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW50ZXJuYWxTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9zdGF0ZV9idXR0b24iLCAiaW5pdF9idXR0b24iLCAic3R5bGVzIiwgImEiLCAic3RhcnQiLCAiZW5kIiwgIm1heCIsICJtaW4iLCAiZ2V0T3Bwb3NpdGVQbGFjZW1lbnQiLCAicmVjdFRvQ2xpZW50UmVjdCIsICJwbGFjZW1lbnRzIiwgInJvdW5kIiwgInJlZmVyZW5jZSIsICJkZXRlY3RPdmVyZmxvdyIsICJvcHRpb25zIiwgInBsYXRmb3JtIiwgInJlY3RUb0NsaWVudFJlY3QiLCAiYXJyb3ciLCAiZmxpcCIsICJvZmZzZXQiLCAiY29uZmlnIiwgImZuIiwgIm1pbiIsICJtYXgiLCAicGxhY2VtZW50cyIsICJhbGlnbm1lbnQiLCAiYSIsICJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsICJzaWRlcyIsICJzaWRlIiwgInBsYWNlbWVudCIsICJvdmVyZmxvdyIsICJ4IiwgInkiLCAiYXBwbHkiLCAiZ2V0Tm9kZU5hbWUiLCAiaXNOb2RlIiwgImdldFdpbmRvdyIsICJnZXREb2N1bWVudEVsZW1lbnQiLCAiaXNFbGVtZW50IiwgImlzSFRNTEVsZW1lbnQiLCAiaXNTaGFkb3dSb290IiwgImdldENvbXB1dGVkU3R5bGUiLCAiaXNUYWJsZUVsZW1lbnQiLCAiZ2V0Q29udGFpbmluZ0Jsb2NrIiwgImdldFBhcmVudE5vZGUiLCAiZ2V0Tm9kZVNjcm9sbCIsICJnZXRDb21wdXRlZFN0eWxlIiwgImlzSFRNTEVsZW1lbnQiLCAicm91bmQiLCAiaXNFbGVtZW50IiwgImdldFdpbmRvdyIsICJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCAibGVmdCIsICJ0b3AiLCAicmVjdFRvQ2xpZW50UmVjdCIsICJnZXRXaW5kb3dTY3JvbGxCYXJYIiwgImdldE5vZGVTY3JvbGwiLCAiZ2V0RG9jdW1lbnRFbGVtZW50IiwgImdldE5vZGVOYW1lIiwgImdldERvY3VtZW50UmVjdCIsICJtYXgiLCAiZ2V0Vmlld3BvcnRSZWN0IiwgImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwgImdldFBhcmVudE5vZGUiLCAiZ2V0Q2xpcHBpbmdSZWN0IiwgIm1pbiIsICJnZXRUcnVlT2Zmc2V0UGFyZW50IiwgImdldE9mZnNldFBhcmVudCIsICJpc1RhYmxlRWxlbWVudCIsICJnZXRDb250YWluaW5nQmxvY2siLCAib3B0aW9ucyIsICJyZWZlcmVuY2UiLCAiZGV0ZWN0T3ZlcmZsb3ciLCAib2Zmc2V0IiwgImF1dG9QbGFjZW1lbnQiLCAic2hpZnQiLCAiZmxpcCIsICJzaXplIiwgImFycm93IiwgImNvbXB1dGVQb3NpdGlvbiIsICJvcHRpb25zIiwgImNvbmZpZyIsICJmbiIsICJmbGlwIiwgInNoaWZ0IiwgImxpbmUiLCAiYXV0b1BsYWNlbWVudCIsICJkZXRlY3RPdmVyZmxvdyIsICJhcnJvdyIsICJzaXplIiwgIm9mZnNldCIsICJjb21wdXRlUG9zaXRpb24iLCAieCIsICJ5IiwgImluaXRfY29uc3RhbnRzIiwgInBvcHBlckVsZW1lbnRTeW1ib2wiLCAic2VsZiIsICJpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMiLCAib3B0aW9ucyIsICJhdHRhY2hSZXNpemVPYnNlcnZlciIsICJyZXNpemVPYnNlcnZlclN5bWJvbCIsICJ0aW1lckNhbGxiYWNrU3ltYm9sIiwgImRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlciIsICJvYnNlcnZlciIsICJydW4iLCAic2hvdyIsICJoaWRlIiwgImluaXRPcHRpb25PYnNlcnZlciIsICJtYXgiLCAic3R5bGVzIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgImZvY3VzRmlsdGVyIiwgInR5cGUiLCAiYSIsICJnbG9iYWwiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJjbG9zZUV2ZW50SGFuZGxlciIsICJlbGVtZW50IiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJjb250YWluZXJFbGVtZW50U3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfc2VsZWN0IiwgImluaXRfY29uc3RhbnRzIiwgImRvY3VtZW50IiwgImZsYWciLCAiaW5pdF9wb3BwZXIiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJjbG9zZUV2ZW50SGFuZGxlciIsICJoaWRlIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiYXR0YWNoUmVzaXplT2JzZXJ2ZXIiLCAicmVzaXplT2JzZXJ2ZXJTeW1ib2wiLCAidGltZXJDYWxsYmFja1N5bWJvbCIsICJ1cGRhdGVQb3BwZXIiLCAiZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyIiwgInNlbGYiLCAicG9wcGVyRWxlbWVudFN5bWJvbCIsICJjb250cm9sRWxlbWVudFN5bWJvbCIsICJzaG93IiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3BvcHBlciIsICJpbml0X2NvbnN0YW50cyIsICJkb2N1bWVudCIsICJ0eXBlIiwgIlBvcHBlciIsICJpbml0X3BvcHBlciIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyIiwgImNsb3NlRXZlbnRIYW5kbGVyIiwgImF0dGFjaFJlc2l6ZU9ic2VydmVyIiwgInJlc2l6ZU9ic2VydmVyU3ltYm9sIiwgInRpbWVyQ2FsbGJhY2tTeW1ib2wiLCAidXBkYXRlUG9wcGVyIiwgImRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlciIsICJwb3BwZXJFbGVtZW50U3ltYm9sIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJidXR0b25FbGVtZW50U3ltYm9sIiwgImFycm93RWxlbWVudFN5bWJvbCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3BvcHBlcl9idXR0b24iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9wb3BwZXIiLCAiaW5pdF9idXR0b24iLCAiUG9wcGVyIiwgInN0eWxlcyIsICJkb2N1bWVudCIsICJ0eXBlIiwgIm9wdGlvbnMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdEV2ZW50SGFuZGxlckJ5TW9kZSIsICJidXR0b25FbGVtZW50U3ltYm9sIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJnZXRUZW1wbGF0ZSIsICJpbml0X21lc3NhZ2Vfc3RhdGVfYnV0dG9uIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfcG9wcGVyIiwgImluaXRfc3RhdGVfYnV0dG9uIiwgIlBvcHBlciIsICJzdHlsZXMiLCAib3B0aW9ucyIsICJ0eXBlIiwgInNlbGYiLCAiaW5pdEV2ZW50aGFuZGxlciIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9jb25maXJtX2J1dHRvbiIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2J1dHRvbiIsICJpbml0X3BvcHBlcl9idXR0b24iLCAiaW5pdF9tZXNzYWdlX3N0YXRlX2J1dHRvbiIsICJzdHlsZXMiLCAicGFyc2VPcHRpb25zSlNPTiIsICJvcHRpb25zIiwgImluaXRfY29uc3RhbnRzIiwgIkRhdGFzb3VyY2UiLCAiaW5pdF9kYXRhc291cmNlIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfdXRpbCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyIiwgIm9wdGlvbnMiLCAiY29uZmlnIiwgIm9ic2VydmVyIiwgImdldFRlbXBsYXRlIiwgImluaXRfZGF0YXNldCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2RhdGFzb3VyY2UiLCAiaW5pdF91dGlsIiwgIkRhdGFzb3VyY2UiLCAiRm9ybVN0eWxlU2hlZXQiLCAiaW5pdF9mb3JtIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRFdmVudEhhbmRsZXIiLCAiZSIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9mb3JtIiwgImluaXRfZGF0YXNldCIsICJpbml0X3V0aWwiLCAiRm9ybVN0eWxlU2hlZXQiLCAiTm9kZUxpc3QiLCAiTm9kZSIsICJzZWxmIiwgIk5vZGUiLCAiTm9kZUxpc3QiLCAib3B0aW9ucyIsICJOb2RlIiwgIk5vZGVMaXN0IiwgIk5vZGVMaXN0IiwgIk5vZGUiLCAiaW5pdF9jb25zdGFudHMiLCAiaGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMiLCAiTm9kZSIsICJpbml0RXZlbnRIYW5kbGVyIiwgImEiLCAia2V5RXZlbnRIYW5kbGVyIiwgImluaXRPcHRpb25zRnJvbUFyZ3VtZW50cyIsICJvcHRpb25zIiwgImdldFRlbXBsYXRlIiwgImluaXRfdHJlZV9zZWxlY3QiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9zZWxlY3QiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgInN3aXRjaEVsZW1lbnRTeW1ib2wiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJzZWxmIiwgImdldFRlbXBsYXRlIiwgImluaXRfdG9nZ2xlX3N3aXRjaCIsICJpbml0X2NvbnN0YW50cyIsICJUZW1wbGF0ZSIsICJpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMiLCAib3B0aW9ucyIsICJpbml0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCAiaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZCIsICJvYnNlcnZlciIsICJsb2FkQ29udGVudCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3RlbXBsYXRlIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfY29uc3RhbnRzIiwgIm9wdGlvbnMiLCAiZG9jdW1lbnQiLCAid2luZG93IiwgImdldFdpbmRvdyIsICJvcHRpb25zIiwgIm9wdGlvbnMiLCAicGFyc2VPcHRpb25zSlNPTiIsICJLRVlfRE9DVU1FTlQiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJzZWxmIiwgImRvY3VtZW50IiwgIktFWV9ET0NVTUVOVCIsICJhcHBlbmRUb0RvY3VtZW50IiwgImluaXRfY29uc3RhbnRzIiwgInNlbGYiLCAiY3JlYXRlRWxlbWVudCIsICJkb2N1bWVudCIsICJLRVlfRE9DVU1FTlQiLCAiaW5pdF9jb25zdGFudHMiLCAiY3JlYXRlRWxlbWVudCIsICJkb2N1bWVudCIsICJLRVlfRE9DVU1FTlQiLCAiaW5pdF9jb25zdGFudHMiLCAidHlwZSIsICJvcHRpb25zIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfY29uc3RhbnRzIiwgIndpbmRvdyIsICJnZXRXaW5kb3ciLCAidmVyc2lvbiIsICJldmVudCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2NvbmZpZ19tYW5hZ2VyIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJpbml0RXZlbnRIYW5kbGVyIiwgImdldFRlbXBsYXRlIiwgImluaXRfaG9zdCIsICJpbml0X25vdGlmeSIsICJpbml0X2xvY2FsZSIsICJpbml0X2NvbmZpZ19tYW5hZ2VyIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJvdmVybGF5RWxlbWVudFN5bWJvbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgImdldFRlbXBsYXRlIiwgImluaXRfb3ZlcmxheSIsICJpbml0X25vdGlmeSIsICJpbml0X2NvbnN0YW50cyIsICJnZXRXaW5kb3ciLCAiaW5pdF91dGlsIiwgImluaXRfY29uc3RhbnRzIiwgIkFUVFJJQlVURV9CVVRUT05fTEFCRUwiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAicmVzaXplT2JzZXJ2ZXJTeW1ib2wiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiZG9jdW1lbnQiLCAidGltZXJDYWxsYmFja1N5bWJvbCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2NvbGxhcHNlIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfaG9zdCIsICJpbml0X3V0aWwiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJBVFRSSUJVVEVfQlVUVE9OX0xBQkVMIiwgImdldFRlbXBsYXRlIiwgImluaXRfZGV0YWlscyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3V0aWwiLCAiaW5pdF9jb2xsYXBzZSIsICJEZXRhaWxzIiwgImluaXRfZGV0YWlscyIsICJpbnRlcm5hbENvdW50ZXIiLCAiX19kZWZQcm9wIiwgIl9fZ2V0T3duUHJvcE5hbWVzIiwgIl9fY29tbW9uSlMiLCAiX19yZXF1aXJlIiwgIl9fZXhwb3J0IiwgImlzTmFOMiIsICJvcHRpb25zIiwgImVuZCIsICJzaXplIiwgImlzTmFOIiwgImVzY2FwZSIsICJpc1ByaW1pdGl2ZSIsICJmbiIsICJhIiwgImlzT2JqZWN0IiwgInN0YXJ0IiwgImNvbnRhaW5zIiwgImZsYWciLCAiaXNIVE1MRWxlbWVudCIsICJjb250YWlucyIsICJvcHRpb25zIiwgIndpbmRvdyIsICJTdG9yYWdlIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiVGFicyIsICJDcnlwdG8iLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJDcnlwdG8iLCAiU3BsaXRTY3JlZW4iLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJTcGxpdFNjcmVlbiIsICJDcnlwdG8iLCAiZ2xvYmFsIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJSZWxvYWQiLCAidmlld3BvcnQiLCAiZmV0Y2hSZWZlcmVuY2UiLCAib3B0aW9ucyIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgIlN0YXRlQnV0dG9uIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJodG1sMiIsICJTZWxlY3QiLCAib3B0aW9ucyIsICJlIiwgImEiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJodG1sMiIsICJDb25maXJtQnV0dG9uIiwgInNlbGYiLCAiZXhwZWN0IiwgImh0bWwxIiwgImh0bWwyIiwgImZvcm0iLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJodG1sMiIsICJUcmVlU2VsZWN0IiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZSIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImh0bWwyIiwgIkJ1dHRvbiIsICJvcHRpb25zIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAiVG9nZ2xlU3dpdGNoIiwgImV4cGVjdCIsICJnbG9iYWwiLCAibW9ja2ludGVyc2VjdGlvbm9ic2VydmVyIiwgImh0bWwxIiwgIlRlbXBsYXRlIiwgInZpZXdwb3J0IiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgIk1lc3NhZ2UiLCAiZXhwZWN0IiwgIk5vdGlmeSIsICJOb3RpZnkiLCAiZXhwZWN0IiwgIm11dGF0aW9ub2JzZXJ2ZXIiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImluaXRfdXRpbCIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImEiLCAib3B0aW9ucyIsICJzdGFydCIsICJlbmQiLCAib3B0aW9ucyIsICJyYW5kb20iLCAiYSIsICJtYXgiLCAiYSIsICJkaWZmIiwgImEiLCAiYSIsICJhIiwgImNvbnNvbGUiLCAiYSIsICJhIiwgImhhbmRsZXIiLCAiTWVzc2FnZSIsICJzZWxmIiwgIk1lc3NhZ2UiLCAib3B0aW9ucyIsICJpc05vZGUiLCAiTWVzc2FnZSIsICJNZXNzYWdlIiwgInZlcnNpb24iLCAiYSIsICJtb25zdGVyVmVyc2lvbiIsICJnZXRXaW5kb3ciLCAiZ2V0V2luZG93IiwgImluaXQiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJleHBlY3QiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJleHBlY3QiLCAiZmV0Y2hSZWZlcmVuY2UiLCAibXV0YXRpb25vYnNlcnZlciIsICJhZGRlZE5vZGVzIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImUiLCAib3B0aW9ucyIsICJpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzIiwgImdsb2JhbCIsICJhIiwgImV4cGVjdCIsICJodG1sMSIsICJodG1sMiIsICJVcGRhdGVyIiwgIm9wdGlvbnMiLCAidiIsICJhIiwgImluaXRfbG9jYWxlIiwgImEiLCAiZXhwZWN0IiwgImh0bWwxIiwgImh0bWwyIiwgIkN1c3RvbUVsZW1lbnQiLCAicmVnaXN0ZXJDdXN0b21FbGVtZW50IiwgImRvY3VtZW50IiwgImFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50IiwgIm9wdGlvbnMiLCAiYSIsICJzZXQiLCAidiIsICJ3aW5kb3dSZWFkeSIsICJkb21SZWFkeSIsICJnZXRXaW5kb3ciLCAiYSIsICJleHBlY3QiLCAiQ3VzdG9tRWxlbWVudCIsICJyZWdpc3RlckN1c3RvbUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiY29udHJvbCIsICJodG1sMSIsICJodG1sMiIsICJodG1sMyIsICJzeW1ib2wiLCAiYSIsICJSZXNvdXJjZSIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgImV4cGVjdCIsICJodG1sMSIsICJDdXN0b21Db250cm9sIiwgInJlZ2lzdGVyQ3VzdG9tRWxlbWVudCIsICJkb2N1bWVudCIsICJtIiwgImluaXRfY29uc3RhbnRzIiwgImEiLCAib3B0aW9ucyIsICJkb0RpZmYiLCAidHlwZSIsICJXZWJDb25uZWN0IiwgIm9wdGlvbnMiLCAiTWVzc2FnZSIsICJ0ZXN0VXJsIiwgIldlYkNvbm5lY3QiLCAiY2xvbmUiLCAib3B0aW9ucyIsICJpbml0IiwgImZldGNoRGF0YSIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImkiLCAiYSIsICJpbml0X2xvY2FsZSIsICJpc05vZGUiLCAiYSIsICJiIiwgImMiLCAiaHRtbDEiLCAiYSIsICJOb2RlTGlzdCIsICJhIiwgImEiLCAiYSIsICJodG1sMSIsICJhIiwgInNlbGYiLCAiYSIsICJhIiwgImEiLCAiTm9kZUxpc3QiLCAiTm9kZSIsICJhIiwgImEiLCAiYSIsICJhIiwgImEiLCAiYSIsICJhIiwgIm1heCIsICJhIiwgIlJhbmRvbUlEIiwgIlVVSUQiLCAiYSIsICJCYXNlIiwgImEiLCAiYSIsICJOb2RlTGlzdCIsICJOb2RlIiwgIk5vZGUiLCAiTm9kZUxpc3QiLCAiRm9ybWF0dGVyIiwgIm9wdGlvbnMiLCAiRm9ybWF0dGVyIiwgImEiLCAiYSIsICJpbml0X2NvbnN0YW50cyIsICJodG1sMSIsICJ0cmFuc2xhdGlvbnNMaW5rU3ltYm9sIiwgIm9wdGlvbnMiLCAiZ2xvYmFsIiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImUiLCAiaHRtbDEiXQp9Cg==
 } catch (e) {
 document.getElementById('mocha-errors').insertAdjacentHTML('afterbegin', e );
 document.getElementById('mocha-stats').style.backgroundColor = 'red';